博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
看看你处于哪一层?(转)
阅读量:2586 次
发布时间:2019-05-11

本文共 1685 字,大约阅读时间需要 5 分钟。

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

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

 

一.系统层

系统层指的是操作系统,数据库,编译器,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。

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

转载于:https://www.cnblogs.com/wangxiayun/p/10302370.html

你可能感兴趣的文章
LeetCode题解(1436):旅行终点站-寻找循环的终点(Python)
查看>>
H5+CSS前端特效源代码:可旋转动态日文片假名
查看>>
python程序没有报错但是运行没有任何结果怎么办?
查看>>
简单说一说MySQL中drop、delete与truncate的区别?
查看>>
InnoDB与MyISAM的区别
查看>>
思科 Packet Tracer 实验六 RIP路由协议基本配置
查看>>
计算机网络实验七:DHCP基本配置
查看>>
计算机网络实验八:思科NAT的基本配置
查看>>
三郎数据结构算法学习笔记:单向环形链表约瑟夫问题
查看>>
前端特效H5+css+js:动态可拉进度条+附完整源码
查看>>
三郎数据结构学习笔记:双向循环链表(判断是否对称)附源码
查看>>
三郎数据结构算法学习笔记:基数排序
查看>>
三郎数据结构算法学习笔记:斐波那契(黄金分割法)查找算法
查看>>
Java中标识符的命名规则是什么?硬性要求和非硬性要求
查看>>
Java中八种基本数据类型的大小,以及他们的封装类
查看>>
Spring依赖注入的方式有几种,各是什么?
查看>>
SpringMVC怎么样设定重定向和转发的?
查看>>
SpringMVC常用的注解有哪些?
查看>>
spring bean的生命周期
查看>>
计算机网络子网划分详解
查看>>