`
jjfat
  • 浏览: 283735 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【iGeek-生活】各种流行的编程风格 你属于哪一种?

 
阅读更多

在工作中,会遇到很多使用囧然不同风格的开发者,下面是小编所知道的一些,你还知道其它的吗?


 

散弹枪编程


这种编程风格是一种开发者使用非常随意的方式对待代码。“嗯,这个方法调用出错了……那么我会试着把传出的参数从 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个部署描述符。

 

 

哈哈哈~~ 那么此时正在看文章的你~又是哪一种编程的风格呐(=@__@=)?这里是igeekbar,欢迎每一位Geek 常来做客~~~ 就本文讨论的话题,你有什么想法? 欢迎在留言区跟大家分享讨论呦~~~

0
0
分享到:
评论

相关推荐

    igeek-zsh-theme:ZSH主题

    总结来说,`igeek-zsh-theme`是一个精心设计的ZSH主题,它不仅美观,而且实用,能够增强你的终端操作效率。通过与Oh My ZSH的配合,用户可以轻松地调整和扩展其功能,打造一个完全个性化的命令行环境。

    iGeek-开源

    在“iGeek-开源”项目中,我们可以看到一系列与这个主题相关的文件。首先,`igeek_Module1.bas`很可能是一个Visual Basic for Applications (VBA)模块,其中包含了程序的一部分逻辑代码。VBA是Microsoft Office套件...

    IGeek陆小涛8.17.zip

    【标题】"IGeek陆小涛8.17.zip" 涉及的是一个由陆小涛在8月17日创建或更新的面向控制台的二手车交易系统项目。这个压缩包可能包含了项目的源代码、文档和其他相关资源,便于理解和复现该项目。 【描述】"面向控制台...

    作业[1].docx

    - `switch`语句:根据输入的值执行相应的代码块,例如判断月份属于上旬、中旬还是下旬。 4. 排序算法: - 选择排序:通过每一轮找出未排序部分的最小值并与前面未交换过的元素交换位置,以此类推,达到排序的目的...

    IGeekWikiWorld:在类似Wiki的环境中进行交互的IGeek内容

    交互式体育馆环境和教育工具包(IGeek)类似于Wiki的站点环境,它尽可能将Wikipedia放入RAM中,并允许使用对抗性捉迷藏进行交互式对抗性双胞胎数据压缩。 执照 版权2021:copyright: 。 此源代码表受Mozilla公共许可...

    注册/登录验证

    - **自定义校验规则**:通过`.validator.addMethod`方法定义一个自定义的校验规则,用于检查用户名是否已被使用。 - **整合Ajax请求**:当用户在表单中输入用户名时,使用Ajax请求后端API检查该用户名是否可用。这...

    Android 插件Demo

    在"Android 插件Demo"中,`android:sharedUserId="org.igeek.android.pluginframework.demo"`表示所有标有此共享用户ID的应用都属于同一个用户组,这样主应用(宿主)就能加载并执行具有相同用户ID的插件应用的代码...

    recursion and backtracking

    递归是一种函数调用自身的编程技术,使得解决问题变得更为简单和直观。而回溯是一种系统地搜索问题所有可能解的算法,它通过试错的方法找到正确的解决方案。在面试中,递归和回溯是考察候选人算法思维能力的典型题目...

    CS_Course_Ladder

    CS_Course_Ladder CS Course Ladder 是一个创新项目,旨在帮助 UACS 学生更轻松地了解 CS 课程的结构,并提供面向职业的指导。 这个开源项目将涉及各个方面,并将由艾伯塔大学最大的技术学生团体iGeek Team进行管理...

Global site tag (gtag.js) - Google Analytics