初级、中级和高级工程师并不是通过你从事编码工作的年限来判断的。初级工程师有时可能比高级工程师工作时间还要长。能否成为更高等级的工程师完全取决于你对专业技能的掌握程度,这也不是说高级工程师必须在每一方面都是专家,但是可以肯定的是,高级工程师一定比初级和中级工程师更加专业。
不仅仅是编程能力更加专业,高级工程师和初中级工程师相比还有其他区别。这区别到底是什么呢?
知识
很明显,高级工程师需要掌握更多的知识。学习设计模式、架构、自动化测试、性能、安全等知识是初级工程师迈向中高级工程师的必经之路。
知道软件开发过程中需要做什么是一件非常重要的事情。但是当你掌握了上面所说的全部知识时,你并不是已经成为高级工程师了,这些知识只是不同等级工程师之间的区别之一。
编码
很多人认为编码是人和计算机之间的一种交流,实际上是人和人的交流然后用于指导计算机。代码最终还需要编译成二进制码。
你的代码需要保证可读性,这样以后其他开发者才能在这基础上做其他工作。最好能做到让一个从来没有看过你的代码的团队一打开就能立即进行新功能开发或者修复bug。这也是初级和高级工程师的区别之一。
这里我们忽略了中级工程师,因为中级工程师在编程能力的比较中处于灰色地带。因为中级工程师介于初级与高级之间,并且更倾向于高级。编码能力更更加依赖于经验,而中级工程师通常至少参与过一次完整的软件开发流程。他们已经从一些简单的错误中吸取了教训。
如何辨别初级工程师
初级工程师通常没有开发经验。有些是刚毕业,第一次全职做开发。初级开发者的心态通常就是「能用就行」。能用的软件和好用的软件在他们看来都一样。
写出简洁的代码是一件困难的事情。这也是初级工程师不具备的能力,他们写的代码往往比较繁琐。你可以通过诡异的单行代码以及庞杂的抽象逻辑来识别初级工程师。这是初级工程师炫耀的方法,让其他开发人员知道他们的能力,但这是错误的做法。
初级工程师编码时专注于计算机端,而忽略了人力端。
高级工程师是怎样的
当查看高级工程师的代码时,你也许会想:这是全部代码吗?剩下的在哪?高级工程师写的代码总是简单、直接的。这时编程时可以修炼的最强技能之一。高级工程师遵循KISS原则:Keep it simple, stupid。
高级工程师在编码方式和初级工程师有所不同,他们会优先考虑代码的可维护性和可扩展性。两种级别的工程师编码时的心态也完全不同,高级工程师更多考虑的时后续维护代码的人,而初级工程师考虑的是使代码可以被计算机执行。
不止于编程能力
除了编程能力之外,还有一些其他因素可以告诉你一名工程师的级别。
初级工程师通常只是做一些简单的任务。他们不负责任何架构设计。中级工程师也不设计解决方案,他们同样是执行任务。与初级工程师不同的是,他们并不需要太多的监督和指导,只要分配给他们较为常规的任务,他们就能独立完成。高级工程师则可以独立的开发一款应用。
这并不意味着高级工程师在开发过程中就不会碰到问题,每个开发人员每天都会遇到大量的问题,对于高级工程师来说也是如此。
不同之处是高级工程师知道如何正确提问以及怎么解决问题。中级工程师在对于常规问题也知道如何正确提问,但遇到更加复杂的问题时则需要寻求帮助。
高级工程师从不迷失方向,他们知道如何以正确的方式跟踪问题。不是说高级工程师不需要向其他人寻求帮助。有时最正确的选择就是向相关领域的专家寻求帮助。
中级工程师也需要具备正确提出问题的能力,除非分配给他们的是需要很深入的专业知识的复杂任务。
你不能指望初级工程师总是准确的提出问题。因为他们缺乏经验,他们需要更有经验的工程师来指导。我们要为初级工程师提供必要的资源,以及不断推动他们朝着正确的方向前进。
如何晋级
我们都希望提升自己的等级,成为更好的工程师,但是要怎么做呢?
初级到中级
由于初级工程师缺乏经验,因此他们至少要经历几次完整的软件开发流程。这一过程中他们不遇到很多坑,然后需要在下次避免再踩这样的坑。
编码时,初级工程师要学会使自己的代码变得更加简洁。多为下一位接手这段代码的人考虑。你需要学会怎么调试代码,这会帮助你更好的理解它的运行过程。
此外,你需要对一些最佳实践更加熟悉,同时你需要学习架构、性能、安全等知识,从而跨越到达到中级工程师的知识鸿沟。
中级到高级
从中级工程师到高级工程师可能会比较困难。有些开发人员整个职业生涯都停留在中级工程师。
高级工程师知道什么可以做什么不可以做。这是最难学的一门课程,你只能从过去犯的错误中学习。
如果你想要达到高级水平,你必须要准备好承担没有人能处理的任务。你应该考虑的是如何把工作做得更好,而不仅仅是怎么完成。
作为高级工程师,你还有一项工作就是要帮助缺乏经验的工程师,当他们不知道怎么做时,你就是他们坚强的后盾。
高级工程师的技术栈可能不会使你感到惊讶,除了编程能力,他们对公司所用的工具和应用的使用都是非常熟悉的。
结论
初级、中级、高级工程师的区别不只是工作年限。当然,你可以肯定的说,高级工程师要比初级和中级工程师更加专业,知识更丰富。但这不是决定工程师等级的唯一因素。
高级工程师写代码更加简洁,并且编码时的心态与初级开发者不同。但是除了编码,知识如何提出并跟进问题也是一项必要的能力。只有高级工程师才能凭借丰富的经验从容的应对各种问题。
初级工程师想要成长就要专注于编写更加简洁的代码,并且多经历完整的开发流程。从中级进阶到高级则需要学会处理更多困难的问题。你应该愿意承担更有挑战的任务,并成为技术栈的主人。高级工程师的另一项工作就是作为其他开发人员的后盾。
最后送给你一句Martin Fowler的话:“任何傻瓜都能编写计算机可以理解的程序,好的工程师编写人类可以理解的代码。”
原文链接
译者点评
本文作者从编码能力和处理问题的能力阐述了不同级别工程师之间的区别。个人认为作者对于中级工程师的能力和国内的互联网公司的要求还是有些区别的。至少我接触的中级工程师都要具备一定的系统设计能力了。而高级工程师则需要具备更加全面的问题处理的能力。不过对于大多数人来说,可能头衔已经是中级了,但是并没有掌握文中提到的那些知识,这反而成为了中级到高级的鸿沟。相信大家也都意识到了学习的重要性,既然入了这行,就一起活到老学到老吧。