程序员必备能力

251 阅读3分钟

对编程的热爱

I'm not a great programmer, I'm just a food programmer with great habits - from Kent Beck

I'm not work as programmer, I'm a dream catcher - from Tab

具备抽象能力

越高级的程序员,抽象能力越强,大多数编程语言并没有很大的区别,意味着没有必要过分关注语言的细节,首先要理解语言的不变之处,然后以不变应万变。

具备逻辑思维

所有的编程,都在使用逻辑

逻辑是什么

  1. 问题1-三段论逻辑 命题一:JS有7中数据类型:string, number, bool, symbol, undefined, null, object

命题二:JS的函数不属于前六种类型

推论:JS的函数属于Object类型

  1. 问题2-三段论逻辑 命题一:JS所有的函数都是由Function构造的

命题二:Function, Object, Array都是函数

推论:Function, Object, Array是由Function构造的

逻辑 VS 直觉

直觉的好处

直觉能让你快速学会一些东西,比如数字,字符串,数组,对象都可以靠直觉学会

直觉的坏处

直觉也能阻止你学会一些东西,这个时候就需要逻辑来理解,比如你虽然不知道Function是如何构造Function的,但是逻辑告诉我们,的却如此

三种语句搞定所有逻辑

所有的复杂算法,都能用这三种语句描述

  1. 顺序执行语句
  • 先执行语句1
  • 然后执行语句2
  1. 条件判断语句
  • if...then...else...
  • if...else if...else
  1. 循环语句
  • while...do...
  • for i from 1 to n

流程图,伪代码的好处

  • 锻炼你的大脑,流程图必须在大脑或者其他地方画出来
  • 整理你的思路,思路乱了,图就乱了,伪代码写不出来,代码更写不好

工具推荐

使用Mindjet, 百度脑图,XMind等软件画流程图

了解数据结构

程序员需要了解数据与数据之间的关系和结构
数据结构 = 数据形式 + 操作,不同形式的数据暴露不同的操作

如何表示两个数据

  1. 如果有顺序

需要提供 firstlast 操作,例如[x,y],第一个是x,第二个是y, 坐标就是这样的数据

  1. 如果没有顺序

不需要提供firstlast,例如(x,y)(y,x)没有区别,血压值就是这样的数据(120,80)(80,120)

如何表示表示N个数据

  1. 如果有顺序

例如数组,数组表示[a1,a2,a3,...aN],需要提供索引操作get(i), 还有add/indexOf/delete操作

  1. 如果有顺序

例如集合,集合表示{a1,a2...aN},需要提供add/indexOf/delete操作

如何表示表示N对N数据

例如哈希表,例如学号 hash = {1001=>'小方', 1002=>'小红'}

数据结构的作用

一种数据结构往往能解决很多类似的问题,如果选错了数据结构,问题根本就找不到解决思路。优秀的程序员比起算法,更需要重视数据结构