失传的艺术-计算机科学

Don’t learn to build doghouses and call yourself an architect. 不要明明是在搭建狗屋,却自称为建筑师。

今天在阮一峰博客看到一篇名为Computer science as a lost art的英文博客,文章不长,内容也朴实随意,正如作者所言属于即兴发挥。文章阐述的观点让我自感惭愧,也让我意识到自己与真正的计算机从业者之间的差距,遂翻译以自勉。

译文如下:

昨晚我的一位老友问我:“计算机科学是否已经成为了一门失传的艺术?”今早,我给出了即兴想到的答案:

嗯,这就是我的观点。我拥有计算机本硕学位即六年计算机科学求学历程,与此同时有着30年工作经验。换言之,我有些过时了,且与当下有点格格不入。

即使我不大愿意相信,但是确实有些事情实实在在的发生了。首先,如今电脑已经相当普及,你还能找到一个80岁以下却没有电脑或手机的人吗?其次,万维网(作为互联网最初的模样诞生于1989年)在1995左右便已经开始遍布于公众。随着电脑的使用领域变得越来越广,它也变得越来越重要。第三,那些我们用于创建软件应用的工具在功能上变得更复杂从而更便于使用,就像驾驶汽车这件事来说现在相对于1905年来说要简单的多。

我想要表达的是现在的电脑使用者比过去任何时候都要多。现在也有很多所谓的程序员没有上过一堂编程课。不过任何事情都要利弊。

这意味着一个人只需要很少的计算机知识便可以完成一个小项目,但也意味着这样的人很可能不会为了完成大项目而去学习更多的知识。

老实说,私底下我对于现在存在这样一大群不思进取的伪程序员这个事实感到很沮丧,我也很少对他人提及我的感受。在我看来,他们决定学习他们领域5%的知识是为了完成某个任务,或找点乐子,或谋生而已。

这些人使用编程工具创建一些日常所用的应用程序,殊不知编程工具本身也是软件。但是编程软件远非一般水平的人所能创建的。即便这些人每天都在使用编程语言,编辑器,编译器和操作系统,但是他们对于如何编写用于编程的软件,以及这些软件的运行原理没有丝毫的头绪。

20年后,一个赛车手可以把小孩放他的腿上,然后小孩会说:“哈,我也能驾驶这辆车,任何人都可以驾驶它。你只需要按下绿色按钮然后说‘送我去沃尔玛’即可。”这与我对如今学习编程这件事的看法有些类似。

回到计算机科学的话题。我的朋友有一个七岁的儿子自学了一款很棒的编程工具,然后编写了一款iPhone游戏。尽管,那是一款很简单的游戏。但是他完成了这件事情放在三十年多前差不多需要拥有计算机博士学位的人才能完成,而且还不是移动设备上的软件。

有时候我与一些人交流计算机知识时,他们的抱怨和疑惑说明他们已经到了自己的知识边界。有时候这让我很震惊,我认为:这些知识点应该是在你第一个学期的第一堂计算机科学课程里面就能学到的。随后我意识到,这些并没有真正意义上学习过计算机科学的课程。

当然,在我之前的上一代计算机前辈们也是以同样的眼光看待我们这一代人的。在1940年代,你几乎必须有一个电子工程学位才有可能接触到计算机。在上个世纪70年代末到80年代初,你只需主修一门计算机科学或工程就能接触到计算机,在90年代以后,你仅仅需要一张信用卡,或者你父母有一张信用卡。

我对于硬件很痴迷,顺便说一下,我离不开键盘。每当我拆开一台电脑试图捣腾点某个零件时,我总会把其他零件搞砸。严格意义上说我是一个软件男。因此,我曾经被他人嘲笑过,甚至一些年长的人也会因为我不会使用电焊笔而嘲笑我。

任何事情都基于你真正想做什么。如何你只是想开一家网店、制作购物车、网页表格、漂亮的图片以及社交媒体软件,那么你根本不需要计算机科学学位,甚至是与之相关联的学位。

如果你想创造一些尚未存在且很有趣的东西,或是你想在这个产业里面做出一点成绩,或是你仅仅想稍许改变一点这个世界,那么你必须有一个计算机学位。如果你想编写那些给低层次的程序员使用的软件和库,你也必须有一个计算机学位。

或者你从另外一个角度看待:如果你想搭建一个狗屋,只需要知道使用锤子和钉子,然后动手做即可。如果你想成为一名设计和建造摩天大厦的建筑师时,你首先需要一个建筑业的学位。再次恳请大家要有自知之明,不要明明是在搭建狗屋,却自称为建筑师。

Comments