作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
提比略·弗洛里亚的头像

提比略Florea

Tiberius是一名屡获殊荣的全栈开发人员,曾在谷歌工作. 他还曾在Facebook和微软实习.

专业知识

以前在

谷歌
分享

每个软件工程师都有一个由他们获得的不同技能组成的技能集. A skillset is “deep and narrow” if you’ve mastered one to two skills and little else; it’s “broad and shallow” if you can do a little bit of everything without being an expert in any field.

我们大多数人都处于中间,拥有一些强大的技能, 一些普通的, 还有很多缺口. 在本文中, 我想讨论一下广谱,并认为接近广谱会使大多数程序员受益.

软件工程师技能:技能集的图形表示

广度和深度当然是相对的. 例如,你可以是 网站开发专家,或者只是在客户端web开发中,或者只是在JavaScript中. 从某种意义上说,所有这些都是“深奥而狭隘”的技能, 但最后一个比第一个窄得多.

也, “深而广”和“浅而窄”的技能组合都是可能的:前者意味着每个人都想雇佣你, 第二种情况意味着你还没有学到任何有意义的东西. 因为它们并不常见,所以也不值得详细讨论.

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

深而窄

拥有深厚的技能意味着你至少在一个领域是专家.

Take SQL: Let’s say you know everything about relational database theory; the pros and cons of MySQL, PostgreSQL, 甲骨文, and SQLite; how to optimize queries; when and how to denormalize a database, 等. 寻找这种特殊技能的客户会希望尽快雇用你,而且有充分的理由. 你会迅速投入到工作中,并创造出别人无法企及的价值.

然而, 如果项目扩展或发生重大变化, 你将被具备你所缺乏的技能的程序员取代或补充. 即使没有重大变更,您是否能够提出架构变更的建议? 客户端最好使用NoSQL数据库,或者根本不使用数据库, 但你狭隘的专业知识可能会使你对这些不熟悉的选择产生偏见.

宽与浅

另一方面, 如果你是一个多面手而不是领域专家, 在达到最高效率之前,你需要一些时间来完成新项目.

举个例子,也许你需要做一个Python项目,而你以前从未使用过这种语言. 仍然, 你可能听说过一些关于它的事情(动态), 解释, 多范式)和您使用其他语言的经验将使转换更容易.

您最初编写的代码可能不是 神谕的 (使用元组、推导式或生成器),但您知道从哪里开始. 您将取得稳定的进展,并且您的良好分解模块将很容易在以后进行改进. 你对技术的广阔视野会给你一些别人可能错过的想法.

当项目发生变化时,你将成为团队的资产而不是负担.

现实世界中的技能

就地理而言, 狭窄的技能看起来像高山, 而广泛的技能就像高原一样. 使用这个类比, 典型的技能组合可能会有几座山, 到处都是小山, 还有很多平原.

山脉、丘陵和平原的图形表示

一个随机的程序员可能很擅长SQL和Python, 擅长网络编程和算法, 而且对其他大多数事情都很担心, 比如堆芯, OAuth服务器, 或者原生应用. 这样的程序员应该继续利用他们的专业领域, 同时发现并填补知识空白.

多年来,这种策略可能对他们最有利.

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

许多项目需要以不可预测的方式组合不相关的技能. 虽然广泛的技术工程师可以为其中的大多数做出有益的贡献, 专家的技能组合很少能满足雇主的精确要求. 这在短期内不一定是个问题,因为你只需要一份工作来支付账单.

然而……

过度专业化是有风险的. 如果你能比别人更好地预测未来,把所有的鸡蛋放在一个篮子里可能是好的, 但这种能力很少见,而且与技术技能无关. 想想我们这个千年对Windows编程技能的需求吧. 或者问问你自己:我们中的许多人能猜到Android各自的发展轨迹吗, 闪光, 诺基亚, 或者十年前的黑莓?

最后,顶级雇主非常看重多样化的技能. Facebook在新员工入职六周后才会将其分配到团队中. 谷歌鼓励内部调动,并实施了一些轮岗计划. 即使你喜欢自由职业,保持选择的开放性也无妨. 如果你考虑为这些公司工作的话, 你至少得是个多面手.

假设你被说服了,想要多样化你的技能,你会怎么做呢?

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

你可以用金钱换取技能:

  • 在过渡到不熟悉的领域时接受较低的费率. 如果你的工作效率是平时的75%,那么暂时降薪25%是公平的. 你很快就会恢复的.
  • 在申请需要技能的工作时,是否做过无偿的技能演示工作. 如果事实证明你还没有为改变做好准备,这仍然是一个有用的教训.

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

  • 为…做出贡献 开源项目. 你会得到建议和认可, 回馈社会, 而且可能会引起潜在雇主或同事的注意.
  • 做一个个人项目来获得快乐、灵感,并从日常工作中得到改变. 例如,我在学习React时复制了智能手机之前的Snake游戏.

你必须寻找学习的机会,但你不能一直这样做. 对于我的Toptal访谈项目,我使用了Node.js和Backbone,这两个我都没有太多的经验. 这很有趣,但所需的学习速度无法持续数月.

理想情况下,你应该在长期稳定(有稳定的产出和收入)和短暂的间歇(当你挑战自己学习新东西时)之间交替进行. 后者的频率取决于几个因素, 喜欢你目前的技能, 市场需求, 还有你的个人目标.

为什么广度对雇主有利

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

  • 当雇主和雇员之间缺乏信任或时间承诺时.
  • 当可能发生灾难性后果(如隐私或安全事件)时.
  • 当需要深奥的技能时.
  • 当最后期限很紧急,没有商量余地的时候.

仍然, 许多项目都不符合这些条件,他们的招聘经理应该考虑全面发展的工程师. 许多技术技能,比如测试和代码文档等等 软技能 (如沟通)转移. Resilience matters even when products don’t change completely; if the part you hired for stalls, 通才可以做下一个优先级的工作.

雇主选择具有广泛和浅薄技能的开发人员而不是具有深入和狭隘技能的开发人员的图形表示

鉴于广泛技能的重要性, 鼓励开发商多元化发展, 我们应该向那些过于注重在各个领域和技能方面“多年经验”的雇主传达广博知识的重要性.

The end goal is a track record of satisfied clients; in addition to hard and 软技能, 这证明了工程师适应陌生环境的能力. 这也是自由职业者在准备好之前不冒险进入新领域的强烈动机.

保持平衡

当广泛的技能被低估时, 一些优秀的开发人员无所事事,一些优秀的项目人手不足或预算超支. 要求完美的技能匹配就像要求现场工作一样, 因为这使得供应(合格的劳动力)和需求(有回报的工作)更难匹配。.

None of this is an argument against domain expertise; it will always matter and be handsomely rewarded. 我们应该记住,广泛的技能也比表面上更重要.

了解基本知识

  • 什么是知识库?

    它是开发人员技术技能的集合,如语言、框架、工具等. 两种常见的类型是深/窄(很少有专业技能)和广/浅(很多技能), 没有专业知识).

  • 你如何决定哪些技能需要提高?

    找出你不熟悉的经常需要的技能. 解释性语言和web框架等通用技能比特定技术(Python, Rails等.)

  • 如何拓展技能.

    通过投资,e.g., 在过渡到一个新的领域时,降低你的费率或做无偿的示范工作, 或者投入时间, 比如建立一个开源或个人项目的投资组合.

聘请Toptal这方面的专家.
现在雇佣
提比略·弗洛里亚的头像
提比略Florea

位于 纽约,纽约,美国

成员自 2017年8月30日

作者简介

Tiberius是一名屡获殊荣的全栈开发人员,曾在谷歌工作. 他还曾在Facebook和微软实习.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

以前在

谷歌

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.