为什么程序员总是写糟糕的代码?这3个原因

我最近一直在想我们作为一个行业为什么总是产出糟糕代码的原因。

1.明显原因……

我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有的人技术水平高,有的人水平却低,有人对这门技艺感兴趣,但也有的人却不愿意在工作之外学习其他。

好了,我就不深入探讨了。

那么是不是在这表层之下还有更多的问题呢?有没有导致糟糕代码的根本性原因?我觉得有必要深入探究一下。

2.低预期……

对于这一点,众所承认的是,我们在大学中,通过自学或书籍学到的东西,并不能匹配现实世界的真正需求。

因此,可以想象初学者总是需要在工作中学习如何产出好的代码。我们也相信,真正的编程知识只能通过经验累积才能获得。因而,初学者甚至觉得他们能写出的就是糟糕的代码!

当初学者预期他们将产出质量不好的代码,通常,那就是你将得到的结果!

虽然上述推理有部分是真理,但这个假设我不愿意接受,原因很多,但主要是以下三个:

  1. 期望低标准的职业生涯起点,也就是说质量变成了一个不重要的因素。低入口门槛的直接结果是低质量开发人员的大量涌入,并导致下面的第2点。
  2. 通过强迫他们和大多是低质量的开发者一起工作,我们让那些关心工艺和对自己的工作质量感到自豪的人过得苦不堪言。
  3. 上述两个因素的结合导致了我们现在这个状况,每个人都认为他们会写代码,但是我们更信任如同品牌商品一样的专业开发者。

我们得对初学者有更高的预期。试问,哪家医院会聘用一个以前没有做过手术的医生,或者说,哪家航空公司会雇用一个不会紧急降落的飞行员?我们根本不能接受这样的医生和飞行驾驶员。那么,为什么软件行业要接受低质量的程序员呢?

那么,低质量开发者的根本原因是什么呢?

3.编程书籍

几天前,我正找一些我以前看过的旧书的时候,恰巧找到了几本关于Java的书——一本针对学习Java的初学者,另一本针对于SCJP认证。对于接下来要讲的话题,具体书名我就不说了。

不幸的是,初学者参考的那些书籍总是在不经意间准确描绘了差的代码应该是怎么样的。

任何编程语言的初学者书籍,大多满是坏的代码。如《Clean Code》和《Pragmatic Programming》就是如此,但这些书籍却被广泛用于教导大多数的初学者。

一些糟糕代码的例子……

3.1糟糕地命名类、变量和方法

i, ii, j, k用于循环;SampleChapter1用于类名;等等

3.2不分离关注点

三页长的main()方法囊括了一切,没有根据责任不同分成不同的方法。

3.3不好的编码实践

没有如包含验证或异常处理这样好的编码实践。相反,他们通常使用一个包含所有代码在类内的大的通用的try()..catch(Exception e)块。

大量使用if-else,switch,goto语句等。

3.4走捷径

这些书籍还需要摆脱“快速修复”的编程风格。例如,方法中有10个参数并不罕见。

需要做两种类型的计算?没问题,传递一个布尔参数,并添加一个if-else结构即可。需要增加新的功能呢?哈哈,那就添加更多的代码到那个已经长达两页的方法中去!这里只举几个走捷径例子。

学习编程的一个好方法是掌握语言的语法,高效开发所需的工具,以及组成代码的组件和模块的设计——以这种顺序。

不幸的是,大多数书籍停留在语法上,而不触及工具和设计改进的话题。虽然这些书的意图和目的是要教导编程语言的语法,但是阅读的人同时也会学习编码风格和方法。

在初学者学习代码的时候,教导他们明白一件事非常重要,那就是,代码是为其他人阅读和理解而写的,而并非是为了编码器而写。

希望你们中的一些人在阅读了这篇文章之后,如果将来写编程书籍的话,请务必要记得在书中写好代码!学着产出高质量的代码不应该只限于专家级的书籍中,而应该是每本关于编程的书的重要组成部分!

当初学者用来学习的书籍中包含低质量的代码时,我们怎么能期待学自这些书的人会产出高质量的代码呢?

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2016-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序人生 阅读快乐

JavaScript语言精粹(修订版)

JavaScript曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编...

691
来自专栏java一日一条

为什么程序员总是写糟糕的代码?这3个原因

我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有的人技术水平高,有的人水平却低,有人对这门技艺感兴趣,但也有的人却不愿意在工作之外学习其他。

723
来自专栏JavaQ

和大牛之间的差距

上班的途中看了网络大V的一篇关于差距是如何产生的文章,略有小感。 文章的大意是差距是因为勤奋而导致的,无论先天和后天条件如何,只要足够勤奋都可以和别人产生差距。...

3565
来自专栏闵开慧

给程序入门者的一点建议

Java自学之道(一) 给程序入门者的一点建议     在书场上看到很多有关Java的书籍,但这就像进了瓜地里挑瓜挑的眼花,很多人不知道自己到底该选那本书好。很...

3126
来自专栏编程

C语言编程怎么培养编程思维?没思路?我来带你找自己的思路

编程思维,可以说是一种感觉吧。培养编程思维,就是培养自己解决问题的能力,这种感觉可以帮助你更快找到问题点,对症下药。 1.要【会学】C语言 跟着老师或者自学学完...

3605
来自专栏钱曙光的专栏

一周极客热文:C\C++代码优化的27个建议

极客头条上周最受大家关注的和被广泛讨论的是:《C/C++代码优化的27个建议》,这27个黄金建议很是实用,下面我列举一二。 跳转和分支执行代价高,如果可能,尽量...

2095
来自专栏Python中文社区

十本书教你从Pythoner通往Pythonista

1、Python基础教程 本书是经典教程的全新改版,作者根据Python 3.0版本的种种变化,全面改写了书中内容,做到既能“瞻前”也能“顾后”。本书层次鲜明、...

44910
来自专栏CVer

7 月编程语言指数榜:Python力压Java夺冠

PYPL官方发布7月编程语言指数榜,Python以5.5%的高速上涨趋势力压Java夺得榜首。在此后五名是:Javascript、PHP、C#、C/C++和R。

1813
来自专栏程序人生

如何从零开始学一门程序语言?

今天一大早排队挂号给孩子看病,耽搁了,现在才发。 说实话,『能花钱的,就不要花时间』是篇即兴之作,本该随着时间被有限的听众渐渐淡忘。但没想到前有 @老赵 微博转...

3546
来自专栏企鹅号快讯

学Java到底好不好,已学未学将要学,大家都快看过来

很多人都想精通一门计算机语言,想学习Java开发,看中的不仅是优厚的待遇,更多的是广阔的行业发展前景。但是我们该怎么做,才能在有限的时间内快速的掌握Java这门...

2087

扫码关注云+社区

领取腾讯云代金券