【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 2020-04-14
  • 本文字数:3096 字

    阅读完需:约 10 分钟

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

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


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


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


  • 初级: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-04-14 16:458906

评论

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

CSS知识框架(一)

默默的成长

CSS 前端 11月月更

深入react源码看setState究竟做了什么?

flyzz177

React

首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态

OneFlow

人工智能 开源 深度学历 TPU

为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022

SEAL安全

GitHub 安全

学习MySQL必须掌握的13个关键字,你get了吗?

小小怪下士

Java MySQL 程序员

React-Hooks源码深度解读

goClient1992

React

说说你对Vue的keep-alive的理解

bb_xiaxia1998

Vue

高频react面试题自检

beifeng1996

React

图学习初探Paddle Graph Learning 构建属于自己的图【系列三】

汀丶人工智能

图神经网络 11月月更 随机游走算法 异质图

看透react源码之感受react的进化

goClient1992

React

Spring 5(四)JdbcTemplate

浅辄

Java Spring5 11月月更

中高级前端开发需要掌握的vue知识点

bb_xiaxia1998

Vue

ShardingSphere + OpenSergo,共同提升微服务体系下数据库的性能与稳定

SphereEx

数据库 微服务 Apache ShardingSphere

一天梳理完react面试题

beifeng1996

React

React源码分析(一)Fiber

goClient1992

React

问:React的useState和setState到底是同步还是异步呢?

beifeng1996

React

从recat源码角度看setState流程

flyzz177

React

Git学习笔记

lxmoe

git 学习笔记 常用命令 11月月更

Flask框架:如何运用Ajax轮询动态绘图

华为云开发者联盟

JavaScript 前端 华为云 企业号十月 PK 榜

Map接口的子类HashMap和LinkedHashMap

共饮一杯无

Java 11月月更 Map集合

Spring 5(三)AOP

浅辄

Java Spring5 11月月更

一份vue面试考点清单

bb_xiaxia1998

Vue

python的成员方法的简单介绍

乔乔

11月月更

什么是Maven

莪是男神

Java maven 11月月更

问:你是如何进行react状态管理方案选择的?

beifeng1996

React

Map接口概述和基本使用

共饮一杯无

Java map 11月月更

说说Vue响应式系统中的Watcher和Dep的关系-面试进阶

bb_xiaxia1998

Vue

优化开发人员对 K8s 安全的影响

HummerCloud

Kubernetes DevSecOps 11月月更

从源码角度看React-Hydrate原理

flyzz177

React

【设计模式】原型模式:猴头,我叫你一声你敢答应吗?

游坦之

11月月更

【C语言】float 关键字

謓泽

11月月更

如何从初级程序员变成高级程序员?_编程语言_Ravi Shankar Rajan_InfoQ精选文章