前几天收到了最新的,但最近进入了996模式,比较忙,所以只能周日抽时间出来发了。
原文:Broad vs. Narrow Skillsets: Software Engineering Skills Demystified 作者: TIBERIUS FLOREA
每个软件工程师都有自己掌握的技能。如果你掌握了一到两种技能,而其他的技能却很少,那么技能就是“深而窄”;如果你能在不成为任何领域的专家的情况下做一点事情,那就是“广泛而肤浅的”。
我们大多数人都处于中间的某个地方,有一些很强的技能,一些普通的技能,还有很多的略懂皮毛。在这篇文章中,我想讨论一下广泛性的范围,并认为接近广泛的结尾会使大多数程序员受益。
广度和深度当然是相对的。例如,您可以成为Web开发专家,也可以是客户端Web开发专家,也可以是JavaScript专家。所有这些在某种意义上都是“深层次的”,而最后一个比第一个窄得多。
此外,“深而广”和“浅而窄”的技能程度都是可能的:第一个意味着每个人都想雇佣你,而第二个意味着你还没有学到任何有意义的东西。由于它们不太常见,所以也不值得详细讨论。
具有深厚的技能意味着你至少是一个领域的专家。
拿SQL来说:假设你知道关于关系数据库理论的一切; MySQL,PostgreSQL,Oracle和SQLite的优缺点; 如何优化查询; 何时以及如何对数据库进行非规范化等等。寻找这一特定技能的客户会希望尽快聘用你,并有充分的理由。你会像其他人一样,在地面上奔跑和传递价值。
然而,如果项目扩展或显著改变,你就会被程序员所替代或补充。即使没有重大更改,您是否能够建议架构变更?客户机可以更好地使用NoSQL数据库或根本没有数据库,但是您的狭窄的专业知识可能会使您对这些不熟悉的选项产生偏见。
另一方面,如果你是一个不是领域专家的通才,你需要一些时间来增加新项目,然后才能达到峰值生产力。
举个例子,也许你需要做一个Python项目,而你以前从未使用过这种语言。尽管如此,您可能已经听说过一些关于它的东西(动态、解释、多范例),您使用其他语言的经验将使转换更加容易。
您最初编写的代码可能不是Pythonic(包含元组,引用或生成器),但您将知道从哪里开始。你将会取得稳步的进展,而且你的模块将会很容易的改善。你对技术的广泛看法会给你一些别人可能忽略的想法。
当项目变更时,您将成为您团队的资产而不是负债。
从地理上看,狭窄的技能树看起来像高山,而广泛的技能树就像高原。用这个比喻,典型的技能很可能会有几座山,一座山,还有很多平原。
一个随机的程序员可能精通SQL和Python,在web编程和算法方面很好,而且对大多数其他的东西很担心,比如核心转储、OAuth服务器或本地应用程序。这样一个程序员应该继续开发他们的专业领域,同时也发现并填补知识空白。
这一策略可能会在未来几年里为他们提供最好的服务。
许多项目需要不相关的技能以不可预知的方式结合起来。虽然广泛熟练的工程师可以为他们中的大多数人提供有用的帮助,但是专家的技能将与很少的雇主的精确要求相匹配。这在短期内不一定是个问题,因为你只需要一份工作来支付账单。
然而…
超专业化是有风险的。如果你能比其他人更好地预测未来,那么把你的鸡蛋放在一个篮子里可能没有问题,但是这种能力很少,而且与技术技能无关。考虑我们千禧年对Windows编程技能的需求。或者问问自己:十年前,我们中的许多人是否已经猜到了Android、Flash、诺基亚或黑莓的各自发展轨迹?
最后,顶级雇主高度重视不同的技能。Facebook在开始六周之后才会为团队分配新员工。Google鼓励内部转移并运行多个轮转程序。即使你喜欢自由职业,保持你的选择不会受到伤害。如果你曾经考虑过为那些公司工作,那么你至少应该是一个多面手。
假设你确信并想要使你的技能多样化,那么你会怎么做?
你可以用金钱换技能:
你也可以用时间来换技能:
你必须寻找学习机会,但你不能不断地这样做。对于我的Toptal面试项目,我使用了Node.js和Backbone,这两者我都没有太多的经验。这很有趣,但所需的学习速度不能持续数月。
理想情况下,当你挑战自己学习新东西时,你会在长期的稳定期(稳定的产出和收入)和短暂的间隔期间交替。你多久后一次取决于几个因素,如你目前的技能,市场需求和你的个人目标。
就雇主而言,在某些情况下总是需要深入的技能:
尽管如此,许多项目并没有检查这些boxes,他们的招聘经理也应该考虑全面的工程师。许多技术技能,例如测试和代码文档,以及所有软技能(如通信)传输。即使产品没有完全改变,弹性也很重要;如果你雇佣的是摊档,一个多面手就可以把工作放在第一位。
鉴于广泛的技能树的重要性,我们应该鼓励开发者多样化,我们应该把广泛的知识的重要性传达给那些可能过于注重“多年经验”和各种领域和技能的雇主。
最终目标是满意客户的往绩记录; 除了硬性和软性技能之外,这也证明了工程师能够转换到不熟悉的领域。对于自由职业者来说,这也是一个强烈的动机,他们没有冒险进入新的领域,他们准备这样做。
当广泛的技能树被低估时,一些优秀的开发人员闲置,一些好的项目人员不足或超出预算。要求一个完美的技能匹配就像要求现场工作,因为它使得难以匹配供应(合格的劳动力)和需求(奖励工作)。
这一切都不是针对领域专业知识的论点; 它将永远重要,并获得丰厚的回报。我们应该记住,广泛的技能树也很重要。
什么是知识库?
它是开发人员技术技能的集合,例如语言、框架、工具等。两种常见类型是深度/狭窄(很少有专家技能)和广泛/肤浅(许多技能,没有领域专长)。
如何决定哪些技能需要改进?
找出你不熟悉的10种技能。一般技能(如解释语言和web框架)比特定技术(Python、Rails等)提供了更好的长期价值。
如何扩大技术技能库。
通过投资,例如,降低你的利率,或者在过渡到一个新领域时做无偿的演示工作,或者投资时间,比如建立一个开源或个人项目的投资组合。