我理解的阿里无线前端“架构”(半鸡汤,少干货)

简介:

写在前面的话:

对于文中涉及“脱敏”的内容,链接经常一环套一环,无法输出,很抱歉...
怀着一个酝酿了蛮长时间的念头,打开电脑,想对一些思考做一点记录。关于标题,关于“前端”,关于“架构” 。
其实是有蛮多话想说的,但是前面这几个字却打上去了又删掉。想为下面的内容找一个合适的开始。但是似乎总是不那么如意。
回到这个话题,或许应该从以前的认知慢慢说起。

过往的认知

不可否认的说,曾经很长的一段时间,当我大部分时间还集中在业务上的时候,对“架构”这个词有点嗤之以鼻。尤其是“前端架构”。觉得说“前端”这个软件工程化都相对薄弱,还在拼死拼活的往成熟的语言领域,往已有的软件工程慢慢靠近的的方向,真的需要所谓的“架构”么。
dbf_contempt500
总觉得在这个阶段,

  • 所谓的前端架构更多的是在纸上谈兵,拿以往的软件工程的思想和概念硬往自己身上套。
  • 所谓的做架构的同学更多的是在炫耀自己的技术深度和视野,看到前沿的技术不管合不合适就拿来做方案,硬往业务上推,来成全自己的KPI
  • 总觉的所谓的“技术架构”无非就是一些个人主观化的思路和概念,形成一些看起来成体系的代码组织方式,以便完成业务后可以说:看,基于我的架构有多好的通用性,扩展性,代码看起来多优雅...

回到我现在的立场,我看到的当前团队中不同的同学对于“架构”这个词的认识和看法,无非有两种:

  • 要么和之前的我一样,嗤之以鼻,做架构的有什么了不起,无非是老板给你安排个“轻松点的活”,做做方案,不用受业务的压迫。还得逼着一线每天认真辛苦的码代码的同学接受你一时想出来的Idea。
  • 要么是另一个极端,觉得做架构的同学就NB,觉得比做业务的同学从概念上就高一个等级。然后死命的想要往“架构”这个方向靠。

可是当有一天我自己需要站在团队的角度去思考基础建设的缺失,思考怎么才能帮助到团队的时候。才发现“架构”这个词既没有想象中那么“不堪”,当然也没有想象中那么“容易”。同时,也没有别人眼里那么NB,高人一等。 反而是越来越多的谦卑甚至恐慌,当沉下心来想想,确实,我们可能误会“架构”本身了。我们自己往他身上加了很多的主管臆想。

我理解的架构:是团队的,不是架构师的

第一条我就想说这个,因为TA的确应该是大前提,如果做架构的同学不是站在团队的角度来思考问题,思考解决方案,而是以自己过往的经验,自我的判断说应该怎么怎么样。那必然是会沦落到被人嗤之以鼻,甚至拖业务和效率的后腿。

  • 架构一定不应该成为只是你想要的样子,也不能只是老板想要的样子,一定应该是团队想要的样子。

在我正式接下为团队基础建设方向做规划和思考这件事情之前。去年在团队内做了一段时间的“SWAT”,也就是真正意义的上的“灵活资源”,做团队任意方向的支持。在做“团队支持”这个期间,参与了不同形态的业务项目,产品化的,运营化的,长线的,短线的,消费者端的,商家端的,前台重视内容和体验的,后台重视效率和结构化的,等等一系列不同的项目,包括一些不直接透明到业务的专项。当前参与程度深浅不一,但总体这个过程让我感受到了一件事情:

  • 不能凭想象和自我经验判断说团队需要什么?你要的答案一定要去和团队对话,和团队成员对话,或者参与到不同形态的“他们”当中去,去发掘他们想要什么。

收集信息和问题是做决策和方案的第一步,这个观点说出来大家都知道,但是实际做的过程中可能不一定能想得到了。举个例子:

  • 你要做工具,做给新人的,就要站在新人的角度来使用它,发现它是不是真的有用。做给流程规范的就必须站在项目实践的角度去实践TA,而且不是你自己觉得好用就乐呵呵,因为你自己并不是“架构”这个方向的真正用户
  • 更典型的例子,前端的自动化测试。做之前第一件事情是弄清楚在当前时间节点下,当前团队状况下,团队是否需要TA。进而才是怎么在团队的层面上去落地这件事情。而不是自己想当然的做一套方案。当前的团队并不需要这个东西,那么方案再完善又有什么用?

“架构是属于团队的”,这个观点一个方面是上面所说的,TA的需求和解决方案应该来源于当前团队。另一个方面是架构的进展和设计一定也是对团队透明和公开的。 如果进展和方案不能随时保持对于团队的公开和透明,也很难保证当到了最终产出的时候,还能保持最开始的方向一致性。

今年上半年开始,我们的周会内容有了小小的变动,把以往的单纯的团队内分享的例会转变为一个始终围绕团队基础建设,团队发展,和个人发展的交流会。植入了一个每周固定的环节,就是“基础建设进展和问题一周汇总”。
保持公开和透明,也可以随时就问题进行讨论。给自己和团队一个面对面的机会。
确保是大家想要的,同时也希望能潜移默化的形成大家对于团队建设的方向感和全局观。

我理解的架构:是横向全局的

这应该是做“架构”最基础的要求。也就是需要对整个团队,结合整个行业的发展保持全局的观望和了解。并且可以在此基础上基于团队现状做出对未来的基本判断。 “做出判断”这件事情,说简单也简单,说难也难。简单的是无非就是做几个选择题,选出今年,或者近期内要做的事情。难得是怎么来保证你的选择在当前的团队来看,是正确的。什么阶段做什么事情。

我记得今年上半年开始,我开始尝试担起前端团队的基础建设收敛相关的事情的时候。结合去年和今年的现状,整理过一个简单的框架图。在 "手淘前端在工程化道路上的“匍匐”" 文章里面有Po过。后来有过一些更新和小调整。大致如下:
_
归结起来是

  • 两个中心 (端和效率)
  • 八个方向
    • 基础库+功能组件+UI框架 (对应“效率”)
    • “端”的延伸 (对应“端”)
    • 规范和工程流程
    • 工具链路
    • 数据和性能
    • 自动化测试+持续集成
    • 前端安全
    • 服务和周边

八个方向中,落实到两个中心的必然是今年的重点。工具和性能是去年的重点,今年在已有基础上升级。其他的子方向在今年会开始探索。 这其中由于团队历史和现状的原因,其实有一些点是大家都在火热在抓的,但在我们团队中并没有放到今年的重点。比如

  • 前后端分离

也有在当前团队现状还不到时候做的(并不紧迫)的事情,比如

  • 前端基础服务(包括构建和工程的服务化,新人系统,内部项目域名和服务资源申请和部署自动化.. 等等)

以上的信息可以理解为“架构是横向全局” 这个观点的一个表现。
个人觉得做出判断的前提确实是需要了解别的优秀的团队在做什么,行业在做什么。再结合团队的现状才有可能知道我们需要做什么。
然而,了解别人的过程,其实反而也是让人“谦卑”的过程。

有时候知道的越多,会让人觉得越渺小。

你觉得自己在某方面做的还不错了,但是一定有人有团队有更优秀的方案和实践。

所以,“全局”,不仅是对于自己团队现状的全局认知和判断,也是在其他团队放到一起的“全局”评估。

  • 全局意味着 - 清楚的知道团队在当前阶段应该做什么事情
  • 全局意味着 - 清楚的知道团队的现状,优势和问题
    • 不至于高傲的迷失了方向
    • 也不至于卑微的找不到出路

我理解的架构:也是垂直深入的

在我的理解里,所谓“做架构”的同学们,不应该只是单纯的有“全局观”。同时也需要对每个垂直的领域保持一定的“绝对深度”。

就拿上面关于“全局”的几个子方向来说,我希望在当前定下的细分领域,想要做“架构”的同学在任何一个细分领域上都能保持一定的绝对深度。可能对于一个人的精力和资源会有一些挑战,但是我觉得在一定程度上是应该的。

在精力允许的范围内,每一个子领域里应该都需要尽可能的参与方案的探讨,制定,代码的实现,团队的落地整个过程。

拿我们自己团队的情况来说,至少应该知道:

  • 基础库和组件库,UI框架
    • 未来形态的发展应该是什么样?
    • CommonJS模块范式的迁移的自动化实现方案是什么?代码实现思路是什么?
    • 模块依赖关系弱关系到强关系的包装需要做哪些事情?
    • 控件的规范是否需要迁移到WebComponents?
    • 如果迁移,规范是什么,怎么定最小Feature的polyfill集合?
    • polyfill代码应该怎么来实现?
    • UI部分的组件复用应该怎么来做?可视化还是命令化?
    • UI库的mixin部分的style-lib和组件层面的view-lib怎么更好的管理?
    • ...
  • 端的部分
    • ReactNative的现状和痛点是什么?解决方案是什么?代码实现的难点在哪里?
    • RN的组件库怎么来组织构建?一个RN的组件应该怎么来写?
    • RN在性能和稳定性上的解法有哪些?现状是什么?
    • 业务层面的数据上报方案是什么?代码上的思路该怎么做?
    • 是否能明晰的判断未来,知道什么时候该坚持?什么时候该寻找别的出路?
    • GDOS的目标和意义是什么?为什么要做GDOS?
    • 对接通用算法和选品的难点是什么?怎么样定商品化的json schema?
    • 甚至java的部分,hsf的对接是否也能够参与?
    • ...

以上举例,提出每个子方向细化的问题,在心里对重要的细节有认知,有答案,也是我认为做“架构”的同学所必须要明白的事情。

同理,
工具层面,规范层面,工程流程,性能,单元测试,前端安全等等,期望尽可能深的参与到具体的实践和落地上去。(包括代码的具体实现...)
tool1 tool2vueimg2img3

做架构不是只有idea,然后全部推动别人去做,更重要的是自己需要深度的参与,才能保持清醒的认知。

这是我个人的认知,不一定对,当然

  • “在保持广度的情况下还要保持一定的深度”

也会对于个人的时间精力有一定的挑战。

反过来说,如果“架构”已经大到需要5个人以上的团队才能支撑,那时再做合理的分工也不迟。

我理解的架构:是海纳百川,是透明开放的

在之前的表述中,提到“架构”至少是需要对团队透明的,来源于团队,尊重团队,也服务于团队。而这里说的海纳百川,开放透明更是侧指我们以公司单位,那么理应在公司内也是透明和开放的。

  • 对外不用多说,公司自有公司的壁垒,但至少对内,我们应该共享一片蓝天。

shot_1296383136
当你不关注,不闻不问的时候,或许还不觉得,但是当有心想去了解一些事情的时候,却发现似乎并没有想象中那么透明。

我在 上周的周报:不聊技术,聊感受 中其实提到了一些关于“技术栈”和“技术栈”之前的壁垒问题,也包含“前端”本身团队壁垒的问题。

我的观点是:

  • 团队技术壁垒不是问题,毕竟每个团队的业务形态,抓的方向并不一致。但是不透明是问题,想发掘其他团队的好东西却要费点功夫。

其实回过头来想想,集团内其实有不少的方式似乎想解决这个问题,比如淘宝的“懒懒”,支付宝的“芝士会” 等等,从定期主题分享的方式尝试抹平BU间不透明的问题。也有属于集团层面的技术博 ATA, 包括前端也有自己的 委员会,本质上也是希望打通BU间的信息。

我们看起来有这些途径,理应可以解决不少壁垒不透明的问题才对,可是到我真实的感受却是还有好多有价值的信息,方案,项目等,我从上面的渠道获取不到的。

可能是“粒度”的问题,可能是“传达”的问题。咋们暂时先不去细究。说实话,我个人觉得比较直接打破我觉得有壁垒的苦恼的事情是 @拔赤 公开的周报。

我近期了解到很多航旅有价值的信息,他们近期着重发力的方向,不可置否的说,基本都是从 @拔赤 每周的周报中觅得的。当然,这和他向来高质量的周报内容有直接关系。

所以,我做的第一件事也是把无线前端从今年上半年开始的每周基础建设,架构的方向和进展以周报的形式公开来。一方面从我们自己开始做到“透明化”,同时也愿意以谦卑的心态和大家进行讨论和交流。

阿里内外的周报系统我觉得是个好的开始。既然有选择“公开”的选项,我觉得也应该加上“周报关注”的功能,只要我关注的人某一周的周报内容是“公开”的,不管他的周报有没有直接抄送我,我都可以收到。

话题有点扯远了,我要表达的意思是,我期望寻得一种途径,可以让我短平快,高效的知道优秀的大家们都在做什么事情。

最近在团队内开始推动一个叫做 “取经之路” 的计划,其实也就是希望团队的同学都能保持有心思去发掘其他团队的优秀的东西,以取经的形式主动去了解,再带回来传道授业解惑。
希望团队本身能从中开拓视野和思路,同时对于做“唐僧”的同学来说,本身也是一种成长。

我理解的架构:关键词不是“高精尖”,而是“合适”

最近越发的觉得“合适”这个词的精妙与深意。站在外人的角度,去评判一件事情的好坏,一个技术方案的优劣,不应该从你的角度去看,连行业的普适标准甚至都不一定受用。因为可能在你看来有失偏颇的方案在他的团队的当下就是“合适”的。

换句话说:

  • 在我看来,技术方案优和劣或许没有绝对之分,只是因为团队的历史原因,团队现状,发展出了不同的样子。只要它对于当前的团队是合适的,我就认为它是好的。

说到这里,我不免又想到了“恋爱”这件事。如果这么说来的话,不觉得和“恋爱”的情况略像么。通俗点说:

  • 爱美之心,人皆有之;漂亮的女孩子,谁都喜欢,你费劲心思去追一个大家公认的女神,这件事情能不能成,最终是变成“金童玉女”的千古流传段子还是变成“癞蛤蟆想吃天鹅肉”的恶俗剧情,前提是要认清自己。当前的自己如果如果就是配不上女神,那何必自讨苦吃,还不如努力锤炼自己,到有一天走上人生巅峰再去赢取白富美也不迟不是么 ;)

比方不一定恰当,但是道理是通的。我想说的是,技术的方案和设计是不是好的,对的,不是看你用的技术,选的方案是不是够高精尖,够前沿。而是看TA是不是适合你当前的团队现状。

举个例子:

  • ES6 当下被好多团队在实践,吵得火热。可以理解为ES6的产品化,包括周边polyfill的完善,以及一整套方案的打通,在当下看起来是靠前沿的,面向未来的,高精尖的。 如果我们的团队就那么几个人,如果团队负责的业务就那么两三个,形态也相对单一,那么我觉得快速的拥抱ES6,尝鲜,玩新技术没有任何问题。而反过来,如果当前团队的体量,现状,团队组成不允许一个步子迈这么大,那么这件事如果硬按“拔苗助长”的方式推进,有可能会产生很大的副作用,开发效率,质量保障可能都会收到影响。

所以,架构和方向不应该朝着“高精尖”的方向走,那不应该是目标,“合适”的,才是最好的。

在适当的时候,用适当的方案去做对应适当的事情,
就好比,
在适当的时候,遇上对的人。

原文发布时间为:2018年6月12日

原文作者:github.com

本文来源:掘金如需转载请联系原作者

相关文章
|
2月前
|
前端开发 JavaScript
探索现代Web应用的微前端架构
【10月更文挑战第40天】在数字时代的浪潮中,Web应用的发展日益复杂多变。微前端架构作为一种新兴的设计理念,正逐步改变着传统的单一前端开发模式。本文将深入探讨微前端的核心概念、实现原理及其在实际项目中的应用,同时通过一个简单的代码示例,揭示如何将一个庞大的前端工程拆分成小而美的模块,进而提升项目的可维护性、可扩展性和开发效率。
|
3月前
|
人工智能 前端开发 JavaScript
前端架构思考 :专注于多框架的并存可能并不是唯一的方向 — 探讨大模型时代前端的分层式微前端架构
随着前端技术的发展,微前端架构成为应对复杂大型应用的流行方案,允许多个团队使用不同技术栈并将其模块化集成。然而,这种设计在高交互性需求的应用中存在局限,如音视频处理、AI集成等。本文探讨了传统微前端架构的不足,并提出了一种新的分层式微前端架构,通过展示层与业务层的分离及基于功能的横向拆分,以更好地适应现代前端需求。
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
247 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
1月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
129 3
|
1月前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
72 0
|
2月前
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
2月前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
2月前
|
前端开发 API UED
深入理解微前端架构:构建灵活、高效的前端应用
【10月更文挑战第23天】微前端架构是一种将前端应用分解为多个小型、独立、可复用的服务的方法。每个服务独立开发和部署,但共同提供一致的用户体验。本文探讨了微前端架构的核心概念、优势及实施方法,包括定义服务边界、建立通信机制、共享UI组件库和版本控制等。通过实际案例和职业心得,帮助读者更好地理解和应用微前端架构。
|
3月前
|
缓存 前端开发 JavaScript
前端的全栈之路Meteor篇(二):容器化开发环境下的meteor工程架构解析
本文详细介绍了使用Docker创建Meteor项目的准备工作与步骤,解析了容器化Meteor项目的目录结构,包括工程准备、环境配置、容器启动及项目架构分析。提供了最佳实践建议,适合初学者参考学习。项目代码已托管至GitCode,方便读者实践与交流。
|
3月前
|
前端开发 API UED
拥抱微前端架构:构建灵活、高效的前端应用
【10月更文挑战第17天】微前端架构是一种将前端应用拆分为多个小型、独立、可复用的服务的方法,每个服务可以独立开发、部署和维护。本文介绍了微前端架构的核心概念、优势及实施步骤,并分享了业界应用案例和职业心得,帮助读者理解和应用这一新兴架构模式。

热门文章

最新文章