..

程序员的分工

在上一篇《Dapr能否改变云原生时代使用中间件的方式》一文中提到了程序员的分工,具体有哪些呢?这篇文章就来试图梳理一下。

理解这些有哪些好处?

  • 对初入这行的人有一个landscape,能够一览全局
  • 划分清楚领域有助于我们认清现实,人不可能精通所有,最好能专精于1-2个领域,不要用自己的业余和别人的专业竞争。

我暂时想到按照三个维度划分,这三个维度彼此存在交叉。每个维度的不同细分都有特定的领域知识,转领域没办法一蹴而就的。

不以语言划分,虽然编程语言是程序员最大的标签,但是编程语言更应该是工具。

按照层级(产业上下游)划分

  • 应用层 : web开发,商业应用
  • 基础开发框架 : Spring,Flask
  • 基础软件
    • 开发数据库的:mysql,postgres
    • 开发中间件的:redis, Kafka
    • 开发平台的:k8s, istio
    • 开发基础工具的:git,IDEA,VSCode
    • 工业基础软件: adobe,Maya,CAD
  • 底层软件
    • 开发内核的:Linux kernel
    • 开发操作系统的:Linux/GUN
    • 编程语言/虚拟机/编译器:golang,JVM,kotlin,LLVM
    • 开发浏览器的:Chrome

按照行业划分

  • 互联网web
  • 区块链
  • 云计算:云平台
  • 游戏开发: 行业内又有细分,开发引擎的和前端开发、后端开发
  • 硬件开发:驱动开发,嵌入式开发
  • 物联网
  • 工厂生产制造系统

按照专业知识领域划分

  • 网络工程师
  • 前端/后端/移动(ios/Android/跨平台)
  • 运维/DBA/增长工程师
  • 算法/AI/大数据/数据分析
  • 音视频领域
  • 电商领域
  • IM领域
  • CRM/SPA 领域
  • GIS
  • CI/CD/Service Mesh/Monitoring/…

这里我们没有按照头衔分工来划分例如架构师,总监。

选择一个行业,要看这个行业是否仍然是朝阳产业,比如现在互联网相较于传统软件行业肯定更有发展空间。

选择一个领域,需要明白这个领域依附的产业是什么,是否仍然是主流,并且考虑这个领域知识是否足够深,足够深往往才会有创新空间。

层级选择上要看自己的兴趣, 有人喜欢开发前端,有人则喜欢偏底层的软件。

最好能够成为 π 字型人才而不仅仅是T型了。也就是说要专精两个领域并且对其他领域有通识。


Creative Commons License