本文概述
每位软件工程师都有一套技能, 这些技能由他们掌握的不同技能组成。如果你精通一到两个技能, 而其他却很少, 那么这个技能组就是”精深”。如果你不做任何领域的专家就可以做一点点的事情, 那将是”广泛而又肤浅的”。
我们中的大多数人都处于中间, 那里有一些很强的技能, 一些普通的技能, 还有很多差距。在本文中, 我想讨论广泛的领域, 并认为接近更广泛的范围将使大多数程序员受益。
广度和深度当然是相对的。例如, 你可以是Web开发的专家, 也可以是客户端Web开发的专家, 也可以是JavaScript的专家。从某种意义上讲, 所有这些都是”深而窄”的技能, 但最后一个比第一个要窄得多。
另外, “深层和深层”和”浅层和狭窄”技能组合都是可能的:第一种意味着每个人都想雇用你, 第二种意味着你还没有学到任何有意义的东西。由于它们不是很常见, 因此也不值得详细讨论。
软件工程师技能和技能集的类型
深而窄
拥有深厚的技能, 意味着你至少是一个领域的专家。
以SQL为例:假设你了解有关关系数据库理论的所有知识; MySQL, PostgreSQL, Oracle和SQLite的优缺点;如何优化查询;何时以及如何对数据库进行非规范化等。寻找此特定技能的客户将希望有充分的理由尽快雇用你。你将立于不败之地, 并像其他人一样创造价值。
但是, 如果项目扩展或更改很大, 程序员将以你所缺乏的技能来代替或补充你。即使没有重大更改, 你是否能够提出架构更改建议?使用NoSQL数据库或根本不使用数据库可能会更好, 但是你的专业知识可能会使你偏向于这些不熟悉的选项。
宽而浅
另一方面, 如果你是不是领域专家的通才, 则需要一些时间来提高新项目的效率, 然后才能达到最高生产力。
举个例子, 也许你需要做一个Python项目, 而你以前从未使用过该语言。不过, 你可能已经听说了一些有关它的内容(动态, 解释, 多范式), 而你使用其他语言的经验将使过渡更加容易。
你最初编写的代码可能不是Python语言(带有元组, 理解力或生成器), 但是你会知道从哪里开始。你将取得稳步的进展, 并且构造良好的模块以后将易于改进。你对技术的广泛了解将为你提供其他人可能会错过的想法。
当项目更改时, 你将成为团队的资产而不是负债。
现实世界中的技能
从地理上讲, 狭窄的技能组看起来像高山, 而广义的技能组看起来像高原。使用这种类比, 典型的技能组可能会出现几座山, 到处都是小山和许多平原。
随机程序员可能擅长SQL和Python, 可以很好地进行网络编程和算法, 并且对大多数其他事情(例如核心转储, OAuth服务器或本机应用程序)非常担心。这样的程序员应该继续开发自己的专业领域, 同时还要发现并填补知识空白。
多年来, 这种策略可能会为他们提供最好的服务。
为什么程序员需要多样化他们的技能
许多项目需要以不可预测的方式结合无关技能。虽然技能娴熟的工程师可以为大多数人做出有益的贡献, 但是专家的技能组合将无法满足少数雇主的确切要求。从短期来看, 这不一定是一个问题, 因为你只需要一份工作即可支付账单。
然而…
过度专业化是有风险的。如果你可以比其他所有人更好地预测未来, 那么将鸡蛋放在一个篮子里可能会很好, 但是这种能力很少见, 并且与技术技能无关。考虑到我们千年来对Windows编程技能的需求。或问问自己:十年前, 我们中的许多人是否能猜出Android, Flash, 诺基亚或黑莓的各自发展轨迹?
最后, 顶级雇主高度重视多样化的技能。 Facebook直到团队开始六个星期后才向团队分配新员工。 Google鼓励内部转帐并运行多个轮换程序。即使你喜欢自由职业者, 也可以选择保持开放状态。如果你打算为这些公司工作, 那么你至少必须是一名多面手。
假设你有足够的信心并希望多样化自己的技能, 那你将如何做?
如何多样化和提高技术技能
你可以用金钱来换取技能:
- 过渡到陌生领域时接受较低的费率。如果你的生产率达到了正常水平的75%, 那么临时减薪25%就是公平的。你很快就会将其备份。
- 在申请需要他们的工作时, 以所需的技能进行免费的演示工作。如果事实证明你还没有准备好进行更改, 那仍然是一个有用的教训。
你也可以将时间用于技能:
- 贡献于一个开源项目。你将获得建议和验证, 回馈社区, 并可能被潜在的雇主或同事所注意。
- 做一个个人项目, 以获得快乐, 灵感和日常工作的变化。例如, 我在学习React时克隆了智能手机之前的Snake游戏。
你必须寻找学习的机会, 但不能经常这样做。在我的srcmini采访项目中, 我使用了Node.js和Backbone, 但他们都没有丰富的经验。这很有趣, 但是所需的学习速度却无法持续数月。
理想情况下, 当你挑战自己学习新知识时, 可以在长期稳定(稳定的产出和收入)和短暂的间隔之间进行选择。后者的执行频率取决于几个因素, 例如你当前的技能, 市场需求和个人目标。
为什么广度对雇主有利
就雇主而言, 在某些情况下始终需要具备深厚的技能:
- 雇主与雇员之间几乎没有信任或时间投入的情况。
- 当灾难性后果(例如隐私或安全事件)很可能发生时。
- 需要深奥的技巧时。
- 截止日期很紧急且不可谈判。
尽管如此, 许多项目都没有选中这些框, 他们的招聘经理应该考虑聘用精通技术的工程师。许多技术技能(例如测试和代码文档)以及所有软技能(例如沟通)都可以转移。即使产品没有完全改变, 弹性也很重要;如果你为摊位租用的零件, 则通才可以在下一个最高优先级上工作。
鉴于广泛技能的重要性, 我们应鼓励开发人员多元化, 并应将广泛知识的重要性传达给可能过于关注具有各种领域和技能的”经验年限”的雇主。
最终目标是跟踪满足客户的需求;除了软硬技巧, 还证明了工程师有能力过渡到陌生的领域。这也是强烈鼓励自由职业者在未准备好进入新领域之前就去做。
争取适当的平衡
当广泛的技能被低估时, 一些优秀的开发人员会闲着, 而一些好的项目则人手不足或超出预算。要求完美的技能组匹配就像要求现场工作一样, 因为这使得将供应(合格劳动力)与需求(奖励工作)进行匹配变得更加困难。
这些都不是反对领域专业知识的论据。这将永远重要, 并得到丰厚的回报。我们应该记住, 广泛的技能也比显而易见的重要。
评论前必须登录!
注册