你,就是天生的程序员!

优秀的程序员常常有这种感觉,天才是很难得的,更难以复制。

在数周以前,@zidarsk8跑过来告诉我“天哪,竟然会有这样的家伙,我才教会他怎样写代码,一转眼他写得比我都要好了!可恶的是,这家伙在一个月之前甚至连变量是什么都不知道,这还是不是人啊!”

我答应他在博客中如实写出来。为什么有的人轻轻松松就能get编程这个技能?他们有什么特别之处?谁都能学会编程还是只有某些人才能成为一个合格的程序员,而想成为优秀的程序员是否更需要天生?

一年前我给一个高中学生做家教,他因为早先的编程课没有及格,然后他父母请了我来教他。在一个月的时间里我悉心传授,把我所知道的一切都教给了他,在我看来至少通过考试是没问题了的。

到月末的时候,他已经对循环、变量赋值等等了如指掌,连函数是代码包能做一定事情他都知道和理解了。临走,我不得不对他父亲这样说“我已经没什么好教的了,不过他还得需要练习来巩固这些。”

没错,内心里,我是很怀疑他是否能及格的。不过如果他的老师怜悯他的话,可能会过——不过,遗憾的是,我记得这个老师在我高中时代一点都不仁慈,特别喜欢看学生受苦受难。

还有一点要声明的是,我可不是个差老师——那个孩子还向别的学生推荐了我,并且所有孩子都给我发了感谢信——只是有些人天生就不是写代码的料,即便他们再努力,甚至还是连平庸二字都称不上。

沉默的羔羊

Jeff Atwood在2006年出版的《Separating Programming Sheep from Non-Programming Goats》一书中提到一项研究,声称可以用之检测是否拥有编程天赋。

这个测试相当简单,例如:

a = 5

b = 20

a = b

What are a and b now?

还有不少类似的测试例子。但是只有44%的学生形成了一个统一赋值的心智模型——即使是错误的。剩下的超过半数人失败了或者根本就回答不了。

更糟糕的是,在学了一个学期的编程之后,这个比例还是相同,还是只有44%的学生知道赋值如何作用。

很明显,有的人无论怎么学就是想不明白这些。

下面我介绍一个我认为更为简便的测试

激情

有时候,当那些拥有年轻心态的家伙(人人都能学代码,年龄不是限制)拿到一个问题和两个工具,他们会利用这区区两个工具创造出四个工具,然后在网上搜索,找到更多的工具……这样一来,很快他们就有二十个工具,好家伙!哦,对了,我还没说这些家伙拿到的这个问题是什么?

这个问题就是激情!

写代码就是需要这种完完全全不带丁点杂质的激情。当你为之深深陶醉,甚至兴奋不已的时候,还怕什么问题是解决不了的呢。即使你正在解决的这个问题,你也知道是毫无意义的……这就是拥有激情的伟大所在!

别担心你开始编程的年纪比别人大——要知道,很多研究已经表明,经验在这一行并不是重点——关键要看你对编程这玩意是否拥有百折不挠的激情。

因为一旦被点燃了激情,那么其他的问题就不再是问题了。你,就是天生的程序员!