按经验级别划分的软件开发人员可能如下:
- 初级:拥有两到三年的经验
- 高级:拥有十年以上的经验
- 中等或 “中级水平”: 介于初级和高级之间
以年为单位衡量工作经验存在一个问题,即没有说明程序员开发软件的质量。工作的那几年获得了多少经验和技能?这也就导致开发人员的求职面试十分复杂。这项技能难以衡量,因此我们最终在面试中对开发人员进行了高难度测试。但是这些测试充其量只是进行大致地估量,无法准确衡量工作或完成工作所需的专业知识。
这就引出了下一个问题。
一旦你不再是初级程序员,那什么时候会成为高级程序员呢?
多年的工作经验会使你自然而然地成为高级程序员吗?
不一定。
以我自己为例,当我还是个初级程序员时,年少无知却自以为是,傲慢轻狂。认为自己是“代码之神”,不愿与他人合作,认为编写出色的代码是唯一重要的事情。
但我错了。的确,代码很重要。说到底程序员必须要编写工作代码,但写代码并不是唯一重要的事情。
在为第一位客户服务的过程中,我经历了很多困难才明白了这一点。我与客户只交谈了15分钟,收集了需求“要点”,自认为已完全了解客户需求。于是,我开始疯狂地编写代码,享受编写纯代码的过程。只用了3天就提交了应用程序,可是客户拒绝了,因为那并不是他想要的。
当然了,我很受伤。自尊心受挫,我便责怪客户没有提供足够的信息。当时的我还很不成熟,所以才说出这样的话。客户永远没有错。如果花更多时间分析客户需求,情况可能会大不相同。通过这次惨痛的教训,我明白了这一点。
也就是说,程序员之所以被称为程序员,不是因为可以编程,而是因为他的工作是在任何事情开始之前就分析好一切。分析必须在多个级别上进行。
- 自我分析以求更佳表现
- 分析客户需求以提供更好的服务
- 分析整个项目,以帮助每个人呈现更优秀的表现。
如果想从初级升级至高级开发人员,则需要培养这些分析技能,凭借专业知识而非多年的工作经验变成一个真正优秀的高级开发人员。
一名优秀的高级开发人员就像是一个长大了的孩子,变成了可以照顾自己的成人。他的生活不再是飘忽不定、随性而为,充满不确定性。会从错误中吸取教训,为生活打下坚实的基础,回忆过往时,他会为此感到自豪。他仍然“年轻”,但所拥有的是一种务实精神和高效的能力,这将比他实际的工作经验更有价值。
下面是从初级升级至高级程序员的一些方法。
1、克服邓宁-克鲁格效应
邓宁-克鲁格效应是一种认知偏见,人们认为自己更聪明能干。本质上,能力低下者不能认识到自己的无能,这导致他们高估了自己的能力。
作为初级程序员,这势必带来麻烦。你或许认为自己是著名的程序员,无所不知,但现实却是所知甚少,而且远未达到优秀的水平。这是需要避免掉入的陷阱。
初级程序员和高级程序员的区别在于,初级程序员自认为无所不知,而高级程序员知道要学的还有很多。初级程序员往往高估了自己的知识和能力,无法识别他人的技能和水平,因此始终认为与他人相比,自己能力更强、知识更加渊博。
正如David Dunning所说。
“在许多情况下,无能并不会使人们迷失方向、感到困惑或如履薄冰。相反,无能的人常常怀有盲目的自信,受到他们所认为的类似知识的事物鼓舞着,高高在上。”
Dunning和Kruger建议,随着工作经验的增加,自信程度通常会从过度下降到更为真实的水平。程序员开始深入自己的领域,逐渐意识到自己缺乏知识和能力。并且随着知识积累,专业知识不断增强,他们的自信程度也会再次提升。
他们提出了以下克服过度自信的方法。
- 坚持学习和练习。对某个主题一旦了解地越多,就越可能认识到仍有很多东西需要学习。这可以克服这一倾向,坚定自己是专家,即使事实并非如此。
- 请求他人评价。请求他人提出建设性批评建议可以为你提供宝贵的见解,了解他人对你能力的看法。
- 质疑原有认知。不断挑战信念和期待。寻找质疑你原有观点的信息。质疑得越多,学到的更多。
记住,感到博学会令人心情愉悦。但是始终需要提高自己的标准。为此,需要更深入地研究以便更准确地理解特定主题。这会让你认识到还有很多东西需要学习。
2、知道何事不该做
马克·曼森(Mark Manson)在《毫不在乎的微妙艺术》(The Subtle Art of Not Giving a Fuck)这本书中指出了尽量保持模糊身份的重要性。因为涉及自己身份的时候就是我们认为某些行为或事件代表着我们作为人类的价值的时候。
简单来说,我们通常会因为满足自我或幼稚地迷恋惊险刺激而决定做某事,而不是因为真正的需求。曼森告诉我们,当我们将“自我”拒之门外时,会做出最佳决定,因为这很有可能与“你无关”。只需问问自己:“这是一件好事吗?”如果答案是肯定的,那么就去做。
这也适用于程序员。实际上,大多数程序员天生有收集癖好,总是收集闪亮的东西,存放起来并寻找关联。你可能没注意到这种现象,一般而言,闪亮玩具综合症的特征如下:不顾实际或功能需求而想要拥有比较新的玩具,或者总是沉迷于强烈但短暂的拥有后才将注意力转向其他事物。
如果致力成为一名高级程序员,则需要不惜一切代价避免这种问题。最出色的高级程序员能够明确地知道何事不该做。他们知道,从头开始重写库只是为了使其更具可读性,或者从老旧的框架切换到比较新的框架并非总是明智之举。代码的目的应该清晰明了以便在几分钟甚至几秒钟内掌握。即使没有高超的魔力,浏览代码的过程也应该十分轻松。
关键不是要规避风险,而是谨慎选择适合的战斗。
3、具有强烈的好奇心
想知道“应用程序”一词是什么意思吗?
为什么我们在智能手机应用程序中运用这些小图标?这是因为它们将给定的工作流程或算法应用于我们遇到的问题,有助于满足需求。
也就是说,如果要构建某些东西,那么肯定会犯错误。反思自己的工作并不断改进会促进创新,而创新的根本在于想要发现事物运行原理的好奇心。记住,这是整个自我完善过程中的重要阻碍。
错误->见解->好奇心->创新->错误……
这一过程不断重复……
如果想提升自我并成为一名优秀的高级程序员,则需要对一切事物充满好奇心。好奇心是一种工具,用的越多越好,这正是人们对出色的高级程序员的期望。优秀的高级开发人员以结构化的方式引导他们的好奇心,从而可以在紧急情况下使用已积累的信息。
下面是激发好奇心并创建品牌的方法。
- 学无止境。选择一门课程、一本书、一个在线学位,通过它们,丰富已有的想法并获得新想法。
- 夯实基本原理。确保了解它们的使用方式,以便将其作为基础应用在工作中。
- 拒绝空想,行动才是真理。想法总是被高估。当你的想法被使用和传播时,便可以创建自己的品牌。
- 平衡新思想和既定思想。不要盲目接受“应该”知道的想法。挑战现状。
- 不只是能运行而已。使它具有可扩展性、可重复使用性和可插拔性。这是培养专业知识的方式。
一切都始于好奇心。没有好奇心,不妨退出。正如爱因斯坦所说:
“我没有什么特殊的天赋,只是拥有极强的好奇心。”