美文网首页
代码整洁之道2

代码整洁之道2

作者: 496f92d634c1 | 来源:发表于2022-01-24 11:47 被阅读0次

    前言

    与问题的难易相比,解决问题的方式、步骤以及反思的程度才能体现出一个人的职业素养。

    职业素养是持续积淀的结晶:一方面,它体现了能力和素质;另一方面,它又强调了持续的积累和养成。

    作为职业开发人员,基本功不够熟练,当然谈不上职业素养。但是仅仅能迅速地编写代码,却不关心代码背后的意义,不能迅速判断、解决程序中运行中的各种问题,不能自信满满地为自己交付的程序承担责任,同样是与职业素养绝缘的。

    (说“是”时)你对自己将会做某件事做了清晰的事实陈述,而且明确说明了完成期限。那不是指别人,而是指你自己。你陈述的是自己会去执行的一项行动,而且,你不是“可能”去做,或者“可能做到”,而是“会”做到。

    有时候,获取正确决策的唯一途径,便是勇敢无畏地说出“不”字......我们要明白,委屈专业原则以求全,并不是问题的解决之道。舍弃这些原则,只会制造出更多的麻烦。

    东西画在纸上与真正做出来是不一样的。真正要解决办法,是约定共同认可的验收测试标准,并在开发过程中保持沟通。

    这本书主要阐述软件开发者的专业精神:1)什么是软件专业人士?2)软件专业人员如何行事?3)软件专业人士如何处理冲突,应对很紧的工期,如何和不讲道理的管理人员打交道?4)软件专业人士何时应该说“不”?怎么说?5)软件专业人员如何应对压力?

    要诚信、要富有荣誉感、自尊心和自豪感,要勇于承担作为一名手艺人和工程师所肩负的重大责任。这种责任包括努力工作,出色完成任务;要善于沟通,能够就事论事;要管理好时间,能够坦然面度艰难的“风险回报”决策。

    身为一名工程师,你比任何管理者可能都了解得更透彻。了解这些也意味着你肩负着要敢于行动的重大责任。

    观察自己的一举一动,尽自己努力成为一名有价值的员工。

    第一章 专业主义

    “专业主义”有很深的含义,它不但象征着荣誉和骄傲,而且明确意味着责任与义务。

    如果你不小心放过了某个模块的一个漏洞,已知公司损失了1万美元,结果将为怎样呢?非专业人士会耸耸肩说:“难免要出点状况嘛。”然后像没事儿人一样继续写其他模块。而专业人士会自己为公司的那一万美元买单。

    专业主义的精髓就在于将公司利益视同个人利益。

    “专业主义”意味着担当责任。

    没有对例行程序进行测试就交付软件是不负责任的。

    作为一名有追求有抱负的专业人士,它的首要职责与目标正式尽其所能行有益之事。

    要对自己的不完美负责。代码中难免会出现漏洞,但这不意味着你不用对它们负责:没人能写出完美的软件,但这并不表示你不用对不完美负责。

    所谓专业人士,就是能对自己犯下的错误负责的人,哪怕是那些错误实际上在所难免。

    雄心勃勃的专业人士们要练习的第一件事就是“道歉”。道歉是必要的,但还不够。你不能一而再、再而三地犯相同的错误。职业经验多了之后,你的失误率应该快速减少,甚至渐进于零。失误率永远不可能等于零,但你有责任让它无限接近零。

    发布软件时,你应该确保QA找不出任何问题。故意发送明知有缺陷的代码(没把握的代码),这种做法是极其不专业的。

    QA会发现漏洞吗?可能会吧,所以,准备好道歉吧,然后反思那些漏洞是怎么逃过你的注意的,想办法防止它再次出现。

    每次QA找出问题时,更糟糕的是用户找出问题时,你都该震惊羞愧,并决心以此为戒。

    实行自动化测试,通过百分百测试覆盖来确信代码正常运行。

    代码很难测试的原因是因为设计时就没考虑如何测试。唯一的解决方法是要设计易于测试的代码,最好是先写测试。再写要测的代码。

    所有软件项目的根本之道原则是软件要易于修改。

    专业的软件开发人员会牢记描述如何创建灵活可维护的结构的软件设计原则和模式,并在开发软件时认真遵循。

    无情重构:对每个模块,每检入一次代码,就要让它比上次检出时变得更为简洁。每次读代码,都别忘了进行点滴的改善。

    职业发展是自己的事儿。工作时间应该用来解决工作的问题。为自己的职业发展准备时间,“术业有专攻”是需要投入时间去追求的。为职业发展准备的时间会让自己成为更有价值的专业人士。

    假设自己时因为热爱软件而成为软件开发者,渴望成为专业开发者的东西也正是来自对软件的热情,那么,在准备的时间里,就应该做能激发、强化自己的热情的事。

    不能铭记过去的人,注定要重蹈覆辙。

    每个专业软件开发人员必须精通的事项:

    1)设计模式;

    2)设计原则;

    3)方法(精益、瀑布);

    4)实践(面向对象设计、测试驱动开发等);

    5)工件(UML图等)。

    业精于勤。真正的专业人士往往勤学苦干,以求得自身技能的纯熟精练。练习,指的是在工作之余专门练习技能,以期自我提升。

    学习的其他好方法是:

    1)与他人合作(和他人一起编程、一起练习、一起设计、一起计划,可以彼此学习);

    2)辅导(教学相长);

    3)了解业务领域(每位软件开发人员都有义务了解自己开发的解决方案对应的业务领域)。

    客户的问题就是自己的问题。自己必须弄明白这些问题,并寻求最佳的解决方案。每次开发系统,都应该站在客户的进度来思考,确保开发的功能真正满足客户的需要。

    专业人士不是胆小鬼。他们熟知自己的工作,并引以为荣;他们对自己的能力充满自信,并因此勇于承担有把握的风险。

    第二章 说不

    专业人士敢于说明真相而不屈从于权势。专业人士有勇气对他们的经理说“不”。

    程序员有其工作职责所在,绝大多数程序员也知道该如何出色地尽职尽责。如果他们是专业程序员的话,他们也会竭尽全力去追求和捍卫自身的目标。

    通过协商可以找到不同人的共同的目标。

    最要说“不”的是那些高风险的关键时刻。越是关键时刻,“不”字就越具价值。

    具备团队精神,意味着恪尽职守,意味着当其他队员遭到困境时你要援手相助。有团队精神的人会频繁与大家交流,会关心队友,会竭力做到恪尽职守。

    大多数时间,我们都希望能够说“是”。确实,健康的团队都会努力寻求他人以肯定的答复。运作良好的团队的经理和开发人员,会互相协商,直至达成共同认可的行动方案。

    第三章 说是

    作出承诺包括:

    1)口头上说自己将会去做;

    2)心里认真对待做出的承诺;

    3)真正付诸行动。

    如果你无法兑现承诺,那么最重要的就是尽早想你的承诺对象发出预警,越快越好,越早越好。

    专业人士不需要对所有请求都回答“是”。不过,他们应该努力寻找创新的方法,尽可能做到有求必应。当专业人士给出肯定回答时,他们会使用正式的承诺,以确保各方能明白无误地理解承诺的内容。

    第四章 编码

    要精熟掌握每项技艺,关键都是要具备“信心”和“出错感知”能力。

    编码时必须平衡互相牵制的多种因素:1)首先,代码必须能够正常工作。必须理解当前要解决的事什么问题以及该如何解决。必须确保编写的代码忠实遵循解决方案。必须管理好解决方案的每一处细节,并且使语言、平台、现有架构以及当前系统的所有问题和平相处。2)代码必须帮助你解决客户提出的问题。很多时候,客户提出的需求其实没有真正解决他们自己的问题。这有赖于你去发现这些问题并于客户交流,以确保代码你呢个能够满足客户的真实需求。3)代码必须能和现有系统结合得天衣无缝。你的代码不能让系统变得更僵硬、更脆弱、更晦涩,必须要妥善管理好各种依赖关系。简而言之,编写代码时必须遵循稳健的工程原则;4)其他程序员必须能够读懂你的代码。这不仅包括写好注释这类事,还包括要精心锤炼代码,使他能够表达你的编程意图。

    如果感到疲劳或者心烦意乱,千万不要编码。要找到一种方法来消除干扰,让心绪平静下来。

    奉献精神和职业素养,更多意义上🈯️要遵循纪律原则而非长时间工作的工作狂。要确保自己已经将睡眠、健康和生活方式调整到最佳,这样才能做到每天的8小时工作时间内全力以赴。

    专业开发人员善于合理分配个人时间,以确保工作时间段中尽可能富有成效。

    礼貌地表现出乐于助人的态度才是专业的态度。

    结对编程带来的主要好处是能够帮助自己重新激活思维。

    不管是否采纳TDD或其他一些同等效果的实践,衡量你是否是一名专业人士的一个重要方面,便是看你是否能将调试时间尽量降到最低。绝对的零调试时间是一个理想化的目标,无法达到,但要将之作为努力方向。

    软件开发是一场马拉松,而不是短跑冲刺。

    当碰到困难而受阻时,当你感到疲倦时,就离开一会儿,让富有创造力的潜意识接管问题。精力分配得当,你将能在更短的时间内以更少的精力完成更多的事情。让自己保持好节奏,让团队保持好节奏。

    管理延迟的诀窍,便是早期检测和保持透明。要根据目标定期衡量进度,使用三个考虑到多种因素的期限:乐观预估、标称预估、悲观预估。尽量验收这三个时间点。不要把预估和期望混在一起,把全部三个数字呈现给团队和利益相关者,并每天修正这些数字。

    唯一能够加快进度的方法便是缩减范围。

    可以通过创建一个确切定义的“完成”标准来避免交付失误。最好的方法是让业务分析师和测试人员创建一个自动化测试的验收测试,只有完全通过这些验收测试,开发任务才能算已经完成。

    作为专业人士,要以能够随时帮助别人为荣。

    对于我们大多数人而言,既然协作并非我们自身的天性,那么我们就需要通过纪律原则来驱动大家良好协作。

    如果帮助唾手可得却让一个人堵在那儿,是很不专业的表现。

    除了自身的内驱力和资深导师的有效辅导之外,没有东西能将一名年轻的软件开发人员更快地提升位敏捷高效的专业人士。

    第五章 测试驱动开发

    TDD的三个原则:1)在编写好单元测试之前,不要编写任何产品代码;2)只要有一个单元测试失败了,就不要再写测试代码;无法通过编译也是一种失败情况。3)产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写。

    TDD最强大之处在于拥有一套值得信赖的测试,便可完全打消对修改代码的全部恐惧。当看见糟糕的代码时,就可以放手整理。代码变得具有可塑性,你可以放心打磨出简单而满意的结果。

    遵循三项法则并且测试先行,便能够产生一种驱动力,促使你做出松耦合的设计。

    TDD是专业人士的选择。

    第六章 练习

    要想表现优异,专业人士就会选择练习。

    任何事情,只要想做得快,都离不开练习。

    保持不落伍的一种方法是为开源项目贡献代码。

    职业程序员要用自己的时间来练习。因为他们知道保持自己的技能不落伍是自己的责任。

    第七章 验收测试

    专业开发人员必须确认,需求中没有任何不确定因素。

    专业开发人员认为,实现验收测试的自动化是自己的责任。

    通常,业务分析员测试“正确路径”,以证明功能的业务价值。QA则测试“错误路径”、边界条件、异常、例外情况,因为QA的职责是考虑哪些部分可能出问题。

    作为专业开发人员,你的职责是协助团队开发出最棒的软件。也就是说,每个人都需要关心错误和疏忽,并协力改正。

    第八章 测试策略

    开发小组要把“QA应该找不到任何错误”作为努力的目标。对QA找到的每一个问题,开发团队都应该高度重视、认真对待。应该反思为什么会出现这种错误,并采取测试避免今后重犯。

    SQ和开发人员应该紧密协作,接受保障系统的质量。QA在团队中要扮演的便是需求规约定义者和特征描述者。

    第九章 时间管理

    仔细管理自己的时间是你的责任。

    敏捷开发中的立会:1)昨天干了什么;2)今天打算干什么;3)遇到了什么问题。

    番茄工作法(25(工作)+5(休息))。

    专业开发人员会评估每个任务的优先级,排除个人的喜好和需要,按照真实的紧急程度来执行任务。

    第十章 预估

    专业开发人员不随便承诺,除非他们确切知道可以完成。预估是一种猜测。

    第十一章 压力

    即便有压力,专业开发人员也会冷静果断。尽管压力不断增大,他仍然会坚守所受的训练和纪律,他知道这些是他赖以战胜由最后期限和承诺所带来的压力感的最好方法。

    在压力下保持冷静的最好方式,便是规避会导致压力的处境。规避的方式也许无法完全减除压力,但是可以大大降低压力并缩短高压力期的时间。

    快速前进确保最后期限的方法,便是报纸整洁。

    观察自己在危机时刻中的反应,就可以了解自己的信念。如果在危机中你依然遵循着你守持的纪律,就说明你确实相信那些纪律。反过来说,如果在危机中改变行为,就说明你并不真正相信常规行为中的原则。

    当困境降临时,也不要改变行为。如果你遵守的纪律原则是工作的最佳方式,那么即使是在深度危机中,也要坚持秉持这些纪律原则。

    要避免产生惊恐。没有东西比惊恐更令人愤怒和失去理性。

    应对压力的诀窍在于,能回避压力时尽可能地回避,当无法回避时则勇敢直面压力。可以通过慎重承诺、遵循自己的纪律原则、保持整洁等来回避压力。直面压力时,则要保持冷静,与别人多多沟通,坚守自己的原则纪律,并寻求他人的帮助。

    第十二章 协作

    专业程序员的首要职责是满足雇主的需求。

    第十三章 团队与项目

    理想团队成员是12个人,分为程序员(第一组)和测试人员、业务分析(第二组),组的比例是:2:1,七名程序员、两个测试人员、两个产品人员、一个项目经理。

    第十四章 辅导、学徒期与技艺

    技艺是工匠所持的精神状态,技艺的模因中包含价值观、原则、技术、态度和正见。

    技艺模因经由口口相传和手手相承而来,需要由资深人士向年轻学徒殷勤传授,再有学徒之间进行相互传播。

    大师(10年,在多个不同类型的系统、语言和操作系统上工作过,熟练的设计师和架构师,领导过多个重要项目的软件程序员,懂得如何领导和协调多个项目团队)、熟练工(5年)、学徒(至少1年)

    相关文章

      网友评论

          本文标题:代码整洁之道2

          本文链接:https://www.haomeiwen.com/subject/pirbhrtx.html