..
程序员的分工
在上一篇《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型了。也就是说要专精两个领域并且对其他领域有通识。