AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

  • 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:459234

评论

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

电商增长红海突围,借势小程序生态

Speedoooo

小程序 小程序生态 电商 移动开发 小程序运行时

啃论文俱乐部 | 压缩算法团队:我们是如何开展对压缩算法的学习研究

OpenHarmony开发者

OpenHarmony

Flutter 中的 Flash 错误消息

坚果

6月月更

C#入门系列(二十一) -- 面向对象之继承

陈言必行

C# 6月月更

浅谈SpringMVC五大组件以及对执行原理的分析

百思不得小赵

springmvc Java EE 6月月更

CVPR2022 | 上科大x小红书首次提出动作序列验证任务,可应用于体育赛事打分等多场景

小红书技术REDtech

Transformer CVPR2022 视频动作理解 动作序列验证

见证荣耀|长三角区块链应用创新大赛复赛于旺链科技成功举办

旺链科技

区块链 产业区块链 区块链应用创新

Linux开发_文件发送与接收

DS小龙哥

6月月更

深度学习编程常用工具Jupyter Notebook

Damon

深度学习 Jupyter Notebook jupyterlab 6月月更

北京Java培训 | java设计模式之原型模式

@零度

JAVA开发 原型设计模式

居家办公初体验之新得分享| 社区征文

阿Q说代码

居家办公 初夏征文 心得分享

linux 密钥登录

CRMEB

PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分

PingCAP

TiDB

剖析 SPI 在 Spring 中的应用

vivo互联网技术

spring Java’ JavaSPI Spring SPI Dubbo SPI

浅谈DOM中的类型

大熊G

JavaScript 前端 6月月更

知识管理系统有效推动中小企业信息化发展

小炮

今天 2 点:关于龙蜥社区云原生 SIG 及安全容器 runD 介绍 | 第 24 期

OpenAnolis小助手

开源 云原生 虚拟化 sig 龙蜥大讲堂

修修补补一时爽,果断重构有担当——聊聊CRM分布式缓存优化

鲸品堂

分布式缓存

NodeJS mysql需要注意sql注入 🎈

德育处主任

Node SQL注入 6月月更

小程序直播互动功能运行在App里?

Speedoooo

小程序 直播带货 移动开发 直播技术 小程序容器

百问百答第43期:应用性能探针监测原理-PHP探针

博睿数据

智能运维 博睿数据 性能监测 百问百答

我把 b 站拉黑了!

博文视点Broadview

实践 DevOps 时,可能面临的六大挑战

飞算JavaAI开发助手

浅聊一下数据监控(针对MSSQL)

为自己带盐

SqlServer 数据监控 6月月更

这不会又是一个Go的BUG吧?

捉虫大师

Java Go 死锁

SAP Marketing Cloud Restful API SDK 使用案例分享

汪子熙

云计算 SaaS SAP 6月月更 Marketing Cloud

中国信通院首届3SCON软件供应链安全会议成功召开 聚焦软件供应链全链路安全

中国IDC圈

安全 软件安全

西安Java培训 | java设计模式之工厂设计模式

@零度

设计模式 JAVA开发

Flink CDC MongoDB Connector 的实现原理和使用实践

Apache Flink

mongodb 大数据 flink 流计算 实时计算

5000字解析:实战化场景下的容器安全攻防之道

青藤云安全

网络安全 容器安全 攻防演练

视频一对一源码,简单的搭建方式也有技术要求

开源直播系统源码

软件开发 二次开发 一对一源码

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