返回信息流各种流行的编程风格
http://coolshell.cn/?p=2058
在过去的N年中,我遇到了很多使用囧然不同风格的开发者,下面是我所知道的一些,你
还知道其它的吗?
散弹枪编程
这种编程风格是一种开发者使用非常随意的方式对待代码。“嗯,这个方法调用出错
了……那么我会试着把传出的参数从 false 变成 true!”,当然依然出错,于是我们的
程序员会这样:“好吧,那我就注释掉整个方法吧”,或是其它更为随意的处理方式,直
到最后让这个调用成功。或是被旁边的某个程序员指出一个正确的方法。
如果我们把一个正规的程序员和一个撞大运的程序员放在一起做结地,那么,那个正规的
程序可以马上变得发疯起来,并且,可以把正规的程序员的智商降到最低。两个撞大运的
程序员不应该在一起做结对编程,这是因为他们破坏性的才能会造成的伤害会比只有一个
还差。
撞大运编程
这是一种比散弹枪编程要温和一些的编程方式,我相信这种方式可能会是大多数程序员都
会使用的方式。这种编程方式经常出现于程序员并不确切知道他们在干什么,也不知道所
写的程序的本质和实际,但是可以让程序工作起来。他们以一种撞大运的方式在写程序,
某些时候,他们根本就不知道某个错误的原因,就开始稀里糊涂地修改代码。一旦出现问
题,他们会用两条路:1)停下来,理解一下程序,找到出错的原因。2)使用散弹枪编程
方式开始解决问题。
测试驱动开发(Test Driven Development)是一种可以用来拯救上百万的撞大运编程的
程序员。于是,他们有了一个更为NB的借口:只要我的程序通过测试了,你还有什么话好
说?别骂我,测试驱动开发是一个不错的事物,其主要是用来控制撞大运开发所带来的问
题。
Cargo-Cult 编程
关于Cargo Cults 这个词儿来自二战期间的某些太平洋上小岛里的土著人。在战争期间,
美国利用这些小岛作为太平洋战场上的补给站。他们在这些小岛上修建自己的飞机跑道以
用来运输战争物资。而那些小岛上的土著人从来没有见过飞机,当他们看到飞机的时候,
觉得相当的牛,可以为那些白人带来各种各样的物品和食物。当二战结束后,那些土著人
仿照着修建了飞机跑道,并用竹子修建了塔台。然后就在那期望着有飞机为他们送来物品
和食物。
Cargo Cult 编程是一种非常流行的编程方法,使用这种方法的程序员会学习其它编程高
手的编程方法,虽然他们并不知道为什么高手们要那样做,但是他们觉得那样做可以让程
序工作起来。举个例子,当时有大量的程序员在J2EE出现的第一年中过度地使用了EJBs和
Entity Beans。
刻舟求剑编程
刻舟求剑是一个很流行的寓言了。这种风格的编程在程序员的圈子里是非常常见的。比如,
有一天,你发现了一个空指会的异常,于是你到了产生空指针异常的地方,简单地放上一
个判断: if (p != NULL)。
是的,这样的fix可以让你的程序工作起来,但你并没有真正地解决问题。你只不过是在你
的船边记下了剑掉下去的位置,这样做只不过把问题隐藏起来,最终只会让你的程序的行
为变得神出鬼没。你应该找到为什么指针会为空的原因,然后再解决这个问题。
设计模式驱动型编程
正如这种编程的名字所说的,这种编程风格使用大量的设计模式,在你的程序中,四处都
是设计模式,你的代码到处都是Facade,Observer ,Strategy,Adapter,等等等等。于
是,你的程序要处理的业务逻辑被这些设计模式打乱得无法阅读,最后,也不知道是业务
需求重来,还是设计模式重要,总之,实际业务需求的程序逻辑被各种设计模式混乱得不
堪入目。
侦探型编程
在解决一个Bug的时候,侦探型程序员会调查这个Bug的原因。然后,则调查引发这个BUG
的原因的原因。再然后,其会分析修正代码后是否会导致其它代码失败的因果关系。再然
后然后,他会使用文本搜索查找所有使用这个改动的代码,并继续查找更上一级的调用代
码。最后,这个程序员会写下30个不同的情形的测试案例,就算这些测试案例和那个Bug
没有什么关系,最最后,这个程序员有了足够多的信心,并且精确地修正了一个拼写错误。
与此同时,其它一个正常的程序修正了其它5个Bug。
屠宰式编程
使用这种风格的程序员,对重构代码有着一种难以控制的极端冲动。他们几乎会重构所有
经手的代码。就算是在产品在Release的前夜,当他在修正几个拼写错误的bug同时,其会
修改10个类,以及重构与这10个类有联系的另20个类,并且修改了代码的build脚本,以及
5个部署描述符。
(全文完)
这是一条镜像帖。来源:北邮人论坛 / soft-design / #37514同步于 2010/1/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[zz]各种流行的编程风格
FadeToBlack
2010/1/22镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
散弹式编程代表着新兵程序员,他们刚入行,不懂得写程序,迫切完成工作的焦虑让他们像无头苍蝇一样乱来。
撞大运式编程,一般是做维护程序的经历比较多,因为系统过于庞大,也不是自己从头参与的,所以对整个系统没有一个全局的认识。遇到问题,会找到这个问题的相邻代码,如果能看出问题的还好,否则就会和第一类人一样瞎改看哪个改动凑巧成功了。
Cargo-Cult 编程代表着那些追求新技术但又比较盲目的技术员,他们成天关注行业界新动向,所以能够及时了解到最新技术的发展和应用,但是由于没有丰富的阅历,无法对这些新技术做正确的评估,以至于犯了“别人觉得好用那就是好用“的问题。这样的人作为项目决策人的话,会给项目带来无穷无尽的动荡,否则,倒是能够给项目带进一些新鲜的血液
刻舟求剑编程
这样的人属于思维比较懒惰或者思维深度不够的人,看问题只关注到表面
设计模式驱动型编程
属于虚荣心较重的程序员,喜欢用各种酷酷的技术来包装自己的代码,以此显示自己代码的牛B。
侦探型编程
属于极度小心而又有点偏执的程序员,如果没有好的重构工具,我想很多负责任的程序员都会进行侦探型编程的。
屠宰式编程
属于完美主义情绪比较重的程序员,他们对代码永远不会满足,他们以修改程序的过程为乐,不以最终结果为转移