当前位置:   article > 正文

软件工程师的技术层级_软件工程师技术架构

软件工程师技术架构

什么是技术层级

其实就跟阿里腾讯的技术层次一样,是给软件开发人员能力评定设定的标准,也是程序员进阶的指引。大厂的评级基本上是按照你对外输出的能力来评判的,也就是你能胜任的项目的复杂度,完成的速度和质量。这是以产出为导向的,毕竟产出才相对容易量化,也比较公平。但是产出其实有一定的欺骗性,产出高的不一定技术实力就强,尤其是跟当前业务不直接挂钩的能力,容易让程序员忽略自身的能力短板,导致没有形成结构化的,立体的知识体系。在脱离团队和公司以后会感到迷茫。我就从一个整体的,宏观的角度剖析一下一个程序员应有的知识体系。各个体系是逐层推进的,一般来说下一层的基础打好,上一层的能力才强。

第0层,理论基础

包括计算机的组成原理,操作系统,进程线程,数据结构与算法。我想这些东西没有一个程序员不了解,毕竟面试最容易考的,尤其是大厂。这些东西的重要性不言而喻,日常工作中也会经常用到。但是别钻牛角尖,这些东西并不是懂得越多越深就约好。比如红黑树的旋转过程,编译原理,这些工程中用不到的东西学了是浪费时间。

第一层,技术实践

这一层的东西也是硬通货,不管是平时写代码还是面试都是必问的。
一是你擅长的编程语言的特性,说得学术一点是语法语义和运行时,语法是指表达方式,比如什么是表达式,什么是变量,什么是操作符,什么是函数,什么是类。语义主要是各种关键字,if,else,case等等。运行时就是该语言的常用库,比如时间操作,文件io,网络,多线程,runtime gc等等。另一种对编程语言的概括就是数据+算法.数据就代表该语言的类型系统,比如内置数据类型,自定义数据类型,函数(函数也是一种数据类型),以及各种类型所支持的运算。算法就是指程序的流程控制语句,也就是if else return这些。这样也能完备的描述一个语言,但是没有突出该语言的标准库或者常用的第三方库的重要性。
二是常用的工具,比如mysql redis kafka,以及跟语言相关的框架,比如spring,mybatis等等。

可以看出第二层的知识其实是学不完的,不同的业务场景对应不同的技术栈。但是精通2-3门语言,常用的中间件以及框架还是很有必要的。最好是形成t字形的人才,即一专多会,有助于提高技术视野,避免出现拿着锤子看啥都像钉子的现象,争取在不同的场景下能选择最合适的技术栈。

第二层,软件设计以及系统架构

虽然Robert Martin在《架构整洁之道》里面说了,架构就是设计,这俩概念没啥区别,但是我看很多书籍博客一般都是区别使用了这俩词语的。一般来说,软件设计是指一个系统内的模块划分,而架构设计是指多个系统之间的划分,也就是在分布式服务的场景下把一个复杂的系统划分为多个服务(或者说子系统,毕竟微服务来了,子系统可以无线划分为更小的子系统,一个进程代表一个子系统的时代已经过去)。
对一个系统内部的模块划分,通常是按照package来组织的,每个package又包括一组互相关联的类。对于package和类的组织原则其实只有一个:高内聚低耦合。具体来说就是23种设计模式,以及这些设计模式背后的指导原则: solid法则和迪米特法则。
对于系统之间的划分,主要是按照领域驱动的原则来划分的,即每个子系统负责一个业务,比如订单子系统,user子系统,物流子系统。。。这样划分的好处是便于理解,子系统之间的边界也非常明晰。

第三层,归纳创新

在一个行业内,提取行业的特点,创建SAAS平台,比如美团支付宝
在一个技术圈内,提取重复逻辑,创建framework。比如redis, spring

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号