程序员可以与简洁性和优雅作斗争,然后反过头构建精心制作的巴洛克式的构建和部署环境。这是一项不受控制的事,程序员可以在不面对客户的情况下,或者项目经理不审查或者不理解的情况下完成,所以很容易失控。当你把八种不同的工具用不同的脚本语言链接起来时,记得不要写文档。

  不要设置测试/分段平台

  修改产品系统是很令人兴奋地事。不要费劲巴拉的搭建测试/分段平台,相反要保留秘密登录入口和后门URL,以测试新的特性。把测试数据和真正的数据混合起来放到数据库中,

  既然你不使用版本控制软件,保存软件旧版本的副本,以防万一。不要把日志信息插入到代码中。在测试过程中,不要禁止传出电子邮件,信用卡授权信息等等。

  从头编写所有模块

  不要费劲巴拉使用像Django、Rails或者CakePHP一样很容易理解的框架,你可以自己写一个更好的模板引擎,ORM,排序或者哈希算法。每当我看到代码中诸如”比已有字典算法要快“或者”替换了PHP库函数,因为那些函数参数顺序太烂了“的注释时,我都忍不住的想弄死自己。

  增加对特殊版本的库和资源的依赖

  尽可能的加入第三方代码,在你需要时链接尽可能多的共享库。我曾经见过依赖于很大的外部库文件只为了使用其中一个函数的代码。修改第三方库文件源代码,这样可以保证在有新版本出现时,那些第三方库不会自动更新,但不要把你修改的版本置于版本控制中,我会用diff命令比对你的版本和原始版本,并发现其中不同的。

  ……但是不要保护或者编写依赖性说明文档

  因为更新和升级错误给我打紧急电话的,是所有工作电话中多的。一个看似无害的WordPress升级,Linux包更新,或者新的jQuery发布将会引发一系列的错误。不要让你的代码自动检查特定版本或者你修改的外部资源副本或者第三方库文件,甚至不要添加注释以提醒你自己。

  使用一坨不同的编程语言,跟上潮流

  每天HackerNews和Reddit都会对一些新又酷的编程语言唧唧歪歪,在你为客户编写软件时可以试用那些语言。任何牛逼的程序员都应该瞬间学会一门编程语言,所以如果继续承接你代码的程序员是个菜鸟那不是你的问题。不同语言的边界、不兼容的API和数据格式、不同服务器配置需要等,都是很有意思的挑战,把这些贴到SackOverflow秀一下也是怪牛逼的。我确实看到过PHP网页中嵌入Ruby代码,因为每个人都知道PHP烂透了而Ruby好太多。半生不熟的项目,中止的Rails和Node.js项目,尤其是NoSQL解决方案(这个伸缩性更强)都是我的菜。

  编程建议:

  你的代码是否是完美面向对象并闪闪发光的,这没什么鸟用。当程序员不得不维护一个遗留系统时,他们几乎总是看到意大利面条式的代码。我很擅长使用diff、grep和ctags等工具追踪代码、重构、调试,我终究会搞明白你的代码。如果不使用版本控制软件、代码有太多依赖和定制、没有测试/分层平台,那些漂亮优雅的代码依然非常难搞。这像在满是囤积物的房子里,找一个装饰漂亮、干净的房间一样,算找到了,有啥鸟意思?