本文指出大多数程序员都容易犯下的错是,因为对编程的兴奋,不知道什么时候应该对编码说“不”。程序员需要知道什么时候不需要编码,并从项目中删除所有不必要的代码,这将让工作变得更容易,并使软件寿命更持久。

领取Python学习资料可以加小编的微信:tz2020jd

对什么说“不”

学会说“不”是一个好的开端。

但是到底是对什么说“不”,又是什么时候适合说“不”呢?

这的确是大多数程序员,甚至是那些高级程序员都很容易混淆的一个重点。

作为一名程序员,编写代码无疑是你职业中最重要的部分。在你的编程生涯中,你不可避免的地将会处理各种关于不同类型代码的请求。而每个请求都可能会迫使你做出一些艰难的决定。这些看上去一切正常,似乎也没什么错。毕竟,这是所有人对你的期望:作为程序员就该编写代码。然而,这里有一个问题:你是否应该编写向你请求的所有代码?

这个问题给我们引入了一个程序员所能学到最重要的技能:

知道什么时候不编码可能是程序员所能学到最重要的技能。——《可读代码的艺术》

对上面这句话,我完全同意。这是为什么呢?

编程是解决问题的一门艺术。因此,自然而然地,程序员成为了问题解决者。作为程序员,当我们面前有一个新问题有待解决,或因为任何其他原因需要我们写出代码行时,我们会因为使命感而感到兴奋。

有这种兴奋也是再正常不过的,毕竟我们是程序员,我们就是喜欢写代码。

然而,对编写代码这件事过于兴奋就会让我们变得盲目。这种情绪会让我们忽视了一些重要的事实,而这些事实可能导致更大的问题,让我们在未来不得不再去解决这些更严重的问题。

那么,我们往往容易忽略哪些重要的事实呢?

你写的每一行代码都是:

  • 必须被其他程序员阅读和理解的代码
  • 必须被测试和调试的代码
  • 会增加软件缺陷的代码
  • 可能会在将来引入新 bug 的代码

正如 Rich Skrenta 所写的,代码是我们的敌人:

代码可谓是邪恶的。代码会腐烂。代码需要定期维护。它们总是包含有待发现的 bug。而新特性的添加总是意味着旧代码必须进行调整。代码量越大,bug 所能藏身的地方就越多,且 checkout 或编译代码所需的时间就越长,而新员工理解这个系统所需要的时间就越长。这还意味着,如果你需要重构代码,需要挪移更多东西。此外,更多的代码通常意味着程序拥有更少的灵活性和更少的功能。这一点乍一看是违反直觉的,但确实很多时候,较之一个才华平庸的程序员所编写的冗长混乱的代码,一个简单优雅的解决方案能运行更快,且其功能会更通用。代码都是由程序员编写的。所以编写更多的代码往往需要更多的程序员。而程序员之间的沟通成本是以 n²的速度增长的,然后,这些程序员写的所有代码都添加到系统,在扩大系统功能的同时,也会增加整个软件工程的运营成本。

我说的这些都是真的,难道不是吗?所以,那些用他们的生产效率和编程思维来激励你的伟大程序员们,都是那些知道什么时候该说“不”,什么时候不编程的人。易于维护、持续寿命长、不断帮助用户实现功能的那种软件,应该不包含任何不必要的代码行。

最好的代码其实是没有代码,而最有效率的程序员知道什么时候不应该编码。

怎么知道什么时候不应该编码呢?

当你投身一个项目的时候,很自然地会感到兴奋,满脑子都是所有那些想要实现的炫酷功能。但是程序员往往容易高估了他们的项目真正需要多少特性。于是就造成系统中有许多未完成或未投入使用的特性,甚至有些特性纯粹只是让应用程序变得过于复杂。你应该首先了解什么对你的项目是必要的,以避免犯下这种错误。

了解软件的用途及其核心定义,这是知道什么时候不应该编写代码的第一步。

请容许我举一个例子。假设,你的软件只有一个目的:管理电子邮件。基于这个目的,发送和接收电子邮件是该软件项目的两个基本功能。你就不应该期待这个软件同时也能管理你的待办事项清单,难道不是这样吗?

因此,你应该拒绝与此核心定义无关的任何可能的特性请求。在这种时候,可以确切地肯定你明白什么时候不应该编写代码。

永远不要随意扩展软件的用途。

一旦知道了什么内容对你的项目是必不可少的,那么在下一次评估所有可能出现的代码请求时,你会意识到这一点。你将清晰地知道编写代码的需求是什么。这个系统应该实现哪些特性?哪些代码值得编写?于是,你可以勇敢地去质疑一切,因为你确切地明白那些不必要的代码是如何拖垮你的项目的。

知道什么时候不应该编码可以使你的代码库更小。

当你启动一个新项目时,一开始系统里只有两三个源文件。一切看起来都那么简单明了。而编译和运行代码仅仅需要几秒钟。这时,你完全清楚在哪里可以找到你想要的东西。

然后,随着项目的增长,将会有越来越多的源文件填满你的目录。其中每个代码文件动辄就包含数百行代码。为了更好地组织这些代码,你很快就需要设立多个目录。记住哪个函数调用其他函数变得比以前更加困难,而追踪 bug 需要付出更多的工作量。管理这个项目变得越来越困难,于是,你需要更多的程序员来帮忙。然后,沟通开销随着程序员数量的增加而急剧增加。你的项目会变得越来越慢。

最后,这个项目变得非常庞大。添加新特性变为一种痛苦。因为即使是很小的改变也需要花上几个小时。修复当前的 bug 总是会引入新的 bug。你的项目开始赶不上最后期限……

现在,这个项目对你来说是一场折磨。为什么会变成这样?

这都是因为你不明白什么时候不应该编码。于是你对所有可能的特性请求都毫不犹豫地说“是”。你是盲目的。编写那些不必要的新代码会让你忽略软件最必不可少的核心内容。

这听起来就像恐怖电影一样,是吗?

但如果你一直对每件事都说“是”,这种恐怖的情况就会发生。你需要知道什么时候不需要编码,并从项目中删除所有不必要的代码。这将让你的工作变得更容易,并使你的软件的寿命更持久。

我生产效率最高的一天就是扔掉了 1000 行代码。——Ken Thompson

我知道,要明白什么时候不需要编写代码,这点做起来是很难的。即使是高级程序员来说也并不容易。也许,我在这篇文章中所写的东西对于初级程序员来说很难理解,但我认为本文的叙述方式还是能让人理解这些要点的。

我明白,有的程序员或许刚刚开始你的编程生涯,想在编码领域大展身手。你对此感到兴奋不已。这点无可厚非。作为软件从业者,希望你永远不要失去这种兴奋感,但也请不要忽视重要的事实。我们需要从自己的错误中吸取教训。你和别人一样,也会犯错误,也会从自己的错误中吸取教训。但如果你能从我们的经验中学习,至少能更事半功倍。

请继续编码吧,但要知道什么时候需要对编码说“不”。

程序员最重要的技能:知道什么时候不写代码相关推荐

  1. 当程序员没了互联网,该如何继续学习写代码?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 编者按:现在很多时候,我们都是面向搜索(或 Google 或百度).GitHub 编程,那么 ...

  2. Erlang之父去世,忠告程序员:先思考再编程,累的时候不要写代码

    作者:黄哲铿<技术管理之巅>作者.技术领导力特约撰稿人 Erlang之父Joe Armstrong于4月20日去世,享年68岁. Erlang Solutions.Erlang Facto ...

  3. AI终将砸掉程序员的饭碗,动动手就能自动写代码的GPT-3来了

    近日OpenAI发布其最新的NLP模型-GPT-3(论文地址:https://arxiv.org/abs/2005.14165),并成功登顶了Github的趋势榜(https://github.com ...

  4. 高效程序员秘籍(6):使用CLCL加快写代码的速度

    经常看到论坛上有人抱怨日常的编程工作就是复制和粘贴,对此我也深有体会,尤其是利用类似SSH框架开发的项目,很大一部分代码都是通过复制粘帖然后再稍加修改完成的.但是Widows的剪贴板只能记录最近一次复 ...

  5. 当程序员没了互联网,该如何继续学习写代码

    因为是看的别人的,自己又懒就放上链接吧. http://blog.csdn.net/csdnnews/article/details/78787775

  6. 面试感悟-------一名3年工作经验的程序员应该具备的技能

    转载: 面试感悟-------一名3年工作经验的程序员应该具备的技能 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当 ...

  7. Java程序员涨薪必备技能

    2019独角兽企业重金招聘Python工程师标准>>> Java程序员涨薪必备技能 Java程序员涨薪必备技能 工作1-3年,当我们向老板提出加薪的时候,或者跳槽去"捡&q ...

  8. 面试感悟—-一名3年工作经验的程序员应该具备的技能

    文章来自:五月的仓颉 五月的仓颉 是一位非常优秀,乐于分享的大神,目前就职阿里 原文链接:https://www.cnblogs.com/xrq730/p/5260294.html 前言 因为和同事有 ...

  9. Matlab | 用Matlab写一首歌送给女朋友——程序员必备撩妹技能(Matlab源码)

    ========================================== 博主github:https://github.com/MichaelBeechan 博主CSDN:https:/ ...

  10. 一个合格的web前端程序员要学会哪些技能?

    想要成为一名合格的web前端程序猿,要学习的东西有很多,那么web前端要学会哪些技能呢?来看看下面的详细介绍就知道了. 一个合格的web前端程序员要学会哪些技能?想从事web前端开发,只会HTML.C ...

最新文章

  1. 华为鸿蒙系统强势来袭,呼之欲出的华为神作——鸿蒙2.0 强势来袭
  2. 不一样的STAR法则
  3. BNUOJ-26474 Bread Sorting 逆序对
  4. 练习题之Wait/Notify
  5. 高并发-【抢红包案例】之二:使用悲观锁方式修复红包超发的bug
  6. HDFS的简介及基本操作(常用的命令参数介绍)
  7. HDOJ 1753 明朝A+B
  8. :继续教育学习助手_我们自己做:教育的开放组织
  9. Kyligence李扬:数据智能推荐成为技术发展新方向
  10. Odoo10参考系列--Odoo指导方针
  11. 小牛电动京东众筹活动中的违约行为记录
  12. mysql触发器 多数据_mysql的触发器同数据库多表的数据操作_MySQL
  13. python利用公式计算_从零开始用Python构造决策树(附公式、代码)
  14. 这个时代再也难出现贵子
  15. 2022年 MathorCup 思路分享
  16. 【盘点】imx6的应用
  17. Java标识符命名规则,运算符,分支结构
  18. html5的class属性值,HTML class 属性 | 菜鸟教程
  19. EditPlus字体放大方法
  20. Chart.js给图片数据动态赋值

热门文章

  1. ECharts安装和使用
  2. GeoJSON全网最详细的介绍与解读
  3. 网络安全笔记——第十二天:Linux文件和目录操作命令(一)——文件操作
  4. python如何把数放到ls里面_教你用 Python 修改微信(支付宝)运动步数,轻松升到 TOP1...
  5. 微信、QQ是如何实现抢红包?
  6. VS2019 创建C语言项目
  7. 外贸软件_仿神卓外贸管理软件强大的邮件群发功能(不被退信的实现方法)
  8. python程序画漂亮图_存储五彩画笔绘制的漂亮简笔画的Python实现(Python GUI编程)...
  9. 关于rxjava(五)
  10. vue环境的搭建过程