看看你处于哪一层?

1,951 阅读4分钟
原文链接: mp.weixin.qq.com

粗略地分一下,程序员的日常工作基本上会被划分到这三层: 系统层, 中间件层,应用层。

我们从下到上,逐层走一下,看看每一层都在做什么。

1

系统层指的是操作系统,数据库,编译器,TCP/IP协议栈,虚拟机等。另外,我把编程语言也归入到这一层。

能在这一层工作的程序员基本上都是大神。比如写Linux的Linus Torvalds,  一边读协议,一边写TCP/IP实现的Bill Joy。

用汇编写Delphi(Object Pascal)编译器的Anders,还有各种编程语言的发明人, 就不一一列举了。

这一层的人大部分都在默默地工作,构建我们赖以生存的世界,他们深藏功与名,很少对外发出的声音,因为即使他们发出了声音,很多人也听不懂,因为太专业,太精深。

这一层的人有两个特点:

(1) 对计算机是真的热爱,否则不会探究到这么深的层次,并且能耐得住寂寞在这一层工作。

(2) 能力超强。因为这一层的工作性质要求高性能,高可靠,需要和硬件打交道,需要处理巨多的细节,一般人真搞不了。

2

中间件层很有趣,有些东西系统层不想管,应用层又管不了,只好交个中间件来做。

传统的中间件是像WebLogic, Websphere, JBoss,Tomcat, MQ这样的东西, 如果我把他泛化一下,也可以把Docker, Elastic Search , Kafka , Spring , Zookeeper,Ngnix,Redis,Dubbo等给包括进来。 还可以包括一些公司的技术平台部门所推出的,供整个公司试用的软件和系统。

在这一层工作的人发出的声音会有很多人侧耳倾听,因为用户众多,大家都能听明白。

程序员对这一层的关注非常多,出了什么新技术?有什么新特性?布道师出来写一些文章,“鼓吹”一番,热闹非凡。

对于程序员来说,能够在这一层工作,也非常有成就感:

(1) 直接参与开发,当你开始做通用的组件和框架的时候,对于技术能力,抽象能力的要求相比应用层就会大大提高。

(2) 对某个领域极为精通,成为专家,例如缓存、搜索、分布式、负载均衡等。

3

最后是应用层,主要使用系统层和中间层的东西来实现业务逻辑,戏称为增删改查。

绝大部分人都在这一层工作,尤其是刚刚培训出来的同学,肯定要在这一层呆上一段时间,也有可能一直呆下去,做一辈子。

千万别小看这一层,它需要把业务需求直接转化成技术实现,是直接产生价值的。

比较“悲催”的是,应用层的同学需要掌握下面两层的知识,不一定精深,但是需要知道原理。

在这一层工作,关注点是如何更好更快地实现业务需求,及后续的变更,所以要有面向对象的设计,设计模式,敏捷开发,持续集成,持续交付,DevOps,领域驱动开发,TDD, Code Review等各种工程实践。

这一层也有大师级别的人物,比如Martin Fowler,他写了《分析模式》,《企业应用架构》,《重构》等经典书籍,特别擅长把业界的实践总结成概念。

再比如Robert Martin,面向对象设计的大牛,他10多年前的书《敏捷软件开发:原则,模式与实践》中提出的SOLID原则,至今仍然是OOD领域的指导原则。

为了把这一层的的事情做好,需要有个特殊的岗位来负责整个系统的设计,这个岗位就是:架构师。

架构师一般是资深的程序员,有丰富的实践经验,知道技术的优缺点,能根据具体的需求,设计合适的技术方案,建立合适的技术组件并连接起来,从而解决问题。

4

系统层,中间件层,应用层并没有高下之分,每一层都有足够多的东西供你去探索,去创造。

如果你喜欢开发一些东西,让很多程序员使用,可以考虑进入中间件层,比如公司的技术平台部。

如果你真的喜欢系统层的东西,那就要选定方向,比如数据库,然后深挖,现在国内已经有公司提供这样的工作机会让你去定制OS,定制数据库,定制JVM。

如果你喜欢在应用层解决实际业务问题,可以考虑向架构师方向发展。

往期精彩回顾

关于老刘和码农翻身

我是一个线程

我是一个Java Class

面向对象圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭