如何从初级程序员变成高级程序员?

2020 年 4 月 14 日

如何从初级程序员变成高级程序员?

区分高级和初级程序员的标准是工作年限吗?程序员最重要的工作就是写代码吗?


高级程序员是一名犯过其领域内所有可能犯到的错误的专家。


如果按照工作经验对软件开发人员进行分类,可能是这样的:


  • 初级:2-3年工作经验

  • 高级:10年以上工作经验

  • 中级:介于初级和高级之间


这种按工作年限的分类存在一个问题。那就是:它对软件开发的质量只字未提。在工作的那些年里你到底获得了多少经验和技能?这正是面对开发人员的求职和面试如此复杂的原因。度量技能是很困难的,所以我们在面试中给开发人员进行了很多有难度的测试。但这些测试充其量也只是了解一个大概,无法度量其究竟具备多少完成该项工作所需的经验或专业技能。


这就引出了下一个问题。


一旦你不再是初级程序员,什么时候会成为高级程序员呢?


多年的工作经验会自动让你成为高级程序员吗?未必。


以我自身为例。当我还是一名年轻的初级程序员时,我以为自己什么都懂。我傲慢自大,独来独往。我认为自己是“代码之神”。我不喜欢与他人合作,我认为编写优秀的代码是程序员最最重要的大事。


我错了吗?倒也没错。编码的确很重要——程序员必须得去编写可工作的代码。但是编写代码并不是他唯一重要的事情。


我是在为第一个客户工作的时候艰难地认识到这一点的。我与客户交谈了 15 分钟,收集了需求要点,并假定我很明确客户想要什么。我开始像疯子一样疯狂地写代码,享受编写纯粹代码的过程。我在 3 天内交付了应用,但是客户却不认可。因为他说:这不是他期望的东西。


不用说,我的自尊心势必受到了伤害,我把这归咎于客户没有提供足够的信息。那时候我说话做事还不成熟。现在看来,客户永远是对的。如果我投入更多的时间来分析客户需求,情况可能会大不相同。不过我走了好大一段弯路才明白了这一点。


一名程序员不会因为他会写代码而成为一名合格的程序员,而是因为在开始做任何事情之前先做分析,然后再来开展工作,这才是真正的程序员。分析必须在多个层次上进行:


  • 为更好地执行所做的自我分析

  • 为更好地交付所做的客户需求分析

  • 为帮助每个人更好地完成工作所做的对整个项目的分析


如果你想从初级成为高级开发人员,你需要培养这些分析技能,以蜕变成一个真正优秀的高级开发人员。他所为人称道的是专业知识,而不是具备多少年经验。


一个好的高级开发人员就像一个成年人一样,可以自己照顾自己。他的生活不再是飘忽不定的、无意识的和实验性的。他从自己的错误中吸取教训,为自己的人生打下坚实的专业基础,他可以回首过去并为之自豪。他可能仍然“年轻”,但他所拥有的,是大量可实际高效做事的技能,这远比他的工作年限更有价值。


以下,将给出一些从初级程序员到高级程序员的方法。


克服邓宁-克鲁格效应


邓宁-克鲁格效应是一种认知偏见,人们总会高估自己,他们眼中的自己比现实中的自己更聪明、更能干。从本质上说,能力低的人不会认识到自己真的无能,相反他们都会高估自己。


作为一名初级程序员,这绝对是一场灾难。你可能认为你是一个超级明星程序员,无所不知。但事实是,你知道的很少,距离优秀还有很长的路要走。你应小心提防,不要掉进这样的陷阱。


初级程序员和高级程序员的区别在于初级程序员认为自己什么都懂,而高级程序员则知道自己还有很多东西要学。初级程序员往往高估自己的知识和能力,无法认识到其他人的技能和能力水平,这就是为什么他们总是认为自己比别人更有能力,知道得更多。


正如 David Dunning 所明确指出的:在许多情况下,无能并没有使人们失去方向、困惑或谨慎。相反,不称职的人通常会盲目自信。


Dunning 和 Kruger 认为,随着工作经验的增加,过度的自信通常降低,变得更为现实。当程序员开始深入钻研他们的领域时,他们开始认识到自己缺乏相应的知识和能力。当他们获得这些知识后,他们的专业能力就会增加,他们的信心水平也会再次提高。


他们提出了以下方法来克服过度自信。


  • 坚持学习和实践。一旦你对一个主题有了更多的了解,你就更有可能认识到还有多少东西需要学习。这可能避免想当然地把自己假想成专家。

  • 问问别人你做得怎么样。向别人寻求建设性的意见可以让你了解到别人是如何看待你的能力的。

  • 质疑你已知的东西。不断挑战你的信念和期望。寻找挑战你想法的信息。你提的问题越多,你学到的东西就越多。


记住,博学是一种美妙的感觉。但是你需要注意提高你的标准。为此,你需要更深耕,以便更好地理解某个特定的主题。这,会让你意识到还有多少东西需要学习。


知道什么时候不做什么


Mark Manson 在《不在乎的精妙艺术》一书中谈到了保持一种身份的重要性,这种身份的定义越少越好。这是因为当我们涉及到我们的身份时,当我们决定某些行为或事件时,代表的是我们作为一个人的价值。


简单地说,我们在决定做某件事时,经常是基于它如何满足我们的自我或者孩子般地迷恋与刺激,而不是真正需要做这件事。Manson 告诉我们,当我们把“自我”置身于决定之外时,做出的决定才是最好的决定,因为这很可能不是关于“你”的。直接问问自己:“这样做好吗?”好?那就去做吧。


这一点也适用于程序员。实际上,大多数程序员天生就是喜鹊,他们总是收集亮晶晶的东西,把它们存储起来,然后试图把它们粘起来粉饰巢穴。如果你没有意识到这一现象,“亮晶晶玩具综合症”的典型特征就是想要拥有最新的玩具,通常不考虑实用性或功能性的需要。或者,在注意力尚未转移到其他东西之前,总是十分渴望地想要拥有它。


如果你的目标是成长为一名高级程序员,你需要不惜一切代价避免患上这种病。最优秀的高级程序员清楚地知道什么时候不应该做什么。他们知道,为了提高可读性而从头重写一个类库,或者从旧的框架切换到最新的框架并不总是好的决定。这些代码的目的应该足够清楚,让人可以在几分钟甚至几秒钟内了解到。应该让大家很容易就可以浏览这些代码,即使不具备复杂的技巧。


关键不在于规避风险,而在于谨慎选择正确的战场。


抱有疯狂的好奇心


你有没有想过“应用程序”这个词是什么意思?


为什么我们把这些小图标叫做智能手机应用程序?这是因为他们将给定的工作流程或算法应用于我们的问题,并帮助我们解决我们的需求。


也就是说,如果你正在做些什么的时候,一定会犯错误。反思你的工作并不断改进它会带来创新,而创新的根源在于对事物运作方式的好奇心。记住,这是自我提升过程中的一个重要障碍。


错误- >见解- > …好奇心- >创新- >错误重复……


如果你想继续前进,成为一名优秀的高级程序员,你需要对你所做的每一件事都保持疯狂的好奇心。好奇心是一种你越用就会变得越好的工具,这正是人们对优秀高级程序员的期望。优秀的高级开发人员以结构化的方式引导他们的好奇心,使他们可以使用那些在紧急情况下积累起来的信心。


有一些方法可以满足你的好奇心,塑造你的品牌。


  • 永远不要停止学习。选择一门课程、一本书、一个在线教育学位,用它来丰富你已有的想法,并获得新的想法。

  • 注重基本原则。确保你了解它们是如何工作的,这样你就可以把它作为你工作的基础。

  • 不要说出你的想法。展示你的项目,无论如何,想法都是被高估的。如果你的想法得到了应用和传播,你就可以塑造起你自己的品牌。

  • 在新想法和已有想法之间细细考量。不要盲目接受你“应该”知道的东西。挑战现状。

  • 不要只是让它可以工作。使其可扩展、可重用并且可插拔。这就是你建立你的专业知识的方式。


一切都始于好奇心。如果你不好奇,还不如放弃。正如阿尔伯特·爱因斯坦所说的:


“我没有什么特殊才能。我只是非常好奇。”


作者介绍:


Ravi Rajan 是印度孟买的全球 IT 项目经理。他还是一个狂热的博客作者、俳句诗作家、考古学爱好者和历史狂人。可以在LinkedInMediumTwitter上与 Ravi 取得联系。


参考链接:


How to Go from Junior to Senior Programmer


2020 年 4 月 14 日 16:458039

评论

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

四面腾讯pcg后端开发岗,一个星期面完成功拿到20K的offer。分享面经

Java架构之路

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

区块链信息共享应用落地搭建解决方案

t13823115967

区块链+ 区块链应用 信息共享

分享一个GitHub上最火的SpringCloud微服务商城系统项目实战,附全套教程

Java成神之路

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

智慧警务开发,二维码定位报警系统搭建

t13823115967

智慧公安 智慧公安扫码

牛皮了!头一次见有大佬把Java语言中最为晦涩的知识点「并发编程」详解得如此清晰明了。

Java成神之路

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

仅凭这份Java大纲笔记,我如愿拿到了阿里offer。

Java架构之路

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

公安大数据分析系统开发方案,情报研判系统建设

WX13823153201

公安大数据分析系统开发

DeFi流动性挖矿系统开发(案例源码开发)

系统开发咨询1357O98O718

defi流动性挖矿系统开发

阿里架构师经验分享!啃完999页Android面试高频宝典,面试心得体会

欢喜学安卓

android 程序员 面试 移动开发

最近面试了一波Java程序员,有好几位80后的,按理说是老司机了,没想到一问三不知!

Java成神之路

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

四币连发平台系统开发详解丨四币连发源码(案例)

系统开发咨询1357O98O718

四币连发系统开发案例详解

EPBC环保生态链系统开发案例丨环保生态链EPBC源码平台

系统开发咨询1357O98O718

环保链APP系统开发案例

区块链BaaS应用平台开发

13828808769

死皮赖脸地找一位前阿里P8得大佬请教怎么学习微服务,他随手甩给我一份内部SpringCloud笔记手册,真香!

Java成神之路

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

恕我直言!有了这份MySQL学习文档,你收藏夹里的其他MySQL学习资料都可以扔了

Java架构之路

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

挖矿矿池系统开发详情丨挖矿矿池源码案例

系统开发咨询1357O98O718

挖矿矿池系统开发案例 旷工系统开发功能

架构师训练营第八周作业

李日盛

算法

新思科技最新报告显示开源安全是首要考虑因素

InfoQ_434670063458

推荐一个GitHub上超牛b的Java进阶学习项目《Java成神之路》!已整理成了文档版本

Java成神之路

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

Github 2020 年度报告:你以为新冠击溃了开发者?不!他们创造了更多代码...

阿里巴巴云原生

开源 Serverless 程序员 代码 开源代码

SGY奇点交易所系统软件开发|SGY奇点交易所APP开发

开發I852946OIIO

系统开发

某美女的程序员老公半夜都还不回家,原来是偷偷在公司看Redis+JVM+Spring cloud+MySQL技术文档

Java架构之路

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

iOS面试基础知识 (一)

iOSer

ios 面试 runtime 编程开发 iOS Developer

Mybatis动态映射,so easy啦

田维常

超详细讲解!Android面试真题解析火爆全网,搞懂这些直接来阿里入职

欢喜学安卓

android 编程 程序员 面试 移动开发

《数据结构与抽象:Java语言描述》.pdf

田维常

数据结构

Scala中String和Int隐式转换的问题分析

木子李G

scala 大数据 编程 隐式转换

还有谁比阿里人更懂SpringCloud Alibaba 呢?P8大牛纯手打笔记免费分享!

Java架构之路

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

区分Protobuf 3中缺失值和默认值

新世界杂货铺

golang protobuf

DeFi流动性挖矿系统开发详解方案

系统开发咨询1357O98O718

defi流动性挖矿系统开发

用60行代码实现一个高性能的圣诞抽抽乐H5小游戏(含源码)

徐小夕

Java 前端 H5游戏 H5

如何从初级程序员变成高级程序员?-InfoQ