对编程的热爱
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-三段论逻辑
命题一:
JS有7中数据类型:string,number,bool,symbol,undefined,null,object
命题二:JS的函数不属于前六种类型
推论:JS的函数属于Object类型
- 问题2-三段论逻辑
命题一:
JS所有的函数都是由Function构造的
命题二:Function, Object, Array都是函数
推论:Function, Object, Array是由Function构造的
逻辑 VS 直觉
直觉的好处
直觉能让你快速学会一些东西,比如数字,字符串,数组,对象都可以靠直觉学会
直觉的坏处
直觉也能阻止你学会一些东西,这个时候就需要逻辑来理解,比如你虽然不知道Function是如何构造Function的,但是逻辑告诉我们,的却如此
三种语句搞定所有逻辑
所有的复杂算法,都能用这三种语句描述
- 顺序执行语句

- 先执行语句
1 - 然后执行语句
2
- 条件判断语句

if...then...else...if...else if...else
- 循环语句

while...do...for i from 1 to n
流程图,伪代码的好处
- 锻炼你的大脑,流程图必须在大脑或者其他地方画出来
- 整理你的思路,思路乱了,图就乱了,伪代码写不出来,代码更写不好
工具推荐
使用Mindjet, 百度脑图,XMind等软件画流程图
了解数据结构
程序员需要了解数据与数据之间的关系和结构
数据结构 = 数据形式 + 操作,不同形式的数据暴露不同的操作
如何表示两个数据
- 如果有顺序
需要提供 first 和 last 操作,例如[x,y],第一个是x,第二个是y, 坐标就是这样的数据
- 如果没有顺序
不需要提供first 和 last,例如(x,y)和(y,x)没有区别,血压值就是这样的数据(120,80)和(80,120)
如何表示表示N个数据
- 如果有顺序
例如数组,数组表示[a1,a2,a3,...aN],需要提供索引操作get(i), 还有add/indexOf/delete操作
- 如果有顺序
例如集合,集合表示{a1,a2...aN},需要提供add/indexOf/delete操作
如何表示表示N对N数据
例如哈希表,例如学号 hash = {1001=>'小方', 1002=>'小红'}
数据结构的作用
一种数据结构往往能解决很多类似的问题,如果选错了数据结构,问题根本就找不到解决思路。优秀的程序员比起算法,更需要重视数据结构