专业程序猿的修炼指南

《理解专业程序员》一书中提到:

对于有些事情,似乎每个人都是专家。

任何人,只要智商超过80,又懂得一点什么东西,似乎都可以当教师。

任何人,按照广告应征,在小臂上搭一条毛巾,在美国那就是一个侍者了。


编程这种行当也是如此。

如果某程序员说他有15年的编程经验,人们倒会觉得他简直是个智障。

如果他真有那么一点点智商的话,那总应该在14年前就学会全部的编程知识了呀,

在此之后,他就早该做腻了这一行,去换个管理呀,销售呀之类的职位了。


事实上,除非你自己是一个胜任的程序员,否则也就很难衡量一个程序员的工作质量。

世上有很多可怜的企业,从来没能长期留住一个真正胜任的程序员,

因此他们也就没有一套标准来衡量程序员的专业性。


况且,即使是有15年的经验,对于学习编程知识来说也不一定就够用,

除非这位学习者特别一心一意。

是的,专业和业余之间有天壤之别,我们该怎样锻炼自己呢?


1. 多学习几门语言总是好的

语言可以影响思维,语言是表达思维的工具,

编程语言也是如此。

如果你没有这种感觉,很有可能是因为你只会一种编程语言。


虽然,那些主流的编程语言,它们在计算能力上都是图灵等价的,

但是,在不同问题上,需要思考的“距离”是不同的。

用某些语言,我们会更容易想到某种方案,

而用另一种语言,我们几乎就难以想到它。


因此,对于见多识广的人,会根据问题迅速想到适用的方案,

而不管是这原本是便于用哪个语言来解决的,

然后再落实到团队和个人,用生产环境中的语言来实现这种方案。


The limits of your language are the limits of your world.

多学几门语言,会让我们看到更宽广的世界。


2. 坚持写作

代码是写出来的,文章也是写出来的,

这种联系不是巧合。

“写”的能力,会在文章和代码之间相互影响。

说白了,我们都是在练习表达。


代码的可读性,可维护性,直接关系到了软件的成本和发展趋势,

谁都不想维护一堆烂摊子,不是吗?


写作可以锻炼这种能力,

让我们的思路更顺畅,去更好的组织文字,

用更合适的通俗易懂的方式来表达。

坚持写作会让我们的代码更饱满,

有“抒情”,有“旁白”,有“叙事”,还有“议论”。

而不是通篇的流水。


坚持写作,会让我们成为一名有品位的程序员。


3. 钻研数学

学数学自有其价值,并不仅仅是为了学编程。

但钻研数学,会让我们根深蒂固,不易受风浪影响。

业界的每一次浪潮,受波及的都是那些根基缥缈的人们。


学好数学,至少让我们可以认识到不完全归纳法的局限性,

学好数学,至少让我们可以认识到形式化方法的局限性

学好数学,至少让我们可以认识到计算机的局限性

是的,我们想知道我们不能做什么。


我们还想知道哪些是等价的,

这个问题是一个矩阵乘积问题,

这个问题是一个DAG的拓扑排序问题,

这个问题是一个不可判定问题


钻研数学,会让我们活的更笃定。


4. 磨炼思路

真正优秀的程序员是那些专注于认识,理解,沟通和解决问题的人,

软件只是用来提高效率的工具而已。

你是否优秀,不是通过代码的行数来决定的,而是通过你的逻辑,你的思想。

而你的逻辑和思想,将在你所写的代码中体现。

——Clojure的创始人,Rich Hickey


因此,我们和其他人唯一的不同就体现在思路上面,

我们对XY问题是否敏感,

会不会避免重复劳动,有没有优先级意识,

怎样改善我们的环境,如何布道

是不是关注工程的质量和风险。


这些都是有效的思维和逻辑,是需要积累和锻炼的,

在遇到问题时,我们不再是无助的,而是可以“推导”出解决方案。

很多时候,这是制胜的唯一方法。


磨炼思路,会让事情变得更清晰可解。


结语

我们已经听说过一万小时定律了,然而我觉得它并不靠谱,

并不是每个人都适合做程序员,尤其是成为专业人士,

就像写了这么多年作文,也无法成为作家一样。

我们得接受现实,做自己能力范围之内爱好的事情。


如果硬要总结出编程行业门槛的话,我想应该是这样的,

要想学会编程,就需要我们敢于先把未知放下,等羽翼丰满后,回过头来再战。

Don't sweat the stuff you don't understand immediately. Keep moving!

Only people who die very young learn all they really need to know in kindergarten.


参考

理解专业程序员

布道之道