我做软件开发时,逻辑很清晰,代码写得又快又好,Bug也不多,所以我一直觉得自己是个很专业的程序员。可是这周看了Bob大叔的一本书,忽然脸红了……
Bob大叔通过自己的经历,从担当责任和职业道德两个方面描述了专业程序员应该具备什么样的素养和行为。
◇
担当责任
什么是担当责任呢?
书里举了个例子:
如果你不小心放过了某个模块里的一个 Bug ,以致公司损失了 1 万美元,结果将会怎样呢?非专业人士会耸耸肩说:“难免要出点儿状况嘛。”然后像没事儿人一样继续写其他模块。而专业人士会自己为公司的那1万美元买单!——Bob大叔
现实世界里还有很多比Bob大叔的例子更残酷的软件Bug。比如:
2019年3月10日,埃塞俄比亚航空波音737 Max坠机事件,157人遇难。
2018年12月25日,阿里 Ant Design的圣诞节彩蛋事件,无数 toB的公司因此被投诉。
2005年12月8日,日本公司J-Com首次公开上市,瑞穗证券的一位交易员遭遇证券交易系统无法撤单的Bug,导致公司损失400亿日元。(2015年9月3日这个事件才由东京最高法院做了最终判决。)
这些例子看起来有点儿极端,但愿你我不会碰上啊。阿弥陀佛。
现在来说什么是担当责任,Bob大叔援引希波克拉底誓言,指出对程序员来讲,担当责任最基本的原则就是:“不行损害之事。”
展开来讲有两点:
不要破坏软件功能
不要破坏结构
我们反过来讲,更容易搞明白这两点。
什么叫破坏软件功能呢?
还是拿我前面举的两个大Bug来说明。
比如波音737 Max 8的Bug:飞机AOA迎角传感器错误数据会导致飞机的尾翼配平系统启动自动保护功能,在未经飞行员操纵的情况下,自动让机头向下。这个Bug就可能导致坠机这种严重事件。
比如富士通程序员2000年某次修改程序时,给证券交易系统埋入了特定条件下无法撤单的Bug。这个Bug给瑞穗证券导致了400多亿日元的损失。
开发的软件有Bug就会破坏软件的功能。所以要做到不破坏软件的功能,就要竭力避免Bug。如果Bug在所难免,就要“道歉”、反思、改进,不能一而再、再而三地犯相似的错误。
为了避免Bug,我们这些程序员就要:
确保QA找不出任何问题。
确信代码正常运行。
自动化QA。
这些要求是在是高,非常之高。
回想我原来开发软件时,经常因为交付日期的缘故,硬着头皮提交自知有Bug的代码,希望为自己争取到开发时间,真是太不专业了。(测试组的姐妹们如果看到,请一笑了之,事情都过去好多年了啊,求原谅。)
什么叫破坏结构呢?
比如一个绘图软件的代码,通过抽象工厂模式来构造形状对象,解耦了对象的使用和创建,有一天一个程序员小新,接到一个需求,要给软件新增一种图形,可他搞不懂形状对象创建部分相关的代码,时间又紧急,又未了证明自己可以很快搞定,就写了一个类,在用到的地方,就地分配对象,搞定了新需求。
像这种情况,小新虽然搞定了需求,但破坏了软件的结构。
专业程序员不会为了发布新功能而破坏结构。
专业程序员会牢记各种软件设计原则和模式,给自己制定严格遵循的纪律,在开发软件时认真执行,保持自己开发的软件易于修改。
我以前有很多“事急从权破坏结构”的时刻,汗颜呀。
◇
职业道德
在职业道德这部分,Bob大叔先揭示了一个残酷真相:
职业发展是你自己的事。雇主没有义务确保你在职场能够立于不败之地,也没有义务培训你,送你参加各种会议或给你买各种书籍充电。这些都是你自己的事。将自己的职业发展寄希望于雇主的软件开发人员将会很惨。
——Bob大叔
然后指出:
你应该计划每周工作60小时。前40小时是给雇主的,后20小时是给自己的。在这剩余的20小时里,你应该看书、练习、学习,或者做其他能提升职业能力的事情。——Bob大叔
Bob大叔关于职业发展是自己的事儿这个观点,我很认同,并且践行了。
接下来,Bob大叔提出了与职业道德相关的 5 点建议,非常赞,摘录给大家看。
(1)了解你的技术领域。
在程序员的技术世界里,各种观点、实践、技术、工具与术语层出不穷,想成为专业开发者,就得对其中的一大部分有所了解,并且要不断扩展这一知识面。
觉得自己只要守着一把锤子就可以全世界乱敲,纯粹是痴心妄想呀。
Bob大叔列出了每个专业级开发人员必须精通的事项:
设计模式。必须能描述GoF的全部24种设计模式。
设计原则。必须了解SOLID原则,而且要深刻理解组件设计原则。
方法。必须理解XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。
实践。必须掌握测试驱动开发、面向对象设计、结构化编程、持续集成和结对编程。
工件。必须了解如何使用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。
这一个清单就打败了我,我真的不是专业级开发人员,真的不是,真不是的,o(╥﹏╥)o
(2)坚持学习
放弃学习的程序员,绝不是专业程序员。
我们可以通过3种方式学习:
练习。没事儿就给自己个小任务,连连脑,练练手,保持写代码的感觉。
合作。与他人一起编程、一起练习、一起设计、一起计划。
辅导。教是最好的学,教别人,自己也受益。
(3)了解业务领域
要编写财务软件,就要了解财务;要编写OA软件,就要了解目标公司的办公流程;要编写建筑软件,就要了解建筑…
不必成为问题域的专家,但决不能是外行,得成为准行家。
(4)与客户保持一致
客户的问题就是你的问题。
必须站在客户的角度思考问题,确保开发的功能真正能满足客户的需要。
(5)谦逊
此条无须任何解释,有质疑说明你不专业。
◇
我吧啦吧啦说了这么多,其实只介绍了书中的一章概括性的内容,后面还有很多围绕着职业素养展开的精彩内容,包括如何说“不”、如何说“是”、编码、测试驱动开发(TDD)、时间管理、压力管理、团队管理等等,读每一部分我都有种“就该这样可我居然没做到”的感觉,请大家自行研读体会哦。
对啦,还没告诉大家书的名字,这本书就是——《代码整洁之道:程序员的职业素养》
注意,专业程序员都保持学习。
共同学习,写下你的评论
评论加载中...
作者其他优质文章