一个人是否能成为程序员是上天注定的
程序员是一种特殊物种,好的程序员尤其是这样——在我们这个行当里很多人都试图把编程归入一种复杂的技术学科,但它实际上更倾向于一种艺术。它实际上更接近数学,音乐或电视剧《Firefly》里的Kaylee魔法。
好的程序员有一种特殊的直觉,一种天赋,这种天赋很难描述,更不容易得到。
几个星期前,@zidarsk8 跑到我这说“老大!我发现这样一个人!我还在在教他如何编程!但我发现他已经比我优秀了!他一个月前还不知道到什么是变量!太邪门了!“
他要我一定要在博客里写写这件事。为什么有些人就简单的学会了?他们有什么特殊之处?是否任何人都可以学会编程?还是只有有一定天分的人才能成为一个不错的(先别谈优秀)程序员?
我记得一年前曾辅导过一个高中的孩子。大概是担心考不过他的计算机课程,跑到我这来求助。一个月里,我把我知道的全教给他了,至少这些知识能让他通过考试。
快到月末的时候,他已经知道了所有关于循环、变量赋值的知识,甚至还明白了函数是一组能做某些事情的代码。我跟他父亲道别时说的话是“是的,他什么都知道了。只需要一些实践去掌握它们。”
Sheep
Image via Wikipedia
我不知道他是否考过了那个课程。如果他过了,那是老师的荣幸…而就我根据我高中时的记忆,老师们并非都那么幸运。并不是因为我不是个好老师我才这样说——我从很多受这个孩子推荐来到我这里的其他学生那里都收到了一封“谢谢你!出色的通过!耶!”的邮件——有些人很简单就是不能成为程序员。永远成不了程序员。更别说成为不错的程序员了。
不能编程的羊
Jeff Atwood在2006年曾写过关于把不能编程的山羊从能编程的绵羊中挑出来的文章,里面提到过一项研究,这些研究声称找到了一种能预测一个人将来的编程能力的测试。
测试非常的简单:
a = 5
b = 20
a = b
现在a和b的值是什么?
有很多像这样的问题。只有44%学生的大脑里养成了固定的赋值思维模型——包括有些理解甚至是错误的。余下的人都答错了,或者是没有答。
更糟糕的是,在一个学期的编程学习后,这个比例没有任何变化。只有44%的理解了赋值的过程。
很显然,有些人就是学不会。
我想可能还有个更简单的测试 ->
Passion (novel)
Image via Wikipedia
热情
有时候,当你给一个有上进心的年轻心灵(任何愿意学习编程的人,年龄不是问题)两种工具和一个难题。他会使用这两种工具创造出4种工具。他会搜索互联网,发现更多的工具…很快,他有了20种工具,请问你还让我解决什么问题?
这就是热情!
心无杂念的对编程的热情。没有问题需要解决时仍然对编程入迷,甚至兴奋。甚至把解决一个已知的问题也当作一次普通的练习…这就是卓越之处。
多大岁数才开始学习编程,这并不重要——很多研究显示,在我们这个世界里,编程的工龄并不是水平的指示符——重要的是你对这个行业有个热情的心。
因为,一旦有了热情,你就拥有了所有其它的一切。