一个IBM程序员的高(tou)效(lan)法则

2019 年 9 月 27 日

一个IBM程序员的高(tou)效(lan)法则


10倍速程序员,是神话还是真实存在?如何成为一名高效的程序员?带着这些问题,我们采访了 IBM 开发技术推广工程师 Sebastian Daschner,他有十多年的软件开发经验,一些良好的编程习惯和小工具让他的编程工作无比顺滑,也节省出更多时间去享受生活,比如环游世界。如今,他已经游玩过47个国家,去过的城市数都数不清。今年10月,他将在QCon全球软件开发大会(上海站)2019分享自己的高效法则,感兴趣的同学可以关注一下。


10 倍速程序员是真实存在的吗?


不可否认,这个世界确实不缺少天才人物。在问答网站 Quora 上一个关于“是什么造就了10倍速程序员”的问题中,一位名叫 Mitchel Weintraub 的程序员介绍了他的一位 10 倍速同事。


这位 10 倍速程序员通常可以在 6 小时内搞定所有工作并提前离开,而他完成的工作量几乎是 10 个人的那么多。 Mitchel 认为,这位同事也许是自己见过的最聪明的人。其与普通人不同之处在于:他掌握多个领域的知识,似乎知道如何分析和查看问题;他完成的项目非常复杂,比如需要集成几个不同的软件系统;他有良好的调试技巧;他使用测试用例来约束自己的代码,Mitchel 不记得他的东西中有任何错误。另外,这位同事的专注程度令人震惊,他甚至可以一整天都坐在电脑前,丝毫不分心。


如果你要怀疑这位 10 倍速程序员是不是把剩下的工作带回家了,那你可以打消自己的念头。“他忙着跟家人和孩子共度时光呢!”Mitchel 表示。


另外一位名为 Selden McCabe 的程序员觉得自己就是 10 倍速程序员。当他在微软工作的时候,团队里有 4 名程序员和 4 名测试人员,他们使用数据库去跟踪每个人修复的 bug 数目。在这项竞赛中,他获得了第一名,因为他修复了 1300 个 bug,而第二名仅仅修复了 250 个。Selden 透露了自己的高效秘诀——经常被分配非常困难的 bug 修复工作(比如内存泄漏),在这个过程中,他学到了许多用于跟踪代码问题的技术;有高效的工作环境(好用的设备和软件工具等);贪婪地阅读每一本可能会对自己有帮助的书籍,即便是到了 20 多年后的今天,依旧对知识保持渴求的态度;定期与更高级的员工进行软件审查,从他们的点评中学习到很多东西,当他们指出自己代码中的错误时,发誓永远不要重复它;还有一条十分引人注目——当时单身,工作时不会被分散注意力。


不过,也有许多人对 10 倍速程序员这个名头持怀疑态度,他们认为压根儿没有 10 倍速程序员这种东西,但肯定有 0.5 倍速程序员或更差的 0 倍速程序员,甚至这些人可能就在你的身边。


争论 10 倍速程序员是否存在毫无意义,我们需要关注的问题是,普通程序员是否能通过某种方法提高自己的生产率而不是变成一名 0.5 倍速程序员?


你是怎么沦落为一名 0.5 倍速程序员的


来自 IBM 的 Sebastian Daschner 是一位 Java 开发技术推广工程师,同时也是一名顾问、作者和培训师,他的书《架构现代 Java EE 应用程序》你可能看过。目前,Sebastian 正在参与开源项目标准化进程,例如 JCP 或 Eclipse 基金会, 帮助形成企业级 Java 的未来标准,并在各种开源项目上进行写作。


Java 语言常常被抱怨语法繁琐、开发效率低,作为一名 Java 开发者,Sebastian 是怎么让自己更加高效也更加轻松的?


他认为,不少程序员在编程的时候都有一些坏习惯,如果能针对这些习惯做出改进,那么效率一定会有所提升。他举了 3 个例子。


  • 上下文切换。**与那些推崇10倍速程序员的言论相似,不少人也推崇“多任务处理”。可是,绝对意义上的多任务处理是不存在的,当我们执行多线程任务的时候,其实是从一个任务切换到另一个任务,这就是上下文切换。它的弊端是每次切换任务都会产生一部分开销,这会使得程序员变得更容易疲劳。一般人需要不间断地工作15分钟才能沉浸到一项工作中,如果这个状态被打断,一次又一次地尝试同时完成几项任务,再想回到原来那样顺滑的编程状态是很难的。

  • 注意力不集中。**你得学会做一个心如止水的程序员,在编程的时候将自己从现实世界里剥离出来,全身心投入到代码的海洋。通常情况下,这种境界只有在半夜才能触发,触发条件是因白天的碌碌无为而产生的愧疚。但长期下来,你会因为发际线的走势而陷入恐慌。为什么白天的工作效率不高?注意力不集中是关键。试想一下,你正专心敲代码的时候,心仪的妹子给你发来了微信消息,你会选择——

  • A. 立即回复,跟妹子谈心。

  • B. 继续敲代码,晚点再说。

  • 选A,你可能会跟妹子断断续续聊一下午,白天写bug,晚上加班改bug;选B,如果忘记回复妹子,你可能会继续单身。简直难以抉择嘛对不对!所以说,单身不是程序员的第一生产力,单身且无心仪对象才是,符合这种条件的程序员比较容易达到四大皆空的状态,可以专心致志地与代码愉快玩耍。

  • 使用鼠标。**程序员对外套也许没有追求,对外设却有一份特殊感情。他们对青轴、茶轴键盘如数家珍,也知道哪家的鼠标手感最佳。但需要意识到的是,一款昂贵的鼠标可能会让你在玩游戏的时候如虎添翼,但是对于编程工作来说,它并不是那么必要的物件。Sebastian 是一名键盘流程序员,并且他也鼓励其他程序员这么干,理由很简单——在键盘上打字、使用应用程序提供的快捷键,比起用鼠标单个单个点,不是高效得多?如果你熟悉了代码定位和文档操作的快捷键,脱离鼠标编程是完全可以实现的。所以从某种方面来说,鼠标的发明降低了程序员的生产效率。


当然,除了本身的原因以外,影响程序员工作效率的还有一些外部因素。


比如,工作环境。每一个合格的牧场老板都知道,要想奶牛产出优质的牛奶就要给他们提供一个优美的环境,这样一来,奶牛心情舒畅,吃草更香,产出的牛奶也就更多也更香了。奶牛况且如此,更何况是人?没有良好的工作环境,程序员怎么能专注于生产代码呢?鉴于很多程序员都会自带心爱的键鼠套装,我们就以另一与程序员身体接触时间最长的配套设备来举例子,对,就是椅子。虽然有的程序员站着写代码,有的程序员蹲着写代码,但大多数程序员还是坐着写代码的,一把好椅子不管对程序员的腰还是程序员的臀而言,意义都十分重大。虽不奢求公司给配 6800 一把的高端座椅,但坐着 9.9 包邮的椅子,还想我写出价值 999W 的程序?哼。


是人都不喜欢开会,程序员也不例外。需求会、分享会、讨论会、周会、项目会……偏偏程序员要开的会那么多,时间还那么长,也看不太出这些会议对日常工作有什么积极影响。开一个会的时间,我能写 1000 行代码了好吗!频繁开会妥妥就是效率杀手!


就这样,在内部因素和外部因素的双重夹击下,你一步步地变成了一名 0.5 倍速程序员……


做一个会偷懒的高效开发者


如上所述,很多 0.5 倍速程序员的出现并不是因为他们在上班时间摸鱼了(当然部分确实是),也不是因为懒惰,而是因为他们没有找到提高编程效率的正确方法和心态。


德国以效率著称, Sebastian 恰好就来自德国。他擅长用工具来节省自己的时间和精力。回顾一下自己手头的工作,你是不是也花费了大量的时间来执行重复的任务?为什么不尽可能多地采用自动化的方式和一些小工具来解放自己?


  • Automator:Automator 是 macOS 附带的小工具,只要通过点击、拖拽等操作就可以将一系列动作组合成一个工作流程,从而帮助你自动化完成一些复杂的工作。

  • Alfred:Alfred 是 macOS 上的一个多功能生产力应用程序,强大的工作流机制是它的主要优势之一。你可以通过热键、关键字、文本扩展等功能提高效率。搜索Mac和网络,并通过自定义操作来控制Mac来提高生产力。

  • Command line:它非常讨人喜欢,原因有二,一是编写脚本自动执行频繁的工作比使用鼠标或图形菜单反复执行某些任务更有效率,程序员的生活因此变得更加轻松和快捷。二是使用命令行能让你看起来更专业更geek更容易把妹。温馨提示:远离 rm -rf / ,珍爱生命。

  • Vim:Vim虽然是一个很早期的编辑器,但是现在仍在流行着,谁叫它方便呢?它的大多数命令是一个字母,程序员在使用它的时候手指无需离开主键,而在其他编辑器中,你还得使用鼠标,停止键入、寻找鼠标、查看屏幕、寻找光标,这一整套动作活脱脱就是上下文切换。不过,VIM最大的缺点是学习曲线太陡峭,比较劝退。

  • Paw:一站式HTTP/REST服务测试工具。Paw具有功能齐全的可视化编辑器和HTTP工具集,可以让Web开发者模拟发送各种HTTP请求、测试和迭代自己的API或探索新的API,测试响应数据。另外,Paw能多人协作,同步API测试配置,进行无冲突的更改并获取实时更新。

  • Dash:一个好用的API文档浏览器和代码段管理器。程序员经常查看各种API文档,Dash可以帮你从繁琐的搜索中解脱,它基本覆盖了所有主流和非主流语言、框架和库的文档。你还可以生成自己的文档集、请求文档集或从第三方来源下载文档集。

  • aText :aText是一个文本扩展应用程序,通过将缩写词替换为我们定义的常用短语来加快键入速度,使用它你可以节省更多时间用于更重要的工作。aText有Windows版和Mac版两个版本,体验很不错,谁用谁知道。


实用的小工具太多了,这里就不一一列举了。


另外,生活习惯的良好与否也会影响程序员的工作效率,其中一条就是多喝热水。程序员爱咖啡是出了名的,IT 圈流传着“喝的是咖啡,产的是代码”这样的段子,但咖啡不比白水来得健康,过量摄入会对身体造成负担。佐治亚理工学院最新研究表明,脱水会对人体的基本功能产生巨大的负面影响,造成认知能力受损等问题。定时喝水可以帮助程序员避免脱水工作,注意力更加集中,记忆力也更好。而且,刚接完需求的你不正好需要一杯水来压压惊吗?所以,为什么不用 geek 的方式提醒自己喝水呢?


/remind me "It's time to drink some water!" at 9 am every day/remind me "It's time to drink some water!" at 11 am every day/remind me "It's time to drink some water!" at 13 pm every day/remind me "It's time to drink some water!" at 15 pm every day/remind me "It's time to drink some water!" at 17 pm every day
复制代码


从“Hello World!”到 Hello World!


因为编程效率的提升,Sebastian 可以腾出很多时间来做一些别的事情。


比如写写技术博客,发发 newsletter 或者 Twitter,这些非工作性质的事情给他带来了许多掌声和关注者。但 Sebastian 表示,获得外界认可并不是他的初衷。在他的眼里,输出技术观点是学习的最佳方式,因为这会迫使你更加深入地了解和梳理你的知识,通常这些知识只存在你的脑子里,它们是杂乱无章的,如果用文字记录下来会更好。


他经常在各种技术会议上演讲,他认为演讲经验对程序员来说是一项非常重要的技能,一部分原因同上,另一部分原因是这可以帮助程序员提高交流能力和表达能力。很多开发人员非常擅长实现复杂的解决方案,但却不能很好地解释它们,这一点在国内程序员身上的表现尤其明显。可是,一个不善言辞的程序员怎么能在跟产品经理、业务分析师和 QA 的 battle 中占据上风呢?怎么能顺利走向技术领导的位置呢?


Sebastian 还会组织 JOnsen 和 jSpirit 这样的小型非会议。与大型会议不同,非会议的过程类似于开放空间技术,组织工作要少得多。当然,还是有一些麻烦的后勤问题,但是能够与全球各地的 Java 开发人员建立联系,邀请他们参加这些看起来不那么正规的非会议,碰撞出新的想法,他觉得自己所耗费的精力和时间都是值得的。Sebastian 非常喜欢这种形式,相较于在常规会议上发言,它不侧重于专业人士和嘉宾,更加轻松,这是一种很好的平衡。


由于他对 Java 社区和 Java 生态的贡献,Sebastian 被确认为 Java Champion,Oracle Developer Champion 和 JavaOne Rockstar。这里科普一下上面 3 个奖项:Java Champion 是为了嘉奖那些为推动 Java 社区进步作出卓越贡献的人。许多获得这一荣誉的人热衷于在博客、视频或者各种技术会议中分享自己的 Java 使用心得。Oracle Developer Champions 现在换了个名字,叫做 Groundbreaker Ambassadors,这个奖项和 Java Champion 相似,是 Oracle 给予推广了自家技术的外部人员的荣誉。而 JavaOne Rockstar 是为了表彰那些在技术会议中获得与会者高度评价的演讲,Sebastian 曾在 2016 年两次获得这一殊荣。


因为“hello world”,Sebastian 能够跟世界打招呼——Hello world!当他不从事编程工作时,他会乘飞机或摩托车环游世界。到目前为止,Sebastian 已经去过 47 个国家,而且这个数字还在增加,他甚至记不清自己游玩过的城市有多少了,那是一个难以计算的数字。


在旅途中,他经常经历有趣的故事。


“自从我开始旅行以来,才发现一年的时光可以这么丰富,一年的回忆可以包括这么多的地方、故事和冒险。就我个人而言,这是一笔不错的额外奖励。而我在路上学到的另一件事是,每一个地方,每一个城市,每一个国家都是美丽和有趣的,都有自己的方式。我试图在我旅行到的每一个地方都找到一些令人惊讶和喜欢的东西。我喜欢再次回到一些地方,沉下心来享受这个地方的独特性。你可以在任何地方遇见有趣的人,只要你心胸开阔,对他们的个性、习俗和故事真正感兴趣。”


“总的来说,编程让我收获了精彩的人生,我对程序员这个身份的选择十分满意。”


最后,Sebastian 做了一个总结。他认为,一般来说,高效地工作是有意义的,但同时也要合理地使用节省下来的时间。如果一个人更有效率的话,他肯定可以享受更多的时间。


采访嘉宾:Sebastian Daschner 是 IBM 的 Java 开发技术推广工程师,同时也是一名顾问、作者和培训师。他是《架构现代 Java EE 应用程序》一书的作者。Sebastian 正在参与开源项目标准化进程,例如 JCP 或 Eclipse 基金会, 帮助形成企业级 Java 的未来标准,并在各种开源项目上进行写作。由于他在 Java 社区和 Java 生态中的贡献,他被确认为 Java Champion,Oracle Developer Champion 和 JavaOne Rockstar。除了 Java,Sebastian 也是云原生技术和与各种企业软件相关东西的重用户。他通常会在个人博客(https://blog.sebastian-daschner.com)、newsletter 和 Twitter(@daschners)上宣传计算机科学实践。Sebastian 启动了 JOnsen 和 jSpirit 会议,这些会议连接了全球范围内的 Java 开发人员。


在 QCon 上海 2019 的演讲中,Sebastian 将以 Java 编程为例,分享一些普遍适用的原则,遵循这些原则将使您作为一个软件开发人员更加有效,并最终使您的工作更加愉快,点击了解详情。


2019 年 9 月 27 日 00:002496

评论

发布
暂无评论
发现更多内容

Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息

秦怀杂货店

Java 数据库 mybatis

10.5软件组件设计原则

张荣召

内推阿里,朋友说让我学会这46道面试题,我不信,现在我后悔了

小Q

Java 学习 编程 架构 面试

一次有效的产品需求头脑风暴

Bruce Talk

敏捷开发 Agile Product Owner

食堂就餐卡系统 UML 设计

心晴雨亦晴(~o~)

极客大学架构师训练营

阿里P8架构师呕心沥血整理的【Docker实战】文档带你玩转Docker。

Java成神之路

Java 程序员 架构 面试 编程语言

10.2微服务:落地实践的策略与思路

张荣召

架构师训练营第十周学习总结

Gosling

极客大学架构师训练营

该怎样才能成为高薪架构师?阿里P8大牛给迷茫的程序员一些中肯建议“请不要再虚度光阴了”。

Java成神之路

Java 程序员 架构 面试 编程语言

两年Java开发经验,面试字节跳动惨遭滑铁卢,努力复习54天二战字节跳动终获offer定级2-2【面试答案+复习资源】

Java成神之路

Java 程序员 架构 面试 编程语言

10.7作业

张荣召

Mybatis【4】-- 关于Mybatis别名定义

秦怀杂货店

Java mybatis

学习总结--week10

张荣召

作为一个Java开发者连Spring三剑客都没吃透,你拿什么和老板谈涨薪?

Java成神之路

Java 程序员 架构 面试 编程语言

阿里P8Java架构师呕心沥血整理出来的[史上最全Java面试题精选集锦]!

Java成神之路

Java 程序员 架构 面试 编程语言

架构师训练营第10周课后练习

架构师训练营-week10

睁眼看世界

极客大学架构师训练营

码了2000多行代码就是为了讲清楚TLS握手流程

新世界杂货铺

golang https 后端

10.1微服务:服务本身的设计,维护及治理

张荣召

JDBC【4】-- SPI底层原理解析

秦怀杂货店

Java 源码 spi

三年Java开发经验,裸辞之后筹备半年时间,四面阿里终于如愿拿到P7级offer【Java岗】。

Java成神之路

Java 程序员 架构 面试 编程语言

远程面试蚂蚁金服,三面之后本以为石沉大海,没想到却被直接录取

Java成神之路

Java 程序员 架构 面试 编程语言

第十周总结

睁眼看世界

极客大学架构师训练营

10.4领域驱动设计DDD

张荣召

【Java基础】-- isAssignableFrom的用法详细解析

秦怀杂货店

Java 关键字

Java程序员怎么写简历?你这样介绍项目经验面试官会对你刮目相看

Java成神之路

Java 程序员 架构 面试 编程语言

接口测试--接口文档规范

测试人生路

接口文档

最佳的思维导图生成工具——markmap 使用教程

白色蜗牛

Java 程序员 职场 实用工具

10.3微服务网关的技术架构

张荣召

架构师训练营 1 期第 10 周:模块分解 - 作业

piercebn

极客大学架构师训练营

架构师Week6作业

lggl

作业

一个IBM程序员的高(tou)效(lan)法则-InfoQ