QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

怎样才能成为一名出色的资深开发者?

  • 2019-09-23
  • 本文字数:2988 字

    阅读完需:约 10 分钟

怎样才能成为一名出色的资深开发者?

做什么不重要,怎么做才重要。



如果你想成为一名真正杰出的资深开发者,那只有一个办法:犯错误、改正错误、从错误中学习、分享错误、再重复这一过程。


所有犯过的错误都将成为你的宝贵经历。再从经历中学习,这就是成为一名成功资深开发者的关键。很简单,对吗?


换句话说,你刚刚步入社会,成了一名初级开发者,你纠结着该怎样做才能取得职业发展。这只是时间的问题吗?你要不要回到学校继续深造呢?或者再多拿些高级认证?


并不全是。


虽然正规教育可以让你迅速得到提升,但事实上我认识许多资深开发者,他们都只有大学学历而已。


好的资深开发者不仅要能写出漂亮的代码,还必须具备某些其它特质,这样才能受到别人的青睐。资深开发者是能为公司带来 10 倍以上价值的人,他们知道好的东西是怎样的,可以为顾客交付价值。


不要把资深开发者仅仅当成一个职务名称,它更是一套工作上的行为准则。不是你的工作内容,而是你的做事方法,让你真正地成为资深开发者。关于这一点没有什么好商量的。你不可能一进入职场就是个资深开发者,在成长的过程中你肯定会犯错,犯很多很多的错,但这些最终都会转换成你学到的东西和经验。


下面这些特质是我从许多资深开发者身上总结出来的,正是这些特质,把他们与普通的开发者区别开来。

1.他们很好奇

正如阿尔伯特·爱因斯坦所说:


我并不聪明,我只是特别好奇。


研究表明,当好奇心被激发时,人学习和记住知识的能力都会得到大幅度提升。当你好奇时,大脑中的奖励系统就会开始发挥作用,大脑分泌出名为“多巴胺”的化学物质,让人变得异常兴奋,学习速度非常快,即使对枯燥的内容也是如此。


好的资深开发者会更进一步。他们会有组织有计划地引导自己的好奇心,在紧急状况下就会用上自己积累起来的知识。


举个例子,先把一门编程语言学深学透,然后再扩展开,去学习其它语言。

2.他们会对选中的平台进行彻底研究

你不太可能碰上一个别人从未碰到过的编程问题。也没几家公司开发的东西真的是别的公司没有做过的。


正因如此,在使用你的语言和平台的过程中,你所面临的绝大多数问题,都曾经被解决过。


比如,我曾经利用 SAP 自带的面向对象类,将 30,000 行的 SAP ABAP 代码模块化,最终成了一个 200 行的类。我能做出这样的成绩,最主要的原因是我决心在了解其它 SAP 模块之前,先深入掌握 ABAP。我知道这样做会很慢,但付出的努力是值得的。


好的开发者从来不会满足于现状。不管他们的代码能不能工作,他们对每个应该问的问题,都会努力找出答案。

3.他们都是好导师

John Crosby 曾经一针见血地说:


辅导就是深入别的想法,听取别人的意见,再朝正确的方向推一把。


谷歌曾在 2008 年对这个问题做了一次重要研究。谷歌人才创新实验室的氧气计划团队以绩效评语、员工调查、优秀经理奖提名和其它信息等为素材,进行了长达一年的数据挖掘研究,以评估得分高和得分低的经理之间到底有多大差别。他们对 100 多名经理的 10,000 多项数据进行了研究。


研究有两点重要发现:


  • 要想取得管理成功,最重要的事就是做好导师工作。成功的经理们知道怎样指导团队成员获得成功。

  • 最不重要的事就是技术实力。这也从另一个角度证明,好的开发者不一定能成为一个好的经理。


根据研究成果,谷歌修改了他们的调查反馈模板,以反映出这些特质。在过去他们注重衡量经理人的产出如何,现在则关注他们花多少时间来指导团队,对愿景是否沟通得清晰有效,等等。他们也以这些技能为中心,开发了新的管理培训项目。


他们说,每个资深开发者的核心期望之一,就是要能够与内外部用户和合作者进行有效沟通。非技术背景的人没办法理解技术行话。所以最好的资深开发者反而总没办法在技术上得到别人的赞赏。


所以,你要提升自己的沟通能力,迅速判断听众们能听懂什么水平的技术术语,然后用简单的语言和贴近生活的例子来解释复杂的技术概念。


辅导紧密关系着新手向老手的成长,不管是职业发展还是个人成长。分享知识,分享经验,提前锻炼团队。

4.他们没有“闪亮玩具” 综合症

如杰夫·贝索斯所说:


公司不应该对闪亮的东西上瘾,因为闪亮的东西不长久。


这也适用于开发者。事实上,大多数开发者都是属喜鹊的,他们总是喜欢搜罗新鲜闪亮的东西,不管怎样先保存起来,再慢慢寻找用途。


如果你对这种现象没什么切身感受的话,闪亮玩具综合症的典型特征就是想拥有最新潮的玩具,不管有没有实际用途,不管是否需要。或者就是痴迷于紧张而又短暂的拥有感,然后很快就移情别恋了。


好的资深开发者会不断提醒自己不要犯这样的毛病。他们很清楚什么时候不要做什么事。他们知道很多决定都是坏决定,比如为了提高可读性而把一个库完全重写,或者从旧框架切换到一个全新的框架。他们并不害怕风险,他们只是知道哪些事情该做而已。


所有事情最终都会归结到代码上。代码应该只做它应该做的事,别的什么都不要做。代码的功能要清晰易懂,让人花几分钟甚至几秒钟就能明白。浏览代码应该非常容易,对水平不高的开发者也应如此。


大道至简。

5.他们承认有自己不知道的东西

Neil Gaiman 曾说:


发现自己不知道某些东西,有时候正是弥补的良机。


世上最难说出口的一句话,不是“我爱你”,而是“我不知道”。行为经济学畅销书《魔鬼经济学》的作者 Stephen J. Dubner 和 Steven D. Levitt 这么认为。


这一刻无法避免,但当它发生时你又如何应对?你滔滔不绝地把自己的成就大讲特讲了 20 分钟,造就了领域专家的形象,享受着领军人物的光环。人们不断地提问,你游刃有余地解答。终于他们问到了一些其实你并不太懂的东西,这时候你会怎么办?


对许多人来说这是非常扫兴的事,但事实上直接承认也没什么大不了的,总比掩盖自己的短板好,不管是知识还是技能上的。这时最关键的就是你将如何解决这样的问题,不管是请教别人还是自己去深入钻研。


你对待问题的方式,正是你能否变得资深的关键。你能否深入了解他们问这样问题的原因,了解更多的背景知识,扩展自己的知识面?你能不能为他们提供帮助,一起找出问题的答案?你愿不愿意事后再研究一下,并且把答案反馈给他们?


成为一个资深开发者并不意味着你要无所不知、无所不晓。它只是意味着你可以帮助大家找到问题的答案。

6.最后,他们可以感受到坏代码的味道

在这个问题上,Seymour Cray 一语中的:


程序员们的问题在于,你完全没办法知道他们在做什么,直到错过良机,无法补救。


正因如此,好的资深开发者们都对代码的“味道”特别敏感。如果看起来或者闻起来像是坏代码,那就很可能是坏代码。之前的开发者很可能在这个问题上犯过错误,你也一样会。写代码就是这么回事。


当我们不断地解决接踵而至的新问题时,也要不断努力提高现有代码库的质量,起码保证不要变坏。所以当你挠头“谁写了这么烂的代码啊”的时候,下一个跟着要问的问题就应该是:“我该怎样才能让它变好呢?”


在想明白怎么改进之前,你先得知道要改进什么。你要知道好的代码和坏的代码都长什么样子。顶级足球运动员与普通运动员之间的区别之一,就在于他们会多花很多时间去研究其他运动员的比赛。我相信对顶级开发者来说也是一样的。


有味道的代码就是那些你也没办法说清楚为什么,但就是感觉不对劲的代码。这样的代码就应该被去除掉。这也是你做为一个资深开发者的独特卖点之一,可以让你鹤立鸡群。要做正确的事,即使不一定要马上开始。


用 Donald Kruth 的话来说:


我猜编程就和平凡的生活一样。如果你喜欢什么东西,你就会在其中发现美。


英文原文:


How to Be a Good Senior Developer


2019-09-23 11:353785
用户头像

发布了 152 篇内容, 共 72.0 次阅读, 收获喜欢 64 次。

关注

评论 1 条评论

发布
用户头像
认同
2019-09-25 19:08
回复
没有更多了
发现更多内容

读《Software Engineering at Google》(11)

术子米德

架构师成长笔记

LabVIEW实现应用程序停止或退出

不脱发的程序猿

LabVIEW

采用百度飞桨EasyDL完成指定目标识别

DS小龙哥

4月月更

22道Java Spring Boot高频面试题

爱好编程进阶

Java 面试 后端开发

Java 结合实例学会使用 静态代理、JDK动态代理、CGLIB动态代理

爱好编程进阶

Java 面试 后端开发

[Day22]-[链表]相交链表

方勇(gopher)

链表 LeetCode 算法和数据结构

解锁OpenHarmony技术日!年度盛会,即将揭幕!

OpenHarmony

大会 OpenHarmony

世界读书日:我想推荐这几本书

宇宙之一粟

书籍推荐 书单 4月月更

Java 线程池原理分析

爱好编程进阶

Java 面试 后端开发

读《Software Engineering at Google》(14)

术子米德

架构师成长笔记

在docker上编译openjdk8

程序员欣宸

Java JVM 4月月更

[Day23]-[数据结构]手写LRU

方勇(gopher)

LeetCode LRU 数据结构算法

2021年秋招,薪资排行NO

爱好编程进阶

Java 面试 后端开发

AtomicIntegerArray源码分析与感悟

爱好编程进阶

Java 面试 后端开发

将新增和编辑的数据同步更新到列表

岛上码农

flutter ios开发 安卓开发 4月月更 跨平台开发

Choreographer全解析

爱好编程进阶

Java 面试 后端开发

“亿”点点技术情怀

不脱发的程序猿

程序员 程序人生 技术情怀

解决方案架构师的小锦囊 - 架构图的 5 种类型

亚马逊云科技 (Amazon Web Services)

技术 职业 亚马逊云科技

顶级元宇宙游戏Plato Farm,近期动作不断利好频频

小哈区块

Java单例模式实现,一次性学完整,面试加分项

爱好编程进阶

Java 面试 后端开发

读《Software Engineering at Google》(13)

术子米德

架构师成长笔记

一个快速追踪密切接触者的开源脚本方案

冯骐

Python 数据分析 流调 密接 新冠疫情

LabVIEW控制电脑关机、休眠、注销和重启

不脱发的程序猿

LabVIEW LabVIEW控制电脑

k8s client-go源码分析 informer源码分析(1)-概要分析

良凯尔

Kubernetes 容器 云原生 Client-go

Plato Farm-以柏拉图为目标的农场元宇宙游戏

西柚子

读《Software Engineering at Google》(12)

术子米德

架构师成长笔记

初探 Lambda Powertools TypeScript

亚马逊云科技 (Amazon Web Services)

typescript Serverless Lambda AWS

redis优化系列(二)Redis主从原理、主从常用配置

乌龟哥哥

4月月更

我是如何用 Amazon Serverless 创建一个门铃的

亚马逊云科技 (Amazon Web Services)

Serverless Lambda AWS showdev

自动化的艺术

俞凡

架构 大厂实践 PayPal

怎样才能成为一名出色的资深开发者?_语言 & 开发_Ravi Shankar Rajan_InfoQ精选文章