注重实效的开发之路

《程序员修炼之道》这本书,算是计算机界的畅销书了,本书的价值是向你展示了最佳实践,无论新手还是老手,阅读中都会产生共鸣。正如书的封底所言,阅读本书,你将会:

  • 与软件腐烂作斗争;
  • 避开重复知识的陷阱;
  • 编写灵活、动态、可适应的代码;
  • 防止考巧合编程;
  • 通过合约、断言及异常使你的代码“防弹”;
  • 捕捉真正的需求;
  • 无情而有效的测试;
  • 让你的用户满意;
  • 建立注重实效程序员的团队,并且通过自动化使你的开发更严谨。

以需求为导向的开发

对于一个企业,唯一关心的是如何增加收入,降低成本。企业需要的并不是程序员,而是能够帮它们完成可以增加收入、降低成本的项目的人。花了很多时间,开发出来的产品,没有市场,那么企业难以在激烈的市场竞争中存活。

面向需求的开发,是软件开发的一条基本准则。

在项目开发中,很容易出现搜集需求、编写需求文档和系统交付割裂的情况,这难以快速的响应市场需求。实际上,需求手机、设计、以及实现,是交付高质量系统的不同方面,所有的步骤并非孤立的,采用瀑布模型进行开发,耗时、灵活度不足等问题,敏捷开发的兴起,解决了瀑布模型的弊端。

以需求为导向的开发,意味着项目更加靠近问题。

无论是用于配置和控制应用程序的简单语言,还是用于指定规则或过程的更为复杂的语言,你都应该考虑让你的项目更靠近问题领域。通过在更高的抽象层面上编码,你获得了专项解决领域问题的自由,并且可以忽略琐碎的实现细节。

注重实效的开发

软件开发需要实现时间、成本、范围三者的平衡,需要作出取舍,从而保证实效。在软件开发过程中,开发易于理解和维护的唯一途径是DRY原则—“系统中的每一项只是都必须具有单一、无歧义、权威的表示”。

我们想要在编写代码的时间更少,想要在开发的早期避免错误,需要进行深思熟虑的编程,遵循以下原则:

  • 总是意识到你在做什么,不要盲目编码,试图构建你不完全理解的应用,或者你不熟悉的技术。
  • 依靠可靠的事物,不要依靠巧合和假定,如果无法说出各种特定情景的区别,就假定是最坏的。
  • 为你的假定建立文档,有助于澄清你头脑中的假定,并且有助于把它们传达给别人。
  • 不要只是测试你的代码,还要测试你的假定,编写断言测试你的假定。
  • 按照计划行事,工作进行优先级排序,把时间花在重要的方法:很又可能,它们是最难的部分。
  • 不要作历史的奴隶,不要让已有的代码支配将来的代码,如果不适用,所有的代码都可被替换。

优雅的代码,简洁、抽象程度高,当代码不满足新的运用场景时,不要犹豫对其进行重构。重构是对代码进行重写、重做和重新设计。重构的场景包括:代码违背了DRY原则(单一、无歧义、权威的表示);非正交设计;代码过时,或者需求变了,原有代码难以满足新的运用情景;需要改善性能。

选择恰当的工具

一个趁手的工具很一个不趁手的工具相比,产生的价值差距不是1倍、2倍,而是百倍、千倍。

从开发语言、编辑器到Shell等等工具。工具并非越多越好,更重要的是熟练度和长时间适用性。

印象比较深刻的是作者提到的使用纯文本写文件。纯文本是指没有对文本进行任何修饰,没有任何粗体,下划线,斜体,图形,符号或特殊字符及特殊打印格式的文本。常见的纯文本格式文件的扩展:txt、htm、asp、bat、c、bas、prg、cmd、log等。与纯文本相对的富文本格式(Rich Text Format)即RTF格式,比如word。HTML则则超文本标记语言,通过一系列标签,可以将要网络上的文字格式统一。纯文本是最简单的文件,任何编译器都可以打开编辑,兼容性极强。坏处是文本过大,访问速度过慢。

依然是首选的职业

注重实效程序员身上有一些特质,比如:

  • 好奇心重。对任何事物保持好奇,喜欢研究新的东西。

  • 独立思考。批判性思维能力强,不人云亦云,不拘泥于规则,能够打破常规寻找解决方法。

  • 接地气。能从现实角度考虑问题,平衡预算,知道工作中最重要的事情,集中力量解决。

保罗 · 格雷厄姆在《如何创造财富》一章中提到致富的方法是创立公司。当然创立公司的失败率非常高,并不适合所有人,创业公司的本质是以小团体的形式满足客户需求,在大公司工作可以理解为个体集中在一起共同满足客户需求。自然而然的,要想致富,工作应当是可测量、可放大的。

  • 可测量量。个人的回报应体现在为客户创造了多大价值,但是在大公司中个人工作无法分开测量,显然不具有可测量性。可测量性工作的理想状态是小团体及工作对组织的依赖性不强。
  • 可放大。流水线上计件工资可以测量,但是依然无法带来个人财富,因为工作性质不具有可放大性。

那么哪些行业、哪些职位的工作成果更具有上述两个特性呢?主要集中在知识密集型行业(高科技行业)、设计行业、程序员、公司高层,其本质是能以小团体形式服务客户,可借助外界资源放大该优势。

从保罗 · 格雷厄姆的回答中可以看出,程序员依然是首选的职业。虽然996、秃顶等词语是大众对程序员的刻板印象,但程序员却是少有的高薪行业,工资的起点已经是很多行业的天花板了。更重要的是,程序员使用的语言是国际化的,其信息流动性,远远高于传统行业。

End.