TOC

继续:全能程序员 vs 特长程序员

上次讨论了阮一峰关于全能程序员与特长程序员的观点,末尾说期待他继续聊全能程序员的优势,然后发现今天发的《科技爱好者周刊(第 175 期):知识广度 vs 知识深度》果然在说这个。

...知识广度有明显优势,那就是确定项目路线的时候。

这时,知识广度就发挥作用了,了解的信息越广泛,知道的情况越多,就越可能具备洞察力,能够在多条路径里面,选出最合适的道路。知识面狭窄的人,由于不了解其它道路,不管遇到什么问题,可能都选择他会的那一条路,比如 Java。
这就是全能程序员的优势,判断正确的仰角 θ,使得两点之间距离最短;特长程序员的优势是前进速度 r,可以在既定道路上做到快速前进。所以,知识的广度能告诉你什么是正确的方向,知识的深度则可以让你在该方向上快速前进。
对于长期而艰巨的项目,走得快固然重要,但更重要的是走对方向。如果仰角 θ 不对,走得再快也没用,因为一开始就走错方向,后期必须停下来校正方向,甚至可能永远到达不了目标,白白浪费了生命。
因此,全能型的人才比较适合确定项目方向,担任团队领导。 乔布斯、马斯克就是这样的人,强在知识的广度,而不是知识的深度。他们既懂技术,又懂市场和管理,还了解人文("我喜欢站在人文和技术的交叉点"),一旦掌握资源,就能带领团队,做出创新的产品。但是,如果让他们担任工程师,绝对是糟糕的工程师,会被开除。
不过话说回来,现实中,谁会因为你知道的事情多,就让你担任团队领导呢?反而是因为你克服了技术难题,才有机会来领导团队。乔布斯和马斯克都是自己创业才出头的,恐怕不是偶然。
总结一下,对于公司来说,如果有明确的技术方向,那么就需要聘请特长程序员,帮助加快开发速度。如果是刚刚诞生的创业公司,方向还在摸索之中,那么全能程序员也许更有价值。

我之前给自己定的方向是成为一位技术专家,这是出于现实的考虑,是一条比较切合实际的路。
但我在实际的工作学习过程中体现出来的发展策略却是学习所有我不知道的东西,那就最后走向什么都懂的 “全能程序员” 咯!
按照阮一峰的说法,全能程序员应该是管理向。那这就有点尴尬了。

如果要转向管理方向的话,可能需要对自己的性格加以改造,并着重培养一下自己的表达能力,重点是要找一个恰当的工作提供实战的机会(也曾有过朝管理方向发展的机会,被我放  气  弃了)。

如果是继续定位技术专家的话,我最好是在某一方面着重一些。
其实我什么都尝试尝试也不是没有客观原因的,就是因为我没有一个明确的发展方向,我也不知道接下来的路该怎么走。

我感兴趣的方向(有蛮多):

  1. Web / 服务器后端
    1. 能干前端,但偏重后端(我从事最长的一个领域)
    2. 语言:PHP,Python, Go
  2. AI
    1. 语言:Python,C/C++
    2. 细分方向:
      1. 机器视觉:人脸识别,目标识别,图像语义理解
      2. 自然语言:
      3. 语音识别:
      4. 自动控制/机器人(综合,可能需要结合嵌入式技术)
  3. 数据分析
    1. 语言:Python
  4. 区块链
  5. DevOps
  6. 网络工程师
  7. 具体的产品或技术框架
    1. ERP/OA/CRM
    2. 小程序

我最想试试 AI 方面,以为我喜欢科幻,一直很期待能出现强人工智能。
我也觉得这个领域还大有发展,最有可能改变这个世界。
虽然我现在在这个领域一点根基都没有,但我相信自己,应该问题也不大。