各种流行的编程风格

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

转载于:https://my.oschina.net/jack230230/blog/83241

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux自动跑批,在linux中添加硬盘并在系统启动时自动挂载

前言最近搞Linux时,当初没有考虑完善,只分配了10GB的空间,启动mongodb时直接给我报了一个错误:可用空间太少,虽说加一个参数—smallfiles就可以解决问题,但这治标不治本。所以我参考Adding a New Disk Driv…

没有标题,配得上这款“俄罗斯方块”

在之前的文章时,马斯提到数学存在一种现象叫“梯次掉队”,原因在于孩子的数学思维地基没有打牢。(传送门)提到初中孩子需要空间想象能力时,很多父母疑惑为何需要?关于这点,小木给大家说明下&…

linux仿真速度快吗,Linux上安装使用最快的GPU加速的终端仿真器Alacritty

这个简单的教程展示了如何通过PPA在Ubuntu 20.04, Ubuntu 20.10, Linux Mint 20中安装最快的终端模拟器Alacritty。Alacritty是一个跨平台、GPU加速的终端模拟器,是现有最快的终端模拟器。可以在macOS、Linux、BSD和Windows上工作。它是一款专注于简单性和性能的免费…

使用c#接入华为云-内容审核

背景内容审核(Content Moderation),是基于图像、文本、音视频的检测技术,可自动检测涉黄、涉政涉暴、涉政敏感人物、图文违规等内容,对用户上传的图片、文字、音视频进行内容审核,以满足上传要求&#xff0…

第二十五章补充内容 5 不能为0的变量

// 第二十五章补充内容 5 不能为0的变量 /*#define DEBUG #include <iostream> #include <string> using namespace std; #ifndef DEBUG #define ASSCET(x) #else #define ASSCET(x)\if(!(x))\{\cout<<"错误!ASSERT("<<#x<<")宏函…

16个让你烧脑让你晕的悖论

全世界只有3.14 % 的人关注了数据与算法之美【1】我知我无知苏格拉底有句名言&#xff1a;“我只知道一件事&#xff0c;那就是我一无所知。”这个说法本身就是悖论&#xff0c;展现了自我参照的表述&#xff08;self-referential statement&#xff09;的复杂性。而这也是西方…

linux内核修改工程环境,linux2.6.33内核移植s3c2410以和交叉环境编译搭建最终修改版.pdf...

Linux2.6.33 内核移植S3C2410 以及搭建交叉编译环境(最终修改完善版本)作者&#xff1a;胡峰 整理亍2010-3-13嵌入式实验室嵌入式助理工程师 所需软件以及工具&#xff1a;wmware workstation 虚拟机 小红帽linux gimp-2.6.4-i686-setup.exe (用亍后期的logo 画面转换)另外本人…

【Paddle 经验分享】利用PaddleHub 2.x 完成文本分类训练的坑

CSDN原文链接&#xff1a;https://blog.csdn.net/kinfey/article/details/117254781基于项目选择了PaddlePaddle 作为文本分类的基础&#xff0c;经过一周多的使用终于有所进展&#xff0c;把文本分类的相关工作做了一个简单模型。首先说说PaddlePaddle , 现在做深度学习&#…

iOS-获取当前时间的年、月、日、时、分、秒

01 //获取当前时间02 NSDate *now [NSDate date];03 NSLog(”now date is: %”, now);0405 NSCalendar *calendar [NSCalendar currentCalendar];06 NSUInteger unitFlags NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUn…

Python的这几个常用库,你会用吗?

目前&#xff0c;人工智能的应用日渐广泛。而作为人工智能核心的机器学习&#xff0c;是一门多领域的交叉学科&#xff0c;专门研究计算机模拟或实现人类学习行为的方法&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。简单来说&a…

c语言 随时启停程序 按钮,单片机C语言控制单按钮启停程序(高手请进)

void IR_Receive_function(){unsigned i0,k0;if (Ir_Over){EX00; EX10; //关外部中断if (DAT[0]DAT[1]&&DAT[2]!DAT[3]){switch (DAT[3]){case 0XFF: if(inbuf1[19]‘1‘)inbuf1[19]‘0‘;else inbuf1[19]‘1‘;break;case 0XFE: if(inbuf1[20]‘1‘)inbuf1[20]‘0‘;e…

记一次 .NET 某电商交易平台Web站 CPU爆高分析

一&#xff1a;背景 1. 讲故事已经连续写了几篇关于内存暴涨的真实案例&#xff0c;有点麻木了&#xff0c;这篇换个口味&#xff0c;分享一个 CPU爆高 的案例&#xff0c;前段时间有位朋友在 wx 上找到我&#xff0c;说他的一个老项目经常收到 CPU > 90% 的告警信息&#x…

QOMO Linux 4.0 正式版发布

首 先感谢大家长期以来对Qomo发行版和国产Linux操作系统的关心和爱护。由于一些客观原因&#xff0c;Qomo发行版的发行和维护工作一度减缓&#xff0c;社区也进入停滞 状态。但是从4.0开始&#xff0c;Qomo的开发和维护工作将恢复正常运转&#xff0c;本次发布的4.0版本就是我们…

c语言输入n个数按大小输出,输入n个整数并输出,用c语言表达

FOSS//这个是用静态数组储存整数#includeint main(void){int a[100],i0,j;//如果n小于100的话就不需要用动态数组&#xff0c;或者你可以把100改成更大的数&#xff0c;比如100000000......printf("请输入你要输入的数字&#xff0c;以ctrlz结束:");while(scanf(&quo…

ML.NET Cookbook:(5)如何查看中间过程数据?

通常&#xff0c;当我们构建实验时&#xff0c;我们希望确保“到某一时刻”的数据处理产生我们想要的结果。对于ML.NET来说&#xff0c;这不是很容易做到的&#xff1a;因为所有的ML.NET操作都是延迟执行的&#xff0c;所以我们构造的对象只是数据的“承诺”。我们需要创建游标…

在线交友背后的数学原理

全世界只有3.14 % 的人关注了数据与算法之美欣赏 TED-Ed 带字幕视频, 或者看下面编写的文字版. 01交友网站的背后是算法帝国大家好&#xff0c;我叫 Christian Rudder,我是 OKCupid 网站的创办人之一。这个网站现在已经是全美最大的交友网站。就象这网站上大多数其他人一样,我…

C语言删掉无关变量无输出,C语言变量类型与输出控制用法实例教程

本文实例讲述了C语言变量类型与输出控制用法&#xff0c;有助于读者很好的对其进行总结与归纳。该实例分享给大家供大家参考借鉴之用。具体如下&#xff1a;完整实例代码如下&#xff1a;/************************************************《Beginning C 4th Edition》Notes c…

你不得不知道的Visual Studio 2012(3)- 创建Windows应用程序

创建项目 在Visual Studio中创建一个应用程序&#xff0c;应首先创建一个项和一个解决方案。在此示例中&#xff0c;您将创建Windows presentation foundation应用程序。 创建 WPF 项目 在菜单栏上&#xff0c;依次选择 *** 文件 ***&#xff0c;新建&#xff0c;项目。 选择V…

关于.NET微服务最热门的问题解答

点击蓝字关注我们在我们最近让我们一起学习 .NET的微服务专场活动中&#xff0c;我们收到了一些很好的问题。我们在现场已经回答很多问题&#xff0c;但我们想继续回答一些在会议中出现的最热门的问题。如果你错过了现场直播&#xff0c;不要担心&#xff0c;因为你可以按需观看…

超级智能玩具《小小机器人》|全新50种玩法,创造力之源

致砖《小小机器人》全新套装电动机械的完美结合先来看看视频过过眼瘾吧来自美国STEAM教育让孩子跨学科学知识积木向来是STEAM教育很重要的一部分&#xff0c;因为它涉及到了多种学科&#xff1a;要搭建得稳固——这是工程学&#xff1b;要精准搭建——这是数学&#xff1b;要外…