广义与狭义技能组合:软件工程技能揭秘
已发表: 2022-03-11每个软件工程师都有一套由他们获得的不同技能组成的技能。 如果您掌握一到两项技能而其他技能很少,那么技能组合就是“深而窄”的; 如果你不是任何领域的专家就可以做任何事情,那就是“宽泛而肤浅”。
我们中的大多数人都处于中间状态,有一些强项,一些普通的,还有很多差距。 在本文中,我想讨论广泛的深度范围,并认为更接近广泛的范围将使大多数程序员受益。
当然,广度和深度是相对的。 例如,您可能是 Web 开发方面的专家,或者只是客户端 Web 开发方面的专家,或者只是 JavaScript 方面的专家。 所有这些在某种意义上都是“深而窄”的技能,但最后一个比第一个窄得多。
此外,“深而广”和“浅而窄”的技能组合都是可能的:第一个意味着每个人都想雇用你,第二个意味着你还没有学到任何有意义的东西。 由于它们不是很常见,因此也不值得详细讨论。
软件工程师技能和技能组的类型
深而窄
拥有深厚的技能意味着您至少是一个领域的专家。
以 SQL 为例:假设您了解关系数据库理论的一切; MySQL、PostgreSQL、Oracle 和 SQLite 的优缺点; 如何优化查询; 何时以及如何对数据库进行非规范化等。寻求此特定技能的客户会希望尽快雇用您,并且有充分的理由。 您将像其他人一样迅速起步并提供价值。
但是,如果项目扩展或发生重大变化,您将被具有您所缺乏技能的程序员取代或补充。 即使没有重大更改,您能否建议架构更改? 客户端使用 NoSQL 数据库或根本没有数据库可能会更好,但您狭隘的专业知识可能会使您对这些不熟悉的选项产生偏见。
广而浅
另一方面,如果您是通才而不是领域专家,您将需要一些时间来加速新项目,然后才能达到最高生产力。
举个例子,也许你需要做一个 Python 项目,而你以前从未使用过那种语言。 不过,您可能已经听说过一些关于它的事情(动态的、解释的、多范式的),并且您对其他语言的经验将使过渡变得更加容易。
您最初编写的代码可能不是 Pythonic(带有元组、推导式或生成器),但您会知道从哪里开始。 您将取得稳步进展,并且您精心设计的模块以后将很容易改进。 您对技术的广阔视野将为您提供其他人可能会错过的想法。
当项目发生变化时,您将成为团队的资产而不是负债。
现实世界中的技能
在地理上,狭隘的技能组合看起来像高山,而广泛的技能组合就像高原。 使用这个类比,典型的技能组合可能包括几座山脉、各处的小山以及许多平原。
随机程序员可能擅长 SQL 和 Python,擅长 Web 编程和算法,并且对大多数其他事情非常担心,例如核心转储、OAuth 服务器或本机应用程序。 这样的程序员应该继续开发他们的专业领域,同时寻找和填补知识空白。
多年来,这种策略可能会为他们提供最好的服务。
为什么程序员需要多样化他们的技能
许多项目需要以不可预测的方式组合不相关的技能。 虽然广泛熟练的工程师可以为他们中的大多数人做出有用的贡献,但专家的技能组合将满足少数雇主的精确要求。 这在短期内不一定是一个问题,因为您只需要一份工作来支付账单。

然而…
过度专业化是有风险的。 如果你能比其他人更好地预测未来,那么把鸡蛋放在一个篮子里可能会很好,但这种能力很少见,而且与技术技能无关。 考虑一下我们这一千年对 Windows 编程技能的需求。 或者问问自己:我们中的许多人能猜到十年前 Android、Flash、诺基亚或黑莓各自的发展轨迹吗?
最后,顶级雇主高度重视多元化技能。 Facebook 不会在新员工入职后的六周内为其分配新员工。 Google 鼓励内部调动并运行多个轮岗计划。 即使你喜欢自由职业者,保持你的选择开放也不会受到伤害。 如果你曾经考虑为这些公司工作,那么你至少必须是一个多面手。
假设您确信并希望使您的技能多样化,您将如何做到这一点?
如何多样化和提高技术技能
你可以用金钱换技能:
- 在过渡到不熟悉的领域时接受较低的费率。 如果你的工作效率像往常一样高出 75%,那么暂时减薪 25% 是公平的。 你很快就会把它撞回来。
- 在申请需要这些技能的工作时,使用您想要的技能进行无偿演示工作。 如果事实证明你还没有为改变做好准备,那仍然是一个有用的教训。
您还可以用时间换取技能:
- 为开源项目做出贡献。 您将获得建议和验证,回馈社区,并可能受到潜在雇主或同事的关注。
- 为快乐、灵感和日常工作的改变做一个个人项目。 例如,我在学习 React 时克隆了智能手机前的 Snake 游戏。
你必须寻找学习机会,但你不能经常这样做。 在我的 Toptal 面试项目中,我使用了 Node.js 和 Backbone,这两个我都没有太多经验。 这很有趣,但所需的学习速度无法维持数月。
理想情况下,当您挑战自己学习新事物时,您会在长期稳定(具有稳定的产出和收入)和短暂的间隔之间交替。 您执行后者的频率取决于几个因素,例如您当前的技能、市场需求和您的个人目标。
为什么广度对雇主有利
就雇主而言,在某些情况下总是需要深厚的技能:
- 当雇主和雇员之间几乎没有信任或时间承诺时。
- 当灾难性结果(如隐私或安全事件)可能发生时。
- 当需要深奥的技能时。
- 当最后期限紧迫且不可协商时。
尽管如此,许多项目都不会检查这些框,他们的招聘经理应该考虑全面的工程师。 许多技术技能,如测试和代码文档,以及所有软技能(如沟通)转移。 即使产品没有完全改变,弹性也很重要; 如果您为摊位雇用的部分,通才可以处理下一个最高优先级。
鉴于广泛技能组合的重要性,我们应该鼓励开发人员多样化,我们应该向那些可能过于专注于各种领域和技能的“多年经验”的雇主传达广泛知识的重要性。
最终目标是满意客户的跟踪记录; 除了硬技能和软技能,这证明了工程师向陌生领域过渡的能力。 这也是对自由职业者在准备好之前不要冒险进入新领域的强烈激励。
取得正确的平衡
当广泛的技能被低估时,一些优秀的开发人员会闲置,而一些优秀的项目则人手不足或超出预算。 要求完美的技能组合就像要求现场工作一样,因为它使供应(合格的劳动力)与需求(奖励工作)相匹配变得更加困难。
这些都不是反对领域专业知识的论据。 这将永远重要并获得丰厚的回报。 我们应该记住,广泛的技能也比表面上更重要。
