美文网首页
《代码整洁之道 程序员的职业素养》

《代码整洁之道 程序员的职业素养》

作者: 詹徐照 | 来源:发表于2018-05-13 12:27 被阅读389次

    本书主要讲什么是专业的(Professional)程序员,成为专业的程序员,需要什么样的态度、原则、行动。

    作者简介

    Robert C.Martin,人称Bob大叔,真·骨灰级 程序员。书中他是这么介绍自己的:
    “我编了42年的程序。这42年里,我什么都经历过。我被开除过,也被表扬过。我当过小组长,当过主管,也当过普通员工,甚至当过CEO。”
    “我用过COBOL、FORTRAN、BAL、PDP-8、PDP-11、C、C++、Java、Ruby、Smalltalk。”
    “20世纪70年代,并没有多少资深程序员。我后来去哪里工作,就是那里的资深程序员。”

    书名讨论

    本书原文名为:The Clean Coder. A code of Conduct for Professional Programmers
    译名为:《代码整洁之道 程序员的职业素养》。我觉得翻译得不是很贴切,而且极易与另一本书搞混。
    书名直译过来应该是:整洁的程序员。专业程序员的行为准则。(Clean这个词在这里不太好翻译,姑且译为整洁的吧)。本书强调的是Coder,是,是怎么做事、什么时候说Yes、什么时候说No。
    作者还有另一本书,原文名为: Clean Code. A Handbook of Agile Software Craftsmanship.
    译名为:《代码整洁之道》。是不是很上面那本书混淆了。这本书直译过来应该是:整洁的代码。敏捷软件开发指南。本书强调的是Code,是代码,怎么命名、写函数、写类等。

    本书主要讲了以下几大内容:

    • 专业主义
    • 什么时候该说不,什么时候该说是
    • 如何高效地写代码
    • 测试的重要性以及执行方案
    • 时间管理
    • 预估工期
    • 如何避免压力、应对压力
    • 如何协作
    • 团队与项目
    • 程序员的不同阶段

    1 专业主义

    1.1 清楚你要什么

    什么叫专业(Professional)?
    当说一个人专业的时候,大家应该会想到娴熟的技艺,专注的态度,强烈的责任感。
    如果一个人技术非常厉害,但工作态度不端正(做事随意、缺乏时间观念),恐怕是无法被称为专业。书中作者就讲到自己年轻的时候在公司虽然技术非常厉害,但缺乏责任感与时间观念,最后被公司开除的故事,可以说是专业一词的反面案例。

    “专业主义”有很深的含义,它不但象征着荣誉骄傲,而且明确以为着责任与义务。
    非专业人士不需要为自己所做的工作负责,他们大可把责任退给雇主。如果非专业人士把事情搞砸了,收拾摊子的往往是雇主;而专业人士如果反了错,只好自己收拾残局。
    “专业注意”意味着担当责任。那么,我们改如何担当责任呢?

    1.2 担当责任

    1.3 首先,不行损害之事

    1.3.1 不要破坏软件功能

    1. 让QA找不出任何问题;
    2. 要去确信代码正常运行;
    3. 自动化QA;

    1.3.2 不要破坏结构

    成熟的专业开发人员指导,聪明人不会为了发布新功能而破坏结构。
    专业的软件开发人员会牢记这些原则和模式,并在开发软件的时候认真遵循。其中有一条就是,如果希望自己的软件灵活可变,那就应该常修改他。
    有一种策略叫做“无情重构”:关注哪个模块,就对它做点简单的修改来改进结构。

    1.4 职业道德

    职业发展是你自己的事。雇主没有义务确保你在职场立于不败之地,也没有义务培训你,送你参加各种会议或给你买各种书籍充电。这些都是你自己的事。
    你应该计划每周工作60小时。前40小时是给雇主的,后20小时是给自己的。在这剩余的20小时里,你应该看书、练习、学习,或做其他能提升职业能力的事情。

    1.4.1 了解你的领域

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

    • 设计模式。必须能描述GOF书中的全部24中模式,同时还要有POSA书中的多数模式的实战经验。
    • 设计原则。必须了解SOLID原则,而且要深刻理解组件设计原则。
    • 方法。必须了解 XP、Scrum、精益、看板、瀑布、结构化分析及结构化设计等。
    • 实践。必须掌握测试驱动开发、面向对象设计、结构化编程、持续结成和结对编程。
    • 工作 。 必须了解如何试用UML图、DFD图、结构图、Petri网络图、状态迁移图表、流程图和决策表。

    1.4.2 坚持学习

    软件行业的飞速改变,意味着软件开发人员必须坚持广泛学习才不至于落伍。
    不写代码的架构师必然遭殃,他们很快就会发现自己跟不上时代了;不学习新语言的程序员同样回遭殃,他们只能眼睁睁看着软件业一路发展,把自己抛在后面;学不会新规矩和新技术的开发人员更可怜,他们只能在日渐沦落的时候看着身边的人越发优秀。

    1.4.3 练习

    真正的专业人士往往勤学苦干,以求得则自身技能的纯熟精炼。只完成日常工作是不足以称为练习的,那只能算是种执行性质操作,而不是练习。练习,指的是在日常工作之余专门练习技能,以期自我提升。

    1.4.4 合作

    专业软件开发人员往往会更加努力地尝试与他人一起编程、一起练习、一起设计、一起计划,这样他们可以从彼此身上学到很多东西,而且能在更短的时间内更高质量的完成更多工作。

    1.4.5 辅导

    专业人士会视辅导新人为己任,他们不会放人未经辅导的新手恣意妄为。

    1.4.6 了解业务领域

    1.4.7 与雇主客户保持一致

    每次开发系统,都应该站在雇主的角度来思考,确保开发的功能真正能满足雇主的需要。

    1.4.8 谦逊


    2 说“不”

    专业人士敢于说明真相而不屈从于全是。专业人士有勇气对他们的经理说“不”。
    奴隶没有权利说“不”,劳工或许也对说“不”有所顾虑,但是专业人士应该懂得说“不”。

    对于无法完成的需求,要如实反映情况,要勇敢说不。在明确无法在规定时间内完成需求的情况下,承诺“尝试”是一种不诚实的表现。


    3 说“是”

    3.1 承诺用语

    做出承诺,包含三个步骤:

    1. 口头上说自己将会去做;
    2. 心里认真对待做出的承诺;
    3. 真正付诸行动。

    3.1.1 缺乏承诺的征兆

    “需要/应当”,“希望/但愿”,“让我们”(而不是“让我”)

    3.1.2 真正的承诺听起来是怎样的

    “我 将在...之前...”
    对自己讲过做某件事做了清晰的事实称述,而且还明确说明了完成期限。


    4 编码

    不要在太疲惫的时候编码。
    不要在焦虑、情绪不稳定的时候编码。
    不要禁不住诱惑盲目冲刺。


    9 时间管理

    9.1 会议

    9.1.1 拒绝

    受到邀请的会议没有必要全部参加。你应该理智地使用时间,谨慎选择,应该参加哪些会议,礼貌拒绝哪些会议。

    9.1.2 离席

    如果发现参加某个会议是在浪费时间,就应当像个礼貌的办法退出来。
    继续参加对你没有太多意义的会议,是不专业的行为。

    9.1.3 确定议程与目标

    为了合理使用与会者的时间,会议应当有清晰的议程,确定每一个议题所话得时间,以及明确目标。

    9.1.4 立会

    1. 昨天干了什么;
    2. 今天打算干什么;
    3. 遇到了什么问题;
      每个问题20秒,总共1分钟之内。

    9.1.5 迭代计划会议

    9.1.6 迭代回顾和Demo展示

    9.1.7 争论/反对

    如果观点无法在短时间(5-30min)里达成一致,就永远无法达成一致。唯一的出路,就是用数据说话。


    10 预估

    10.2 PERT

    计划评估技术(PERT,Program Evaluation and Review Technique)
    三元分析法:

    • O:乐观预估。
    • N:标称预付。概率最大的数字。
    • P:悲观预估。最糟糕的数字。
      任务期望完成时间: μ = (O + 4n + P) / 6
      任务的概率分布标准差:σ = (P - O) / 6

    相关文章

      网友评论

          本文标题:《代码整洁之道 程序员的职业素养》

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