Are you a Programmer?

Matthias Endler

你是程序员吗?

原文由 Matthias Endler 发布,订阅该博客

我的地理老师曾讲述过她在大学第一堂课的经历。作为开场,教授要求全班同学在不借助任何工具的情况下,尽可能准确地画出一幅德国地图。令她惊讶的是,她几乎无法在地图上填入多少细节,就连国家的轮廓都有些模糊。

她看过成千上万张德国——她的祖国——的图像,却无法凭着模糊的记忆将其复现出来。她只能去查资料。

这听起来是不是很熟悉?我们依赖机器来管理很大一部分知识。而要真正把知识记在心里,是需要下苦功的。

对于程序员,也有类似的测试:

任选一门你喜欢的编程语言,在一张纸上,不借助任何外部工具,手写一个正确的、平均时间复杂度为 O(n*log n) 的排序算法(堆排序、快速排序、桶排序,随便哪种都行)。

而我所说的正确,是指当你把它原样敲进电脑时,无需任何修改就能无 bug 地运行。

很大比例的专业软件工程师都做不到这一点,这可能会让你大吃一惊。

有人可能会辩称,了解编程语言的语法细节并不重要:“既然会用搜索引擎,为什么还要去记那些细枝末节?既然能轻易地从教程里复制、粘贴再修改一个例子,为什么还要从零开始?反正每隔几年甚至几个月,我就得为另一门语言彻底重学一遍语法。”

但这是一种迷思。如果你真的精通哪怕只有一门编程语言——即便它是像 Fortran 或 COBOL 这样过时的语言——你也能靠这门手艺轻易赚得盆满钵满。假设你从 1975 年就开始用 C,那么直到今天——将近四十年后——你依然可以使用同样的语法。文本编辑器也是如此。Emacs 和 Vim 都已问世数十年,久经考验。我不在乎你更喜欢哪一个,但你生命中的大部分时间都要与工具为伴,所以值得花时间去精通它们。

顺带一提,似乎很少有人在做任何事情时追求完美,他们很乐意满足于“够用就好”。这背后可能有很多原因,我也不是在指责谁没有做好功课,但或许有这种观察的不止我一人。

如果你不看手册就不会使用自己的工具,那你就是个蹩脚的工匠。如果你写一封简单的信都要查字典,那你很难成为作家,因为对你来说,要写出优雅、流畅的句子就已经很吃力了——更不用说引人入胜、独具匠心的故事了。我可不想读这样的书。

什么样的人才算程序员?

  • 她至少有一门了如指掌的编程语言。
  • 她能够即时实现健壮且速度尚可的标准算法(如排序、查找)和数据结构(如树、链表)。
  • 她对复杂度理论以及递归、指针等编程概念至少有基本的理解。

但要成为一名优秀的程序员,你还应该

  • 能够运用至少两种截然不同的编程范式(如声明式、函数式)来编程。
  • 拥有大型软件架构方面的经验。
  • 熟悉自己的编程环境,比如操作系统和一款你精挑细选的、功能强大的文本编辑器,最好是易于扩展的那种。

而这仅仅是冰山一角。“要学的东西太多了!”,我听到有人会这么说。慢慢来就好。刚开始学 Vim,你只需要三个命令:iESC:wq。第一天有这些就够了。

我知道,这些基本功大多不会在课堂上教给你,很大一部分都得靠你自学。但面对现实吧:如果你不懂这些,那你就不是程序员,只是个新手。

本文章由 muse-spark-1.2-contributor 进行翻译

评论