《程序员修炼之道:从小工到专家》The Pragmatic Programmer: From Journeymen to Master

《程序员修炼之道:从小工到专家》The Pragmatic Programmer: From Journeymen to Master

Chapter 1: A Pragmatic Philosophy

实用主义的编程源自于一种务实的哲学思想,这章为这些哲学思想奠定基础:

  1. The Cat Ate My Source Code :对你自己、你的职业规划、你的工以及具体的项目负责。除了尽最大的努力做好的你的本职工作,你还要考虑你没有考虑全面的会出错的场景【如果磁盘坏了,但你却没有备份代码,你的错;】。当错误发生时,不要说无用的借口,而是第一时间思考并提供解决方案
  2. Software Entropt(熵):同理破窗效应,如果你的项目代码中只要有一处“破窗”,那么你的项目将会渐渐变烂。所以,不要容忍一处“破窗”【劣质的设计、错误的决定、代码等】。
  3. Stone Soup and Boiled Frogs:可能有一种情景:你有一个好的建议或想法,但是在这之前你需要一些列繁琐的请求步骤(获得批准以及流程冗长拖沓,预算等等),这可以定义为“启动疲劳(start-up fatigue)”。不要惰于踏出那一步,Be a Catalyst(催化剂) for Change。同时,工作的时候眼光不要太狭隘,Remember the Big Picture,不要闷头打代码,项目进度如何,需求是否准确等全局性问题要把握好,确保你在正确的方向上。
  4. Good-Enough Sothware:让你的用户参与到项目的协定中;原型开发模式给用户更多体会,用户才能给出更多的反馈。用户要的功能才是需求,不然功能写得多好也是画蛇添足。
  5. Your Knowledge Portfolio:软件行业,技术更新飞快,要想有一个成功的职业生涯,你必须管理好你的知识技术栈。
  • 构建自己的知识技术栈:T型人才、不断完善填充自己的技术栈。
  • 目标:每年学一门新语言、每季度看一本技术书、也要看非技术的书、参与到当地的一些群组中、体验不同的开发环境、保持对最新技术的关注等。
  • 对你看到的听到的保持批判性思考。
  1. Communicate!:理解透彻你想说的、了解你的听众(你想他们知道什么,他们对什么感兴趣、他们能够接收怎么的复杂信息、他们想了解多深入、如何吸引他们了解你要说的......等)、选择合适时机、选择合适的方式、适度包装、让用户事前参与、懂得聆听、给予他人反馈

Chapter 2 : A Pragmatic Approach

在开发过程中谨记这些基本原则,你的代码将会变得更健壮、更快速,更简洁。

  1. The Evils of Duplication:当同样的代码在你的程序中出现两次时,如果你更改其中一个,以必须得记得更改另一个,但问题就是,你通常都会忘记。
  • Imposed Duplication
  • Inadvertent Duplication
  • Impatient Duplication:shortcuts make for long delays,有时候贪图方便直接复制黏贴,那你肯定有自食其果的一天。
  • InterDeveloper Duplication
  1. Orthogonality(正交,即高内聚,低耦合):消除不相关代码模块之间的影响;以下是一些可以在你的工作中应用的规范:
  • Project Teams:分工明确;
  • Design:模块化;
  • Toolkit and Libraries:当引入第三方工具包时,要小心保持系统的正交性;
  • Coding:避免全局数据(多线程时数据的更改);避免类似的函数方法。
  1. Reversibility
  • Reversibility:在技术选择或者工具选择的时候,永远不能想当然地以为只有一种实现方式从而将代码写得耦合过高,随着未来项目技术的开展,很多工具都可能会被替换,例如数据库;因此,如果你在设计时谨记可逆转性原则,你就会将数据库抽象成提供一个持久化的服务,这样你就可以灵活的更换数据库而不需要做出过多不必要的修改;There are no Final Decisions
  • Flexible Architecture
  1. Tracer BulletsUse Tracer Bullets to Find the Target,其实跟迭代开发的思想;类似原型开发,却不是;
  2. Prototypes and post-it notesPrototype to Learn
  3. Domain Lanuages
  4. EstimatingEstimate to Avoid Surprises。你要培养对你的工作量估算完成时间的能力。
  • How Accurate Is Accurate Enough?
  • Where Do Estimates Come From?

Chapter 3 The Basic Tools

  1. The Power of Plain TextKeep Knowledge in Plain Text
  2. Shell GamesUse the Power of Command Shells
  3. Power EditingUse a Single Editor Well
  4. Source Code ControlAlways Use Source Code Control
  5. DebuggingFix the Problem ,Not the BlameDon't Panic When Debugging
  6. Text ManipulationLearn a Text Manipulation Language
  7. Code GeneratorsWrite Code That Writes Code

Chapter 4 Pragmatic Paranoia

  • Design by Contract:输入输出是否符合规范。
  • Dead Programs Tell No LiesCrash Early
  • Assertive ProgrammingIf It Can't Happen ,Use Assertions to Ensure That It Won't
  • When to Use ExceptionsUse Exceptions for Exceptional Problems,Error Handlers Are an Alternatve
  • How to Balance ResourcesFinish What You Start

Chapter 5 Bend or Break

  • Decoupling and the Law of DemeterMinimize Coupling Between Modules
  • MetaprogrammingConfigure,Don't IntegratePut Abstractions in Code,Details in Metadata.。

Kotlin 开发者社区

《程序员修炼之道:从小工到专家》The Pragmatic Programmer: From Journeymen to Master

国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。

越是喧嚣的世界,越需要宁静的思考。