Brian Goetz 是 Java 领域的技术大牛同时也是《Java 並发实践》一书的作者之一。我最喜欢的一句名言就是他讲的这句话出现在甲骨文公司以《编写傻瓜式代码》为题发表的访谈当中,当時记者问到 Goetz 如何才能编写出性能良好的代码以下是他给出的睿智回应:
一般来说,在 Java 应用程序当中快速编写代码的方法就是先写点傻瓜式代码——这类代码简单、干净,而且遵循最明确的面向对象原则
在接下来的发言中,他一直在具体解释:为什么尝试优化代码并试圖让代码看起来不那么傻瓜正是程序员群体中的一种常见错误。而在我看来这更多是一种新手程序员常犯的错误。
如果大家像我一样也经历过初窥门径的过程,那么各位应该还记得自己第一次看到高级开发者写出的代码时心里想的是:
“这玩意儿我也写得出来,为什么我就不是高级开发者呢”
此后,我花了不少时间想写出相类似的代码最后发现我根本就做不到。
关于“高级开发者”的疑问并鈈在于我无法理解代码当中的特征。相反我一眼就能明白他们写的代码在说些什么,因为这些代码从根本层面上就是在走傻瓜式路线誰还看不懂啊。但除此之外似乎还有更多不同。我记得当时我在想“这「更多的」究竟是什么?又是怎么做到的”
从那时起,我逐漸学会了编写傻瓜式代码的所有原则与质量保证方法包括:YAGNI 原则 (You Ain’t Gonna Need It);单一责任原则;DRY 原则(Don’t Repeat Yourself);单一级别抽象原则;低耦合等等。我洎己也慢慢成了“高级开发者”。(我其实很讨厌「高级开发者」这种说法因此我始终坚持称自己为「软件工程师」,但这又是另一個故事了)
我学到的最重要的经验就是:
编写傻瓜式代码实际上非常困难,但一旦实现则会带来远超预期的回报
如何从一里外认出菜雞程序员
在《重构:改进现有代码设计》当中,Kent Beck 指出:
任何傻瓜都能够编写出计算机可以理解的代码但只有优秀的程序员能够编写出人類可以理解的代码。
如果大家遇到精妙无比的单一代码行以及模糊的抽象及 / 或语言特征时,其背后几乎总会有一位初级开发者说实话,后一种情况尤其常见看到这些代码,我仿佛就看到这位程序员在强调:
“快来看我!我真的很懂这门编程语言!我在使用默认接口同步本地线程 JavaBean 复制构造函数并配合自定义通用未检查异常以及跨函数安全强化 JAXB Lombok 代码生成!看我厉不厉害!”
以上场景纯属胡说八道,但相信大家能够明白我的意思这类代码往往来自那些只关注计算机理解,而不重视人类理解的程序员
如果对程序员感兴趣的,想学习web前端開发的朋友可以加web前端学习秋秋裙767,web前端中间的数字是273web前端最后是102 。7年全栈工程师根据这些年从事开发经验,整理了一份最适合2019年學习的web前端干货web前端的大型互联网技术教学视频,还有一份前端零基础教程免费分享给大家有想学习web前端的,或是转行或是大学生,还有工作中想提升自己能力的欢迎大家加入,这里是前端学习者的集中地
代码的本质在于向其他人交流并向计算机发出指令;但相較于后者,目前代码的前一项作用显得尤其重要因为有编译器负责将程序员编写的内容翻译成机器语言。一般来讲这种转换会分多层實现,例如在将 Java 编译为 ByteCode 时Java 代码首先由 Java 虚拟机在运行中读取,并最终将内容翻译为 0 和 1 的形式
不过代码代表的仍然是人类的语言,除了指導计算机之外必须也能够表达任务当中的谁、什么、何时、哪里、如何以及为什么等问题。再举个例子即使你的公司被收购了五年多,这些代码也仍然得具有实际意义并确保之前从未见过这些代码的新团队能够快速打开并进行功能增强 / 错误修复。
是的编写傻瓜式代碼非常困难。随着时间的推移我觉得我越来越喜欢这种编程风格了。当我在代码评论中收到“这代码真干净!”之类的评语时我真的感到非常欣慰。我知道我能为整个团队、乃至未来的代码维护者们做的最好的事情就是编写傻瓜式代码。
道路千万条维护第一条。代碼不规范运维两行泪。