1、技术实力:每个好架构师都是NB的程序员

总结:游泳教练,必定游泳水平好,因为这些都是实践性很强的工作。书上学来终觉浅,绝知此事要躬行。

这一点毋庸置疑,如果不是写过N年代码的优秀程序员,一定不是好的架构师。“架构师”这是一个听上去比较虚的职位,它的主要价值在于“落地”的过程中,而不是“指点江山”。eBay的架构师总结架构师在项目中的职责:

1)、解决解决方案:产品团队要做一个产品,架构师要帮助团队把技术可行性,技术方案权衡取舍一一剖析清楚;

2)、架构设计和技术实现步骤:技术方案权衡取舍出来了,架构师要设计整体的技术实现步骤,这个过程一定是和团队其他成员一起完成的,常见的实践是,1到2个核心成员出一个初稿,然后大家讨论完善;

3)、编写核心模块:技术实现步骤出来了,架构师要和开发团队一起,进行编码,可能架构师不一定细究到任何细节,常见的实践是,系统最困难最核心最关键的部分往往由架构师亲自操刀;

4)、部署上线和完善流程:系统初版实现了,架构师要和开发团队、测试团队、运维团队一起,完成各类测试,协助解决最困难的bug,和团队一同完成线上部署、并一同排除上线初期系统的故障;

在项目的过程中,架构师至少一半以上的时间是和开发团队一起进行的,好的架构师不能将实施细节抛之脑后,更直白一些,他要通过撰写代码的方式来指导团队其他成员理解和实现架构中的细节。

反面的例子是,项目失败后,架构师反馈“团队的技术能力不够”,团队反馈“这是一个一行代码也不会写的大忽悠”。

2、业务理解和抽象能力:驾驭概念的技能是最高潜力

总结:抽象能力是善于把实物概念化并归类。

业务理解:

架构师需要理解业务,并转换为可被研发理解的实现方案,因此业务理解能力是架构师的必备技能。

通常来说一个资深的业务架构师,对业务有足够的敏感度和深入的认知和积累,能够清楚地知道自己的设计能给公司带来多大的业务影响,应该能大概预判业务未来的发展趋势,以便在系统的可扩展性上留好一定的空间,所以也会很自然的出现有些业务架构师做着做着就干脆转为PD类型的角色。

抽象能力:

是通过对业务的理解转换为系统实现的模型,这显然也是重要的能力,抽象很多时候也承担了分解清楚多个团队的职责,分工清晰化。

“逻辑思维,抽象思维”比“编码的时间”对架构师而言更为重要,如果你不能让某个非IT人员明白某个概念在说什么,这个架构师注定也是失败的

逻辑思维不用展开多说,程序员的代码都是逻辑,如果XXX就YYY,如果AAA就BBB,缺乏良好的逻辑思维能力基本不可能成为好的架构师,甚至好的程序员。

抽象思维又分两点,一个是将实在的事物概念化,一个是将模糊的感觉数量化。一个苹果,抽象为质量、大小、颜色、形状、味道等,这是概念化,是架构师的必备思维。至于质量、大小、颜色、形状、味道如何转变成数字来描述,这也是架构师必备的思维。

比如面对一个大型的B2C网站,能够迅速抽象为采购->运营->前台搜索->下单->履单这几大块,对系统分而治之,庖丁解牛,早已目无全牛。

有了上述两点,架构师能将一个“虚”的架构概念描述清楚。

3、设计能力:前瞻性的设计眼光,站在技术的山顶向前眺望

1、掌握最新技术:

​ 铁打的程序员,流水的技术。程序员的开发生涯可能长达几十年,但一门技术的平均寿命却不长。因此作为程序员们的技术领袖,架构师必须有 很好的技术前瞻性,要先于
大家了解到最新的技术。

2、分析整合能力

​ 架构是过程,并非结果: 架构是架构师洞察内在结构、原则、规律与逻辑的过程,架构师要做到清晰理解系统,以及简洁描述,这是分析整合的能力。

​ 一个架构师必须具备极强的分析能力,要做到根据产品宗旨和目标,分析清楚产品定位以及产品业务,再整合利用现有的技术领域,找出最佳方案,实现产品概念。

3、前瞻性地设计

​ 架构师与技术高手的区别在于,架构师不仅局限于如何调用、如何并发等架构细节(技术高手对这些也非常熟练),还跳出三界,考虑未来问题和潜在风险的应对之道。

​ 一名合格的架构师设计出来的架构是要有前瞻性的,要为了将来的组织能力更上一个台阶而设计, 满足当下需求并能够适当扩展,是遵循架构设计的系统实现要关注的事情,系统是多样的,架构不是,系统是演化出来,架构不是。

​ 要培养自己的技术前瞻性,首要是学好英语(不多届时了,希望未来最先进的技术都首先从国内诞生),看懂外文技术文章,能与业界专家沟通交流,学习别人的实践方案。

​ 反面的例子是,成天将技术前言的名词挂在嘴边,大谈“云计算,SaaS”这些东西,天天吹水,而落不了地(有可能他自己也搞不清概念如何落地)。

​ 技术前瞻性还体现在对新技术的选型上,哪些东西适合自己团队,哪些不适合。学习成本、维护成本、硬件成本、潜在风险等等都是架构师需要考 虑的。

​ 架构师在自己所处的领域肯定了解颇深,未来本领域技术该如何发展,应该有自己的理解。也会对未来技术的发展有所期盼,有自己的见解。当然这属于比较发散的想法,个人有个人的目标。

4、技术深度:透过问题看本质,解决问题和绕开问题

总结:透过问题看本质则是由虚到实,往深层次地挖掘

看到问题的本质,是架构师必须具备的素质。

1、举例:

例子1:菜鸟程序员的如此写php:

echo $_GET[‘username’];

大部分人知道这个出现安全隐患。一般人使用htmlspecialchars解决问题就可以了。但问题的本质是什么?可以从更深的层次去理解:

比如echo是如何执行的?在什么时候执行的?哪些字符可能导致安全问题?htmlspecialchars为什么能解决这个问题?它真的解决这个问题了么?

那么他将会一点一点的进步,逐渐成为一个合格的程序员。

再比如看到一段java代码,知道它在JVM如何执行;一个跨网络调用,知道数据是如何通过各种介质到达目标(操作系统内核/网卡端口/电磁介质等)。透过问题看本质使架构师能够敏锐地发现底层之真实,系统性端到端地思考问题,识别木桶的短板并解决之。

2、什么是本质?

将世界万物理解为原子,将整个互联网理解成0和1,这倒的确是非常本质了,不过并不能解答任何问题。从问题看本质,实质上是一个从表层逐步深入的过程。在架构师面对一个用户需求时,这个“用户需求”是非常表层的——比如说,一个自动远程备份数据库的功能。而架构师的主要工作,就是把这样的“业务需求”翻译成“技术需求”。这个过程一方面需要通过抽象思维将用户需求提炼为启动、读取、存储、中断处理等模块,而另一方面则需要看到更深层次的网络、操作系统、硬件等方面,以及其可靠性、稳定性、适用性、安全性等问题。

在《技术的本质》这本书中,著名的经济学家布莱恩阐明了技术的本质及其进化机制,其主要表达了以下三个核心观点:

1.几乎所有技术都来自于此前已经存在的技术,就好比C、Java语言就是调动了多个功能最终实现一个功能。

2.技术都是由技术形成的,这句话可能有点难以理解。举例来说,火车的发明其实包含了多种技术,比如蒸汽技术,但蒸汽技术又可以被分解为燃料技术、动力技术等等。

3.技术和生物一样都会进化,但是生物的进化多来自变异,而技术的进化则来自不同技术组合所发生的变化。

布兰恩强调,技术并不会凭空发生。关于计算机技术,无论从前端还是后端,无论是过时还是被炒得很热,无论是云计算还是SAAS等,其本质技术都来自于此前已经存在的技术,都要求具备良好的算法和数据结构,在此基础上不断衍生出许多新技术。

3、挖掘本质

架构师要有将“业务需求”转化为“技术需求”的能力,这是一个本质的挖掘。例如,业务层面看到的是一个“电子商务网站系统”,架构师看到的是一个多人在线,并发交易,需要保证数据一致性的站点、服务、数据系统,功能、性能、扩展性、维护性、安全性、可用性这些字眼会惯性的蹦到架构师的脑子里。

架构师之所以是架构师,他在庞大系统的面前,仍然能够敏锐发现其底层之真实,这就需要,他有多年多领域知识和经验的沉淀。

5、技术广度:要成为百科全书式的智者

总结:1、全面了解各个层面的知识。2、了解主流公司的系统设计,碰到实际问题,很快有多种方案可供评估。

1、全面了解各个层面的知识

首先,作为一名卓越的程序员,架构师肯定不欠缺开发方面的知识。从架构到方法论,从数据处理到安全监控。可以说IT开发层面上,架构师可以做到炉火纯青的地步。但是这仅仅是一名卓越程序员的能力级别,离架构师那还有很大的一段距离。

架构师作为一名技术领袖,需要通过散发知识的光芒来温暖开发团队,如果只一个领域内的知识烂熟于胸,那也仅仅是一名技术高手。要想更进一步,需要对APP层面、服务层面、数据层面均要了解(系统分层),要对研发、测试、运维、安全也要有所了解(职能),上要对接口,下要对原理(接口与实现)都有所了解,甚至,要在多个业务领域都有所涉猎。

有的程序员也会说,如果多学习跨领域、跨学科的东西,会不会成为什么都懂,但什么都不精的人?其实在这里的跨领域,并不是要求大家都成为每个领域的专家。最重要的是有一门敲门砖,学习的引子。如果开发一套金融系统,对于财务结算以及处理方法都不了解,那别说是胜任架构师的任务,连普通程序员的工作也不可能做好。假设大家工作一段时间后,对某领域很了解,但由于工作变动的缘故,到其他公司后,开发的领域完全不会。这里就要用到跨领域知识学习的能力了,需要大家样样都要知晓。

谈到跨领域学习,知识面广似乎是最好实现的目标,只要博览群书,加上高中之前各学科扎实的基础,相信大多数程序员本身就具备一定的跨领域学习的能力。但想成为真正的百科全书式的智者,恐怕不光是简单觉得眼熟就行。在条件允许的情况下,程序员其实可以去参加一些其他领域的专业考试。比如参加会计资格证的考试,抑或其他专业中较初级的考试。这样的经历,主要还是在于“以学促考”,通过一定的压力让自己能钻进去学习。

2、了解主流公司的系统设计

碰到实际问题,很快有多种方案可供评估。

初级架构师所害怕的,是跳出自己的“独门绝技”,在一定程度上说,在一定深度之内成为一个“杂家”也没什么不好。

6、沟通能力:善于沟通的技术领袖

总结:沟通能力确保各方对架构达成共识,愿意采取行动

1、开发过程沟通

架构师必须参与项目开发全过程,包括确认需求、系统分解、架构设计、技术选型、制定技术规格说明、系统实现、集成测试和部署各阶段,在这一系列过程中,架构师会与各部门沟通交流。

一个产品会有多部门合作,架构师在其中的沟通极为重要,直接影响产品进度与质量。架构师不仅要与开发人员沟通,也要和项目经理、分析人员甚至用户沟通,来实现产品的各种可能性。

架构师和项目经理,对沟通能力的要求都很高,很多互联网公司甚至直接由架构师担任项目经理的角色。这两个角色其实还是有所偏重的,项目经理更倾向于与客户的交流,跨团队的协作与交流,架构师主要偏向技术团队内部的沟通与交流,纯技术上的沟通。

2、如何善于沟通:

如何成为一名“善于沟通”的架构师呢?在目标清晰的前提下:

1、首先做到平和:

交流。

一个产品会有多部门合作,架构师在其中的沟通极为重要,直接影响产品进度与质量。架构师不仅要与开发人员沟通,也要和项目经理、分析人员甚至用户沟通,来实现产品的各种可能性。

架构师和项目经理,对沟通能力的要求都很高,很多互联网公司甚至直接由架构师担任项目经理的角色。这两个角色其实还是有所偏重的,项目经理更倾向于与客户的交流,跨团队的协作与交流,架构师主要偏向技术团队内部的沟通与交流,纯技术上的沟通。

2、如何善于沟通:

如何成为一名“善于沟通”的架构师呢?在目标清晰的前提下:

1、首先做到平和:

一线互联网互联网架构师自述:GitHub标星10w+,ffmpeg音视频开发实战6陈超相关推荐

  1. Android 组件化架构概要,ffmpeg音视频开发实战陈超

    ChatModule ContactModule FindModule MeModule BaseModule 分别对应的是微信,联系人,发现,我和基类. 3.自定义Gradle 我们在Project ...

  2. 安卓开发指南!Github标星25K+超火的Android实战项目,成功定级腾讯T3-2

    开头 1.一定要把基本的数据结构,经典的算法,Unix编程,程序编译链接及计算机原理等基础知识扎牢,这些会长远影响你的职业发展. 2. 推荐从C语言入门,不单是因为很多操作系统.网络协议栈开源代码由C ...

  3. Github标星25K+超火的Android实战项目,2022BTAJ面试真题详解

    前言 经常会有人问:"现在学习Android开发还有前景?"我的看法是现在只是市场趋于平稳了,对开发人员的要求越来越好了,这并不代表没有前景了. 移动开发不等于App开发,所有新的 ...

  4. Github标星25K+超火的Java实战项目

    前言 字节跳动面试算法那是行业出了名的厉害.人狠话不多,上来就是一套算法"组合拳",如果你不"抗揍"的话,连面试的机会都没有了. 面试字节跳动,拼多多这种大厂肯 ...

  5. 阿里巴巴P8架构师传授的这份在GitHub标星75K的微服务笔记为何有如此大的魅力?

    今年的疫情让各位码友们的处境都十分困难,但是我相信大家都能迅速调整好心态,在空闲之余抽出一点点时间用来学习,学到就是赚到,坚持学习技术知识也是对自己百益而无一害."金九银十"也在一 ...

  6. 1000+道 互联网Java架构师面试题

    1000+道 互联网Java架构师面试题 这套 1000+ 道的 Java 面试手册我整理了足足 1 个月,上传到 GitHub 上目前 star 数达到了 30K+ .2022 年的互联网行业竞争越 ...

  7. GitHub标星90K,这份持续霸榜的Leetcode刷题手册到底有多强?

    写在前面 最近一个读者和我反馈,他坚持刷题2个月,终于去了他梦寐以求的大厂,薪资涨幅非常可观,期间面字节跳动还遇到了原题...并表示目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过面试给 ...

  8. 【干货】Github标星1.2K,Visual Transformer 最全最新资源,包含期刊、顶会论文

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨梁定康 编辑丨极市平台 导读 给大家分享一个超全面的visua ...

  9. 手机上的机器学习资源!Github标星过万的吴恩达机器学习、深度学习课程笔记,《统计学习方法》代码实现!...

    吴恩达机器学习.深度学习,李航老师<统计学习方法>.CS229数学基础等,可以说是机器学习入门的宝典.本文推荐一个网站"机器学习初学者",把以上资源的笔记.代码实现做成 ...

最新文章

  1. 找不到具有指定ID的对话框类解决方法
  2. JavaWeb--数据库添加
  3. 初等代数(1):数的分类、基本运算规律、乘法及其因式分解公式、公式、比例、根式
  4. async function_Electron IPC 通信如何使用 async/await 调用?
  5. [COCI] Zamjena
  6. 大数据之SparkSQL简介及DataFrame的使用
  7. TypeError: cannot unpack non-iterable NoneType object
  8. 单条MySQL最长_MySQL 单条记录长度最大65535
  9. win11怎样在多屏中设置主显示器 Windows11主显示器的设置方法
  10. [自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件”...
  11. opencv配置VS2019环境
  12. 简述台式计算机的组装流程,台式机怎么组装 台式机组装步骤详细介绍【图文】...
  13. android6刷机教程,安卓手机刷机步骤
  14. Go语言黑帽子学习1
  15. python selenium+Firefox 模拟浏览器操作
  16. PPT中正文和标题字体的选择技巧
  17. 三、数据需求与数据库设计
  18. Convex Optimization 凸优化学习 第三章 凸函数(一)
  19. 【Python】Python 仿真OFDM发射机、信道和接收机-实现多种调制方式
  20. HTML5中polygon坐标,SVG Polygon(多边形)

热门文章

  1. 洛谷 P2670扫雷游戏 题解
  2. Android kotlin (美团app左右滑动菜单栏)用RecyclerView(androidx+BRVAH3.0.6)实现ViewPager(androidx+左右滑动)菜单栏功能
  3. GBPC5010-ASEMI焊机专用桥GBPC5010
  4. zynq70z35-一步一步实现pl的udp上传(1)
  5. R语言可视化作图笔记(5.1)交互式图形
  6. 3 2计算机专业学校有哪些,3十2学校有哪些好专业可以选择
  7. qt中简单七巧板拼图的实现
  8. 【python+情人节】玩个俄罗斯方块都是爱你的形状——一、思路分析
  9. lua+nginx用户鉴权脚本--get方法
  10. 外链专员常用建设网站外链的方法