啥样的人适合做程序员( 二 )



大概就长这样,输入是a和b,输出是一个结果,我们起名叫result。它到底表达了个啥样的代码呢?大概长这样(本文所有的代码都会采用javascript描述,但是不代表本文内容,只适合描述前端开发):
啥样的人适合做程序员

咦?result哪去了?在你调用的地方可能会有一行代码:var result = add(1,2); 这个表达方式不仅仅可以用来描述函数定义,还可以用来描述表达式。比如,如果我们把前面的输入输出思维描述改为加法表达式。你会发现这段描述“编译”成代码大概长这样:
咦?result哪去了?在你调用的地方可能会有一行代码:var result = add(1,2); 这个表达方式不仅仅可以用来描述函数定义,还可以用来描述表达式。比如,如果我们把前面的输入输出思维描述改为加法表达式。你会发现这段描述“编译”成代码大概长这样:
啥样的人适合做程序员

所以不仅仅可以用来描述函数定义,还可以描述代码块。
但是到这里就结束了吗?感觉好像对数据的表述不够细致啊。确实,我们忘了加类型了。不加类型这描述简直万灵丹啊,反正俩参数一个返回值的都能用,这不行,我们还得把类型加上看着才清楚点。加上类型就变成了这样:
啥样的人适合做程序员

这看着就好多了,是不是比刚才更加理解上文所讲的“像机器一样思考”了呢?好吧,你可能会说,“这玩意有啥用啊,我有分析的这个空,我代码都写完了啊。”不急,我们接着往后看。
刚才那个题目有点太简单了,我们做一个稍微复杂的。比如下面这个:写一个函数,可以选出一个由数字组成的集合当中所有的偶数的最大值。
这回一步做出来可能就有点难了,没关系,我们可以分成两步:
选出集合中的偶数选出偶数中的最大值 这两步呢,按照我们之前的格式写一下,大概是下面这个样子:啥样的人适合做程序员

哎呀,突然发觉不知道该怎么描述集合呢。Javascript里就用数组就好了,但是还是不知道怎么描述数组啊。这个其实很简单,这不是一个由数字组成的数组吗?我们只要写成就可以了。因为我们的一个好习惯是一个集合里不要放两种类型的元素,所以就这么写就好了。那么加上去的话,大概就长这样:
啥样的人适合做程序员

咦,第二步的evenArray没有写类型。嗯,因为evenArray是第一步的输出,我就把它省了,相信大家也能看明白。 耐着性子看到这里,你估计已经发现了,我还是没有回答你“思维方式有什么用”这个问题。我很想忽悠着你再做一道题,不过估计你坚持不完就会转身离开了。那我们就这两道题试着讲一讲。
第一道题,我们只是展示了这个思维,第二道题,我们才开始发挥出它的威力。尽管这道题也不复杂,但是思考过程还是展示了:
分解问题;找到子问题之间的关联(通过输入、输出关联起来);找到问题的边界,明确假设与结果。上述三点看着简单,却是思维清楚与否的关键。我们管这个能力叫Analytical Thinking。
思维清楚带来的收益是什么?这些步骤可以直接转化为工作的任务列表,而且可测试。这样分解出来的任务列表,完成效率是极高的。我们曾经做过实验,按这个思路分解过问题的人,比没有分解过的人效率要高3倍以上,而且前者只学了一周的编程。 一个完全不会写程序的人,只要学会了这个思维,就可以开始编程之旅了,而且威力非常巨大。


推荐阅读