移动开发技术前沿iOS && AndroidiOS学习笔记

《程序员的职业素养之代码整洁之道》成为专业人士必读

2017-06-12  本文已影响319人  奥卡姆剃须刀
程序员的职业素养之代码整洁之道

此处悼念1986年1月28日挑战者号航天飞机事故中丧生的七名优秀的宇航员

接下来大家带着以下问题去阅读此书《程序员的职业素养之代码整洁之道》
也可以阅读此文章 本人尽可能将书中精华总结于此文章中

一 专业主义

1.1 专业主义

专业主义的精髓就在于将公司利益视同个人利益.也就是意味着担当责任

1.2 担当责任
1.3 首先不行损害之事
1.4 职业道德

你应该计划每周工作60个小时, 前40个小时是给雇主的,后20个小时是给自己的, 在这剩余的20个小时里 ,你应该多看书, 练习, 学习, 或者做其他能提升职业能力的事情

二 说 "不"

能就是能 不能就是不能 不要说"试试看" ----尤达

专业人士应该懂得说"不" 事实上 优秀的经理人对于敢于说"不"的人总是求贤弱渴 因为只有敢于说 "不" 的人 才能真正做成一些事情

2.1 对抗角色

你的经理要求你在明天之前完成登录页面 这就是他在追求和捍卫的一个目标 那是进他的职责.如果你明知第二天之前不可能完成登录页面 嘴上却说"好的 我会试试的" 那么你就是失责了 这时候 尽职的文艺选择是说"不 . 这不可能"

2.2 高风险时刻

越是关键时刻 "不"字就越有价值
这一点应该不证自明 当公司存亡成败皆系于此时 你必须尽己所能 把最好的信息传递给你的经理 这往往意味着要说"不"

2.3 要有团队精神

有团队精神的人会频繁与大家交流 会关心队友 会竭力做到尽职尽责

三 说 "是"

3.1 承诺用语

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

如果你能够一直信守承诺 ,大家会以为你是一名严谨负责的开发人员 在我们这行中 也是最有价值的评价了

3.2 学会如何说 "是"

和学会说 同样重要的是 要学会说

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

四 编码

4.1 做好准备

编码是一项 颇具挑战也十分累人的智力活动 相比其他类型的活动 编码要求更加聚精会神 因为在编码是你必须平衡互相牵制的多种因素
如果感到疲劳或者心烦意乱,千万不要编码 相反要找到一种方法来消除干扰 让心绪平静下来

4.2 流态区

这是程序员在编写代码时会进入的一种意识高度专注 但思维视野却会收拢到狭窄的状态.在这种状态下,他们会感到效率极高;在这种状态中他们会感到"绝无错误" 因此他们一直苦苦追求进入这种状态 并经常以能在那种状态下 维持多久来衡量自我价值

4.3 阻塞

有的时候.就是死活写不出代码.我自己就曾经遇到过,也看到其他人身上遇到过这种情况,干坐在电脑前什么也写不出
这里有个简单的好的方法可以解决这个问题, 这个办法屡试不爽,既简单易行,有能够帮助你写出很多代码,那就是:找个搭档结对编程

4.4 保持节奏

软件开发是一场马拉松,而不是短跑冲刺.你无法全程一直以最快的速度冲刺来赢得比赛,只有通过保存体力和维持稳定节奏来取胜.

4.5 进度延迟

管理延迟的诀窍就是早期检测和保持透明 要根据目标定期衡量进度,使用三个考虑到多种因素的期限:乐观预估,标称预估,悲观预估

4.6 帮助

编程绝非易事 编程很难 事实上 仅凭一己之力无法写出优秀的代码.即使你的技能格外高超,也肯定能从另外一名程序员的思考与想法中获益

4.7.1 帮助他人

因此互相帮助是每个程序员的职责所在,作为专业人士,要以能够随时帮助他人为荣

4.7.2 接受他人的帮助

如果有人向你伸出援手,要诚挚接受,心怀感激的接受帮助并诚意合作,不要死命的护住自己的地盘 拒绝别人的帮助

五 测试驱动开发(TDD)

5.1 TDD 的三项法则
5.2 TDD 的优势
5.3 TDD 的局限

尽管 TDD 有诸多优点,遵循这三个法则并不能担保一定会带来上述好处, 及时做到了测试先行, 仍有可能写出糟糕的代码.如果遵循某项法则会弊大于利,专业的开发人员就当然不会选用它

六 练习

专业人士都需要通过专门训练提升自己的技能
此节主要讲的就是要不断地练习 就像弹钢琴一样, 要想自如弹奏,乐手需要反复的弹奏音节,各种练习曲,重复的节奏,直到烂熟于心.要相信10000小时定律

七 验收测试(沟通的重要性)

专业开发人员既要做好开发,也要做好沟通

7.1 需求的沟通

PM 和 RD 之间最常见的沟通就是关于需求了的 PM 描述他们认为自己需要的东西, RD 按照自己理解的业务放表达的需求来开发, 至少理论上是这样的,但是在现实里 关于需求的沟通是极其困难的,其中会出现各种问题

7.2 验收测试
7.3 结论

要解决开发方和业务方的问题,我所知道的唯一的解决办法就是编写出无可挑剔的需求文档

八 测试策略

每个专业的开发团队都需要一套好的测试策略

8.1 QA 应该找不到任何错误

我们努力的目标应该是让 QA 应该找不到任何错误

8.2 自动化测试金字塔

拥有一套单元测试和验收测试的 同事 还需要更高层次的测试,这样 QA 才找不出任何错误 如下图

image.png

九 时间管理

八小时其实非常短暂, 只有480分钟 28800秒,身为专业开发人员,你肯定希望能在这短暂的时间里尽可能高效的工作,取得尽可能多的成果

9.1 会议

关于会议 有两条真理:
(1) 会议是必需的
(2) 会议浪费了大量的时间

专业的开发人员同样清楚会议的高昂成本, 他们同样清楚自己的时间是宝贵的,他们同样需要时间来写代码,来处理日程表上的事物,所以 如果会议没有现实且显著 的成效,他们会主动拒绝

9.2 注意力点数

编程是需要持续投入精力和注意力的智力活动.注意力是稀缺的资源,它类似魔力点数,如果你用光了自己的注意力点数, 必须花一个小时或更多的时间做不需要注意力的事情,来补充他

肌肉注意力有助于改善心智注意力, 而且不仅仅是简单的恢复, 我发现定期培训肌肉和注意力,可以提升心智注意力的上限. 比如我自己 我就会经常的跑步锻炼身体

9.3 时间拆分和番茄工作法

其基本思想很简单, 把厨房用的计时器(通常他们很想番茄) 设定到25分钟, 倒计时期间不要让任何事情干扰你的工作

9.4 死胡同

所有软件开发者都要遇到死胡同 比如你做了一个决定,选择了走不通的技术道路.你对这个绝地个越是坚持,浪费的时间就越多, 专业人员不会执拗有不让放弃也无法绕开的注意, 他们会保持开放的头脑来听取其他意见

9.5 泥潭

比死胡同更糟的是泥潭,泥潭会减慢你的速度,专业开发人员对泥潭的恐惧远远大于死胡同.他们会时刻留神显露出来的泥潭, 然后运用各种努力,尽早尽快的脱身,

9.6 结论

专业的开发人员会用心管理自己的时间和注意力, 他们知道优先级错乱的诱惑, 他们也珍视自己的声誉. 所以会抵制优先级错乱, 他们永远有多种选择,永远敞开心扉听取其他解决方案, 他们从来不会执拗于某个无法放弃的解决方案, 他们也时刻警惕着正在显露的泥潭,一旦看清楚 就会避开.

10 预估

预估是软件开发人员面对的最简单也是最可怕的活动之一了,预估影响到的商业价值巨大关乎声誉吗预估是也业务人员和开发人员之间最重要的障碍, 横亘在双方之间的种种不信任几乎都由他引发

10.1 什么是预估

问题在于 不同的人对预估不同的看法.业务方觉得预估就是承诺, 开发方认为预估就是猜测, 两者相差迥异

10.2 PERT 计划评审计划

简单的 PERT 计算说明了一种避免乐观预估的合理方法, 不管尝试加快进度的压力有多大, 专业开发人员都应当谨慎的设定合理的预估值

10.3 结论

专业的开发人员懂得如何为业务人员提供可信的预估结果,以便做出计划,如果做不到或者不确定能做到,专业开发人员不会给出承诺
一旦做出了承诺, 就会提供确定的数字, 按时兑现, 但是在大多数情况下, 他们都不会做这种承诺, 而是提供概率预估,来描述期望的完成时间及可能的变数

11 压力

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

11.1 避免压力

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

11.2 应对压力
11.3 结论

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

12 协作

大多数软件都是由团队开发出来的,当团队成员能够十分专业的互相协作时, 整个团队是最为高效的, 单打独斗与游离于团队之外都是不专业的表现

12.1 程序员与人

我们并非是因为喜欢和其他人一起工作才选择做程序员的, 我们都认为人人际关系难以应付而且毫无规律.编程用的机器则整洁,行为也可预见,如果可以一个人待在房间里数个小数沉浸在一些真正有趣的问题上, 那将会是最开心的时光

12.2 结论

也许我们不是因为通过编程可以和人互相协作才选择从事这项工作的, 但真不走运,编程就意味着与人协作.我们需要和业务人员一起工作,我们之间也需要互相合作.
如果我们真想终生能以编程度日,那么一定要学会交流 ,和大家交流

13 团队和项目

小项目该如何实施? 如何给程序员分派? 大项目有该如何实施?

13.1 只是简单混合么

让一个程序员把一半的时间投入到项目 A 中,把其余时间投入到项目 B 中,这并不可行,尤其是当这连个项目的项目经理不同,业务分析师不同,程序员不同,测试人员不同是,更不可行.这不是一个团队,只是从榨汁机中榨出的混合物而已

形成团队是需要时间的,团队成员需要先建立关系,他们需要学习如何互相协助,需要了解彼此的癖好,强项,弱项,最终才能凝聚成团队,
有凝聚力的团队确实有些神奇之处, 他们能够一起创造奇迹,他们互为知己,能够替对方着想, 互相支持, 激励对方拿出自己最好的表现,他们攻无不克

13.2 结论

团队比项目更难构建 .因此 组建稳健的团队,让团队在一个又一个项目中整体移动共同工作是较好的做法, 并且 团队也可以同时承接多个项目, 在组建团队是, 要给予团队充足的时间, 让他们形成凝聚力, 一直共同工作,成为不断交付项目的强大引擎

一周的零碎时间将此书读完并整理出每节重要内容,书中更多的是结合公司中实际例子来说明每一个点的重要性,希望每个开发都能成为像 bob 大叔一样厉害的人

上一篇 下一篇

猜你喜欢

热点阅读