一、注重实效的途径
早期的采纳者 / 快速的追随者
介绍了在技术采用上的两种角色。早期的采纳者勇于尝试新技术,能够在新技术还未完全成熟时就开始使用,从而获得先发优势,如可能会因新技术的应用而带来创新的解决方案,但也承担着技术不稳定、文档不完善、缺乏足够支持等风险。快速的追随者则会等技术经过一定验证后再采用,他们能利用早期使用者的经验,降低风险,不过可能会错过一些早期的机会。
正确的工具
强调工具的选择要以项目和团队的需求为导向。不同的项目规模、性质和团队的技术水平、开发流程等因素都决定了工具的适用性。不能盲目追求新工具或者流行工具,而是要综合考虑其是否能真正帮助提高开发效率、保证项目质量。
基本工具
阐述了文本编辑器和版本控制系统这两个基本工具的重要性。合适的文本编辑器可以通过掌握其高级功能(如搜索替换、宏录制等)来提升代码编辑效率。版本控制系统(如 Git)对于代码版本管理、团队协作(包括代码回溯、分支管理等)至关重要。
二、务实的哲学
你的知识组合
指出程序员的知识组合包括技术知识(编程语言、算法、数据结构等)和领域知识(如金融、医疗、电商等行业知识)。强调在开发特定领域的软件时,需要将两者结合起来,并且要持续更新知识,以适应不同项目和技术的发展变化。
交流与合作
再次强调交流在编程中的重要性,包括和团队成员、用户、项目经理等人员的沟通。良好的交流能确保准确理解需求、合理安排项目进度和资源分配。同时,合作可以促进代码复用和知识共享,有助于提高团队整体开发效率。
三、你的技术工具箱
纯文本的威力
提倡使用纯文本存储数据和配置信息。因为纯文本具有可读性强、易于编辑和版本控制等诸多优势,相比二进制文件,更方便人类理解和处理,适用于多种场景,如配置文件、代码文件等。
shell 游戏
介绍了 shell 的强大功能,包括自动化任务、文件操作和系统管理等。掌握 shell 脚本编程可以提高工作效率,如用于批量处理文件、自动化部署等工作场景。
强大的文本处理工具
讲述了如 grep、sed、awk 等文本处理工具的用途和用法。这些工具能够在文本文件中进行高效的搜索、替换、过滤等操作,有助于节省处理文本数据的时间,提升开发和维护工作的效率。
四、当你编码时
需求之坑
着重强调了理解需求的重要性和需求的不确定性与易变性。程序员不能仅依赖初始的需求文档,要在开发过程中与用户等相关人员保持沟通,及时了解需求的变更,否则可能导致开发出不符合用户实际需求的软件,造成资源浪费。
怎样配平资源
探讨了在项目开发中合理分配时间和精力等资源的问题。要根据项目优先级和重要性来安排对不同功能模块的开发和优化时间,避免过度关注局部而忽视整体平衡,确保从项目整体目标出发,合理分配资源。
邪恶的重复
指出代码重复是软件开发中的常见问题,会导致代码维护困难和出错概率增加。要通过提取公共代码、使用函数和模块等方式避免代码重复,以此提高代码的可维护性。
正交性
阐述了正交性概念,即系统各组件应相互独立,修改一个组件不应影响其他组件。设计软件时遵循高内聚、低耦合原则可以实现正交性,使系统易于理解、测试和维护。
五、重构
重构的定义和重要性
重构是指在不改变软件外部行为的前提下,对软件内部结构进行改进的过程。它对于提高代码的可读性、可维护性和可扩展性非常重要,能够使代码更好地适应新的需求和功能扩展。
何时重构
可以在代码出现诸如重复、复杂度过高、可读性差等问题(即代码异味)时进行重构,也可以在添加新功能或修复 bug 的同时顺便重构。持续的小幅度重构比一次性大规模重构风险更低,对项目进度的影响也更小。
如何重构
介绍了提取函数、重命名变量、简化条件表达式等重构方法和技巧。同时强调重构过程中要进行充分测试,确保重构后的代码功能正确,可以借助自动化测试工具提高测试效率。
六、调试
调试的心态
强调在调试过程中要保持冷静和耐心,以科学的方法和积极的态度寻找问题根源。将调试视为学习和理解系统的机会,而不只是解决问题的过程,这有助于提升编程能力和问题解决能力。
Bug 的分类
将 Bug 分为认知错误(对问题理解有误)、遗漏错误(代码实现不完整)和疏忽错误(如拼写错误、语法错误等简单错误)。了解 Bug 类型有助于更有针对性地进行调试。
调试的方法
介绍了打印调试信息、使用调试器单步调试、分析日志文件等多种调试方法,并且说明要根据具体情况选择合适的调试方法。
七、在现实世界中编程
处理遗留代码
遗留代码是已有的、可能文档和结构都不完善的旧代码。处理遗留代码要谨慎,首先要理解其功能和逻辑(可以通过阅读代码、运行测试等方式),然后逐步改进和维护,必要时进行重构,但要注意控制风险,避免引入新问题。
代码的产权问题
强调在软件开发中要遵守法律法规和道德规范,尊重代码的产权。在使用开源代码时要了解许可证和使用条款,确保合法合规;同时要保护自己的代码产权,按规定管理和保密公司内部代码。
最后期限的压力
探讨了项目最后期限带来的压力和应对策略。面对最后期限,要合理规划时间,优先处理重要任务,避免过度承诺。采用敏捷开发等方法可以提高开发效率,更好地应对变化,减轻最后期限的压力。