theme: awesome-green
这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战 本系列共 5 篇,通译自:97-things-every-x-should-know License:由 CC BY-SA 3.0 获得许可; 欢迎点赞、收藏、评论~ O(∩_∩)O
- 本瓜并未逐字逐句翻译,而是取其精要、理解抽象,结合自身进行撰文表达,与各位看官分享。认知好的编程概念,走向优秀~
- 《程序员优秀之路:认知 97 个好的编程概念(1)》
- 《程序员优秀之路:认知 97 个好的编程概念(2)》
- 《程序员优秀之路:认知 97 个好的编程概念(3)》
(痛定思痛,前 3 篇翻译阅读量愈来愈差,每篇 20 小点,通常撰文每小点耗时 10 至 15 min,通篇下来需 3 ~ 5h。时间花费了,但效果甚微,反思这些编程概念、建议点是否过于冗长、空泛,于是转换思路,加大凝练力度,完成大于完美!)
代码告知真相
这位作者想说:
- 代码才能清楚的告诉别人你的真实意图,需求文档都不一定能说明全部真相;
- 注释只是辅助功能,别打算用注释来代替代码进行说明;
- 写代码要像写诗一样,精心去表达;
负责构建
这位作者想说:
- 项目的构建脚本也要一直去维护;
- 构建过程应该由研发团队负责,而不是给测试团队或其它“质量保障”团队;
- 充分了解构建过程,太重要了;结对编程
这位作者想说:
- 全身心的一人编程很难实现,有太多中断和干扰;
- 尝试结对编程,促进交流、团队融合,取长补短,共同进步;
- 结对编程,让新同事快速上手;(真会玩~)精确定义类型
这位作者想说:
- 举了个真实例子:一个卫星因为程序单位计算错误导致失联;
- 使用静态类型语言,编译器可以做检查;使用动态类型语言,则依赖单元测试;
- 精确定义变量的类型(自定义类型),而不仅仅是使用原始类型 String 或 Float 等;避免报错
这位作者想说:
- 用户错误的使用程序而造成报错,这些情况是能预测,并采取措施进行避免的;
- 提供有效的提示能避免用户操作报错;
- 系统需零容忍错误,反思交互,甚至重新设计;
专业程序员
这位作者想说专业程序员:
- 第一特质是:责任感;
- 第二特质是:团队合作;
- 第三特质是:不容忍错误;
- 第四特质是:手艺人、代码干净;版本控制
这位作者想说:
- 所有内容都需置于版本控制之下(源代码、文档、构建脚本、测试用例、第三方库等);
- 版本控制让一些行为可追踪;
- 版本控制减少开发之间的摩擦、冲突;
- 版本控制让团队更高效;放下鼠标离开键盘
这位作者想说:
- 当你想问题几个小时都不能解决,应该放下鼠标离开键盘,出去换换脑子;
- 换换脑子之后能有更多创意性的解决想法;
阅读代码
这位作者想说:
- 程序猿喜欢写代码,但是不喜欢读代码;
- 思考代码如何易读?
- 想提高编程技能,可以通过阅读代码实现;学习人文
这位作者想说:
- 程序的工作往往不是单纯的写代码,不可避免要与人打交道;
- 学习人文知识能提升你的思维;
造轮子
这位作者想说:
- 别急着否定重复造轮子的行为;
- 重复造轮子可以帮助你对工作原理有更深的理解;
- 重复造轮子更重要的意义是训练、获得经验;
慎用单例模式
这位作者想说:
- 单例模式确实简单,但是实际弊大于利,它不利于可测试性、可维护性;
- 单例模式易造成代码单元的隐式依赖,造成耦合;
- 单例模式不利于单元测试;
- 下次当你考虑实现或访问一个单例时,请再想一想;代码炸弹
这位作者想说:
- 高度耦合的代码都是代码炸弹;
- 有很多方法可以衡量和控制代码的耦合度和复杂度;
- 衡量耦合有两个指标:扇入和扇出;
- 借助这些指标来进行调优;还原代码
这位作者想说:
- 可以通过还原代码来理清混乱;(此小点与前文提过的“用删除来改进代码”契合)
单一职责
这位作者想说:
- 单一职责原则是良好设计的基本原则之一;
- 它表示一个子系统、模块、类,甚至是一个函数,不应该有多个改变的理由;
- 善用单一职责,将因不同原因而改变的事物分开,可创建具有可独立部署的组件结构。从 yes 开始
这位作者想说:
- 将观点从 no 转变为 yes,再开始工作;
- 当别人说了一个荒谬得观点,你先别急着说 no,可以先问一下 why ?
- yes 代表着合作;
自动化
这位作者想说:
- 可重复得行为都能应用自动化;
- 自动化不仅用于测试;
- 在 IDE 中也要自动化;
- 自动化操作并不神秘;
- 学习自动化可以边做边学;利用代码分析工具
这位作者想说:
- 测试只是提高代码质量的众多工具之一;
- 利用其它代码分析工具,比如 lint 等;
- 可以尝试自己自定义代码分析工具;测试必需的行为
这位作者想说:
- 测试陷阱之一就是:测一些偶然的行为,与功能无关的行为;
- 测试需精确、准确;
- 测试需对被测单元的接口进行约定,测试行为与所需行为保持一致;
精确而具体地测试
这位作者想说:
- 测试基本行为而不是附带行为;
- 测试需要精确、准确;(与上一小点契合)
空余时进行测试
这位作者想说:
- 测试服务器应该利用起夜间和周末等空闲时间;
- 长时间运行的测试对于识别内存泄漏和其他稳定性问题至关重要;
- 当然,这些前提都是已经应用了自动化测试;
小感:虽然每个人的建议都不尽相同,但读完后似乎都指往相同的方向 —— 如何在程序员这个岗位上做的更好!有些小点还是挺有感触的,适合深挖。有些“共识”可能在大家看来已经是“共识”,而我则刚刚知道~共勉。
OK,以上便是系列第 4 篇分享(共5篇),关注专栏,系列持续追踪~ 我是掘进安东尼,输出暴露输入,技术洞见生活,下次再会~