1. 初尝禁果
第一次写代码至今已20年光阴,那是1998年,老爸给我买了一台裕兴学习机(红白机的一种,下附图)。按照配套的“编程手册”使用Basic语言实现图形绘制、设定超级玛丽行走路线等等,编程结果可以保存在软盘中(90后估计都不知道是什么东东,一张软盘的容量只有1.44MB,附图中蓝色的物体)。
当时的我感觉自己帅呆了,其兴奋程度不雅于发现新大陆,可惜老爸认为我“玩物丧志”,从此就冰封了我的宝贝,直到我高考结束后才给解封,不过几年后的我早已移情别恋了——电脑,正真的电脑。
2. 从Hello World开始
真正的编程生涯是从大一开始的,先是用Dreamweaver做给班级做最佳团日的网页,那时也机缘巧合地加入了学校的“微软技术俱乐部”。后来开始学习VB6.0、VB.NET、C#.NET、SQL Server等微软阵营的技术,从Hello World的开始了真正的编程生涯。再后来又学习了PHP、JAVA、Python、Go等语言,就这样伴随着各种编程语言经过了四年的大学生涯。
3. 误入歧途
毕业后我进入了政府部门,做的也算是专业相关的工作,但也就三个月的时间,鬼使神差的在单位开始了信息化建设的工作,从此也正式进入了编程工作的事业阶段,这条路一下子就走到了2018年。
4. 反思短板
在编程职业的这一路上我在不断的学习,也在不断的提升,当然还在不断的收获。不过这时间长了,短板就凸显出来,最凸显是就是在管理能力方面,其主要原因在我花费了更多的时间在技术本身上,从而忽视了管理的重要。为了弥补这一短板,我开始了相应的充电工作。
5. 《人月神话》
在研发管理的书单中,不得不提小费雷德里克·布鲁克斯的《人月神话》这本书,此书出版于1975年,讲的是上世纪60年代的软件故事,尽管这是一本老书,但它却是软件工程师的圣经。我手上这一本是《人月神话》40周年的中文纪念版,之前没有好好读,最近计划认真重读一遍。
我将分为多次将读《人月神话》的感受、心得写出来,以便自我促进和同行借鉴。
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倍工作量。
下一次我将分享本书的核心章节,人月神话到底是什么?结合我们现在的项目应该注意什么?如何改进?
敬请大家期待!