还记得前几天跃哥的这篇推文吗?《知道吗,你和高级工程师差距巨大》这篇和大家简单的聊了聊程序员和高级程序员的差距,目的就是为了让大家有一个深刻的认知,然后朝着这个目标去奋斗。
高级程序员肯定是一部分同学的梦想,跃哥最近经常被群友询问,说如何才能进大厂,如何才能和我一样优秀,如何才能面面俱到等等这些话题,也写了一部分自己的文。那么,这些都是在我眼里的所见所谓,对于远在大洋彼岸的国外程序员,他们又是如何理解,甚至是如何走从初级到高级之路的呢。
就这样,今天这篇文章应运而生。欧阳同学通过自己的资源,找到了这篇名为《How to Go from Junior to Senior Programmer - Level Up Coding》 的文章,翻译成中文就是《如何从初级程序员到高级程序员》,这不就是程序员成长之路的海外版本的解读吗?习惯了我们国内的 style,跃哥带你一同感受下他们的文风。
因为水平有限,有部分解释的不是很清楚,还请大家见谅,想要阅读原文, 可以联系我。文中有部分产生了共鸣,我有添加自己的语录,以后我都会尽量有一个“跃哥语录”的模块,希望大家喜欢,哈哈哈哈。
如何从初级程序员升级到高级
高级程序员是一个专家,他犯了所有在他领域可能犯的错误。(跃哥感慨:同理可以理解成,大公司也是一个专家,大公司遇到的问题小公司肯定遇到过,所以很多资料,很多学习的内容大公司的经验都是宝贵的经验)
程序员可以按经验级别来分类,大致可以像如下这几类:
- 初级:2-3 年的经验
- 高级:10 年以上经验
- 中级或“中级”:处在初级和高级之间
多年工作经验真的是一个难题。它并没有提到软件开发的质量问题。这几年你积累了多少经验和技能呢?这就是为什么针对开发人员的求职面试是如此复杂的原因。这是一项很难衡量的技能,因此我们最终在面试中对开发人员进行了很困难的测试。但是这些测试其实也就是一个近似值,无法衡量做这份工作所需的工作或专业知识。
(跃哥感慨:这肯定引起了很多同学的共鸣,为什么面试造航母,入职螺丝钉。是因为做技术这项工作太难了,每个公司所需要的技能、要求、模块、框架不一定都相同,但是底层知识,基础知识是相通的,这部分又比较难,这样就让很多同学苦恼。但是这也是企业的无奈。)
进而引出了下一个问题。
一旦你不再是一个初级工程师,你什么时候能成为高级工程师呢?
多年的工作经验会自动让你成长为高级吗?不存在的。
(跃哥感慨:这不就是跃哥之前强调的,不能一个工作经验用十年的意思么?)
以我的情况为例。当我还是一个年轻的初级软件工程师时,我以为我什么都知道。 我很粗鲁,自大和自信。我认为自己是“编码的王者”。我不喜欢与他人合作,我认为编写出色的代码是唯一重要的事情。
我发现我错了。是的,编码很重要。归根结底,程序员必须编写代码。但是编写代码并不是唯一重要的事情。
当我为第一个客户工作时,我很难学到这一点。我跟客户花了“15”分钟,收集了需求的“要点”,并假设我明确了解客户的需求。我开始像个疯子一样疯狂的写代码,享受编写代码的行为。我在3天的时间内提交了申请然而被客户立马拒绝。因为那不是他所想要的。
结果不用说,我很忧桑。我的自尊受到伤害,而且我还责怪客户没有提供足够的信息。我当时太年轻了,其实客户永远是对的。如果我花更多的时间分析客户的需求,情况可能会大不相同。我学这个很难,很难学会。
也就是说,程序员不仅仅是程序员,因为他会编程。他是个程序员,因为他的工作是在开始任何事情之前分析所有的事情。必须在多个层次上进行分析。
- 自我分析,以此来提高
- 分析客户需求以提供更好的服务
- 分析整个项目,以帮助每个人表现更好
如果您想从初级到高级开发人员,则需要培养这些分析技能,使之蜕变成一个真正优秀的高级开发人员,他以专业知识而闻名,而不是多年的经验。
一个优秀的高级开发人员就像一个已经长大的成年人,可以照顾自己的人。他的生活不再是不稳定的,自发的和实验性的。他从错误中吸取教训,在生活中创造了坚实的专业基础,他可以回过头来为之骄傲。他还可以“年轻”,但他所拥有的是丰富的实用主义和有效性,远比他多年的实际经验更有价值。
(跃哥感慨:跃哥平时在社群里也和大家聊工作经验,写代码这方面的沟通。其实在程序员面前,写代码是最后一部分要做的事情,也是最简单的事情。当你做过需求分析,数据库设计,框架设计,选型等工作,写代码就是水到渠成的事情,只要给你时间,完成客户要求的产品不是问题。)
下面是一些从初级程序员蜕变到高级程序员的方法
克服 Dunning-Kruger 效应
Dunning-Kruger 效应是一种认知偏见,人们认为自己比实际更聪明、更有能力。从本质上讲,低能力的人不具备识别自身能力不足所需的技能,这导致他们高估自己的能力。
(跃哥感慨:知道自己不知道,才是正确的认识自己。就像很多人感慨那样,一开始编程的时候,以为自己知道的很多,但是当他越深入学习,越发觉得自己掌握的知识很渺小,怎么还有这么多的内容需要学习呢?)
作为一个初级程序员,这无疑是一个灾难的处方。你可能认为你是一个摇滚明星程序员,什么都知道,但事实是你知道的很少,仍然远远没有达到卓越。这是一个陷阱,你需要避免陷入进入。(这里还推荐一本书,叫《能力陷阱》)
初级程序员和高级程序员的区别在于,初级程序员认为自己什么都知道,高级程序员知道自己还有很多东西要学。初级程序员往往高估自己的知识和能力,无法认识到其他人的技能和能力水平,这就是为什么他们总是认为自己比别人更有能力,更有知识。
正如 David Dunning 所说的那样:
“在许多情况下,没能力不会让人迷失方向、困惑或谨慎。相反,不称职的人往往被一种不适当的自信所鼓舞,这种自信在他们看来是知识。”
Dunning 和 Kruger 认为,随着工作经验的增加,过度自信通常下降到更现实的水平。随着程序员开始深入学习,他们意识到自己缺乏知识和能力。随着他们不断地获取知识,他们的专业知识不断增强,信心水平开始再次提高。
他们提出了以下克服过度自信的方法。
- 不断学习和练习。一旦你对某个主题有了更深刻的了解,你就会认识到仍有很多东西需要学习。即使你不是专家,这也能阻止你认为自己是专家的倾向。
- 问问别人做的怎么样。向别人提出建设性的意见可以为别人如何看待你的能力提供有价值的见解。
- 询问你所知道的。不断挑战你的信念和期望。寻找挑战你想法的信息。你的问题越多,你就学到更多。
记住,知根知底的感觉是愉快的。但你需要不断提高自己的标准。为此,你需要更深入地挖掘,以便更好地理解一个特定的主题。它让你认识到还有多少东西要学。
知道什么时候不该做什么
Mark Manson 在《The Subtle Art of Not Giving a Fuck》一书中谈到了保持由尽可能少的定义身份的重要性。这是因为当我们涉及到我们的身份时——当我们决定某些行为或事件代表我们作为一个人的价值时。
简单地说,我们经常决定做一些事情是基于它如何满足我们的自我或孩子气的兴奋感,而不是真正需要做同样的事情。Manson 告诉我们,最好的决定是当我们把“自我”排除在决定之外时做出的,因为这是最有可能,不是“你”的问题。简单的问问自己,“这是件好事吗?”是的“?那就勇敢去做吧。
这也适用于程序员。事实上,大多数程序员天生就像喜鹊一样,总是收集闪亮的东西,把它们存储起来,寻找联系。如果你不知道这一现象,闪亮玩具综合症的典型特征是想要拥有最新的玩具,通常不考虑实际或功能的需要,或者在转移到其他东西之前被强烈但非常短暂的所有权所吸引。
如果你的目标是成为一名高级程序员,你需要不惜任何代价避免这种疾病。更好的高级程序员知道什么时候不做什么。他们知道从头开始重写一个库只是为了使它更可读,或者从旧的框架切换到最新的框架并不总是好的决定。代码的目的应该足够清楚,以便在几分钟甚至几秒钟内掌握。浏览代码应该很容易,即使没有复杂的技巧。
关键不是要规避风险,而要谨慎选择正确的战斗。
(跃哥感慨:所以现在你知道很多公司为什么还在使用你认知范围内的旧技术了吧?拿Java来说,其实技术的本质都是差不多的,但是框架的封装是有所不同,每个时期都有每个时期的优秀框架,一旦定下这个框架,并让系统稳定起来,则后续的转型是需要高级程序员经过层层评判才能确定的。同理可以用在需求分析上。)
充满好奇
您是否想知道“application”一词是什么意思?
为什么我们在智能手机中称这些小图标为applications?因为他们将给定的工作流程或算法应用于存在的问题,并帮助我们解决我们的需求。
也就是说,如果你要构建某些东西,那么你肯定会犯错误。反思你的工作并不断地改进他会促使创新,而创新的根源在于好奇心,去发现事物是如何工作的。记住,这是在自我完善的整个周期中一个重要的阻碍。
错误->见解->好奇心->创新->错误……。重复……
如果你想继续前进并成为一名优秀的高级程序员,那么你需要有疯狂的好奇心去投入到你所做的每一件事中。好奇心是一种工具,你用得越多越好,这正是人们对一个优秀的高级程序员的期望。优秀的高级开发人员以结构化的方式引导他们的好奇心,这样他们就可以使用在危机情况下积累的信息。
您可以通过以下几种方式来激发好奇心并树立你的品牌。
- 持续学习。选择一门课程,一本书,一个在线课程,并利用它来丰富你已拥有的想法,并获得新的想法。
- 聚焦基础知识。确保你了解它们的工作原理,这样你就可以把它作为你工作的基础。
- 不要说出你的想法,请展示你的项目。无论如何,想法都被高估了。当你的想法被使用和传播时,你可以建立你的品牌。
- 在新的和既定的想法之间取得平衡。不要盲目地接受你“应该”知道的东西。挑战现状。
- 不仅仅是使它起作用。使其可扩展、可重用和可插入。这就是你建立专业知识的方式。
一切都始于好奇。如果你不好奇的话,你最好选择退出。正如 Albert Einstein 所说:
结语
跃哥在这里还安利大家一个知识点,叫做:四象限法则,是美国管理学大师史蒂芬·柯维提出,用户时间管理的基础理论。他用重要和急迫两个维度,将事项分为四个象限:重要且紧急,重要但不紧急,不重要但紧急,不重要且不紧急。这里衍生出了很多其他的四象限,比如知识四象限,知识自己知道,知道自己不知道,不知道自己知道,不知道自己不知道。
利用这个四象限法则,可以根据自己的实际情况来很好的分析当下比较重要的事情,也能很好的分析自己所处的环境,把自己的优先级分析出来,把自己的知识点分析出来,方便自己对症下药以便更进一步的学习,是不是很赞?
不要问跃哥为什么知道的这么多,不要问跃哥为什么在文中有这么多感慨,因为我今年读的书变多了,无论从获取知识的角度还是消化的角度都有了一个长足的进步,可惜从金钱的角度来看,还任重道远,这也是比较尴尬的地方,也是我还要继续努力的地方。
师傅领进门,修行在个人。最近分享了很多关于校招、面试、成长、翻译的文章,你不需要每篇都看,但请你挑选适合自己的好好看,因为我们都还在一个有无限进步的空间里生存,我们需要进步的点还有很多。
所以,跃哥还和大家一起进步,一起学习,一起奔跑,来吧,少年们!