提到软件开发,你会想到什么?
除了《星球大战》以外,电子游戏也在潜移默化中影响大家对编程的理解。
但那只是一种刻板印象……虽然不得不说,它很真实。
图源:NeONBRAND ,摘自 Unsplash
除了这些,你还看到了什么?
大多数人只会看到这两种人:
你可能会看到一个超级友好、富有创造力、总在创造新事物的人。他们有很多不同的爱好和富有创造性的兴趣。他们会在弹完吉他后,向你展示他们的乐高堡垒。
你也可能会看到一个更加保守的人,他非常聪明,但有点喜怒无常。你不知道他们在讨论什么,听起来像是关于时间旅行的。你不敢让他给你解释,因为你怕他觉得你笨。
所以,问题来了,“这两种人,哪一种是更好的工程师呢?”
答案是:两者都是。这两种的工程师,在软件开发中都很常见,也都很成功。
好的程序开发人员的人物、性格都很不同,但我们可以很自然地把他们分为两类。
善解人意的实行者和精确无误的系统化者。
产品工程师和系统工程师
所有的产品团队都需要有善解人意的产品工程师和经验充足的系统工程师。工程师是从业务的角度看待产品的,而其他人是从整个系统来看待产品的。
所以,不能太过于偏向其中一种,否则就会危及整个应用程序长期的生存能力。
什么是产品工程师?
产品工程师是从商业需求开始的。他们有着强烈的同理心、了解开发应用程序的原因、也会考虑用户的需求。
他们想解决现实世界中的问题,如果不能对当前的终端用户产生真正的影响,就会对性能和安全等技术障碍感到厌烦。
产品工程师是企业最好的朋友。
他们是团队中的一员,而且很乐意看到用户的成功。当你做成一笔大买卖,或达到某个里程碑时,他们会和你一起出去庆祝。他们会把自己的价值、成功跟公司业务联系起来。
如何识别产品工程师
产品工程师本质上都是创作者。在Myers-Briggs的测试中,他们有中度到强烈的情感倾向。他们也善解人意,是很好的倾听者。
产品工程师在职业生涯中经常不走寻常路。他们可能是自由职业者、也可能有通过项目、训练营和Youtube视频自学的背景。
他们喜欢尝试不同的框架。他们的业余项目包括许多面向用户的半成品应用程序,这些程序的概念很酷,但缺乏深度。
他们对你的想法保持乐观态度,也会因你的产品能积极影响他们的世界而兴奋。
产品工程师的优势
没有好的产品工程师,就不可能出产品。他们认为,软件只是解决问题的一种手段。不喜欢只为了满足性能而去编程。他们编程的目的是让产品最终能够使用。
作为业务的领导者,你不需要和产品工程师进行多次审查和澄清,因为只需轻轻一点,提醒一下,他们就知道你想要什么了,因为他们都很善解人意。
看到这儿你可能会想,那我雇一堆产品工程师就行了,那你就犯了一个可怕的错误。
产品工程师的弱点
产品工程师一直沉浸在自己的世界里编程,这会变成一个长期的负担。
他们编程是为了解决当前的问题和目标,却会忽略整个系统的需求。但是随着时间的推移,代码可能会变得混乱且难以维护。
而管理、安置新团队成员可能也会变得很昂贵。
为了不断推出新功能,他们会忽略公司组织。
产品负责人会对短期结果很满意,但随着时间的推移,一些很基础的功能开发开始增加,他们又会感到无趣。
那么有什么替代方案呢?
那就是系统工程师。
什么是系统工程师?
系统工程师专注于平台和框架,他们是单元测试和性能基准测试的重要一环。应用程序是他们的孩子,他们的工作就是把它培养成为一个成功独立的成年人。
你会发现,大多数系统工程师都在讨论框架的内部工作原理。当你想要把一个新功能引入到你的产品或他们的产品中时,他们可能会有点不知所措。
作为企业或产品所有者,你会与和你的系统工程师建立一种爱恨交加的关系。他们跟你讨论新功能可能会让你不那么积极。系统工程师认为自己是“现实主义者”,但在讨论产品变化时,他们更可能是悲观主义者。
与系统工程师一起工作确实有点让人沮丧,但他们的话很有用。
慢慢的,你对产品工程师的信任会消失,因为他们那种“我可以”的态度会让你错过交付日期,但系统工程师说什么就是什么。
如何识别系统工程师
系统工程师就是,你一跟他们交谈就知道他们的身份。
如果你提到想开发一个产品,他们大概率会用你听不懂的话回答。虽然你可能不知道他们在说什么,但你知道这很重要。
在讨论一些复杂的问题时,你可能会觉得系统工程师很悲观、冷漠或傲慢。
这是一种错误认知,因为他们已经在考虑第5层了。
与他们的朋友产品工程师相比,系统工程师通常来自传统路径。他们很可能擅长数学,并拥有计算机科学学位。
他们享受自己的私人空间和孩子。但是无论是在生活还是工作中,当他们关注、管理他们所在的领域时,往往表现的很出色。
系统工程师的优势
系统工程师热爱产品和整个系统。
他们创造了驱动产品长期强度运行的应用程序的骨架。
你的系统工程师在产品的性能、安全性、效率上可支配越多——他们就会越欣赏你,还会为你构建一些额外应用程序。
那他们又有哪些不足呢?
系统工程师的弱点
不要指望系统工程师在不修改的情况下,短期内构建出一个功能。你不会满意,他们也不会高兴的。
因为系统工程师需要细节。
如果你需要他们创建一个功能,那就要给他们提供用户故事、线框模型和样品。他们大多不太擅长处理模棱两可的事情,因为他们会过度思考,花很久去实现一个简单的用户功能。
他们要么忽视、要么就是不理解业务需求;或是你想要构建这个应用程序的全部原因。
用户和业务需求成为一项让人头疼的维护任务。
而这些普通的待办事项,又会让他们远离建立强大系统这件更重要的事。
独立编程时,系统工程师会创建一个过于复杂的平台。当你拥有一个只关注系统的工程师时,你很难将产品推向市场并建立起业务。
那你到底应该雇用谁?产品工程师是前端开发吗,系统工程师是后端开发吗?
产品工程师和系统工程师vs前后端
不要混淆了。产品工程师并不是前端开发人员。系统工程师也不是后端开发人员。
你的应用程序的完整,都需要这两者。
我不喜欢前、后端开发人员这个概念。这是一个过时的概念,因为你产品的每个领域都需要两种开发者。
产品工程师考虑的是用户需求、业务需求。他们能做出像UI一样漂亮可用的API。他还可以让你的UI像喷气机一样快,同时还可以保护你的API和数据库。
所以,把开发人员分为“后端”和“前端”是一种糟糕的方法。
有些开发人员首先考虑用户,而其他人则先考虑系统。
产品工程师会成为系统工程师吗,反过来呢?
答案是不会……至少,在我的经历中还没有见过。
我认为,根据心理特征的不同,每个人出生就有自己独特的发展风格。
我之前在讨论产品工程师时提到过,他们在Myers-Briggs测试中更倾向于“感觉”。这跟我之前的系统工程师相反,他们会更倾向于“思考”。
我自己就是一个天生的INTP,但在正确、错误之间并没有偏好。所以我认为自己天生就是一个产品工程师。
但是,把一个人划分为产品工程师和系统工程师,并不总像Myers-Briggs评估那样简单。
人本身比任何性格测试都复杂,但它也的确表明我们生来就有某种理解世界的方式。
所以,我并没有看到过产品工程师变成系统工程师,反之亦然。
但是……
高级软件工程师的特点,是在与他们相反环境中成长出来的。
而且,高级软件开发人员也会努力在相反的环境中变得更强大。
我不期待初级产品工程师在一开始被聘用时,就知道最佳的性能和最安全的实践。但系统工程师恰恰相反。我需要他们在短短几轮面试中,表现出非常有针对性的用户描述。
但对于一个高级工程师来说,情况并不限于此。
高级工程师总是会有个人学习的时间。他们知道自己的长处,并很擅长。但他们也知道自己的弱点。并且会努力去限制、克服它们。
你应该首先雇产品工程师,然后雇系统工程师的领导人
现在,问题就变成了,“谁是合适的雇佣人选?”
如果你是一家正在寻找合适技术人才的初创公司,只能雇佣一个人。那你就应该从雇佣一个产品工程师开始,因为他们可以构建原型,并把你的产品推向市场。
但不要让他们在随意的环境里工作。
无论他们喜欢 PHP、Node、Ruby、Python、Go 还是其他,一定要问清楚他们框架以及他们在跟随谁?
他们需要跟随比自己更大的社区和领导层。
对所有应用程序开发人员来说,这都是正确的,尤其是对于你的初创公司来说更重要。你肯定不希望任何开发人员独自一人编程。
你需要确保他们跟随着有经验的系统工程师,建立了一个坚实可靠的框架基础。
等到接下来你聘请系统工程师时,他会感谢你的。
感谢你的阅读!
原文作者:Stephen Miracle
翻译作者:Lea
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://levelup.gitconnected.com/the-2-types-of-software-engineers-every-successful-product-team-needs-11952e937def