关于技术深度和广度的选择

警告
本文最后更新于 2024-01-17,文中内容可能已过时。

关于技术深度和广度的选择

参考博客:

上篇

下篇

国外程序员对这个话题的讨论

如果你什么都会干,前端、后端、数据库、服务器管理都能上手,那么哪里缺人手,就会让你顶上去。但是,一旦遇到疑难问题,又指望不了你,因为你不是那个方面的专家,解决不了。

反过来,你精通某一项技术,其他都不懂,公司反而会觉得你更有价值。因为你可以把这个技术做得很深,克服技术难点,超过竞争对手,所以你的晋升会快得多。

我甚至读到过这样一段话:

“绝大多数成熟的程序员都专攻某一个技术栈,因为这样更容易找到工作。 一些专家甚至认为,在不同的技术栈中工作是简历的污点。

所以,大家写简历的时候,千万不要把自己懂的所有技术都写进去,那是简历的扣分项。而只写你掌握最深的那项技术,以及与之相关的工作经历。

同样的,新人如果想在软件行业长远发展,建议选择一两个技术方向进行专研,成为专家,而不要什么技术都懂一点,但是哪一项都不精通。

但是,这样也有风险,万一你选择的技术栈走下坡路(比如 PHP),甚至消失了(比如 Flash),你可能被迫要换技术栈,那就惨了。

最保险的做法,就是选择那些有大公司支持的技术。这就是为什么市场上有那么多 Java 专家和 .Net 专家的原因。


国外有人已经谈过这个话题。

图片

国外作者画了一张图,将世界上的程序员比喻成三种形状。

(1)大饼型:拥有知识广度,但没有知识深度。

(2)竹竿型:拥有知识深度,但没有知识广度。

(3)T 型:介于前两者之间。

那篇文章也认为,通常情况下,竹竿型程序员的出路最好,雇主愿意为知识深度买单。因为现代社会高度分工,越是大公司,岗位职责越明确,需要的是领域专家,而不是多面手。

但是作者提到,有一种情况例外,知识广度有明显优势,那就是确定项目路线的时候。

请看上图,右上角有一个黑点,那是公司的目标。当前位置在左下角的原点,两点之间没有现成的道路,需要自己寻找实现路径。

这时,知识广度就发挥作用了,了解的信息越广泛,知道的情况越多,就越可能具备洞察力,能够在多条路径里面,选出最合适的道路。知识面狭窄的人,由于不了解其它道路,不管遇到什么问题,可能都选择他会的那一条路,比如 Java。

这就是全能程序员的优势,判断正确的仰角 θ,使得两点之间距离最短;特长程序员的优势是前进速度 r,可以在既定道路上做到快速前进。所以,知识的广度能告诉你什么是正确的方向,知识的深度则可以让你在该方向上快速前进。

对于长期而艰巨的项目,走得快固然重要,但更重要的是走对方向。如果仰角 θ 不对,走得再快也没用,因为一开始就走错方向,后期必须停下来校正方向,甚至可能永远到达不了目标,白白浪费了生命。

图片

因此,全能型的人才比较适合确定项目方向,担任团队领导。 乔布斯、马斯克就是这样的人,强在知识的广度,而不是知识的深度。他们既懂技术,又懂市场和管理,还了解人文(“我喜欢站在人文和技术的交叉点”),一旦掌握资源,就能带领团队,做出创新的产品。但是,如果让他们担任工程师,绝对是糟糕的工程师,会被开除。

不过话说回来,现实中,谁会因为你知道的事情多,就让你担任团队领导呢?反而是因为你克服了技术难题,才有机会来领导团队。乔布斯和马斯克都是自己创业才出头的,恐怕不是偶然。

总结一下,对于公司来说,如果有明确的技术方向,那么就需要聘请特长程序员,帮助加快开发速度。如果是刚刚诞生的创业公司,方向还在摸索之中,那么全能程序员也许更有价值。

0%