程序员|糟糕的程序员比优秀的程序员差在哪里?

程序员|糟糕的程序员比优秀的程序员差在哪里?


有人说 , 在软件开发中 , 优秀的程序员比糟糕的程序员的工作产出高100倍 。 这听起来有点夸张 , 实际上 , 我可能更悲观一点 , 就我看来 , 有时候 , 后者的工作成果可能是负向的 , 也就是说 , 因为他的工作 , 项目会变得更加困难 , 代码变得更加晦涩 , 难以维护 , 工期因此推延 , 各种莫名其妙改来改去的bug一再出现 , 而且这种局面还会蔓延扩散 , 连那些本来还好的代码模块也逐渐腐坏变烂 , 最后项目难以为继 , 以失败告终 。
如果仅仅是看过程 , 糟糕的程序员和优秀的程序员之间 , 差别并没有那么明显 。 但是从结果看 , 如果最后的结果是失败的 , 那么产出就是负的 , 和成功的项目比 , 差别不是100倍 , 而是无穷倍 。
程序员的好坏 , 一方面体现在编程能力上 , 比如并不是每个程序员都有编写一个编译器程序的能力;另一方面 , 体现在程序设计方面 , 即使在没有太多编程技能要求的领域下 , 比如开发一个订单管理模块 , 只要需求明确 , 具有一定的编程经验 , 大家都能开发出这样一个程序 , 但优秀的程序员和糟糕的程序员之间 , 依然有巨大的差别 。
在软件设计开发这个领域 , 好的设计和坏的设计最大的差别就体现在应对需求变更的能力上 。 而好的程序员和差的程序员的一个重要区别 , 就是对待需求变更的态度 。 差的程序员害怕需求变更 , 因为每次针对需求变更而开发的代码都会导致无尽的bug;好的程序员则欢迎需求变更 , 因为他们一开始就针对需求变更进行了软件设计 , 如果没有需求变更 , 他们优秀的设计就没有了用武之地 , 产生一拳落空的感觉 。 这两种不同态度的背后 , 是设计能力的差异 。
一个优秀的程序员一旦习惯设计、编写能够灵活应对需求变更的代码 , 他就再也不会去编写那些僵化的、脆弱的、晦涩的代码了 , 甚至仅仅是看这样的代码 , 也会产生强烈的不舒服的感觉 。 记得一天下午 , 一个技术不错的同事突然跟我请假 , 说身体不舒服 , 需要回去休息一下 , 我看他脸色惨白 , 有气无力 , 就问他怎么了 。 他回答:刚才给另一个组的同事review代码 , 代码太恶心了 , 看到中途去厕所吐了 , 现在浑身难受 , 需要休息 。
惊讶吗?但实际上 , 糟糕的代码就是能产生这么大的威力 , 这些代码在运行过程中使系统崩溃;测试过程中使bug无法收敛 , 越改越多;开发过程使开发者陷入迷宫 , 掉到一个又一个坑里;而仅仅是看这些代码 , 都会使阅读者头晕眼花 。
糟糕的设计糟糕的设计和代码有如下一些特点 , 这些特点共同铸造了糟糕的软件 。
僵化性软件代码之间耦合严重 , 难以改动 , 任何微小的改动都会引起更大范围的改动 。 一个看似微小的需求变更 , 却发现需要在很多地方修改代码 。
脆弱性比僵化性更糟糕的是脆弱性 , 僵化导致任何一个微小的改动都能引起更大范围的改动 , 而脆弱则是微小的改动容易引起莫名其妙的崩溃或者bug , 出现bug的地方看似与改动的地方毫无关联 , 或者软件进行了一个看似简单的改动 , 重新启动 , 然后就莫名其妙地崩溃了 。
如果说僵化性容易导致原本只用3个小时的工作 , 变成了需要三天 , 让程序员加班加点工作 , 于是开始吐槽工作的话 , 那么脆弱性导致的突然崩溃 , 则让程序员开始抓狂 , 怀疑人生 。
牢固性牢固性是指软件无法进行快速、有效地拆分 。 想要复用软件的一部分功能 , 却无法容易地将这部分功能从其他部分中分离出来 。