欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

而重构过程中 昆山软件开发 往往哀嚎遍野

点击: 次  来源:宝鼎软件 时间:2017-08-02

原文出处: @蛋疼的axb

1.摘要

最近写了不少代码,review了不少代码,也做了不少重构,总之是对着烂代码事情了几周。为了抒发一下这几周里好屡次达到瓦解边沿的情绪,我抉择写一篇文章谈一谈烂代码的那些事。 这里是上篇,谈一谈烂代码发生的原因和现象。

2.写烂代码很容易

刚入措施员这行的时候常常听到一个概念:你要把精神放在ABCD(需求文档/成果设计/架构设计/领略道理)上,写代码只是把想法翻译成编程语言罢了,是一个没什么技能含量的工作。

其时的我在听到这种概念时会有一种近似于高冷的不屑:你们就是一群傻X,基础不懂代码质量的重要性,这么下去早晚有一天会踩坑,呸。

但是几个月之后,他们好像也没怎么踩坑。而跟着编程技能一直在不绝成长,带来了更多的我以前认为是傻X的人插手到措施员这个行业中来。

语言越来越高级、封装越来越完善,各类技能都在辅佐措施员提跨越产代码的效率,依靠层层封装,措施员真的不需要相识一丁点技能细节,只要把需求里的内容逐行翻译出来就可以了。

许多措施员不知道要怎么组织代码、怎么晋升运行效率、底层是基于什么道理,他们写出来的是在我心目中烂成一坨翔一样的代码。

可是那一坨翔一样代码竟然他妈的能正常事情。

纵然我认为他们写的代码是坨翔,可是从不打仗代码的人的视角来看(好比说你的boss),软件开发,代码编译过了,测试过了,上线运行了一个月都没出问题,你还想要奢求什么?

所以,纵然不情愿,也必需认可,时至今天,写代码这件事自己没有那么难了。

3.烂代码终究是烂代码

可是偶然有那么屡次,写烂代码的人去职了之后,工作好像又变得纷歧样了。

想要修改成果时却发明措施里充斥着各类无法领略的逻辑、改完之后莫名其妙的bug一个接一个,接办这个项目标人开始漫无目标的加班,而且原本一个挺乐观开朗的人徐徐的开始喜欢问候别人祖宗了。

我总结了几类常常被艹祖宗的烂代码:

3.1.意义不明

本领差的措施员容易写出意义不明的代码,他们不知道本身毕竟在做什么.

就像这样:

public void save() {
    for(int i=0;i<100;i++) {
        //防备生存失败,重试100次
        document.save(); 
    }
}

对付这类措施员,我一般发起他们转行。

3.2.不说人话

不说人话是新手最常常呈现的问题,直接的表示就是写了一段很简朴的代码,其他人却看不懂。

好比下面这段:

public boolean getUrl(Long id) {
    UserProfile up = us.getUser(ms.get(id).getMessage().aid);
    if (up == null) {
        return false;
    }
    if (up.type == 4 || ((up.id >> 2) & 1) == 1) {
        return false;
    } 
    if(Util.getUrl(up.description)) {
        return true;
    } else {
        return false;
    }
}

许多措施员喜欢简朴的对象:简朴的函数名、简朴的变量名、代码里翻来覆去只用那么几个单词定名;能缩写就缩写、能省略就省略、能归并就归并。这类人写出来的代码里充斥着各类g/s/gos/of/mss之类的全世界没人懂的缩写,可能一长串不知道在做什么的持续挪用。

尚有许多措施员喜欢巨大,各类宏界说、位运算之类写的口不择言,生怕代码让别人一下子看懂了会显得本身程度不足。

简朴的说,他们的代码是写给呆板的,不是给人看的。

3.3.不得当的组织

不得当的组织是高级一些的烂代码,措施员在写过一些代码之后,有了根基的代码气势气魄,可是对付局限大一些的工程的掌控本领不足,不知道代码应该如何解耦、分层和组织。

这种反模式的现象是常常会看到一段代码在工程里拷来拷去;某个文件里放了一大坨堆砌起来的代码;一个函数堆了几百上千行;可能一个简朴的成果七拐八绕的调了几十个函数,在某个难以发明的猥琐的小角落里冷静的挪用了某些要害逻辑。

这类代码大多巨大度高,难以修改,常常一改就崩;而另一方面,缔造了这些代码的人倾向于修改代码,害怕缔造代码,他们甘愿让原本巨大的代码一步步变得更巨大,也不肯意从头组织代码。当你面临一个几千行的类,问为什么不把某某逻辑提取出来的时候,他们会说:

“可是,那样就多了一个类了呀。”

3.4.假设和缺少抽象

相对付前面的例子,假设这种反模式呈现的场景更频繁,格式更多,始作俑者也更难以本身意识到问题。好比:

public String loadString() {
    File file = new File("c:/config.txt");
    // read something
}