工作经验并不是唯一标准。
神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。
编者按:程序员之间的差别到底在哪里?用什么标准来区分初级、中级和高级开发人员呢?本文作者Daan认为,工作时间并不是区分人与人之间差别的标尺。高级开发人员更具有独特的思维方式,不再拘泥于完成日常任务,而更倾向于发现问题和解决问题。而初级开发人员由于经验不足,只能按部就班地按照指令走,其代码上的操作一般更为花哨,很少考虑到其他程序员的需要。那么,从初级到高级,需要经历些什么呢?本文译自中,原标题为“The Differences Between a Junior, Mid-Level, and Senior Developer”的文章。
图片来源:
作为一名开发人员,目前处于初级、中级还是高级阶段其实不仅仅取决于你参加编程工作的时间长短,而是取决于人与人之间的技术差异,有时初级开发人员甚至比高级开发人员年纪更大。不过,这并不意味着高级开发人员必须是全栈的专家,但高级开发人员肯定远比初级和中级开发人员操作熟练且灵活。
不过,这种技术差异并不单单是指编码技能,那么他们到底有什么区别呢?
知识
首先可以肯定的是,高级开发人员比初级和中级开发人员在知识体量上掌握得更多,对设计模式、体系架构、自动化测试、性能、安全等项目都非常熟悉,知识体系也比较全方位发展。作为初级开发人员,要想与中级和高级开发人员缩小知识差距,从这些方面下手不失为最佳的路径。
尽管了解软件开发的操作程序是非常重要的一项技术,但是仅仅知道这些东西并不能使你成为一名高级开发人员。由此可见,知识储备并不是开发者之间最大的区别,它只是其中的一个因素而已。
编程能力
实际上,编程并不是与计算机的通信和交互仅此而已,而是一项与人通信并指导计算机的工作。最终,编程中的代码被编译成 0 和 1。
代码应该具有易读性,必须能够让使用它的其他开发人员容易理解并且好直接上手操作,也就是说,一个以前从未见过这些代码的新团队应该能够直接运行它,并处理、添加一些新特性,或者进行错误修复。从这个角度上看,这也是初级开发人员和高级开发人员之间的区别所在。毕竟任何事情都一样,想让自己理解很容易,想让别人也理解就困难了。
在这个项目的对比中,我们将不考虑中级开发人员的情况,因为中级开发人员在编程方面处于灰色地带,他们介于初级和高级之间,可能更倾向于高级。不过,这主要与经验有关,因为中级开发人员可能至少经历过一个完整的开发周期,他们犯过许多最简单的错误,并从中吸取了教训,所以看起来经验更为丰富一些。
如何辨别初级开发人员?
初级开发人员缺乏经验。很多初级人员都是刚刚毕业,刚开始上手第一份全职工作,他们的心态通常是:只要代码能运行起来就行了。可以正常工作的软件和优秀的软件在他们看来几乎没什么区别。
在编程中,编写简洁明了的代码并不容易,这恰恰是初级开发人员难以具备的能力,初级人员编写的代码通常都有点花哨的成分。因此,你可以通过判断一行代码是简洁还是啰嗦,是直接还是抽象来识别初级开发人员。有一些初级开发人员往往会用这种方式炫耀自己的技术,试图让其他开发人员知道他们编码有多好,然而事实却总恰恰相反。
那么如何识别高级开发人员呢?
当查看高级开发人员的代码时,你可能会想:这就是全部吗?剩下的代码呢?怎么内容比我想象中要少呢?高级开发人员编写代码的风格更为简洁,甚至看上去有些“小儿科”,不过可千万别小看这个部分,这是开发人员在编程方面所能具备的最重要的品质之一,即:高级开发人员遵循 KISS 原则:保持简单,愚蠢(Keep it simple, stupid)。
这是由于,高级开发人员和初级开发人员思考代码的方式是不同的。高级开发人员编写代码的时候将考虑其可维护性和可扩展性,初级开发人员的更关注当下;高级开发人员考虑的是要用到代码的有多少人,各自需要什么功能,而初级开发人员可能只是考虑让代码在计算机上工作而已。
除了编程差异,还有什么区别?
除了编码技能,还有其他一些因素帮我们判断一个人是什么类型的程序员。
一般来说,初级开发人员执行最简单的任务或影响较小的任务,他们不做任何架构上的设计,中级开发人员达不到设计解决方案的阶段,他们只是执行下发的任务。不过,与初级开发人员的不同之处在于,只要他们被分配到相对常规的任务,一般都能够独立完成。而高级开发人员就不再只是半机械地照着指令走了,他们完全可以自行开发应用程序。
当然这并不意味着高级开发人员一路上不会出现任何问题,问题是不可避免的,这点谁都无法改变,对于高级开发人员来说也是如此。
其中的区别在于,高级开发人员知道如何提出正确的问题以及如何处理这些问题。中级开发人员可以在相对常规的任务中提出正确的问题,但在更复杂的任务中就需要他人的帮助了。
尽管通常情况下,高级开发人员在操作中不会迷路,他们知道如何用正确的行动来跟进问题,但这并不意味着他们不会向其他开发人员寻求帮助。有时候,向该领域更有经验的其他开发人员求助才是最好的办法。
当然,中级开发人员也应该能够提出正确的问题,只要他不被分配到需要深入知识水平的高度复杂的任务中去,在一般情况下都是得心应手的。
说实话,我们不必期望初级开发人员可以直接提出正确的问题并解决它。由于初级开发人员缺乏经验,他们需要经验更丰富的人的指导。因此,初级开发人员需要获得必要的资源或被大力引导才能一步一步走向正确的方向。
进入更高的层次
每个人都想超越自我,成为一个更好的开发人员。但是你该如何行动来更上一层楼呢?
初级到中级
由于初级开发人员缺乏经验,因此经历几次完整的开发周期是很重要的。在这个过程中,你会掉进很多陷阱中并逐步学会如何避开它们。
在编程方面,初级开发人员应该学习如何编写简单的代码。想想下一个要处理这段代码的人,如果看到一些啰嗦的语句该多头疼啊,所以尽量简练的语言才是编程能力的体现。此外,作为开发人员,你还应该学习如何调试,因为这将使你更好地了解程序运行过程中发生的情况。
此外,你也应该熟悉实践知识,了解体系架构、性能、安全性等项目,缩小达到中级所需的知识差距。
中级到高级
从中级到高级可能相当困难,有些开发人员整个职业生涯可能都停留在中级的水平。
与中级不同的是,高级开发人员知道哪些可以做哪些不应该做,而这些都是过去犯过错误积累的教训。
如果你想进阶到高级开发阶段,就必须准备好迎接那些没有人知道如何解决的任务,与此同时,你知道的应该比如何工作所需要多得多。
作为高级开发人员,你工作的一部分是帮助经验不足的开发人员。当其他开发人员不知道如何做某些事情时,你就是他们的后备力量。
高级开发人员必须有自己的技术栈,而不仅仅是编码技巧。你需要了解在所在公司中使用的所有工具和应用程序。
图片来源:
结论
初级开发人员、中级开发人员和高级开发人员之间的区别并不取决于具体的工作年限,在工作中,时间的长短并不能代表一个人的能力。当然,可以肯定地说,高级开发人员比初级和中级开发人员更熟练,尽管知识并不是最重要的因素。
与初级开发人员相比,高级开发人员编写的代码更简洁,并且思维方式也大有不同。但区别不仅仅是编码技巧,还要知道提出问题和解决问题的重要性,要有独立思考的创造力。只有拥有丰富经验的高级开发人员才能够在无论什么情况下,都知道如何进行开发工作。
作为初级开发人员如果想要成长,应该专注于编写简单的代码并经历多个完整的开发周期;如果要从中级开发人员进阶到高级开发人员,最好应该专注于学习,而不仅仅是完成固定的日常任务。你也应该主动承担最艰巨的任务,成为技术小组的主管,毕竟高级开发人员的另一个职责就是为经验不足的开发人员提供帮助。
最后,用Martin Fowler(现为ThoughtWorks公司的首席科学家)的一句话作为结尾:“任何傻瓜都能写计算机能理解的代码,优秀的程序员编写人类能够理解的代码(Any fool can write code that a computer can understand. Good programmers write code that humans can understand)。”
译者:小灼