我多次听经理或招聘人员说,优秀工程师是可以与其他优秀工程师交换的。他们可能会说,“首席工程师为这个项目选择了 F# 语言,如果外面没有太多的 F# 开发者,那么有几年经验的优秀开发者应该也还不错。”
我还听说过一些这样的言论,“我知道他们是前端人员,但我们现在需要他们做些后端工作。因为他们本身很优秀,所以这没什么大不了的。”
如果你相信这些蠢话,那我都可以把布鲁克林大桥卖给你了。我还创立了下一个独角兽公司,业务就是把冰卖给爱斯基摩人!我敢肯定,公司很快会有 10 亿美元的估值!机会难得,快来投资吧~
好吧,不开玩笑了,说实在的,“优秀的”软件工程师可以交换,这样的想法并不靠谱。我有时会对软件工作感到疑惑,是不是我在简历上写,“我保持良好的记录,不断在新技术上开拓驰骋”,然后我就能去任何想去的公司了?
我不敢相信今天要坐下来和你解释这一点,但是,现在让我们从语言差异开始说起。实际上,我已经将多种语言的代码投入生产,从 Scala 到 C#,从 Java 到 JavaScript。即使我能在几周内学会任何类 C 语言的的语法,(给别人可能需要更多时间,)我仍然清楚地知道,我不会用一种新的语言去开发一个生产代码库。
那么行业或商业背景呢?我已经涉猎在很多领域,包括健康卫生、电子商务、教育和电信。我是否应该认为我有资格在社交媒体工作哪?那么制造业、航空航天、数字加密货币(Cryptocurrency)哪?我的领域究竟能拓展到哪一块?在我被要求从 Web 过渡到移动、桌面或物联网时,也发生了同样的情况。
现在,让我给你讲个小故事。去年,在做后端 Java web 服务工程师的全职工作时,我还参与了另一个团队的工作,他们要在 Ionic Framework 中做一个移动应用程序,并使用 Angular、TypeScript 和一些定制库打组合拳。直到长达八个月的项目临近结束时,我才得以“适应”这种融合了 Ionic/Angular/TypeScript 的工作方式。实际上,“适应”这个词可能有点夸大其词。但仍然困扰我的是,我要在控制器中公开字段,因为需要在视图中显示它们,或者常量应该与其他变量一样命名。
顺便一说,如果你想在 JavaScript 中使用静态类型(static typing),你很快就会发现,这条路走不通。必须准备好“任何”类型!不过,我喜欢使用的 RxJs 订阅。
在项目结束后,我愉快地撤了。我现在再也不会自称为 TypeScript 或移动开发者了。这不是要在口头上表达优越性,而是一个简单的经验问题:八个月的时间不足以证明我在此方面的资质。我敢打赌,任何全职编程的人都会同意我的看法。
一个花了几年时间研究某种语言的开发者,将能够毫不费力地用它思考。她会在脑海中随时准备好所有需要的资源来完成任务,然后继续投入下一个任务。她了解语言环境,可以轻松地将标准库和第三方库结合成一个具有内聚性的新功能,就像一把钥匙对应一把锁一样,以此来轻松地解决问题。然而,当她不知道什么是可用的时候,她会重新造轮子,或者更糟的情况是,她会完全不知所措。
每一种语言都有着其独特的习惯用语、构建和依赖管理工具、框架、库、在线社区、IDE 等一系列东西,这些东西在日常实践中,对开发者生产力的影响比我们想象的要大得多。
但是,所有的语言都一样吗?我是说,C# 和 C++ 的开发者,到底有什么区别?“只是 # 和 ++ 的区别,哈哈,没什么大不了的!”快,把说这话的人扔去喂狮子!
我不是说任何人都不应该更换自己的语言、行业或设备。我只是说,程序员是不一样的。一个以 F# 为主要语言编写应用程序的软件团队,不会从我的 Java 经验中获益,尽管我也花了大量时间写 Scala。我只是说,我们不能找到那些“优秀的开发者”,然后出于奇思妙想,随机地把他们拖到不同的团队,并期望他们能够发挥出应有的效果。我是说,不要把所有“优秀的”开发者当作是可以交换的。
可交换开发者的神话是不现实的。人与人之间的不同无法消除,并愿每个人都能找到最适合自己的那个角色!
-
软件工程师
+关注
关注
8文章
218浏览量
21138
发布评论请先 登录
相关推荐
评论