programming

编程 == 搭积木

又到了老生常谈的话题了 —— Programming,在写这篇博客之前,其实我犹豫了很久.
究其原因在于 —— “太多了”. 程序员太多了,他们写的关于”Programming”的文章也太多了.
可能在每个人眼中,”编程”二字都是不一样的风景吧. 思来想去,闲来无事写一写我眼
中的”Prgramming”也好.
programing-1

程序员在干些什么?

引言中的图很好的揭示出程序员工作的本质 —— 使用工具.

软件行业是一个服务业,而程序员每天的工作是 —— 使用工具,完成相应的任务.

同样,程序员之间的区别在于其使用的工具,以及其想接触到的问题的领域.web前端,后端,移动端,Linux,AI…..

不同的领域需要不同的工具以解决”不同的问题”.

这里,我想借助双引号以指出这样的事实,不同的问题其实是相同的问题.
这句话在哲学上一定是逻辑错误的,然而在程序员的世界里,却是说的通的.

程序员的理论世界是 —— 把问题解决了就好,其他的不重要.

Algorithms + Data Structures = Programs

这句话的在计算机这个行业的分量自不用说.相信,每一个程序员对于这句话都是熟记于心了.

当然,这句话并不适合在为非专业人士人阐述计算机行业时引用,用以下的言辞或许会更好.

编程有时跟搭积木一样.

programing-1

我们通常会对问题进行分析,然后将其分解成几个小问题,分析,分解….
直到问题的粒度足够小,此时我们便使用我们的“工具”来解决这一个个小问题.

而,小问题的解决方案是由一个个if语句,一个个for循环拼接而成的.我们得到所有小问题的解的同时原本的大问题此时就已经解决了.

我们怎么样评价一名程序员?

我前面说过:”程序员的工作是使用工具”,现在,我们将程序员与助理这个职业进行比较,或许能够给予
我们一些启迪. 有两名大学生A,B 同时来面试一个助理这个职位时,他们有相同的技能,都会使用 Windows 电脑,
使用打印机,使用….唯一他们不同的之处在于, A 额外会使用 Linux 系统的电脑,而 B 不会. 毫无疑问,A 肯
定比B更有优势,也更有可能被录取.

助理这个行业,可以比较他们会使用的工具数来决定谁才是佼佼者. 而,在计算机这个行业这一方法并不管用.
我们不可能比较学习安卓和web程序员的技术栈来判断出,谁才是优秀程序员.

在计算机行业,这样的评价方法或许更行的通:通过比较两个程序员掌握一门新的技术所花费的时间. 当然这个答案或许并不能使所有人满意.

真正重要的不是你使用的工具,而是你使用工具去解决问题的能力