别为了学编程而学编程

原文作者:Jeff Atwood

“所有人都应该学习编程”(Everyone should learn programming)——这个“病毒”已经广为扩展,达到了失控的地步,以致于纽约市长竟然也在2012年郑重宣布他要学习编程了。他在Twitter上这么说

别为了学编程而学编程

他摆出的这种高姿态当然是为了获取纽约技术社区的选票,但如果市长先生真的在他的工作中玩起了JavaScript代码,那么纽约州的政治必定存在一些深层次的、糟糕透顶的问题。即使Bloomberg先生真的学了编程,他最终也会对Adam Vandenberg怀有歉意,因为我们将看到的是这个:

10 PRINT "I AM MAYOR"

20 GOTO 10

而Adam早在2012年1月就在Twitter上发布过这两行代码了:

别为了学编程而学编程

值得庆幸的是,这种奇特事情(市长开始他的技术之旅)发生的概率为零,即使只是玩玩而已。原因很简单:纽约市长应该把他的时间花在纳税人出钱雇用他去做的事情上。从市长办公室的首页(http://www.nyc.gov)公布的信息来看,市长应该致力于学校的旷课问题、公共交通的改善、每一年的城市预算……真的要我把每一项都列出来吗?

有些人鼓吹:“编程是一项基本技能,我们应该像教阅读、写作和算术一样教孩子们学习编程。”我想问问那些人:你能解释一下吗——如果Michael Bloomberg先生某天早上一觉醒来突然变成了一名Java程序员,他如何能在日常工作中更好地领导这个美国最大的城市?在我看来是很显然的:拥有娴熟的阅读技能和写作技巧,还有至少中学水平的数学功底,这些对于做好政治家这份工作才是最基本的。说到这一点,也许任何工作都是这样。但是,理解变量、函数、指针、递归也有这么重要吗?那我就不明白了……

我写过一篇博文,题为“对于编程:要么热爱,要么离开”。不难看出,我本人是热爱编程的。我也相信,在特定的情境之下,编程对于某些人来说是很重要的。但是,很多技能都是这样子的啊。我不会敦促每个人都去学习编程;相比之下,我更愿意建议每个人都去学会怎么修水管。这听起来很荒谬,对不对?

别为了学编程而学编程

“所有人都应该学习编程”这个倡议是不对的,不仅仅只是因为它错误地把编程与一些生活的基本技能(阅读、写作、算术)相提并论,其实还有很多其他的方面:

  • 它认为,这个世界天生需要更多的代码,而且多多益善。然而,经过30年的程序员职业生涯,我发现其实并不是那么回事。你应该学习写代码吗?不要。我不赞成那样。你应该学会尽可能少地写代码。(参阅《高效能程序员的修炼》的第3.2节“大道至简”。)最好一点也别写!
  • 它认为,编码就是目的。软件开发者倾向于成为软件行业里的“瘾君子”,他们认为自己的工作就是写代码。其实不然!他们的工作应该是解决问题。(参阅“你的团队能通过电梯测试吗?”)请不要因为写了多少行代码而沾沾自喜;真正的得意应该表现在你完成某个解决方案的时候。我们已经有太多太多沉迷于多写一行代码的“码农”啦!
  • 它搞错了先后顺序,在问题出现之前先强调方法。在匆匆忙忙开始学习编程之前,请你先搞清楚真正的问题是什么。你真的碰到问题了吗?你能以一种别人能够理解的方式解释给他们听吗?你做过研究了吗?深入探索过可能的解决方案了吗?编程能解决那个问题吗?你确定吗?
  • 它认为,有更多天真无邪的菜鸟(他们甚至不确定自己是否真的喜欢编程这个行当)加入程序员的世界肯定是一件好事。也许吧,如果你认同“一个糟糕的程序员每年可以轻易创造两个新的就业机会”这种说法……其实,甚至大部分自称为程序员的人都不会编程。因此,真的每个人都能学会编程吗?请原谅我对此的怀疑。
  • 它暗示,在学习编程与以编程为业(有偿)之间只是隔着一层薄膜,很容易就能“渗透”过去。看看吧,一些新手程序员在参加了两个半月的训练营之后,就能得到平均年薪79000美元的工作。也许你也可以在24小时之内自己学会Perl!尽管编程是一个机会均等的领域,学历和证书在经验面前毫无用处——这些都是我真心喜欢的——但是,你仍须像我们一样花上一万小时的时间去学习。(注:Peter Norvig写过一篇经典的文章“Teach Yourself Programming in TenYears”,意思是要花10年时间去自学编程。)

我觉得,我还是能够支持学一丁点儿编程的,但目的只是让你对代码有一个感性的认识,并且你可以了解在碰到什么问题时通过编程来解决是合适的。不过,即使没有经过特殊的专业训练,我也能一眼看出水管问题。普通大众(以及他们的政治领袖)只要对电脑和互联网的原理有了基本的理解,也许就已经能够很好地利用它们了。善于利用互联网的能力正在成为一种基本的生活技能,我们应该首先担心的是这个,而不是冒冒失失地开始学习编程。

请不要为了学编程而学编程!更别为了高工资而从事编程这个行当。我诚挚的建议是,我们应该把时间花在:

  • 学习如何贪婪地做研究,并对我们周围的事物是如何工作的有个基本的理解;
  • 学习如何有效地与别人沟通。

这些技能比单单学会编程要强得多,而且会让你在生活的方方面面受益。

别为了学编程而学编程

上一篇:VS2010远程调试


下一篇:RMAN备份与恢复之控制文件丢失