粗略地分一下,程序员的平常工做基本上会被划分到这三层: 系统层, 中间件层,应用层。程序员
咱们从下到上,逐层走一下,看看每一层都在作什么。数据库
一.系统层编程
系统层指的是操做系统,数据库,编译器,TCP/IP协议栈,虚拟机等。另外,我把编程语言也纳入到这一层。设计模式
能在这一层工做的程序员基本上都是大神。好比写Linux的Linus Torvalds, 一边读协议,一边写TCP/IP实现的Bill Joy。缓存
用汇编写Delphi(Object Pascal)编译器的Anders,还有各类编程语言的发明人, 就不一一列举了。架构
这一层的人大部分都在默默地工做,构建咱们赖以生存的世界,他们深藏功与名,不多对外发出的声音,由于即便他们发出了声音,不少人也听不懂,由于太专业,太精深。负载均衡
这一层的人有两个特色:框架
(1) 对计算机是真的热爱,不然不会探究到这么深的层次,而且能耐得住寂寞在这一层工做。编程语言
(2) 能力超强。由于这一层的工做性质要求高性能,高可靠,须要和硬件打交道,须要处理巨多的细节,通常人真搞不了。分布式
二.中间层
中间件层颇有趣,有些东西系统层不想管,应用层又管不了,只好交个中间件来作。
传统的中间件是像WebLogic, Websphere, JBoss,Tomcat, MQ这样的东西, 若是我把他泛化一下,也能够把Docker, Elastic Search , Kafka , Spring , Zookeeper,Ngnix,Redis,Dubbo等给包括进来。 还能够包括一些公司的技术平台部门所推出的,供整个公司试用的软件和系统。
在这一层工做的人发出的声音会有不少人侧耳倾听,由于用户众多,你们都能听明白。
程序员对这一层的关注很是多,出了什么新技术?有什么新特性?布道师出来写一些文章,“鼓吹”一番,热闹非凡。
对于程序员来讲,可以在这一层工做,也很是有成就感:
(1) 直接参与开发,当你开始作通用的组件和框架的时候,对于技术能力,抽象能力的要求相比应用层就会大大提升。
(2) 对某个领域极为精通,成为专家,例如缓存、搜索、分布式、负载均衡等。
三.应用层
最后是应用层,主要使用系统层和中间层的东西来实现业务逻辑,戏称为增删改查。
绝大部分人都在这一层工做,尤为是刚刚培训出来的同窗,确定要在这一层呆上一段时间,也有可能一直呆下去,作一生。
千万别小看这一层,它须要把业务需求直接转化成技术实现,是直接产生价值的。
比较“悲催”的是,应用层的同窗须要掌握下面两层的知识,不必定精深,可是须要知道原理。
在这一层工做,关注点是如何更好更快地实现业务需求,及后续的变动,因此要有面向对象的设计,设计模式,敏捷开发,持续集成,持续交付,DevOps,领域驱动开发,TDD, Code Review等各类工程实践。
这一层也有大师级别的人物,好比Martin Fowler,他写了《分析模式》,《企业应用架构》,《重构》等经典书籍,特别擅长把业界的实践总结成概念。
再好比Robert Martin,面向对象设计的大牛,他10多年前的书《敏捷软件开发:原则,模式与实践》中提出的SOLID原则,至今仍然是OOD领域的指导原则。
为了把这一层的的事情作好,须要有个特殊的岗位来负责整个系统的设计,这个岗位就是:架构师。
架构师通常是资深的程序员,有丰富的实践经验,知道技术的优缺点,能根据具体的需求,设计合适的技术方案,创建合适的技术组件并链接起来,从而解决问题。
结语
系统层,中间件层,应用层并无高下之分,每一层都有足够多的东西供你去探索,去创造。
若是你喜欢开发一些东西,让不少程序员使用,能够考虑进入中间件层,好比公司的技术平台部。
若是你真的喜欢系统层的东西,那就要选定方向,好比数据库,而后深挖,如今国内已经有公司提供这样的工做机会让你去定制OS,定制数据库,定制JVM。
若是你喜欢在应用层解决实际业务问题,能够考虑向架构师方向发展。