如何开发不可维护的软件? - 博客 - 伯乐在线



如何开发不可维护的软件? - 博客 - 伯乐在线

不要用版本控制软件

我经常很惊讶的发现,在过去的几年里编写的大型软件工程竟然不在源代码版本控制中。如果你不使用版本控制,下一个承接你项目的程序员就没法确定哪些文件属于你当前的系统,哪些是淘汰的以及哪些是备份文件,他也无法从提交信息或者修改日志中获得任何关于代码的历史信息。我在我的文章《面向卑鄙的编程介绍 | Introduction to Abject-Oriented Programming》中,介绍了"如何不使用版本控制"。

 

大量定制你自己的开发环境

千万不要让承接你项目的程序员轻易的开始工作。开发软件时,一定要用特殊版本的编程语言、工具,确保它们与一起交付的操作系统有冲突。像疯子似的定制你的Eclipse、VisualStudio或者vim环境,然后编写只能在你定制的环境下才能工作的宏或者脚本。不要制作硬盘镜像或者脚本以复制你的开发环境,并且不要费劲巴拉写任何说明文档――这太直观啦。

 

创建一个精心制作的构建和部署环境

把网站部署到一个测试或者产品服务器上的方法,应该看起来像这样:

svn up
git pull
hg pull

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

 

不要设置测试/分段平台

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

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

 

从头编写所有模块

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

 

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

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

 

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

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

 

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

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


Read full article from 如何开发不可维护的软件? - 博客 - 伯乐在线


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts