感触极深!二十年的编程,教会我的五件事!
来源/翻译:CSDN
原文:https://daedtech.com/5-things-ive-learned-in-20-years-of-programming/
无论你是刚入编程的小白,还是已经浸润编程数年的资深人员。相信这篇文章都会给你带来不一样的启发,前人的经验永远是我们最容易看到的捷径。
以下为译文:
今年,我对DEV社区平台(https://dev.to/)有了很大的了解。在Reddit众多怒气冲冲的评论家以及急于否定他人的鉴赏家中,这个平台积极的正能量宛如一片绿洲,让人眼前一亮,并为我们带来了更广阔的软件世界。
这个社区非常有趣的一面是,社区中似乎有很多初学者。我经常看到新手撰写的帖子以及面向新手的帖子。所谓“新手”,指的是那些渴望成为程序员的人,他们或者在参加培训班,或者在寻找入门级的工作,或者只是不幸被定义为“初级”的角色。
我觉得这很有趣。相对而言,新手对该行业充满更多热情和兴奋。而这种兴奋是富有感染力。
然而,同时也让我感受到我在这个行业中属于前辈了。
我想起了Bob Martin曾在播客或演讲中说过的一段话。
在过去的4-5年中,程序员的需求急剧增长,以至于程序员的数量每隔5年就会翻一番。结果是,拥有5年经验的程序员在这个行业的任职时间甚至超过了该行业的一半。
行业的前辈
如今,我已在这个行业中度过了20个春秋。其中的10年时间里,我的主要工作都是编写代码。而另外10年都在管理程序员、指导他们,就如何管理程序员向组织提供咨询,运行代码库评估实践,而如今的我在从事内容营销。
但是,无论身处以上哪个职位,我都在或多或少地编写代码。
根据上述有关程序员增长速度的估算,我比这个行业中94%的人都年长。
所以,总结起来说,我是一个与编程新手厮混在一起的编程爱好者。
于是,我不禁在想:“如果我可以将这段经历总结成一些简短的建议,再假设有人感兴趣,那么我会对他们说什么呢?”
以上就是这篇文章的背景。下面让我来谈一谈20年编程生涯为我带来的重大教训和收获。
最糟糕的莫过于知识重复
“避免复制粘贴的编程!”
如果你在编写应用程序时,总是靠复制、粘贴和修改代码,如果还没有人因此而拿戒尺打你的手心,那么现在你自己动手吧。
你应该停止这种做法。立刻,马上!这是一种可怕又偷懒的做法。
想象一下,你有一个完美的CalculateBill()方法,但是产品经理犹豫着说:“我们有一部分客户来自墨西哥,那边的账单计算方式不一样。”于是,你复制了这个方法,重新命名为CalculateBillMexico(),并根据需要做出调整。
这种方法的问题在于:
如果将来核心的逻辑需要调整,那么你就必须付出额外的劳动,因为你需要修改两个方法。
一旦发生变更,你的代码出bug的机会也会加倍。
如今你已经建立了一个“设计模式”,随着全球扩张的继续,你的代码还会因为第三个国家而衍生出第三个冗余的方法。
随着工作的进展,你的工作量将急剧增加。
在修改代码时,你迟早会因为忘记修改所有的方法而产出新bug。
最终,所有这些方法之间都会产生很大的差异,以至于你无法合理地将这些方法合并回去,并从根本上解决问题;即便没有如此大的差异,每当更新账单的计算方式时,你就需要进行20次的更改。
是不是一塌糊涂?而这只是“复制-粘贴”的表面问题。
复制粘贴只是一个开端
真正的问题在于系统中的知识重复。
系统中的知识重复可以以多种方式发生,而无脑地复制粘贴只是最明显和最愚蠢的方式。知识重复的其他形式还包括:
for循环上方的代码注释解释循环的开始、结束和增量。
全局变量在程序里赋了一个值,然后从配置文件中重新赋了另一个值。
数据库表中同时包含“税前总额”、“税款”以及“总金额”三列。
范围很广的ERP系统,CRM模块中存储了客户信息,然后在账单模块中又存储了一次。
对于以上所有这些情况来说,最好的打算也不过是通过恰当的流程和系统来认真地跟踪重复并确保同步更新。
至于一无是处的代码注释,团队的领导会警告你每次更新代码时,都别忘了检查注释。
还有上述的ERP系统,销售和会计两个部门都需要严格地制定备忘录,并通过发送正式电子邮件确保客户信息保持同步。
而且,请记住,这些还只是最好的打算。
当你为了确保同步开始构建复杂的逻辑(那么你就必须进行维护——请参照下一节)时,情况就会每况愈下。
也许你只需要实现一个数据库触发器,就可以在“总金额”列发生变化时确保“税前金额”+“税款”=“总金额”。或者,你也可以编写尴尬的状态检查逻辑,当默认的全局变量值与配置文件分配的值不匹配时,记录警告。
糟糕时候,上述情况会造成数据不同步。然而,作为程序员,你可能不必担心,因为你的工作也包括弄清楚为什么多年来从未给某个客户开过发票或多收了客户很多钱。
然而,根除系统中出现的知识重复问题并积极抵制,就可以避免所有这些情况。
代码是负债
作为开发人员,我们喜欢写代码。写代码的感觉非常好,而且构建软件令人兴奋。
此外,我们还需要学习新的语言、范例、框架、技术栈、工具、API和库。我们沉浸在自己的内心世界,享受快乐地编写代码的状态。
然而,沉浸在代码世界而不自知的不止我们。
被误导的秃头老板甚至用每小时生成的代码行数作为生产力的度量指标。但是即便你没有那么愚蠢,也很容易认为代码自然是越多越好。事实上,代码是应用程序和业务的杀手,而各个公司却把它当成有价值的知识产权。
还是忘记这些无稽之谈吧。
我能理解为什么我们将代码视为资产。但是实际上代码完全是负债。
少即是多
你知道有人可以用10行代码实现别人要100行代码才能实现的功能吗?那么你知道比10行代码更好的是什么吗?那就是0行代码。
比如,我们写了一行代码:
printf(“Hello World!”);
你知道这中间可能会出多少错吗?
这行代码是否只能在允许控制台输出的环境中运行? 这个神奇的字符串将来不会成问题吗? 你不应该记录日志吗?毕竟日志才是最佳实践。 你考虑过这行代码中的安全隐患吗?
IDE与轻量级编辑器之争? 苹果、Windows还是Linux? 你如何看待PHP? 制表符还是空格?
推荐阅读
【01】用C语言编程,如何节省存储空间?【02】操作系统生态战争【03】Socket编程在嵌入式中很重要!看工程师剖析Socket(超详细,附代码)【04】数学对于编程来说重要吗?编程大佬现身说“线性代数”【05】万字干货:C语言在嵌入式系统编程时的注意事项