为什么程序员总是写糟糕的代码?这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一日一条(mjx_java)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

腾讯阿里网易游戏华为科大讯飞面经

47890
来自专栏CVer

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

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

18830
来自专栏企鹅号快讯

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

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

21470
来自专栏Python小屋

Python教学与学习过程中应注意的九句话

1、Python是以快速解决问题为出发点的,不建议把太多时间花费在底层语言细节上,例如内存分配与管理,千万别像教/学C语言一样教/学Python。

11340
来自专栏大数据钻研

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

我最近一直在想我们作为一个行业为什么总是产出糟糕代码的原因。 1.明显原因…… 我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有的人技术水平...

33980
来自专栏企鹅号快讯

C加加游戏编程永不过时的语言,原因何在?

想要知道C++到底如何你首先要了解C++的特性。C++既保留了C语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,...

39880
来自专栏程序人生

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

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

36660
来自专栏企鹅号快讯

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

我最近一直在想我们作为一个行业为什么总是产出糟糕代码的原因。 1.明显原因…… 我一下子想到的最明显的原因是,有好的程序员,也有不那么好的程序员,有的人技术水平...

20100
来自专栏杨建荣的学习笔记

Python实现的快速排序

今天看了下《算法新解》这本书,很薄的一本书,最开始吸引我的有两点,一个是里面的大量的图,内容相对来说比较清新,第二个是里面的代码是基于Python实现。尽管算法...

39870
来自专栏JavaQ

和大牛之间的差距

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

36050

扫码关注云+社区

领取腾讯云代金券