代码整洁之道:程序员的职业素养
享受职业素养
你遇到的问题可能很容易也可能很难,但我看重的并不是问题的难度,而是解决问题的方式,步骤以及反思的程度。恢复误删数据,对很多人来说是非常简单的任务。但我更感兴趣的是怎么分析问题,找了怎样的资料,采取了怎样的步骤,此后做了哪些措施来避免这种错误发生。与问题本身的难度相比,解决问题的方式、步骤以及反思的程度,才能体现一个人的基本素养。
你对自己将会做某件事做了清晰的事实陈述,而且还明确说明了完成的期限。
有时候,获取正确决策的唯一途径,便是勇敢无畏地说出”不“,我们要明白,委屈专业原则以求全,并不是问题的解决之道。
花三分的力气去抵制无理的需求,可以节省十分甚至二十分的开发时间。
东西花在纸上与真正做出来是不一样的。头脑想的与写下来的也是不一样的。
知行合一
美的系统是灵活的、易于理解的、构建、维护它们是一种快乐。
要用于承担作为一名手艺人和工程师所肩负的重大责任。这种责任包括要努力工作,出色完成任务,要擅长沟通,能够就事论事,要管理好时间,能够坦然面对艰难的决策。
没有人能够随随便便成功。
第一章 专业主义
清楚你要什么
专业人士如果犯了错,只好自己收拾残局。
专业主义的精髓就在于将公司利益视同个人利益。
担当责任
我曾因不负责任尝尽了苦头,所以明白尽职尽责的重要意义。
我意识到没有对例行程序进行测试就交付软件是不负责任的。为了如期交付产品,我忽略了测试环节。
不要破坏软件功能
开发的软件有bug就会影响软件的功能。因此,要做的专业,就不能留下bug。
要对自己的不完美负责。代码中难免会出现bug,但这并不意味着你不用对它们负责。没人能写出完美的软件,但这并不表示你不用对不完美负责。
要联系的第一件事就是”道歉“,诚实面对自己的过错。你不能一而再,再而三地犯同样的错误。职业经验多了之后,你的失误率应该快速减少,甚至趋近于零。失误率永远不能等于零,但你有责任让它无限接近于零。
把自己没把握的代码发送给QA,这么做本身就是不专业的。
要确信代码能正常运行:测试,一遍遍测试。实现自动化测试。
测试驱动开发:设计易于测试的代码,最好先写测试,再写要测试的代码。
你的自动化测试至少要让你能够知道,你的系统很有可能通过QA的测试。
下班后合理分配时间,你应该看书、练习、学习,或者做其他能提升职业能力的事情。
所谓术业有专攻,那也是需要投入时间去追求的。
不能铭记过去的人,注定要重蹈覆辙。
专业软件开发人员需要精通的事项:设计模式、设计原则、方法、实践、工件。
坚持学习,坚持练习:不懂就学,不要畏难。
学会与他人合作。
教学相长:想迅速牢固地掌握某些事实和观念,最好的方法就是与你负责指导的人交流。
了解业务领域:专业软件开发人员有义务了解自己开发的解决方案对应的业务领域。如果编写财务系统,就应该对财务领域有所了解。如果编写旅游应用,就需要去了解旅游业务。
雇主的问题就是你的问题。你必须弄明白这些问题,并寻求最佳的解决方案。每次开发系统,都应该站在雇主的角度来思考,确保开发的功能真正能满足雇主的需求。
谦虚:不会因别人犯错就对之横加贬损,因为他知道,自己可能就是下一个犯错的人。
第二章 说“不”
能就是能,不能就是不能。不要说“试试看”–尤达
专业人士敢于说明真相而不屈服于权势。专业人士有勇气对他们的经理说不。
面对艰难决定,直面不同角色的冲突是最好的办法。
关键的是找到共同目标,这有助于协商。
具备团队精神:恪尽职守,当其他队员遭遇困境时,要伸手援助。
第三章 说“是”
承偌用语:口头上说、心理认真、付诸行动。
代码必须经过测试,代码必须要有对应的测试代码。要确保代码清晰整洁,而且必须确保没有影响到系统的其他部分。
第四章 编码
要精通掌握每项技艺,关键都是要具备“信心”和“出错感知”的能力。
做好准备:
1.代码必须能够正常工作。
2.代码必须能够帮你解决客户提出的问题。
3.代码必须要能够和现有的系统结合。
4.通熟易懂的代码。
精心锤炼代码,使它能够表达你的编程意图。
如果你感到疲劳或者心烦意乱,那就停下来,不要编码。
要确保自己已经将睡眠、健康和生活方式调整到最佳状况,这样才能做到在每天8小时工作时间内全力以赴。
礼貌地表现出乐于助人的态度才是专业的态度。
创造性输出依赖于创造性输入。
保持节奏:保持适合自己的节奏,切勿操之过急。
有时候解决一个问题最好的方法,就是不去解决。
管理延迟的诀窍:早期检测和保持透明。
期望:坚守原则,不要轻易松口退让。不要让其他任何人对此抱有期望。
帮助他人:能够随时帮助别人。要清楚团队伙伴的状态。如果有人看起来遇到了麻烦,就应该向他提供帮助。
接受他人的帮助:如果有人向你伸出援手,要诚挚接受,心怀感激地接受帮助并诚意合作。
要学会如何请求帮助,学会如何提问。
第五章 测试驱动开发
TDD的三项法则:
1.在编好失败单元测试之前,不要编写任何产品代码。
2.只要有一个单元测试失败嘞,就不要再写测试代码;无法通过编译也是一种失败的情况。
3.产品代码恰好能够让当前失败的单元测试成功通过即可,不要多写。
TDD的强大之处:拥有一套值得信赖的测试。
第六章 练习
想要变现优异,就需要投入大量时间练习。
无论是搏斗还是编程,速度都来源于练习。
练习者不是在解决真正的问题,因为你已经知道解决方案。想法,你是在练习解决这个问题所需要的动作和决策。
开源:保持不落伍的一种方法就是为开源项目贡献代码。
第七章 验收测试
关于需求的沟通是极其困难的,其中会出现各种问题。
需求是一定会变化的,所以追求那种精确性是徒劳的。
验收测试的目的是沟通、澄清、精细化。
身为专业开发人员,与编写测试的人协商并改进测试时你的职责。
第八章 测试策略
业务人员编写针对正常路径的测试,而由QA编写针对极端情况、边界状态、异常路径的测试。
测试体系:单元测试、组件测试、集成测试、系统测试、探索式测试。
第九章 时间管理
为时间负责的只有你自己。
凡是不能在5分钟内解决的争论,都不能考辩论解决。
睡眠:睡眠的重要性怎么强调都不为过。
恢复:在你不集中注意力的时候,注意休息恢复。
锻炼:肌肉注意力有注意改善心智注意力,而且不仅仅是简单的恢复。
番茄工作法:根据合适自己的时间进行调整。
管理好自己的时间和注意力。
第十章 预估
预估是非常容易出错的,控制错误的办法之一就是使用大数定律。把大任务拆分为小任务,分开评估在汇总。
一些预估方法,需要了解的自行阅读书本。
第十一章 压力
在压力下保持冷静的最好方式,便是规避会导致压力的处境。
让系统、代码和设计尽可能保持整洁,就可以避免压力。
不要惊慌失措:正确应对压力。长夜漫漫无心睡眠,无助于更快地解决问题。呆坐着烦躁不安也于事无补。要放松下来,对问题深思熟虑。
及时沟通:让你的团队和主管知道你正身处困境之中。
当事情十分困难时,要坚信你的纪律原则。
应对压力的诀窍:能回避压力时尽可能地回避,当无法回避时则勇敢直面压力。可以通过慎重承诺、遵循自己的纪律原则、保持整洁来回避压力。直面压力时,要保持冷静,多与人沟通,坚守自己的原则纪律,并寻求他人帮助。
第十二章 协助
单打独斗和游离于团队之外都是不专业的表现。
深刻理解业务目标,清晰的知道直接负责业务的价值。
明确团队的短期目标和长期目标。
学会交流。
第十四章 辅导、学徒期与技艺
学校中所学的内容与在工作中的实际需要通常会有巨大的差异。
通过阅读、研究、练习、实践和教学来维持自身的技术水平。
工具
源代码控制、锁、集成开发环境与编辑器、单元测试工具、组件测试工具、集成测试工具。
没有希望,则没有改变。
原文链接