程序员的乐趣与苦恼

2021-06-20 作者:未知   |   浏览(

编程为何有趣?作为回报,它的从业者期望得到哪种快乐?

第一,是一种创建事物的纯粹快乐。好似孩子在玩泥巴时感到愉快一样,成年人喜欢创建事物,尤其是自己进行设计。我想这种快乐是上帝创造世界的折射,一种呈目前每片独特、崭新的树叶和雪花上的喜悦。

第二,快乐源于开发对别的人有用的东西。内心深处,大家期望别的人用大家的劳动成就,并能对他们有所帮。从这个方面,这同孩子用粘土为"父亲办公室"捏制铅笔盒没本质有什么区别。

第三,是整个过程体现出魔术般的力量——将相互啮合的零部件组装在一块,看到它们精妙地运行,得到预先所期望的结果。比起弹珠游戏或点唱机所具备的迷人魔力,程序化的计算机毫不逊色。

第四,是学习的乐趣,源于这项工作的非重复特质。大家所面临的问题,在某个或其它方面总有的不同。因而解决问题的人可以从中学习新的事物:有时是实践上的,有时是理论上的,或者兼而有之。

最后,乐趣还源于工作在这样易于驾驭的介质上。技术员,就像诗人一样,几乎仅仅工作在单纯的考虑中。技术员凭空地运用我们的想象,来建造我们的"城堡"。极少有如此的介质——创造的方法这样得灵活,这样得易于精炼和重建,这样得容易达成定义上的设想。

然而程序毕竟同诗歌不同,它是实实在在的东西;可以移动和运行,能独立产生可见的输出;能打印结果,绘制图形,发出声音,移动支架。神话和传闻中的魔术在大家的年代已变成了现实。在键盘上键入正确的咒语,屏幕会活动、变幻,显示出前所未有些或是已经存在的事物。

编程很有趣,在于它不只满足了大家内心深处进行创造的渴望,而且还愉悦了每一个人内在的情感。

然而这个过程并不全都是喜悦。大家只有事先知道一些编程固有些烦恼,如此,当它们真的出现时,才能愈加坦然地面对。

第一,需要追求完美。由于计算机也是以如此的方法来变戏法:假如咒语中的一个字符、一个停顿,没与正确的形式一致,魔术就不会出现。事实上,我觉得学习编程的最困难部分,是将做事的方法往追求完美的方向调整。

第二,是由他人来设定目的,供给资源,提供信息。编程职员极少能控制工作环境和工作目的。用管理的术语来讲,个人的权威和他所承担的责任是不合适的。不过,好像在所有些范围中,对要完成的工作,极少能提供与责任相一致的正式权威。而现实状况中,实质的权威源于每次任务的完成。对于系统编程职员而言,对别的人的依靠是一件很痛苦的事情。他依赖别的人的程序,而总是这部分程序设计得并不合理,达成拙劣,发布不完整,或者文档记录得非常糟。所以,系统编程职员不能不花浪费时间间去研究和修改,而它们在理想状况下本应该是靠谱完整的。

下一个烦恼——定义性设计是有趣的,但探寻琐碎的bug 却只不过一项重复性的活动。

随着着创造性活动的,总是是枯燥沉闷的时间和艰苦的劳动。程序编制工作也不例外。

另外,大家发现调试和查错总是是线性收敛的,或者更糟糕的是,具备二次方的复杂度。结果,测试一拖再拖,探寻最后一个错误比第一个错误将花费更多的时间。

最后一个烦恼,有时也是一种无奈——当投入了很多辛苦的劳动,商品在马上完成或者终于完成的时候,却已看上去陈旧过时。可能是同事和角逐对手已在追逐新的、更好的构思;或许替代策略不止是在构思,而且已经在安排了。

现实状况比上面所说的一般要好一些。当产品研发完成时,更出色的新品一般还不可以投入用,而只是为大伙谈论而已。另外,它同样需要数月的开发时间。事实上,只有实质需要时,才会用到最新的设想,由于所达成的系统已经能满足需要,体现了回报。

诚然,产品研发所基于的技术在不断地进步。一旦设计被冻结,在定义上就已经开始陈旧了。不过,实质商品需要一步一步按阶段达成。达成落后与否的判断应依据其它已有些系统,而不是未达成的定义。因此,大家所面临的挑战和任务是在现有些时间和有效的资源范围内,探寻解决实质问题的切实可行策略。

这,就是编程。一个很多人痛苦挣扎的焦油坑与一种乐趣和烦恼共存的创造性活动。