看清全局:成为高级开发人员的一个重要方面
这篇文章最初发表在我的博客smartpuffin.com上。
我在面试中经常问这个问题:
“您做过的最有趣或最具挑战性的任务是什么?”
答案告诉了我很多。
所有开发者都会告诉我他们做了什么。他们使用了 Kafka、RabbitMQ 和 Kubernetes。他们进行了分片、扩展和集群。他们将逻辑从单体应用迁移到微服务。他们集成了 API。他们运用了 SOLID 的所有字母。他们建造城堡,也推倒了高山。
并不是所有人都告诉我他们为什么这么做。
“为什么”为什么重要?
作为面试官,我想了解你拥有哪些解决问题的能力以及你作为开发人员的资历水平。
在我看来,开发人员的资历不仅取决于系统或代码的复杂程度,还取决于:
- 以用户为中心的思维;
- 做出合理的选择和权衡;
- 能够清楚地解释这一切。
让我们看看在回答问题时如何突出这些品质。
以用户为中心的思维
我认为,与用户合作是开发人员最重要的(也是最被低估的)技能之一。
你永远不应该为了写代码而写代码。(除非你在学习或拖延时间。)你写代码是为了部署到生产环境,让别人用。
事实上,每个人在职业生涯刚开始时都不会立即意识到这一点。
开发人员来自学校,由教授授课。教授不是用户。教授看的是代码。多年来,代码就是你的产品。
用户 查看最终产品。
如果您的代码很棒,但它不能解决用户问题 - 那它就没用了。
它不是那么容易理解和习惯,但我希望更多的高级开发人员能够理解这一点。
所以每一段代码都是根据用户需求编写的,旨在解决用户遇到的问题。我想听听你的想法!我想知道你的需求是什么,以及你的实现是如何解决这个问题的。
做出合理的选择
你选择技术是有原因的。我一直很好奇这个原因是什么。
成熟的答案可能是:
- 我们在一个类似的项目中使用了它,并且效果很好;
- 我们团队中有人以前曾使用过它;
- 我们对其进行了调查并与其他人进行了比较,由于 X、Y 和 Z,它比其他人更适合我们。
不太成熟的答案有时是这样的:
- 它是目前最流行的技术;
- 这很酷;
- X 公司使用它。
我不想跟你争论它是不是最好的。但我需要知道你选择它不是一时兴起,也不是追风。你的理由应该基于理性思考,根据你的具体情况,选择最适合你项目的方法。你应该告诉我。
做出权衡
你并非总能写出完美且运行良好的代码。受过去决策、需求变化和截止日期的影响,你做出的决定在回顾过去时可能会有所不同。
我想听听你如何反思以前的选择,并解释当时有效的原因,即使现在情况发生了变化。
清楚地解释
作为一名开发人员,你需要经常解释一些东西。你会发现自己需要向用户、业务分析师、技术文档撰写人、质量保证人员、项目经理甚至新团队成员解释同一个项目。
清晰地解释的能力本身就很有价值,但它也体现了其他技能,例如团队合作、分析思维,以及再次体现你的资历。优秀的开发人员不应该不厌其烦地、耐心地、透彻地解释他们的想法和创意。
在面试中回答有关您之前项目的问题是展示您在此领域技能的绝佳机会。
讲故事
总的来说,作为对这个问题的回答,我想听一个故事。
如果我要描述我最具挑战性的项目,我会从描述我正在解决的任务开始解释。
假设我在不使用 oAuth 的情况下实现了我们自己的授权。
我首先想问一下,为什么这个项目需要授权?具体要求是什么?
然后我将引导我的面试官完成整个过程,从定义需求到消除使用现有 API 的可能性,到实施,到修复错误,到成功(或失败和学习)。
这样我就可以:
- 创作一个具有凝聚力的伟大故事,易于理解和跟随;
- 展示我如何参与开发的各个方面,就像高级开发人员应该做的那样;
- 展示我如何从头到尾运用我的解决问题的技能;
- 并留出空间来询问有关项目每个阶段的问题。
我自己的答案
我职业生涯中最具挑战性、也最有趣的项目是一个可扩展的分布式 GIS 系统。可以看看我关于这个架构和流程的一系列文章:smartpuffin.com/tag/fiji/
请注意我如何关注用户、他们的要求以及我们解决问题的方法。
这是一个很酷的项目吗?绝对酷!开发过程有趣吗?100%纯粹的乐趣。但我关注的是什么?推理。
对于面试官来说,了解你的方法至关重要。你的回答不仅要关注你做了什么、使用了哪些技术,还要关注原因和解决问题的方法,这样你才能展现出最好的自己。
文章来源:https://dev.to/ice_lenor/how-to-answer-the-question-whats-the-most-challenging-task-you-have-ever-implemented-27ki