再谈<全栈必备的技术栈设想>一文

在SDCC2016的架构师进阶之路主题,我分享了《老曹眼中的全栈架构师》话题,会后在csdn博客发布了《全栈必备的技术栈设想》一文,在我的公众号(wireless_com)发的是《全栈的技术栈设想》。然后,有幸得到了中生代技术(freshmanTechnology)和多人的转载,中生代技术还专门开通了全栈架构师深度讨论群,引起了很多的争论和争议。

主要分为以下三种观点:

1)根本没有意义,纯属忽悠

如网友回复:“鬼都知道说的什么 数据 缓存 业务 性能 消息队列 操作系统 产品 云存储 大数据这些高大上的名次,天天聊天就讨论这些高大上的名称, 然而并没有什么卵用。”

2)有可能,但参考意义不大

有网友回复:“个人觉得不值得推崇,很多程序员为了全栈,东一榔头西一棒子,结果啥都没搞好”

3)表示赞同,具体实践待推敲

如网友@张真Alex 的说法:“比较认同全栈架构师,从前ibm把架构师分为六大类,是六脉神剑各使一剑,而如今,不管是工程师还是架构师都应该有全栈的思维(不一定全栈的技能),特别是架构师的职能,需要从业务,技术体系,端到端都具备相当的战斗力才行”

如此多的争议并不意外,事情越辩越明,在此分享一下那篇文字的初衷和自己的重新思考。本着科学的态度,讨论的前提应该是对问题明确,基本概念的定义是一致的,对不同逻辑推理得到的结果进行讨论。针对全栈架构师这一命题,个人觉得先要明确几个概念。


什么是架构?什么是架构师?

架构的定义业界一般有三种方法,一个定义为决策过程,一个定义为体系结构,还有就是两者兼而有之。 Simon Brown 在《software architect for Developers》一书中尝试给出了架构一词作为名词和动词的定义,并尝试给出了架构的分类。好友@温昱在《一线架构师实践指南中》尝试给出了软件架构的方法论ADMEMS即所谓的5视图方法。然而,Len Bass 在《软件架构实践(第2版)》中谈到“软件架构在不断发展,但它仍然是一个尚不成熟的学科”。

历史是任人打扮的小姑娘,类似的, 每个人对架构和架构师都有着不同的理解。蚂蚁金服@右军(公众号:流浪部署我的初衷)有一篇文章《谈架构》有着自己对架构的看法: ‘‘‘ 架构是一种思维模式。架构师是一个title。为什么说架构是一种思维模式呢,小到一个模块,大到一个平台,都是一样样的。 软件架构的作用包括:

  • 软件架构能够满足系统的品质
  • 架构设计使受益人达成一致的目标
  • 架构设计能够支持计划编制过程
  • 架构设计对系统开发的指导性
  • 架构设计能够有效地管理复杂性
  • 架构设计为复用奠定了基础
  • 架构设计能够降低维护费用
  • 架构设计能够支持冲突分析

...

‘‘‘

其中有很多有价值的观点,感兴趣可以参考这篇文章。

在前当当架构部总监@史海峰看来,架构师首先是一个工程师,就如同在一些传统行业里,有总工程师、总设计师的说法。他把架构师的定义总结为七句话:

NO.1 以工程思维全面理解业务需求

NO.2 基于模型和基础模式抽象简化

NO.3 提出恰当可行的整体解决方案

NO.4 在限定资源范围完成明确目标

NO.5 满足业务需求且保证系统质量

NO.6 在可预见的周期内具备扩展性

NO.7 并在系统生命周期内持续演进

在@史海峰看来,不同架构师擅长的技术领域或有不同,但大家有共通的拿手绝活,那就是“快速切入、解构拆分系统模块和代码、有技术话语权”。这些绝活并非一蹴而就,而是架构师们日常工作中,不断地去发现问题、思考解决、设计取舍、重构迭代、协作传道、响应支持,持续学习进步达成的。并非所有公司都需要招架构师,只有当系统复杂达到某个程度,几个高级工程师一起难以很快说清楚的时候,就需要架构师加入了。架构师有两忌两宜。两忌分别是不应过于追求高大上,否则可能会和现有团队脱节,难以落地;技术上不应过于求全面,以能解决当前问题为主。两宜则是团队协助沟通能力要好和适应性强。

对于架构师,不同公司有不同的定义和解读,我觉得我们是幸运的,因为我们在实践着一种动态且没有成熟的技术,可能创造着一个新的团队角色甚至工种。

什么是全栈工程师?什么是全栈架构师?

对于全栈工程师,引用一个不权威的说法,百度百科中对全栈的描述是这样的:

全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack developer。是指掌握多种技能,并能利用多种技能独立完成产品的人。

根据自己的经验体会,全栈工程师在很多时候, 是为了梦想的苦命码农的无奈选择。其实,大公司也需要全栈的。我最早了解这个词,是从一个facebook那里的朋友知道的。

全栈,不是全能,和所选择的技术栈甚至业务栈相关。例如以LNMP(Linux + Nignx + MySQl+ PHP),那么掌握了这四种技能,算不算一个全栈工程师呢?个人觉得可以的。但是随着技术栈的变化,例如引入了缓存Memcache乃至其他分布式缓存,那原来的全栈工程师还是全栈么?全栈是否要随之变化呢?

随着业务和技术栈选择的动态性变化,能否在团队中有一角色能够相对系统地对架构有个动态的设计,使我想到了“全栈架构师”这个词,这就是我引入全栈架构师的一个原因。同架构师和全栈一样,全栈架构师更不好定义,甚至可能错误地导致全栈就是全能的说法。

网友@张真Alex 认为全栈架构师最好是T型人才。

一竖的部分包括:

  • 专业知识(应用,系统,安全,运维等),
  • 战略分解(抽象,分类,算法),
  • 调研选型(目标识别,快速学习,调查方法,可行研究)
  • hands on(精通1-2语言,大量代码实践,设计方法等)

一横的部分包括:

  • leadership(号召力,决断力,mentorship)
  • 项目管理(项目计划,风险控制,取舍权衡)
  • 领域知识(行业知识,行业生态)
  • 创新思维(应用创新,跨界思维)
  • 突破能力(经验沉淀,觉一反三)
  • 沟通协调(主动沟通,灵活协调)

这一横一竖才构成了架构师(技术专家)的能力图谱,他认为可算全栈架构师。

我觉得这是非常有益的探讨,很遗憾,我还没有能力给出全栈架构师的完整而又清晰的定义,边界也不好界定,但是,我觉得我们都在探索的路上。

为什么需要全栈架构师?

大家普遍认为,团队需要深入业务,理解业务的发展,搭建核心架构,理清技术架构的细节和门槛,实现架构的迭代资源,扫清技术疑点和难点的人;需要把握好非功能需求的6种类型(功能性、可靠性、易用性、效率、维护性、可移植性)的人;....

那么,全栈架构师能够满足我们的哪些需求呢?我在《老曹眼中的全栈架构师》中谈到了4个自己认为的典型场景:

1) 性能瓶颈,业务系统是很复杂的,不管是什么量级的业务系统,当出现性能瓶颈的时候可能一个人解决不了,如果你能够贯穿所有被使用的技术栈,就能相对很容易地知道哪一点出现了问题。

2)沟通,前后端工程师,尤其是、各个跨语言前后端工程师之间的沟通是存在障碍的,全栈能够做好沟通的桥梁。

3)救火,比如突然间夜里给你一个短信告诉你系统出问题,你可能当时找不到那个开发此模块的工程师,怎么办?系统还能不能运行?业务会不会崩溃?如果崩溃,公司会遭受什么损失?这个时候就需要有全栈,他能够在要在第一时间解决系统中的问题。

4)资源紧张,资源紧张更多存在于创业公司,我也在一些创业公司里做过事情。比如说我们想搭一个系统出来,没钱、没资源,这个时候,很多想法要诉诸实践,一定要有全栈。

肯定还有其他的需求存在的,只是我可能没有经历过,或者是大家没有关注过而已。

如果对全栈架构师的需求是存在,那么,如何才有可能成为一名全栈架构师呢?我试图从技术栈,性能栈,和效率栈三个方面进行了探讨,在《老曹眼中的全栈架构师》中有所描述,这里不再赘述。

我说过全栈架构师可能是自己的杜撰, 但是,全栈思维优先还是被大多数朋友认可的,实际上是一种大局观,一个功能既可以前端又可以后端实现,利弊和方案的选择是需要有全栈架构师的,至少要有全栈的思维。全栈的思维,简单地可以理解成系统的思维方式。

全栈架构师是不是一个伪命题呢,是一个上帝类吗? 我不知道,我只是想说那篇文字,试图明确:

什么是架构?什么是架构师?

什么是全栈?什么是全栈架构师?

为什么需要全栈/架构师? 如何可能成为一个全栈架构师?

如果问题分为:已知的已知,已知的未知,未知的未知 的话,即便是将全栈架构师这一角色,从未知的未知变成已知的未知,我想也是一件好事情,能力所限,随笔如上。



微信扫一扫
关注该公众号

时间: 2024-10-29 19:07:21

再谈<全栈必备的技术栈设想>一文的相关文章

全栈必备的技术栈设想

喔家ArchiSelf 参加今年的SDCC确实挺高兴的,向大师Joe Armstrong 当面求教,与周爱民老师同台,在我们的架构师进阶之路专场有4个七零后的老码农,瞬间没有了孤独感,甚至有一点窃窃之喜. 实在没想到会有这么多朋友关注这个专题,会场有了些拥挤,呼吸也不那么舒服了.答应朋友们的事,今天就做到,下面是昨天的PPT内容和简要说明,详细内容还请关注CSDN 和SDCC的相关发布. 惯例是开始介绍自己,老码农,都没什么可吹嘘的地方. 看一下工程师和架构师的区别,简单地,工程师关注的是功能和

Unity教程之再谈Unity中的优化技术

这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点处理“一项.这里的几何体就是指组成场景中对象的网格结构. 3D游戏制作都由模型制作开始.而在建模时,有一条我们需要记住:尽可能减少模型中三角形的数目,一些对于模型没有影响.或是肉眼非常难察觉到区别的顶点都要尽可能去掉.例如在下面左图中,正方体内部很多顶点都是不需要的,而把这个模型导入到Unity里就会是

全栈必备 JavaScript基础

JavaScript 来了 喔家ArchiSelf 1995年,诞生了JavaScript语言,那一年,我刚刚从大学毕业.在今年RedMonk 推出的2017 年第一季度编程语言排行榜中,JavaScript 排第一,Java 第二,Python 反超 PHP 排第三,PHP 第四,C# 和 C++ 并列第五.RedMonk 排名的主要依旧是各种编程语言在 Stack Overflow 和 GitHub 上的表现,比如编程语言在 Stack Overflow 上的讨论数量,在 GitHub 上的

【Scala】Scala技术栈

快速了解Scala技术栈 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为一个巨大的黑洞,吸引力使我不得不飞向它,以至于开始背离Java.固然Java 8为Java阵营增添了一丝亮色,却是望眼欲穿,千呼万唤始出来.而Scala程序员,却早就在享受lambda.高阶函数.trait.隐式转换等带来的福利了. Java像是一头史前巨兽,它在OO的方向上几乎走到了极致,硬将它拉入FP阵营,确乎有些强人所难了.而Scala则不,因为它的诞生就是OO与FP

重谈react优势——react技术栈回顾

react刚刚推出的时候,讲react优势搜索结果是几十页. 现在,react已经慢慢退火,该用用react技术栈的已经使用上,填过多少坑,加过多少班,血泪控诉也不下千文. 今天,再谈一遍react优势,WTF? React的收益有哪些?React的优势是什么?react和vue.angularJS等其它框架对比优势? 而作为总结回顾.react在工程实践中,带来哪些思想上的质变? virtual dom虚拟DOM概念 它并不直接对DOM进行操作,引入了一个叫做virtual dom的概念,安插

技术栈选择与全栈工程师

很多朋友的第一门语言是一个强类型语言.可能是C/C++/Java/C#. 做到一定年份了,积累了丰富的经验,发现自己好像大多数东西能做,客户端.服务端.手机.游戏,很多场景自己都可以进行开发. 在各种场景下都能开发. 在各种场景下都遇到有力的竞争对手. 竞争对手貌似不少人比自己开发效率高. 类似这样的技术人员,我们可以称之为C蛮. ---------------- C蛮和队长的故事 -------------- C蛮浑身肌肉,手持精金巨斧. 无论看到什么怪物,嗷呜一声吼.狂暴+吹大+高等魔化武器

.NET技术大系概览 (迄今为止最全的.NET技术栈)

从2002年的.NET 1.0开始,1.1,2.x,3.x,4.x,每个新版本的.NET都会增加新的技术,生态圈也在不断壮大. AD: 前言 .Net推出13年了,Visual Studio 2015 / .NET Framework 4.6昨天也发布了. 从2002年的.NET 1.0开始,1.1,2.x,3.x,4.x,每个新版本的.NET都会增加新的技术,生态圈也在不断壮大. 问题 大家是否想过: .NET究竟包含哪些技术呢? 我所掌握的技术这个子集,在.NET技术大系这个超集里面占地比例

React全栈--现代前端技术

React全栈–现代前端技术 1.ES6– 新一代JavaScript标准 1.1 const和let关键字 以前只有全局变量以及函数内部的局部变量,所以以前的局部变量只能定义在函数里面,但是现在不是了,可以通过let关键字来定义局部变量.同时通过const关键字来定义常量,定义后的基本类型数据是不能改变的,但是定义的是引用类型的变量的话,还是可以改变的. 1.2 函数 1.箭头函数,在回调中很有作用,箭头函数永远是匿名的 2.this在箭头函数中的使用:在嵌套函数中,碰到setInterval

(转).NET技术大系概览 (迄今为止最全的.NET技术栈)

前言 .Net推出13年了,Visual Studio 2015 / .NET Framework 4.6昨天也发布了. 从2002年的.NET 1.0开始,1.1,2.x,3.x,4.x,每个新版本的.NET都会增加新的技术,生态圈也在不断壮大. 问题 大家是否想过: .NET究竟包含哪些技术呢? 我所掌握的技术这个子集,在.NET技术大系这个超集里面占地比例是什么呢? 我究竟还没有掌握多少.NET技术呢? 面试的时候会考哪些技术呢? 相信大家也看过Java的技术栈,一个金字塔形状的(我一下子