这玩意儿我也写得出来,为什么我就不是高级程序员呢?

Brian Goetz 是 Java 领域的技术大牛,同时也是《Java 并发实践》一书的作者之一。我最喜欢的一句名言就是他讲的。这句话出现在甲骨文公司以《编写傻瓜式代码》为题发表的访谈当中,当时记者问到 Goetz 如何才能编写出性能良好的代码。以下是他给出的睿智回应:

一般来说,在 Java 应用程序当中快速编写代码的方法,就是先写点傻瓜式代码——这类代码简单、干净,而且遵循最明确的面向对象原则。

在接下来的发言中,他一直在具体解释:为什么尝试优化代码并试图让代码看起来不那么傻瓜,正是程序员群体中的一种常见错误。而在我看来,这更多是一种新手程序员常犯的错误。

高级开发者的代码

如果大家像我一样,也经历过初窥门径的过程,那么各位应该还记得自己第一次看到高级开发者写出的代码时,心里想的是:

“这玩意儿我也写得出来,为什么我就不是高级开发者呢?”

此后,我花了不少时间想写出相类似的代码,最后发现我根本就做不到。

关于“高级开发者”的疑问,并不在于我无法理解代码当中的特征。相反,我一眼就能明白他们写的代码在说些什么,因为这些代码从根本层面上就是在走傻瓜式路线,谁还看不懂啊。但除此之外,似乎还有更多不同。我记得当时我在想,“这「更多的」究竟是什么?又是怎么做到的?”

从那时起,我逐渐学会了编写傻瓜式代码的所有原则与质量保证方法,包括:YAGNI 原则 (You Ain’t Gonna Need It);单一责任原则;DRY 原则(Don‘t Repeat Yourself);单一级别抽象原则;低耦合等等。我自己,也慢慢成了“高级开发者”。(我其实很讨厌「高级开发者」这种说法,因此我始终坚持称自己为「软件工程师」,但这又是另一个故事了。)

我学到的最重要的经验就是:

编写傻瓜式代码实际上非常困难,但一旦实现则会带来远超预期的回报。

如何从一里外认出菜鸡程序员

在《重构:改进现有代码设计》当中,Kent Beck 指出:

任何傻瓜都能够编写出计算机可以理解的代码,但只有优秀的程序员能够编写出人类可以理解的代码。

如果大家遇到精妙无比的单一代码行,以及模糊的抽象及 / 或语言特征时,其背后几乎总会有一位初级开发者。说实话,后一种情况尤其常见。看到这些代码,我仿佛就看到这位程序员在强调:

“快来看我!我真的很懂这门编程语言!我在使用默认接口同步本地线程 JavaBean 复制构造函数,并配合自定义通用未检查异常以及跨函数安全强化 JAXB Lombok 代码生成!看我厉不厉害!”

以上场景纯属胡说八道,但相信大家能够明白我的意思。这类代码往往来自那些只关注计算机理解,而不重视人类理解的程序员。

代码的本质,在于向其他人交流并向计算机发出指令;但相较于后者,目前代码的前一项作用显得尤其重要,因为有编译器负责将程序员编写的内容翻译成机器语言。一般来讲,这种转换会分多层实现,例如在将 Java 编译为 ByteCode 时,Java 代码首先由 Java 虚拟机在运行中读取,并最终将内容翻译为 0 和 1 的形式。

不过代码代表的仍然是人类的语言,除了指导计算机之外,必须也能够表达任务当中的谁、什么、何时、哪里、如何以及为什么等问题。再举个例子,即使你的公司被收购了五年多,这些代码也仍然得具有实际意义,并确保之前从未见过这些代码的新团队能够快速打开并进行功能增强 / 错误修复。

是的,编写傻瓜式代码非常困难。随着时间的推移,我觉得我越来越喜欢这种编程风格了。当我在代码评论中收到“这代码真干净!”之类的评语时,我真的感到非常欣慰。我知道我能为整个团队、乃至未来的代码维护者们做的最好的事情,就是编写傻瓜式代码。

需知:

道路千万条,维护第一条。代码不规范,运维两行泪。

为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,帮助大家在成为前端工程师,乃至全栈工程师的路上披荆斩棘。在这里给大家推荐一个前端全栈学习扣qun:784783012 无偿分享一些资深前端开发工程师录制的视频录像(从零基础到项目实战案例),前端工程师必备的知识体系。还能领取免费的学习资源
当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。
但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终浪费大量时间,所以有效资源还是很有必要的。

学习前端,我们是认真的

原文地址:https://blog.51cto.com/14284898/2405490

时间: 2024-08-30 14:18:30

这玩意儿我也写得出来,为什么我就不是高级程序员呢?的相关文章

我写不出代码了,该怎么办?程序员的死亡瞬间

你已经对着电脑n个小时了.不知道该写什么代码,或者一种摔键盘的冲动正在你的胸中酝酿. 咖啡一杯接着一杯.不敢再喝了,因为搞不好要有副作用了,心跳加速,身体不由自主地颤抖,出冷汗,但还是无法产出任何代码. 所有重新发现编程趣味的努力都徒劳无功,因为你的最后一点能量都用来驱逐大脑中正在攻城略地的话: 编程的本质是棘手 即使是最优秀的程序员也会遭遇无法解决的软件工程问题.碰到这样的问题,并不一定意味着你缺乏技能或知识. 编程不是一项容易的工作,我们可以通过采取非正统的方法来保持你想要的生产力水平,并确

十年京东Java程序员的工作总结,写给迷茫中的你!

很多年前,刚刚从大学毕业的时候,很多公司来校招.其中最烂俗的一个面试问题是:"你希望你之后三到五年的发展是什么?".我当时的标准回答是(原话):"成为在某一方面能够独当一面的技术专家".后来经历了几家不同的公司,换了不同的方向,才知道这个真是一个很难的问题.因为兵无常势,什么东西都是在不断的变化,一早的时候看好的东西可能会被淘汰. (几乎)没有人能够看准技术的下一个方向,因为这个问题实在是太难了,能够做到这一点的你就成为了技术界的巴菲特了.比如说11年加入Googl

一个阿里工作4年java程序员的从业心得,写给还在迷茫的朋友

工作第一年,往往是什么都充满新鲜感,什么都学习,冲劲十足的一年:WEB行业知识更新特别快,今天一个框架的新版本,明天又是另一个新框架,有时往往根据项目的需要来不断学习新东西:所以,很多时候感觉,自己用过的东西真多呀!但是真正深入研究的东西却不多.面试,是跳槽后第一个需要面对的问题:而且不同公司面试的着重点不同:但是却有一个共同点:Java基础是必考的. 工作第一年,可能问你String对象创建的理解,常用的框架是什么等等: 工作第三年,就问你Java内存分配机制是什么,类是如何加载的等等: 工作

在原生程序员眼里,可能你写的是假代码……

程序员有一个经典笑话:XX语言是世界上最好的语言.然后大家可以争论到明天早上.程序员真的是分派别的,怎么分?你最先熟悉的,最先使用的编程语言,就是你的编程的母语.这种母语影响将是根深蒂固,潜移默化的,哪怕后来又学了别的语言,例如C++程序员转成了C#程序员,或者转成JAVA的,一个有趣的现象是,在哪些母语就是C#的程序员眼里看那些转行程序员的代码,即使看起来也可以编译,语法正确,也可以运行,但从代码层面也可以明显的看出各种区别 所有人都有母语,例如看这个文章的你,我猜9成的可能性母语是中文,OK

程序员自我修练-提高写代码的能力(转)

首先让我们看一看刚入软件公司会出现的情况: 1. 你可能会常常发现,写了一段代码后,编译程序时是一大堆的出错 (原因:语法不熟) --别担心,这是每个程序员必须经历的事,这时候你就需要更大的耐心及细心, 对每一行代码进行仔细人阅读并改正,这个很重要,这可以培养你的理解代码能力,所以要常读程序,不要等到程序运行以后才知道你的程序的结果. --如何避免:在写代码以前,要认真的学习计算机语言的语法,如关键点,易错点,易忘点.同时要自已动手写自已的测试代码,而尽量不要抄别人的代码示例.即使抄,在学习阶段

工作杂谈之-程序员不止是写代码!

我是一个简单的人,毕业参加工作后,选择了程序员这个职业,本来想每天简简单单写写代码.不断提升自己的技术,就万事大吉了.后来走的一步步,充分验证了,这种想法太幼稚了.如果你只想靠一两种语言技能,闯天下,那么你肯定会到处碰壁,程序员应该是多面手! (1)沟通能力 会写代码还不够.如果想从优秀发展到卓越,你必须培养起有效沟通的能力:与你的同事沟通,与你的老板沟通,与用户沟通. 不与人沟通的程序员不是好程序员.一个优秀的解决方案需要计算机世界与人类世界的双重技能.只有连接起两个世界,才能成为一个真正的优

程序员简历应该怎么写?

作者:ThoughtWorks中国链接:https://www.zhihu.com/question/25002833/answer/158108028来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家伙让一让,这个问题让老司机先答!作为一个潜入IT圈五年之久.看过数万份简历的HR,在这个问题上还是有点发言权的.HR在筛选简历时主要从公司需求出发,重点不一,不过还是有很多"通用"的套路,为了在30秒内判断出这份简历是否值得跟进,我认为程序员写简历的正确

聊聊程序员如何学习英语单词:写了一个记单词的小程序

背景: 关于英文对程序员的重要性,就不多说了! 英语的学习,有很多,今天也不聊多,只聊英语单词! 关于单词的记忆,找过很多方法,下载过很多软件. 如图(其它不好用的都卸载了): 上图算是我以前用过软件,注意,是以前哦~~~ 意思就是没有坚持下来~~~~ 随时间的推移,最后它们还是被我遗忘了~~~ 为什么???不能:坚持!坚持!坚持! 学习思考: 一直在找方法: 1:下载过联想记忆法.背文章记单词,词根,各种视频~~~ 2:连单词的数据库都网上下载了一份了,期望从数据库的直接记忆单词快些~~~ 通

高效程序员系列(保持写代码的动力)

话不多说,直入正题. 做任何事情都需要动力,只是对于程序员来说,拥有写代码的动力至关重要.程序员不同于会计.出纳等,这些职业所做的事情基本上都是重复的,就像平坦大路上行驶的车辆,并不需要提供很大的动力就能保持前进.程序员所做的事情恰像上坡路上的车辆,需要提供较大的且持续的动力才能保持继续前进.如果在开发一个项目的过程中,工程师不幸失去了动力,多半情况下项目就会半途而废,及时侥幸完成了,那么项目的完成质量值得担忧. 如何才能够在开发的过程中获得持续的动力呢? 程序员在开发的过程中,会遇到各种问题,