目录
前言
最近公司要招一个人后端程序员,把面试的工作安排给了我。面试招人也很顺利,也招到了一个不错的小伙子,但让我印象深刻的是其中一个有着三年工作经验的“老程序员”。这位“老程序员”非常自信地给我展示了十多个他写的网站后台以及哪些千篇一律 CRUD 的表单,然后跟我谈他写的 SQL。
“你看你写了那么多差不多相似的东西,那你有没有积累一套自己的库或者工具用来快速生成这些 CRUD 的表单?”,我问道。“啊?”。看出了他明显有些疑惑,于是接着问道,“那你除了给公司写这些业务代码以外,有尝试过给自己写过代码吗?也就是说方便自己生活或者工作的工具之类的?”。“……”,他沉默了,不知道该怎么回答我。最终的结果当然不言而喻,否则我也不会写在这篇文章里面。在我看来,这位拥有三年工作经验的老程序猿,虽然他熟悉语言,熟悉框架,熟悉业务,但其实并没有学会编程,甚至不如我们刚招进来的应届生小伙子。
这次事情让我想了很久,也向身边很多人交了一下,才发现原来在编程时候,很多我觉得理所当然的基本能力,居然都是稀缺资源。这当然并不怪谁,因为“意识”或者“思维”这个看不到摸不到的东西,并不是说自己只要努力就行了,还需要向别人借鉴吸取经验,也需要有自己的悟性和思考。那么借着这篇文章,我也结合那么多年来的所想所感来聊聊怎么学编程,怎么学好编程。
什么是编程
我的理解的编程是:面对一个问题,经过思考后,最后将解决这个问题的思路用计算机能理解的方式表达出来。这里面有三个关键词,“问题”、“思考”以及“表达”,我觉得这是三个关键词也是编程最关键的地方。但是非常多的人看待编程这个问题的时候,往往都只能看到最浅层面上的写代码,而“问题”和“思考”这个两个关键词则被大多数人所忽视了。
其实“程序员”这项工作,无论是想做技术还是转管理,无论是做学术还是做工程,只要越往上走,“问题” 所占的重量就会越来越高,相应的写代码所占到的能力比重会越来越低。甚至一些顶层的大型系统架构师,顶层的算法科学家&