程序员如何确定自己的职业规划

前言

计算机专业这个行业确实高薪,但由此也带来了恶性循环,大家都看得到这里有利可图,参与进来的人越来越多,但企业的岗位是有限的,到最后只会择优留取,如果你的技术始终停滞不前,现在享受的人生在将来是要还债的。尤其是很多非本专业的人,在进入这个行业后没有意识到自身的短板,止步于得到这份职业的瞬间,水平没有提升,留的年头越久这份工作就会变得越危险。

在这种情况下,有些人就把注意力放在“质量不够数量来凑”上,沉迷于加班,当他成为管理者以后,也希望能靠加班来解决一切,这是一个非常可怕的行业现象。很多团队加班只是因为没有解决的办法,以此来向公司表达“我努力了” 的信号。

对于整个行业来说,它会随着大潮有起有伏,在遵循统计学的基础上吸纳社会资源,然后向前发展,吐故纳新,优胜劣汰。但是对于个人来说,这是一个很残酷的事情。很多同行可能在岗位上用同一套技术工具过了十几二十年,他的知识储备只停留在找到工作后的前半年,当所在公司突然倒闭了,他再出来找工作时,就会发现很难找到一个既配得上年资、又能让自己感到满意的企业。

全能程序员 vs 特长程序员

我读过一些篮球报道,里面说 NBA 球队不喜欢“全能型球员”,更喜欢“特长型球员”。

所谓“特长型球员”,指的是其他方面可能都不行,但是某一方面特别突出,比如防守特别好、三分特别准,或者篮板很强等等。球队愿意签这样的球员,关键时刻派上场,没准就能立下奇功。

反过来,“全能型球员”各项技术都很均衡,防守、进攻、投篮都还可以,能达到平均水平,但是每个方面都不突出,没有明显的过人之处。球队看不上这样的球员,觉得让你上场,赢不了球。

我马上联想到,软件行业其实也是如此,“全能程序员”的出路,明显不如“特长程序员”。

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

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

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

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

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

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

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

总之,“全能程序员”在这个行业是不受待见的,被视为“万金油”。如果你不幸属于这一类,那么除了抓紧时间开发特长以外,也不必过分灰心,全能程序员也有自己的价值和优势。

知识广度 vs 知识深度

“特长程序员”比“全能程序员”吃香,在国外已经有人已经谈过这个话题。

国外作者画了一张图,将世界上的程序员比喻成三种形状。
(1)大饼型:拥有知识广度,但没有知识深度。
(2)竹竿型:拥有知识深度,但没有知识广度。
(3)T 型:介于前两者之间。

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

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

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

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

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

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

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

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

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

posted @ 2021-09-27 21:07  牛奔  阅读(94)  评论(0编辑  收藏  举报