每个程序员都有自己烦恼的事。不论这事指的是范围蠕变(scope creep),还是 指匈牙利变量命名 (Hungarian notation),还是有臭味的同事,我们都明白,这是我们有我们行业里的特定的烦恼。 下面要说的就是十大让程序员们烦恼的事情,这是我从最 近的在StackOverflow上的一个调查里整理出来的,并且掺杂了一些我个人的经验:
10. 注释 — 只解释了“how”却没有解释“why”
入门级的编程课程通常会教育学生们写代码前先写注释、而且要尽量多注释。 这种教育的出发点是“多注释肯定比少注释好、少注释肯定比没注释好”。 可不幸的是,很多的程序员把这当成了一种任务,对每一行代码都注释一下。 这就是为什么会经常看到像Jeff Atwood在他的博客文章Coding Without Comments提到的代码:1 r = n / 2; // 让 r 等于 n 除以 2
2
3 // 当 r - (n/r) 大于 t 时进行循环
4 while ( abs( r - (n/r) ) > t ) {
5 r = 0.5 * ( r + (n/r) ); // 设置 r 等于 r + (n/r) 的一半
6 }
经过这样的注释,你否明白了这段代码是干什么的?的确,我也没明白。 问题就在于,虽然有大量的注释,可它们只是描述了代码是干什么了,却没有说明代码为什么要这样写。
现在,请看一下我们采用另外一种方式对同一段代码进行的注释:1 // 使用牛顿-Raphson算法求n的平方根近似值
2 r = n / 2;
3
4 while ( abs( r - (n/r) ) > t ) {
5 r = 0.5 * ( r + (n/r) );
6 }
这就好多了!也许我们还是不能完全明白这段代码的作用,但至少是有了一点方向了。
注释是用来帮助读者理解代码的,不是用来解释语法的。 我可以大胆的认为,读者对for循环的工作原理是了解的;所以没必要写这样的注释:“// 对客户列表进行for循环操作”。 读者不明白的是你的代码是做什么用的,你为什么要采用这种方式实现它。
9. 干扰
很少有程序员能在眨眼之间从一种活动中转换到编程的状态中。通常情况下,我们更类似于需要慢慢启动的火车,而不是能突然加速的 法拉利; 我们需要一定的时间才能进入工作状态,一旦我们进入稳定有效的工作状态,我们的工作效果和产出会很丰硕。 不幸的是,当思路不断的被客户、经理、以及你的同事打断时,你的大脑很难进入编程的状态。
当我们干一件事情时,有太多的琐事需要我们放在心里,我们需要先放下这个事情,处理那个人事情,回头又干这个事情,还不能有差错。这些干扰会中 断我们的思路,而重新整理清楚思路又要你花费大量的时间,这是让人懊恼的、没有比这更让人泄气、让人有挫折感的过程了。
8. 范围蠕变(Scope creep)
来自 Wikipedia 的解释:
范围蠕变(Scope creep) (也称作焦点蠕变(focus creep), 需求蠕变(requirement creep), 功能蠕变(feature creep),以及其它一些乱七八糟的演变词语),指在项目管理里项目的需求变更失控。 当一个项目的范围没有明确的定义清楚、没有文档化、不受控时就会出现这种现象。 这通常被认为是一种有负面影响的事情,应该尽力避免。
范围蠕变通常会把一个简单的需求变成一个复杂惊人的需要大量时间的巨无霸。 那些负责需求调研的家伙们只需要敲几下无辜的键盘就能把事情变成这样:
版本 1: 显示这个地区的地图
版本 2: 显示这个地区的地图,要三维立体的
版本 3: 显示这个地区的地图,要三维立体的,而且能够使用它作为飞行导航图
晕倒!一个本来30分钟能完成的任务变成了一项要几百人/天才能完成的超级复杂的系统。更糟糕的是,大多数情况下,需求变更是发生在开发阶段 的,这样一来你需要重写代码,重新回归,有时要把前几天才开发的代码删除。
7. 管理者 — 完全不懂编程
管理工作不是一种简单的工作。人是一种让人很讨厌的动物; 我们善变、喜怒无常,我们都自以为天下第一。 想让这样的一群人都感到满意和团结,你需要付出像山一样大的努力。 然而,这并不意味着管理者就可以在对下属的工作毫不理解的情况下进行管理。 当管理者对我们的工作没有一点知识概念时,后果只会是需求频繁变动,不现实的工期,普遍的挫折感(管理者和开发人员)。 程序员们对此的抱怨相当普遍,这也是产生争执不合的根源(就像一个欢闹的卡 通片).
6. 写文档
在说这个条目之前我先承认,我们确实有很多的文档生成工具,但据我的经验,这些工具都是只适合生成API文档,以供其他程序员参考。如果你开发 的软件是平时人们每天都要用的,你必须要写一些外行人(例如你的实施,客服等)都能理解的文档手册。
我们可以很容易的看出,有些事情程序员们极不愿意去做。 你可以简单的回顾一下所有的开源项目。 人们百折不挠的对这些项目的一个索求是什么:文档。
我敢打保票的说,不管在哪里,至少会有一半的程序员当要求写文档时会说:“不能让其他人去写吗?“。
5. 程序 — 缺少文档
我可从来没说过我们程序员是说一套做一套的人。 程序员们经常会在他们的项目里用到第三方的类库和应用。 于是,我们需要文档。 很不幸呀,就像我在第6条里说的那样,程序员们痛恨写文档。这戏剧性的事情发生在我们自己身上。
当你需要使用一个第三方类库时发现,至少有一半的API无从知道是干什么好用的,没有任何事情比这个更打击人的了。 函数 poorlyNamedFunctionA() 和函数 poorlyButSimilarlyNamedFunctionB() 有什么区别? 在我使用 PropertyX 属性前是否需要测试一下它是不是 null 值?我估计只有通过自己的测试和报错才能弄清楚!可恶。
4. 硬件
任何一个曾经被叫去调试一个数据库服务器上奇怪的宕机现象,或是被叫去解决RAID驱动器不能正确的工作的问题的程序员,当发现是硬件问题时, 都会痛苦不已。 人们有一种普遍的误解,认为程序员就是搞电脑的,他们肯定知道如何修理电脑。 不可否认,有些程序员确实是个全才,但我估计,绝大部分程序员都不知道,或者根本不关心当程序被编译成机器码后如何工作的。我们只关心做出来的东西是否符 合需求文档,这样我们才能集中精力去解决这上层的任务。
3. 含糊不清
“网站宕机了”. “XX功能工作不正常”。 处理含糊不清的任务是种痛苦。 每次当非程序员被要求重现他们所遇到的问题时表现出的愤怒都让我吃惊不已。 他们似乎不太明白,仅仅一句”它宕机了,修复它!”是无法让我们开始工作的,我们需要更多的信息。
软件的运行是(大部分情况下)有迹可寻的。我们也乐见与此。 请迁就我们,帮我们指出是在哪个阶段,什么情况下出的问题,而不是简单的说一句”修复它“。
2. 其他程序员
程序员经常和其他程序员合不来。诧异吗,但这是真的。 这方面的事情我可以轻松的列出十大条,讲细点甚至可以单独写篇博客,所以这里我只列出几个常见的、让其他同事感到懊恼的程序员的特征:
脾气暴躁以至态度极不友好。
不能明白什么时候该去讨论系统的架构,什么时候是应该去动手去做。
无法进行有效的沟通,使用易于误解的专业术语。
自己的事情处理不好。
对要做的程序和项目缺乏兴趣。
那么,这最后的,但不是最糟糕的,序号为1的让程序员们烦恼的…
1. 自己写的代码 — 6个月以后的
Don’t sneeze, I think I see a bug.
回顾一下自己以前写的代码,是否也会愁眉苦脸?当时怎么会这么愚蠢!怎么能编写成这样的东西! 烧掉!丢到火里!
哈,好消息。你并不孤单。
现实是,软件技术界是一个不断变化的世界。 今天被看成是最好的方式,明天也许就会过时。 我们不可能写出完美的代码,因为判断我们的程序好坏的标准日新月异。 这令人很不爽,你的作品,今天看来是那么的完美,但也许不久之后就会变成被人嘲笑的对象了。 真是让人沮丧,因为不论我们如何努力的学习最新最棒的开发工具,设计,框架,以及开发方法,我们总是比最新的技术发展趋势慢了一拍。 对于我来说,这是做一个程序员最苦恼的事情了。我们不断的升级技术,是为了让软件更好,但却禁不住感到,我就像一个做沙毯(sand-painting)的和尚。
好了,全都给写出来了。这十大让程序员烦恼的事情。 依旧,如果你觉得我的文章里有什么疏漏的地方,请让我知道,欢迎留下评论!
分享到:
相关推荐
【程序员十大技术须知】 1. XML(可扩展标记语言):XML 是现代软件开发中的核心技术,用于存储和传输结构化数据。它采用自描述的文本格式,允许数据以树形结构表示,既能存储结构化数据,也能处理非结构化数据。...
《程序员成长的烦恼》这本书是针对程序员在职业生涯中所遇到的各种问题进行深入探讨的宝贵资源。作为一本专门针对程序员的专业读物,它涵盖了从技术学习、职业规划到团队协作、项目管理等多个方面,旨在帮助程序员...
《程序员成长的烦恼》这本书由吴亮等人撰写,聚焦于程序员在职业生涯中遇到的各种挑战和问题,旨在为程序员的成长提供指导。尽管提供的【部分内容】并未包含具体的书籍内容,但我们可以根据书名和常见的话题来探讨...
1、有人曾说,做程序员的人,都是疯子,做长了往往入戏太深,成天与代码打交道,话都很少说,所以评论程序员们都是以后连妞都泡不到的人,我听后,我可以这样说,泡妞好比一个方法,他人是学习方法,而程序员呢,是...
在追寻梦想的道路上你并不孤单,书中的四位草根程序员和你拥有着相同的过往:打小在486电脑上自学编程,从钻研技术转向兼顾管理的吴亮;毕业后当上油田焊接技术员,心里却始终放不下编程,刻苦自学的周金桥;做过...
标题中的“程序员专用编程输入法”指的是专门为程序员设计的特殊输入法工具,旨在提升编码效率。这类输入法通常具有以下特点: 1. **快捷代码输入**:程序员输入法能够通过快捷键、组合键或者自定义短语来快速输入...
程序员项目交接文档概要 IT 项目交接文档概要是程序员在项目交接过程中的重要文件,它对项目的开发、测试和维护起着至关重要的作用。本文档概要将对程序员项目交接文档的主要内容进行概要介绍。 人事模块是程序员...
在编程领域,代码是程序员与计算机对话的语言,而程序员记事本则是程序员与代码对话的桥梁。随着技术的不断迭代和项目的日益复杂,代码片段的有效管理成为提升开发效率的关键。程序员记事本应运而生,它不仅仅是一个...
java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流项目经验java程序员面试交流...
程序员简历程序员简历.pdf
2000-2010历年程序员考试真题,对软考程序员的一些试题总结,包含答案;程序员考试上午科目和下午科目的考试形式与考核内容已经趋于稳定,考生应紧扣考试大纲和指南,有针对性地进行学习。
《程序员教程》是一本针对初学者和有一定经验的程序员精心编写的教材,旨在全面介绍编程基础知识和实践技能。这本书以PDF格式提供,便于电子阅读和随时查阅。它涵盖了程序员需要掌握的各种关键知识点,无论你是刚踏...
iOS程序员简历模板 Android程序员简历模板 Web前端程序员简历模板 Java程序员简历模板 C/C++程序员简历模板 NodeJS程序员简历模板 架构师简历模板 通用程序员简历模板PHP程序员简历模板 iOS程序员简历模板 Android...
程序员工作日志示例管理文档 工作日志是程序员日常工作中不可或缺的一部分,它可以帮助程序员更好地管理自己的时间、提高工作效率、记录工作进度、总结工作经验等。本文档是一个程序员工作日志示例,旨在帮助程序员...
【程序员修身养性的十大原则】是针对IT从业者提升个人素养和职业发展的重要指南。这些原则不仅关乎编程技能的提升,更关乎心态调整、人生观的塑造,旨在帮助程序员在快速发展的科技环境中保持竞争力,同时平衡工作与...
【程序员个性电脑桌面壁纸】这一主题,其实涵盖了两个主要方面:一是程序员文化,二是电脑桌面壁纸的个性化选择。这两者都是IT行业中与个人工作环境和精神风貌紧密相关的元素。 首先,我们来谈谈程序员文化。程序员...
程序员教程和相关考试的一些试题,真题!程序员教程(程序员考试的相关内容)程序员教程(程序员考试的相关内容)程序员教程(程序员考试的相关内容)
程序员表白神器你值得拥有-程序员表白神器你值得拥有 程序员表白神器你值得拥有-程序员表白神器你值得拥有 程序员表白神器你值得拥有-程序员表白神器你值得拥有 程序员表白神器你值得拥有-程序员表白神器你值得拥有 ...