编写软件是一种艺术

本文是翻译,版权归原作者所有



本文是我的《技术招聘和团队建设》系列中的其中一篇,你可以在这里找到下一篇。

「计算机科学并不只是关于计算机,就像天文学并不只是关于望远镜一样。」 ------Edsger Dijkstra【注1】

如果你靠编写软件谋生(或为了好玩),就问自己一个问题:你最后一次为了手头编写的软件而计算大O符号【注2】(对于外行而言,「大O符号」用来测量一种算法效率最差的情况)是在什么时候?现在不考虑你做过它的所有事实,而一些求职者能够向你炫耀一个事实,他知道他的团队成员的复杂度是 O(n log n)。为了兴趣和职业,我编写软件有 20 年了,我能够对你说,对我而言,这个数字用一只手的五个手指头就能数出来。

人们经常将计算机科学和编写软件等同视之,二者是相关的,但又相差甚远。编写软件不只是计算机科学的实际用途,正如谱写交响乐不只是声学的实际用途一样。

声学讲述声音的物理规律,计算机科学讲述算法的数学,它解释了冒泡排序怎样、以及为什么没有堆排序【注3】效率高。这不代表软件工程师就不需要理解计算机科学基础,他们肯定需要理解才行。设想一下,一名作曲家不了解他的乐器会发出什么声音,又会怎样。他们能够创作出音乐吗?可能吧。他们能够成为优秀的音乐家吗?可能成不了。

把软件比作交响乐

一名作曲家有一套固定的乐器,只能发出固定范围的声音。他们选择哪种乐器进来,哪种乐器退出,哪种乐器成为焦点,哪种乐器渐入背景。只有这样做,他们才能把噪音变成优雅的音乐,在情感上引起共鸣。

对于软件的编写,如果操作得当,也有同样的特点。我们的乐器就是算法。我们把它们放在磁盘上、放在网络和屏幕上。它们经过工程师的手,重新组合、排列,使得能够专注在原始速度、大小或时间约束、或创造出视觉上让人愉悦的结果。即使你不是工程师,最终结果同样是优雅的,从而在感情上引起共鸣。

检查清单不会使你优秀

背景是黑色,确认。天空中有星星,确认。天空下有城市,确认。很多艺术都会检查这些条条框框。但是,很多都不是《星夜》【注4】。检查这些条目,或许可以保证你的代码不会做可怕的事情,但是它从来不会让你的代码做出伟大的事情。因为,那需要经验和才能。你具有的才能越多(假定你保持一定程度的谦虚,并乐于向别人学习),获取的经验就越多,这会让你更优秀。仅仅具有才能,还不够。才能像是一颗橡子,它具有长成一颗高大橡树的潜力。经验是沃土、水、阳光和时间。

计算机科学是一门科学,软件是一种艺术

如果你还没有明白这个结论,那么这里有个黑白分明的结论。我的目的是什么呢?有两点。首先,提醒我们这些编写软件的人,因为我们对开发优秀作品充满激情,但是或许只是为了支付账单,仍然需要创造更多的艺术。其次,为我接下来的一些博文做准备工作,我打算写到我的《技术招聘和团队建设》系列中。编写软件需要很多经验和才能,意识到这一点是很重要的,就像橡子之于橡树,你投入的越多,你得到的回报就越多。

有激情的工作(厚脸皮做广告喽)

我的公司「June」,正在招募激情爆棚的 IT 专家。我们让招聘人员付费和 IT 专家沟通,在此过程中,你或许可以找到一份新工作。如果你有兴趣,可以在 joinjune.com 申请。你还能在这篇博文找到更多详情(比如,为什么招聘人员要抓住机会,和你有偿沟通)。

关于我

我是 Amir Yasin,June 的 CTO 和联合创始人。和最好的 IT 招聘人员,有偿沟通。

做为开发者,我掌握了数门语言,关注高性能、可扩展性、软件架构、以及通常的处理疑难杂症。你可以在 Medium 上关注我,我在这里写关于软件工程方面的博客;我偶尔在 Twitter 上说一些有趣的东西,你也可关注我;或者,浏览我在 GitHub 上对 FOSS 社区的贡献

如果你喜欢本文,请点击推荐,我万分感激。

注释

译文:编写软件是一种艺术 》| 腊八粥