重识编程这一职业——《人月神话》读感1

1. 初尝禁果

第一次写代码至今已20年光阴,那是1998年,老爸给我买了一台裕兴学习机(红白机的一种,下附图)。按照配套的“编程手册”使用Basic语言实现图形绘制、设定超级玛丽行走路线等等,编程结果可以保存在软盘中(90后估计都不知道是什么东东,一张软盘的容量只有1.44MB,附图中蓝色的物体)。

裕兴学习机

当时的我感觉自己帅呆了,其兴奋程度不雅于发现新大陆,可惜老爸认为我“玩物丧志”,从此就冰封了我的宝贝,直到我高考结束后才给解封,不过几年后的我早已移情别恋了——电脑,正真的电脑。


image.png

2. 从Hello World开始

真正的编程生涯是从大一开始的,先是用Dreamweaver做给班级做最佳团日的网页,那时也机缘巧合地加入了学校的“微软技术俱乐部”。后来开始学习VB6.0、VB.NET、C#.NET、SQL Server等微软阵营的技术,从Hello World的开始了真正的编程生涯。再后来又学习了PHP、JAVA、Python、Go等语言,就这样伴随着各种编程语言经过了四年的大学生涯。


image.png

3. 误入歧途

毕业后我进入了政府部门,做的也算是专业相关的工作,但也就三个月的时间,鬼使神差的在单位开始了信息化建设的工作,从此也正式进入了编程工作的事业阶段,这条路一下子就走到了2018年。


image.png

4. 反思短板

在编程职业的这一路上我在不断的学习,也在不断的提升,当然还在不断的收获。不过这时间长了,短板就凸显出来,最凸显是就是在管理能力方面,其主要原因在我花费了更多的时间在技术本身上,从而忽视了管理的重要。为了弥补这一短板,我开始了相应的充电工作。

5. 《人月神话》

在研发管理的书单中,不得不提小费雷德里克·布鲁克斯的《人月神话》这本书,此书出版于1975年,讲的是上世纪60年代的软件故事,尽管这是一本老书,但它却是软件工程师的圣经。我手上这一本是《人月神话》40周年的中文纪念版,之前没有好好读,最近计划认真重读一遍。


image.png

我将分为多次将读《人月神话》的感受、心得写出来,以便自我促进和同行借鉴。

6. 为什么喜欢编程

我喜欢编程,不是酷爱,否则不会在这条路上走这么多年,投入这么多时间,而且到现在还在写代码。但是我到底喜欢编程什么呢?以前并没有深思过这个问题,浅显来说是能够通过编程实现自我价值和灵魂的追求,就像有人喜欢抽烟,而我喜欢编程。

在《人月神话》一书中,作者早在40多年前就进行了相关的总结,这些总结至今对我都是受用的。

6.1. 创建事物

这种快乐是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到的快乐一样,成年人喜欢创建事物,特别是自己进行设计。

我是一个创造者,通过编程,我创建了我的王国。

6.2. 对他人有用

这种快乐来自于开发对他人有用的东西。内心深处,我们期望我们的劳动成果能够被他人使用,并能对他们所有帮助。如同小孩用粘土为“爸爸的办公室”捏制铅笔盒。

每当我开发的软件在帮助到别人的时候,我的内心在窃喜,这将成为我下一次前进的动力。

6.3. 迷人魅力

快乐来自于整个过程提现出的一股强大的魅力——将相互啮合的零部件组装在一起,看到它们以精妙的方式运行着,并收到了预期的效果。

将复杂的问题进行分解,然后进行分别处理,最后进行组装并让其良好的运行,这一过程完全是在享受。

6.4. 持续学习

这种快乐是持续学习的快乐,它来自于这项工作的非重复特性。人们所面临的问题总有这样那样的不同,因而解决问题的人可以从中学习新的事物,有时是实践上的,有时是理论上的,或者兼而有之。

如果是让我做重复性的工作,刚毕业的我只能坚持3个月,现在的我会久一些,不过我会开始迷失。但是编程的路上,我需要不停的学习,我总能拿到新钥匙,来打开探索未来的新大门。

6.5. 容易实现

这种快乐还来自于在易于驾驭的介质上工作。程序员,就像诗人一样,几乎仅仅在单纯的思考中工作。很少有创造介质如此灵活,如此易于精炼和重建,如此容易实现概念上的设想。

如果我的职业是建筑师,我可能需要花一辈子去实现一个宏伟的建筑物,而通过编程模拟一个建筑将容易的很多。

这5点事作者的总结,也是我快乐的源泉,是它们支持者我一路向前。

7. 编程的苦恼

尽管对编程我是如此的热爱,但也逃脱不了快乐的另一面——苦恼。不过当我们认清苦恼的根源后,当它出现时,我们便能坦然面对。它们并不能阻止我前进的步伐,反而让我更加强壮。

7.1. 追求完美

因为计算机是以这样的方式来变戏法的:如果咒语中的一个字符、一个停顿,没有与正确的形式一致,魔术就不会出现。实际上,我认为,学习编程最困难的部分,是将做事的方式向追求完美的方向调整。

很多时候为了最后的1%,我可能会花费好几天的、上千次的尝试。

7.2. 对他人的依赖

对于系统编程人员而言,对其他人的依赖是一件非常痛苦的事情。他依靠其他人的程序,而往往这些程序设计的并不合理,实现拙劣,发布不完整,或者文档记录的很糟。所以,系统编程人员不得不花费时间去研究和修改,而他们在理想的情况下本应该是可靠完整的。

这是一个不可逾越的鸿沟,但我可以一步一步的向前,在这个过程,我学会了包容,学懂了规则,也更明白TeamWork的重要。

7.3. 无处不在的Bug

人们发现调试和查错往往是线性收敛的,或者更糟糕的是,具有二次方的复杂度。结果,测试一个托再拖,寻找最后一个错误比第一个错误将花费更多的时间。

Bug与程序是共存的,因为Bug本身就是程序的一部分,我们只能控制Bug的数量和它的严重性、影响范围。零Bug基本上是在一个理想的范畴。

7.4. 陈旧过时

当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时。

其实这种情况是很少的,大多数情况会好很多。

8. 结束语

快乐也罢,苦恼也好,我选择了编程,她也选择了我,我们会不离不弃、长久相伴。

在“焦油坑”这一章,作者还阐述了一个非常重要但很多人并没有认知的观点:

编程系统产品开发的工作量是供个人使用的、独立开发的构件程序的9倍。

所以如果要做成一个产品,完成它至少是可使用Demo的9倍工作量。

下一次我将分享本书的核心章节,人月神话到底是什么?结合我们现在的项目应该注意什么?如何改进?

敬请大家期待!

你可能感兴趣的:(重识编程这一职业——《人月神话》读感1)