杂谈 ·

广泛vs狭窄的技能树:软件工程技能揭秘

 前言

前几天收到了最新的,但最近进入了996模式,比较忙,所以只能周日抽时间出来发了。

原文Broad vs. Narrow Skillsets: Software Engineering Skills Demystified

作者TIBERIUS FLOREA

正文

每个软件工程师都有自己掌握的技能。如果你掌握了一到两种技能,而其他的技能却很少,那么技能就是“深而窄”;如果你能在不成为任何领域的专家的情况下做一点事情,那就是“广泛而肤浅的”。

我们大多数人都处于中间的某个地方,有一些很强的技能,一些普通的技能,还有很多的略懂皮毛。在这篇文章中,我想讨论一下广泛性的范围,并认为接近广泛的结尾会使大多数程序员受益。

广泛vs狭窄的技能:软件工程技能揭秘

广度和深度当然是相对的。例如,您可以成为Web开发专家,也可以是客户端Web开发专家,也可以是JavaScript专家。所有这些在某种意义上都是“深层次的”,而最后一个比第一个窄得多。

此外,“深而广”和“浅而窄”的技能程度都是可能的:第一个意味着每个人都想雇佣你,而第二个意味着你还没有学到任何有意义的东西。由于它们不太常见,所以也不值得详细讨论。

软件工程师的技能和技能类型

深而窄

具有深厚的技能意味着你至少是一个领域的专家。

拿SQL来说:假设你知道关于关系数据库理论的一切; MySQL,PostgreSQL,Oracle和SQLite的优缺点; 如何优化查询; 何时以及如何对数据库进行非规范化等等。寻找这一特定技能的客户会希望尽快聘用你,并有充分的理由。你会像其他人一样,在地面上奔跑和传递价值。

然而,如果项目扩展或显著改变,你就会被程序员所替代或补充。即使没有重大更改,您是否能够建议架构变更?客户机可以更好地使用NoSQL数据库或根本没有数据库,但是您的狭窄的专业知识可能会使您对这些不熟悉的选项产生偏见。

广而浅

另一方面,如果你是一个不是领域专家的通才,你需要一些时间来增加新项目,然后才能达到峰值生产力。

举个例子,也许你需要做一个Python项目,而你以前从未使用过这种语言。尽管如此,您可能已经听说过一些关于它的东西(动态、解释、多范例),您使用其他语言的经验将使转换更加容易。

您最初编写的代码可能不是Pythonic(包含元组,引用或生成器),但您将知道从哪里开始。你将会取得稳步的进展,而且你的模块将会很容易的改善。你对技术的广泛看法会给你一些别人可能忽略的想法。

当项目变更时,您将成为您团队的资产而不是负债。

现实世界中的技能

从地理上看,狭窄的技能树看起来像高山,而广泛的技能树就像高原。用这个比喻,典型的技能很可能会有几座山,一座山,还有很多平原。

广泛vs狭窄的技能:软件工程技能揭秘

一个随机的程序员可能精通SQL和Python,在web编程和算法方面很好,而且对大多数其他的东西很担心,比如核心转储、OAuth服务器或本地应用程序。这样一个程序员应该继续开发他们的专业领域,同时也发现并填补知识空白。

这一策略可能会在未来几年里为他们提供最好的服务。

为什么程序员需要多样化他们的技能

许多项目需要不相关的技能以不可预知的方式结合起来。虽然广泛熟练的工程师可以为他们中的大多数人提供有用的帮助,但是专家的技能将与很少的雇主的精确要求相匹配。这在短期内不一定是个问题,因为你只需要一份工作来支付账单。

然而…

超专业化是有风险的。如果你能比其他人更好地预测未来,那么把你的鸡蛋放在一个篮子里可能没有问题,但是这种能力很少,而且与技术技能无关。考虑我们千禧年对Windows编程技能的需求。或者问问自己:十年前,我们中的许多人是否已经猜到了Android、Flash、诺基亚或黑莓的各自发展轨迹?

最后,顶级雇主高度重视不同的技能。Facebook在开始六周之后才会为团队分配新员工。Google鼓励内部转移并运行多个轮转程序。即使你喜欢自由职业,保持你的选择不会受到伤害。如果你曾经考虑过为那些公司工作,那么你至少应该是一个多面手。

假设你确信并想要使你的技能多样化,那么你会怎么做?

如何多样化和提高技术技能

你可以用金钱换技能:

  • 接受较低的费率,同时过渡到陌生的领域。如果你的生产力比平常高75%,临时减薪25%是公平的。你会很快恢复。
  • 在申请需要他们的工作时,用你想要的技能做无薪的演示工作。如果事实证明,你还没有准备好改变,这仍然是一个有益的经验教训。

你也可以用时间来换技能:

  • 贡献一个开源项目。你会得到建议和验证,回馈给社区,也许会被潜在的雇主或同事注意到。
  • 为快乐、灵感和日常工作做一个个人项目。例如,我在学习React的同时克隆了智能手机之前的Snake游戏。

你必须寻找学习机会,但你不能不断地这样做。对于我的Toptal面试项目,我使用了Node.js和Backbone,这两者我都没有太多的经验。这很有趣,但所需的学习速度不能持续数月。

理想情况下,当你挑战自己学习新东西时,你会在长期的稳定期(稳定的产出和收入)和短暂的间隔期间交替。你多久后一次取决于几个因素,如你目前的技能,市场需求和你的个人目标。

为什么广度对雇主有好处?

就雇主而言,在某些情况下总是需要深入的技能:

  • 雇主和雇员之间几乎没有信任或时间承诺。
  • 当可能发生灾难性后果(如隐私或安全事件)时。
  • 当需要深奥的技能。
  • 在截止日期紧迫和不可协商的情况下。

尽管如此,许多项目并没有检查这些boxes,他们的招聘经理也应该考虑全面的工程师。许多技术技能,例如测试和代码文档,以及所有软技能(如通信)传输。即使产品没有完全改变,弹性也很重要;如果你雇佣的是摊档,一个多面手就可以把工作放在第一位。

广泛vs狭窄的技能:软件工程技能揭秘

鉴于广泛的技能树的重要性,我们应该鼓励开发者多样化,我们应该把广泛的知识的重要性传达给那些可能过于注重“多年经验”和各种领域和技能的雇主。

最终目标是满意客户的往绩记录; 除了硬性和软性技能之外,这也证明了工程师能够转换到不熟悉的领域。对于自由职业者来说,这也是一个强烈的动机,他们没有冒险进入新的领域,他们准备这样做。

寻求合适的平衡

当广泛的技能树被低估时,一些优秀的开发人员闲置,一些好的项目人员不足或超出预算。要求一个完美的技能匹配就像要求现场工作,因为它使得难以匹配供应(合格的劳动力)和需求(奖励工作)。

这一切都不是针对领域专业知识的论点; 它将永远重要,并获得丰厚的回报。我们应该记住,广泛的技能树也很重要。

了解基础知识

什么是知识库?

它是开发人员技术技能的集合,例如语言、框架、工具等。两种常见类型是深度/狭窄(很少有专家技能)和广泛/肤浅(许多技能,没有领域专长)。

如何决定哪些技能需要改进?

找出你不熟悉的10种技能。一般技能(如解释语言和web框架)比特定技术(Python、Rails等)提供了更好的长期价值。

如何扩大技术技能库。

通过投资,例如,降低你的利率,或者在过渡到一个新领域时做无偿的演示工作,或者投资时间,比如建立一个开源或个人项目的投资组合。

参与评论