重读《代码整洁之道 - 程序员的职业素养》有感

程序员的职业素养《The Clean Coder》一书是Bob大叔代码整洁之道《Clean Code》姐妹篇,代码整洁之道一书从编码本身的技艺影响了一代又一代的软件开发人员,它强调函数,命名,单元测试,异常测试,代码格式等,告诉程序员们怎么写出高可靠和可维护性的代码。

前言

代码整洁之道 : 程序员的职业素养一书从跳出编码本身去审视程序员工作以及如何更好的写出符合用户期望的产品,这本书是Bob大叔对自身编程职业生涯的深刻反思和经验沉淀,通过不同时期的想法和实际的例子来告诉所有的软件行业从业人士,一个合格程序员怎么做正确的事。读完全书你会发现除了务实性的意见背后,隐隐体现出一种奋力突破自己的积极态度。

关于作者

作者Bob大叔是有40多年的编程经验的老革命,他在40多年的职业生涯中经过开除,表扬, 晋升,跳槽,做过普通员工, 小组长, 主管,和CEO。他在40多年的职业生涯中开发过不同类型的系统,也使用过不同的开发语言,如COBO, PDP, BAL, C/C++,Java, Ruby和Smalltalk,不同公司任职期间,他在数十载职业经历里见过混工资的家伙,也见过许多无可挑剔的专业人士,正是这些无可挑剔的专业人士影响着Bob大叔,使他知道真正专业的程序员,需要什么样的态度,原则和行动。他在此书中毫无吝啬的奉献给读者。

什么是软件专业人士

“专业主义”不但象征着荣誉和骄傲,而且明确意味着责任和义务,两个密切相关,因为你不可能从无法负责的事情上获得荣誉和骄傲。

  • 非专业人士不需要自己所做的工作负责,把事情搞砸后他们大可把责任推给雇主,收拾烂摊子一定还是雇主,但是专业人士犯了错必须自己收拾残局。作者曾因不负责任而尝尽了苦头,所以才明白尽职尽责的重要意义。书中提到他在职业生涯早期为了赶工期忽略了部分程序的测试工作,不幸就是未经测试那部分程序出现问题,让他意识到没有对所有功能进行测试就交付软件是不负责任的,为了如期交付产品,忽略了测试环节,整个过程只考虑了自己交付的及时性,而没有估计客户和雇主的声誉,从而造成了更大问题。

  • 作为一个有抱负的专业人士,我们该如何承担责任呢? 有什么一原则可以参考? 作者援引“希波克拉底誓言”中不行损害之事,但是作为软件开发人员能做出什么坏事呢? 从纯软件的角度看,他可以破坏软件的功能和架构。

  • 严格不要破坏软件功能。我们所有的程序员都知道,开发的软件有bug会损害软件的功能,会影响用户的软件使用,因此要做得专业,就不能留下bug. 或许大多人都会说软件系统太复杂,不可能完全没有bug, 相同道理医生就不能身体的复杂性而拒绝发誓不伤害病人。 或者还会说,我们是要追求完美吗?作者的肯定表达专业人士要对自己不完美负责,代码中难免会出现bug, 但这并不意味着你不用对它负责; 专业人士就是能对自己犯下错误负责的人,哪怕那些错误实际上在难免。所以专业人士要练习的第一件事就是“道歉", 道歉是必要的,但还不够,我们不能一而再,再而三的犯相同的错误,职业经验多了之后应该减少失误,失误率不能等于零,但是有责任让它无限接近于零。

软件专业人士如何行事

  • 了解你的领域, 近几十年来,各种观点、实践、技术、工具和术语在我们这么领域层出不穷,我们对这些了解多少呢?一位专业的开发者,除了面对自己日常的工作,还应该对其中的大部分技术有所了解,并不断的扩展知识面,就如常说的在埋头拉车时也要抬头看看路。书中Robert还着重提到每个专业开发人员都必须精通的事项,这些方法论在过去几十贯穿整个软件开发行业,经久不衰,具体如下:
    a. GOF书中的24种设计模式
    b. 设计原则的SOLID原则
    c. 常见的软件开发的方法,如XP, SCRUM, 精益,看板,瀑布开发,结构化分析及结构化设计。
    d. 必须掌握测试驱动开发,面向对象设计 ,结构化编程,持续集成和结对编程
    e. 必须了解如何使用UML图,DFD图,结构图,PETRI网络图,状态迁移图表、流程图和决策表
  • 坚持学习,众所周知软件行业飞速发展,意味着软件开发人员必须坚持广泛学习才不至于落伍。读书,看相关文章,关注博客和微博,参加技术大会,访问用户群,多参与读书与学习小组。不懂就学,不要畏难。如果你是Java程序员,就去学习Python, Spark等大数据处理技术。
  • 长期练习,真正的专业人士往往是勤学苦干的,以求得自身技能的纯熟精炼。只完成日常工作是不足以称为练习,那只能算是种执行性质的操作,而不是练习。练习,指得是在日常工作之余专门练习技能,以期自我提升。我们有幸在生活在这个时代,基本所有的课程和技能在互联网上都唾手可得,只要你想练习,都能轻松获得。
    思考题,我们多长时间没有学习日常工作之外的技能了?
  • 合作,与他人合作是学习的一种有效途径。专业软件开发人员往往会更加努力地尝试与他人一起编程、一起练习、一起设计 、一起计划,这样可以在彼此身上学到更多东西,也能在更短的时间内更高质量地完成更多的工作。
  • 辅导,想起我的前领导告诉我的一个方法,想迅速牢固地掌握某些技术和能力,最好的办法就是与负责指导的人交流这些内容,或者主动分享这方面的知识,在传道授业的同时,导师也会从中受益。
  • 了解业务领域,每位专业软件开发人员都有义务了解自己开发的解决方案所对应的业务领域,如果编写财务系统,你就应该对财务领域有所了解。用一句网络用语来说,凡是不谈业务场景的技术方案都是刷流氓。本中Bob提到一个反例就是,简单按照产品设计说明书来编写代码,但却对为什么那些业务需要那样的规格定义不求甚解。相反,专业人士应该对这一领域有所了解,能辨别,质疑产品设计说明书中的错误。
  • 与雇主/客户保持一致 开发人员或者同行同级之间互相认同是容易的,但把一方换成雇主或者客户,人们就容易产生“彼”“此”之分,专业人士会尽全力避免这样的狭隘之见。雇主和客户的问题就是我们的问题,必须弄明白这些问题,并寻求最佳的解决方案,每次开发设计系统,都应该站在公司或者客户的角度来思考,确保开发出来的产品是对企业或得客户有益的。
  • 谦逊 编程是一种创造性活协,写代码是无中生有的创造过程,我们自信地发布准确无误的指令,稍有差错则可能造成无法估量的损失,因此编程也是极其自负的行为。专业人士都知道自己自负,我们熟知自己的工作,并引以为荣,对能力充满自信,勇于承担有把握的风险。但是专业人士必须清醒的认识到自己也会摔跟头,对待他人的犯错引以为鉴,懂得从他人的错误中学习。

软件专业人士如何处理冲突,如交付工期,管理沟通以及技术方案。

  • 每一个团队都可能存在这样和那样的矛盾,存在各种的对抗关系,面对艰难决定,直接不同角色冲突是最好的办法。
  • 每位经理都承担着工作职责,其中一部分的工作职责,便是要竭尽全所能追求和捍卫他们设定的目标,同样绝大多数程序员也知道该如何出色地尽职尽责。如果他们是专业程序员的话,他们就会竭尽所能地追求和捍卫自身的地目标。
  • 直接冲突最好结果,便是你和你的经理,合作伙伴形成共同追求的目标。那么最关键的是要找到那个共同的目标,而这往往有赖于协商。

软件专业人士何时应该说“不”? 怎么说?

  • 专业人士敢于说明真相而不屈从于权势。专业人士有勇气对他们的客户或者经理说“不”。书中Bob通过自己实际经历中的例子告诉我们,在明知不可为的情况迫于权力或者其它压力而仓促上线带来的损失远大于延期的损失,专业人士应该明确的告诉管理层或者客户为什么不,潜在的风险,以及实际情况。
  • 在说”不“的时候,解释为什么过不如事实重要,提供太多的细节,只是招致更多的微观的管理。关于这一点,老王我持保留意见,当你和你的合作伙们都是专业人士,提供更多的细节可能对方能够有不同的方法更有效的解决这个问题,通过协作找到共同的目标。
  • 具备团队精神,意味着恪守尽职守,意味着当其它队员遇有困境时伸出援手相助,频繁与大家交流,关心队友,竭力做到尽职尽责,同时也意味着承担。
  • 说”不“的障碍有时来自于专业人士的个人英雄主义,某些专业人士一门心思想成为风云人物和救世主。作者文中提到的John Blanco的故事,John认为成功的唯一途径就是打破专业习惯,为此他只能自食其果。

软件专业人士如何应对压力

在面对压力时,专业开发人员也能冷静果断,尽管压力不断增大,他仍然会坚守所受的训练和纪律,这是专业人士赖以战胜由最后期限和承诺所带来的压力感的最好方法。作者Bob在20世纪80年代有过一段相信很多开发人员都有过的经历。为了某一个项目,整个团队在办公室度过了无数的不眠之夜,周末一直盯着电脑屏幕工作,看着几千行的SQL文件,同事之间关系因为压力变得疲惫不堪,有人重拳击打墙壁,愤怒的把笔扔在黑板上,但是压力和愤怒从未消失。后来Bob幡然醒悟,决心通过高质量的工作,停止了长时间的疯狂工作状态,改变了高强度的生活方式。Bob从避免压力和应对压力两个角度去分享他的压力管理方法。

避免压力

  • 避免对没有把握能够达成的最后期限做出来承诺,专业人士要做的就是使用风险定量化并将它们陈述给业务方,以便他们能做好相应的准备,做不切实际的承诺会阻碍目标的实现 ,对公司和个人都没有好处。对于某些不可抗力的做出来的承诺,出于责任感我们必须主动帮助合作伙伴找到方法来兑现这些承诺。专业人士总会千方百计的帮忙业务伙伴找到达成目标的方法。
  • 保持整洁,快速前进确保最后期限的方法,便是保持整洁,快而脏是自相矛盾的说法,脏乱只会导致缓慢。让系统,代码和设计尽可能的整洁,就可以避免压力。在此不是画蛇添足般去清理代码,只是不要容忍混乱,混乱会降低速度,导致工期延误,承诺失信。因此要尽力保持输成成果整洁干净
  • 坚持正确的纪律原则。在困境降临时,也不要改变专业的行为。如果你遵守的纪律原则是工作的最佳方式,那么即使在巨大的压力下,也要坚决秉持这此纪律原则。比如说在平常的时候你会注意代码整洁交付质量,在危机时刻你却会产出混乱的代码,就说明你并不真正的相信混乱会导致速度下降。选择那些你在危机时刻依然会遵循的纪律原则,并在所有工作中都遵守这些纪律,遵守这些纪律原则是避免陷入危机的最好途径。

应对压力

  • 正确应对压力,不要惊慌失措。长夜漫漫无心睡眠,无助于更快地解决问题,呆坐着烦躁也无济以事,甚至你会犯最严重的错误,鲁莽仓促。多少次因为要解决一个问题,快速上线代码反而带来更多更严重的问题,都是血泪的教训。 让自己的放松下来,对问题进行系统化的分析思考并努力寻找最好结果的途径,然后以合理稳定的节奏前进。
  • 保持下面沟通,让你的队友和主管知道你的困境,告诉他们走出困境的计划,请求支援和指引,避免产生惊恐,惊恐会使压力增大。
  • 依靠你的长期坚守的纪律原则拜托压力,当事情十分困难时,要坚信你的纪律原则,它们可以指引你度过高压时期。作者举例TDD,如果你平时坚持写单元测试,经常进行重构,那么此时就应该大胆重构,写出更多的单元测试覆盖更多的场景,让代码更加的整洁,交付物更高的质量。
  • 主动寻求帮助,当头脑发热时,找一个愿意和你一起结对编程的伙伴,你会前进得更快,而缺陷更少。同样地,当你看到其他要身处压力之下时,可以伸出援手,结对工作,帮助你的伙伴走出困境。

后记

Bob 在本书还提到更多的软件开发技能相关的经验,比如说如何做好测试,如何进行编码,如何练习,还有持续集成,时间管理,项目管理以及沟通协作方面的技巧,留待下回分解。

Bob 从高中毕业入行,通过不断的学习精进,成为一个大神,他的学习经验和工作经历都能给大家带来启发,每一位软件开发专业人士都能以此作为参照,让自己变得得更加专业。

关于我们

一支有文化,有思想,有原则团队,无论战斗力还是颜值爆表的队伍。
作者:王云 - 中年微胖不称职码农

你可能感兴趣的:(软件开发,软件开发,专业素养,能力提升)