我从别人遗留的的技术性债务中获得报酬。在我的日常工作中,我见到了很多难以维护的代码,并且我一次次地看到了很多相似的并可以避免的问题。 我专门从事调试、修改、维护、扩展遗留软件系统这类工作,我的典型客户一般都有一个或多或少可以运行的网站或者软件,但是其开发者都因为各种原因不 再维护了,因为商业需求改变导致软件无法跟上需求;或者我的客户有一些“几乎快要完成”的软件,但是因为预算用光或者计划有变与开发者分道扬镳。通常这种 软件会缺少一系列的功能并有一坨bug。 我那些客户通常被其他程序员告知,需要废弃已有的所有代码从头开始。大部分程序员不喜欢维护代码,尤其不喜欢维护别人开发的代码。当程序员写代码 时,当他们谈论到可维护性时,程序员经常会问一些错误的问题——想了解这种情况是如何发生的,请参看Matt Duvall的文章《可维护性的神话 | The myth of maintainability》。 以下是一些你可以在你自己的软件工程中做的“好”事,因为这些事可以帮我找到活干。
不要用版本控制软件我经常很惊讶的发现,在过去的几年里编写的大型软件工程竟然不在源代码版本控制中。如果你不使用版本控制,下一个承接你项目的程序员就没法确定哪些 文件属于你当前的系统,哪些是淘汰的以及哪些是备份文件,他也无法从提交信息或者修改日志中获得任何关于代码的历史信息。我在我的文章《面向卑鄙的编程介 绍 | Introduction to Abject-Oriented Programming》中,介绍了“如何不使用版本控制”。 大量定制你自己的开发环境 千万不要让承接你项目的程序员轻易的开始工作。开发软件时,一定要用特殊版本的编程语言、工具,确保它们与一起交付的操作系统有冲突。像疯子似的定 制你的Eclipse、VisualStudio或者vim环境,然后编写只能在你定制的环境下才能工作的宏或者脚本。不要制作硬盘镜像或者脚本以复制你 的开发环境,并且不要费劲巴拉写任何说明文档——这太直观啦。
创建一个精心制作的构建和部署环境把网站部署到一个测试或者产品服务器上的方法,应该看起来像这样:
程序员可以与简洁性和优雅作斗争,然后反过头构建精心制作的巴洛克式的构建和部署环境。这是一项不受控制的事,程序员可以在不面对客户的情况下,或 者项目经理不审查或者不理解的情况下完成,所以很容易失控。当你把八种不同的工具用不同的脚本语言链接起来时,记得不要写文档。
不要设置测试/分段平台修改产品系统是很令人兴奋地事。不要费劲巴拉的搭建测试/分段平台,相反要保留秘密登录入口和后门URL,以测试新的特性。把测试数据和真正的数据混合起来放到数据库中, 既然你不使用版本控制软件,保存软件旧版本的副本,以防万一。不要把日志信息插入到代码中。在测试过程中,不要禁止传出电子邮件,信用卡授权信息等等。 从头编写所有模块 不要费劲巴拉使用像Django、Rails或者CakePHP一样很容易理解的框架,你可以自己写一个更好的模板引擎,ORM,排序或者哈希算 法。每当我看到代码中诸如”比已有字典算法要快“或者”替换了PHP库函数,因为那些函数参数顺序太烂了“的注释时,我都忍不住的想弄死自己。 |