首页 > 流程方法, 程序设计, 轶事趣闻 > 各种流行的编程风格

各种流行的编程风格

2010年1月22日 发表评论 阅读评论 33,734 人阅读    

在过去的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个部署描述符。

文章:来源
(全文完)





好烂啊有点差凑合看看还不错很精彩 (34 人打了分,平均分: 4.88 )
Loading ... Loading ...
  1. 电子骑士
    2010年1月22日09:46 | #1

    虽然我不是屠夫,但我常有屠宰的冲动要克制。

  2. 为人民币服务
    2010年1月22日10:01 | #2

    散弹枪编程
    撞大运编程
    Cargo-Cult 编程
    刻舟求剑编程
    以上四种相信世界上任何一个程序员都曾做过。
    设计模式驱动型编程
    侦探型编程
    屠宰式编程
    以上三种相信世界上任何一个人都曾做过。
    人的劣性,在于无法坚持一种观点,因为这种观点始终是会被打破。例如在中世纪时地球曾被称为是一个长方型的大陆一样。
    任何一种方式都是以解决问题为前提,只要你解决了当前的问题而又不引起别的问题至于你解决的方式可以忽略不计。如果你需要考虑1年去解决这个问题,那么我通常还是会选择比较简单的一天就可以解决问题的方式,然后再用一年就研究升级。总之程序员要有自己的style不要拘泥于别人的言语。

  3. zz
    2010年1月22日14:01 | #3

    总结的很好哈哈

  4. 屠夫老大
    2010年1月22日17:53 | #4

    我听见有人在叫我的名字。。。。

  5. travis
    2010年1月22日18:03 | #5

    这个有点意思啊

  6. wangyuantao
    2010年1月22日23:25 | #6

    布尔控型编程
    精通布尔代数,对“A蕴含B”等价于“非A且B”等价于“非(A或非B)”这类变换烂熟于心,运用自如。这种代码一般人很难读懂,不如拆成几行嵌套的if else。这种人为了提高代码可读性,容易矫枉过正,动辄写出一串if elseif,所接的一系列表达式能被证明存在唯一的真值分配。或者走另一个极端,去滥用真值表。

    摇摆型编程
    没有形成自己一贯的风格,导致看到别人写什么样的代码,自己就模仿起来。或者天生感性,写代码的时候受生理状况、心情等主观因素影响较大。表现是忽而散弹枪,忽而屠宰,变化莫测,难以捉摸,反复无常。这种人需要提高判断力,形成一种成熟稳健的风格。

  7. hplonline
    2010年1月23日10:07 | #7

    @wangyuantao
    “A蕴含B”等价于“非A或B”吧

  8. digiter
    2010年1月23日15:22 | #8

    看完本文开始迷惑,到底什么样的编程风格才是好的呢?

  9. hahajerry007
    2010年1月23日21:31 | #9

    看了楼主的文章后发现自己在编写代码的时候还有很多问题啊,看来以后要多加注意并且改掉这种习惯了。

  10. roby
    2010年1月25日11:09 | #10

    @wangyuantao
    我发现自己就是摇摆。。。
    主要问题是没有自己的风格。

  11. 2010年1月25日13:41 | #11

    @wangyuantao
    哈哈,又有两个。

  12. 2010年1月28日14:35 | #12

    刚刚发现这个站点儿不久,
    我不是个很好的程序员,甚至算不上程序员。
    看了这篇文章我大概可以这么总结下:
    这些编程方法都是几个或是一个基类的衍生物
    那就是 “不求甚解”这个基类,不知道我对这篇文章的意思理解
    是否正确,希望有机会和博主多交流,thx

  13. 古歌
    2010年1月28日15:56 | #13

    仔细想想,不严格来说,这七种全都做过;而严格来说呢,这几种都没做过。

    关于布尔控型编程想说几句:
    有时候用这种编程方式很方便啊,尤其是好几个条件互相关联的时候,用位运算最方便了!

  14. stone
    2010年1月29日09:16 | #14

    很有点意思啊。

  15. ostric
    2010年2月1日17:42 | #15

    程序员的编程风格跟自身的性格特质有很大关系,即便是经过正规的培训也是依旧

  16. 谭鹰
    2010年7月16日08:58 | #16

    屠夫的冲动~

  17. 2010年7月16日11:22 | #17

    这总结的太好了!绝了

  18. 2010年8月21日12:09 | #18

    我想知道作为程序员,我们应该努力朝哪个方向发展,应该尽量做什么类型的?是不是努力不做这几个类型的?难倒就是努力做正常类型的吗?

  19. 2010年9月27日10:19 | #19

    总结的很好,貌似所有的程序员都经历过吧。其实这些并不是都不好,在特定环境下,也许需要其中的一种,总之代码是死的,人是活的,如何处理问题还是要看人啊。

  20. 砖家
    2010年10月5日23:44 | #20

    哈哈,总结的太好了

  21. 一个老程序员
    2011年2月1日11:12 | #21

    大家从上往下看,简直就是一个程序员的职业进化经历^_^.

  22. momo-erika
    2011年2月20日14:44 | #22

    侦探型+屠夫型

  23. poet
    2011年2月23日14:33 | #23

    楼主正在为程序员进行 OOP 操作。

    但是,问题的关键并不是 everything is an object ,而是 have you defined all classes for your objects 的问题。

    OOP的概念本身无问题,问题现在绝大多数语言实现的class几乎都是静态的。而这并不可能满足对象本身的进化需求。

    更多的程序员并不属于前面的任何一个class。也许有新的 class

  24. 2011年3月23日11:27 | #24

    请问侦探型编程有什么问题? 程序员难道不该有点打破砂锅问到底的精神么?

  25. 2011年4月1日21:46 | #25

    很精辟嘛

  26. 2011年4月29日17:40 | #26

    感觉是描述了程序员常见的各种“精神疾病”

  27. rick
    2011年6月10日16:29 | #27

    哈哈,我有屠宰式编程的倾向~
    您的文章会不会让新手看不出来是讽刺,那就糟了

  28. vic
    2011年6月30日22:10 | #28

    缩写编程
    每个变量都把字数控制在5以内。
    他们以为在发推。

    数据类型控编程
    数组叫array,链表叫list…

  29. prayer
    2011年8月16日17:16 | #29

    ……我希望向侦探方向发展~~

  30. 2011年8月20日20:06 | #30

    C&P型程序员
    Copy&Paste型程序员copy各种各样代码,代码里充斥着JobsUtil,GatesUtil,XxxLogger……,每段代码都整个文件copy过来,不做任何修改,或者稍作修改让他能运行。如果项目组没有统一的代码规范,那么从C&P型程序员的代码中随便摘出一屏就知道是从哪抄来的。C&P型程序员最大特点是,写不下去和发布后出问题都很好解决:这段代码不是我写的,别烦我!

  31. 路德维希
    2011年8月22日19:53 | #31

    MARK下, 第一次留言,大陆新发现。

  32. Tsing
    2011年8月23日17:30 | #32

    嘿嘿 有点 像~~!! 我貌似有过某几种~~~~

  33. 2011年8月26日12:47 | #33

    嘛,如果你试图调用的类库是[不知道谁开发的][没有源代码][没有文档][使用它的这个项目的代码的开发者早就跑掉了][实现那个类库需要的那个领域的知识你根本就不懂][你不接手这个工作又不行][跳槽了更吃亏]的时候,你无法不撞大运……

  34. yaxinsn
    2011年8月30日17:09 | #34

    陈sir,从你写的错别字中,得知你是一个用五笔打字的人。
    指针?指会

  35. yaxinsn
    2011年8月30日17:14 | #35

    博主用五笔打字吧?

  36. =.=
    2011年8月30日23:04 | #36

    …很正确.

  37. webkoda
    2011年9月6日10:21 | #37

    我应该属于非典型性的,简而言之就是看心情。。。

  38. Leo.chen
    2011年9月9日13:50 | #38

    @wangyuantao
    说得很好!我可能就属于这种摇摆型编程的人,谢谢你的建议!

  39. 2011年10月4日15:26 | #39

    我是最后一种 诶~~

  40. 2011年10月10日21:55 | #40

    我明白为什么我的的效率那么低了 我是侦探型编程 好多无畏的东西被我“重视”了

  41. wki
    2011年10月13日09:38 | #41

    霰弹报道

  42. 2011年10月17日17:28 | #42

    刻舟求剑,设计模式,和屠宰报道

  43. 2011年10月29日11:49 | #43

    写的不错,每个程序员都是一步一步成长起来的

  44. devspirit
    2011年10月30日23:52 | #44

    项目中曾今用过:
    刻舟求剑
    也经常有想当屠夫的冲动。

  45. 白头发乌鸦
    2011年11月8日11:24 | #45

    I  AM A 屠宰冲动者

  46. .java
    2011年11月27日09:25 | #46

    我之前一直有屠宰倾向。好在我都只是自己写着玩,而且现在没那么激烈了。

  47. Alvin
    2011年11月28日16:05 | #47

    真是深刻。

  48. Yinkan
    2011年12月6日08:49 | #48

    其实只有三种编程:普通编程、文艺编程和 …… …… ……

  49. 2012年1月9日20:02 | #49

    Yinkan :
    其实只有三种编程:普通编程、文艺编程和 …… …… ……

    牛B编程

  50. linke
    2012年1月30日17:47 | #50

    博主很强,博客很棒!

  1. 2010年1月23日13:18 | #1
  2. 2010年2月1日14:45 | #2
  3. 2010年5月14日08:52 | #3
  4. 2010年7月15日16:07 | #4
  5. 2010年7月16日10:29 | #5
  6. 2010年7月16日18:44 | #6
  7. 2010年7月18日18:09 | #7
  8. 2010年8月3日00:11 | #8
  9. 2010年9月16日04:50 | #9
  10. 2010年9月25日08:35 | #10
  11. 2010年12月10日14:16 | #11
  12. 2011年1月29日13:41 | #12
  13. 2011年1月30日11:10 | #13
  14. 2011年2月13日20:04 | #14
  15. 2011年3月22日08:56 | #15
  16. 2011年3月22日11:11 | #16
  17. 2011年3月22日18:51 | #17
  18. 2011年3月23日14:04 | #18
  19. 2011年3月23日14:18 | #19
  20. 2011年3月24日08:35 | #20
  21. 2011年3月24日09:15 | #21
  22. 2011年3月24日18:18 | #22
  23. 2011年3月26日02:25 | #23
  24. 2011年5月8日08:57 | #24
  25. 2011年5月16日00:04 | #25
  26. 2011年6月18日02:04 | #26
  27. 2011年7月26日15:53 | #27
  28. 2011年8月16日08:44 | #28
  29. 2011年8月16日13:15 | #29
  30. 2011年8月21日16:21 | #30
  31. 2011年8月23日10:04 | #31
  32. 2011年8月25日22:46 | #32
  33. 2011年8月27日18:50 | #33
  34. 2011年10月17日08:45 | #34
  35. 2011年10月28日16:36 | #35

无觅相关文章插件,快速提升流量