阿里P7架构师:通往架构师路上的经验总结

困扰架构师日常问题

架构师应不应该写代码
为什么别人的系统总是那么烂
成为架构师最困难的门槛是什么?
如何更高效的学习?
面对目前流行的技术不知如何下手?
一家公司待久了,过得很安逸,但跳槽时面试碰壁?
觉得现在的技术基础感觉到很扎实,但就是自己的技术提升不上?
觉得自己很牛B,一般需求都能搞定,但是所学的知识点没有系统化,很难在技术领域继续突破?
现在觉得自己技术还可以,但就是薪资涨不上去?

以上这几点,做为开发人员的你们,有遇到过么?有为自己想过么?有细心仔细的去解决过这些问题么?有深刻的想过么?虽然这几个问题很简单,但对于我们在开发路上,是有非常重要的帮助的。

1:架构师应不应该写代码

合格的程序员对于明确分配的任务会完成的很好,但是大部分情况下“架构”这个词意味着架构师并不会涉及太多细节,架构图和代码实现之间总还是有些距离,你无法保证所有人都会正确的理解你的设计,或者是程序员写代码时遇到障碍时会立刻想出足够优雅的解决方案。

在我看来,写代码的架构师更像是在做后勤保障的工作:在代码中第一时间发现可能存在的问题,向其他人提出警告,或是给予其他人改进的意见,必要的时候或是给其他人演示一下正确的姿势。

大部分情况下我作为架构师并不需要揽下“核心模块”开发这种工作,毕竟我能调配的时间太零散了,效率难以保证,很多人在专注的情况下比我做的好很多,我只需要保持大局观需要适度参与就可以了。

总的来说,架构师和程序员在某些方面上有点像产品经理和用户的关系,大部分程序员并不会主动告诉你他们想要什么、哪里需要优化,甚至自己也不知道这些。想要做出好的产品,捷径之一就是跟用户做同样的事情。

2:为什么别人的系统总是那么烂

很多程序员解决问题的能力很强,说要解决一个什么问题,下午就能写出几百行代码把功能实现了。但是做出来的东西有种少考虑了什么东西的感觉。大部分程序都能实现功能,但是如果把“时间”这个也作为一个考虑的维度的话,就会意识到一个合格的项目需要考虑更多的东西:更通用的使用方式、易于理解的文档、简单而易于扩展的设计,等等。

很多公司应该都会有一些遗留系统,它们庞大、笨重、难用、几乎无法维护,所有人都在抱怨这些系统,并且每天都在想方设法换掉那些遗留系统。但是一段时间过去之后,又会发现身边的新人又开始吐槽当时替代遗留系统的那个系统了。

3:成为架构师最困难的门槛是什么?

很多人自称架构师的人跟你讲一个架构时简直滔滔不绝,各种技术名词像是说相声一样从他嘴里说出来,三句话不离高并发大数据,但是稍微追问一下,就会发现很多基本概念的缺失,例如自称精通高并发的人说不清楚他所谓的高并发系统的瓶颈在哪里,自称精通架构设计的人说不明白他的系统怎么保证高可用,自称超大数据量的系统实际上只有不到100万条数据,等等。

架构师虽然听起来很高大上,但本质上仍然是工程师,不是科学家,也不是忽悠人的江湖骗子。学习再多,也需要实践落地。设计架构方案更多的是在做一些抽象和权衡:把复杂的需求抽象成简单的模型,从功能、性能、可用性、研发成本等等方面规划如何构建一个系统,这些内容需要更多的实践练习。

4:如何更高效的学习?

大多数人每天能留给自己学习的时间有限,这个阶段如何提升学习效率就成了要解决的重点。

说说自己提升学习效率的心得,其实非常简单:体系化的学习。

在重复了几次痛苦的学习-梳理过程后,再去看一些独立的文章或者资料往往会事半功倍,因为能在体系内找到相对应的知识,甚至有时候一本书里一页只需要看一句话,点破那层窗户纸,就可以掌握新的知识。

跟很多人一样,刚毕业时我觉得作为程序员,只要努力,加上少许天赋便可以获得一些成绩。

工作一段时间后,对自己和其他人的认识也越来越清晰,逐渐的发现程序员之间的差距或许比人和猴子之间的差距还大,接受这个事实这让我郁闷了很久。

再过一段时间,发现自己已经能够客观的评价自己的能力,也意识到了距离并不是那么重要,只要想办法跑的更快,就足够了。

5:面对目前流行的技术不知如何下手?

第一,根据自己目前工作中所用到的技术,有目的性的学习;

第二,可以根据各大互联网公司的招聘要求,有选择性地进行规划学习;

第三,可以参照文章尾部Java架构师所具备知识点,上面有从源码到分布式到微服务到并发等,是十多年的一群有经验的老师整理出来的。

6:一家公司待久了,过得很安逸,但跳槽时面试碰壁?

很多程序员有这样的情况,因为一直处于自己的舒适区,每天写的是自己熟悉的业务代码,更多的做的是crud的工作,技术上没有挑战性,觉得生活也还可以。但是一旦跳出这个舒适区,就会很难适应,不知所措,因为外面新的技术太多,自己完全跟不上技术的步伐,这时候需要梳理一下自己目前所欠缺的点,有针对性地进行提高。

7:觉得现在的技术基础感觉到很扎实,但就是自己的技术提升不上?

这种技术扎实更多的是基础,比如javase,javaee等,并不能适应一线互联网公司的技术体系,比如分布式,微服务这块。技术提升不上是因为自己没有接触过相关的项目,以前那种基础知识网上还一大篇,但是越往上走资料越少,好的资料就越少,而且越往上如果没有引路人更加举步维艰。

8:觉得自己很牛B,一般需求都能搞定,但是所学的知识点没有系统化,很难在技术领域继续突破?

这里的一般需求,更多的应该是在单机环境之下的crud操作,项目没有太多难度,顶多是业务上的分析复杂一些,技术用到了一些主流的技术,比如dubbo,也仅仅停留在api的使用层面,不了解其原理,而且与dubbo相关的其他技术分支并没有很好的拓展,所以感觉很难突破。

9:现在觉得自己技术还可以,但就是薪资涨不上去?

需要弄清楚薪资由什么决定,是由你的价值决定,而你的价值取决于你的技术能力,如果你的技术能力一直停留在crud的层面,肯定会上不去,你需要做的是突破技术瓶颈。(我相信这一点,是大多数开发人员会首先考虑到的问题)。

经过以上的几个问题的总结,你们有一点点理解了么?有什么感触没?没有?那么你们继续往下看。

程序员应有的几个阶段

第一阶段----三年
我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如何在线上运行等等,积累了一定的开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段。

第二阶段----五年
五年又是区分程序员的第二个门槛。有些人在三年里,除了完成工作,在空余时间基本不会研究别的东西,这些人永远就是个Coder,年纪大一些势必被更年轻的人给顶替;有些人在三年里,除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写一些博客、在Github上分享技术,这些人在五年后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物。

第三阶段----十年
十年又是另一个门槛了,转行或是继续做一名程序员就在这个节点上。如果在前几年就抱定不转行的思路并且为之努力的话,那么在十年的这个节点上,有些人必然成长为一名对行业有着深入认识、对技术有着深入认识、能从零开始对一个产品进行分析的程序员,这样的人在公司基本担任的都是CTO、技术专家、首席架构师等最关键的职位,这对于自己绝对是一件荣耀的事,当然老板在经济上也绝不会亏待你。

我认为,随着你工作年限的增长、对生活对生命认识的深入,应当不断思考三个问题:

我到底适不适合当一名程序员?
我到底应不应该一辈子以程序员为职业?
我对编程到底持有的是一种什么样的态度,是够用就好呢还是不断研究?
最终,明确自己的职业规划,对自己的规划负责并为之努力。

架构师所具备的知识点

一:常见模式与工具

学习Java技术体系,设计模式,流行的框架与组件是必不可少的:
常见的设计模式,编码必备
Spring5,做应用必不可少的最新框架
MyBatis,玩数据库必不可少的组件

二:工程化与工具

工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的:
Maven,项目管理
Jenkins,持续集成
Sonar,代码质量管理
Git,版本管理

在此我向大家推荐一个架构学习交流qun。交流学习qun号:+q q-q u n:948 368 769 qun内已经有小伙伴将知识体系整理好(源码,笔记,PPT,学习视频)。里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

三:分布式架构

高并发,高可用,海量数据,没有分布式的架构知识肯定是玩不转的:
分布式架构原理
分布式架构策略
分布式中间件
分布式架构实战

四:微服务架构

业务越来越复杂,服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪些呢?
微服务框架
Spring Cloud
Docker与虚拟化
微服务架构

在此我向大家推荐一个架构学习交流qun。交流学习qun号:+q q-q u n:948 368 769 qun内已经有小伙伴将知识体系整理好(源码,笔记,PPT,学习视频)。里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

五:性能优化

任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题,Java技术体系,需要了解:
性能指标体系
JVM调优
Web调优
DB调优

在此我向大家推荐一个架构学习交流qun。交流学习qun号:+q q-q u n:948 368 769 qun内已经有小伙伴将知识体系整理好(源码,笔记,PPT,学习视频)。里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

六:底层知识

从架构设计,到应用层调优,再深入了解底层原理,扎实的Java基本功才能让自己变为扫地神僧:
内存模型
并发模式
线程模

原文地址:https://blog.51cto.com/14138491/2359855

时间: 2024-11-08 14:20:12

阿里P7架构师:通往架构师路上的经验总结的相关文章

7年iOS开发,自述通往架构师的修炼之路【精华篇】

前言: 本篇文章仅供大家参考学习以及在成为架构师的道路上应该掌握的知识点和经验.相信你在看完这篇文章后,你有一个明确的目标以及一个通往架构师路上正确的方向. 导读: 1.架构师应不应该写代码 2.为什么别人的系统总是那么烂 3.成为架构师最困难的门槛是什么? 4.如何更高效的学习? 5.面对目前流行的技术不知如何下手? 6.一家公司待久了,过得很安逸,但跳槽时面试碰壁? 7.觉得现在的技术基础感觉到很扎实,但就是自己的技术提升不上? 8.觉得自己很牛B,一般需求都能搞定,但是所学的知识点没有系统

.NET 高级架构师0003 架构师之路(2)---架构师的职责

2 架构师的职责 近来看到CSDN上有个CTO俱乐部,里面聊得是不亦乐乎.我怀着无比崇敬的态度,拜读了一下牛人们的发言.里面有个哥们发起一个话题:"CTO, 你多久没有写程序了?".有人回答:"不写代码的CTO,属于......这公司问题大了!".看到这里,我就赶紧撤了,怕忍不住反驳几句,反而遭到牛人们的群殴.试想,一个上点规模的IT公司,还得靠CTO来写程序的话,那是不是才叫问题大了呢.当然,我没有做过CTO,所以我有我的不同看法,而且还愿意表达出来,无知者无畏.

系统架构师-基础到企业应用架构-企业应用架构

一.上篇回顾 我们先来回顾下上篇讲解的内容,我们前面的几节分别讲述了,业务逻辑层.数据访问层.服务层.表现层,我们了解了这些分层的职责和分层之间的大概的关联 关系,本篇可能主要是简单的介绍下企业应用的几类模式,结合这几个分层直接的交互来完成系统功能的构建.我们还是先对我们学习的四个分层的职责和功能做个大 概的回顾,我们先来看看下图来回顾下我们讲述的内容. 我想通过上图,大家能回忆起我们讲述的相关内容,然后整理好自己的思路,我们本文将会针对这几个分层进行相应的模式的讲解,并且会结合实例来说明企业应

软件架构设计学习总结(22):软件架构——分层架构、事件驱动架构、微内核架构、微服务架构、基于空间的架构

分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知.比如MVC. 分层架构的一个特性就是 关注分离(separation of concerns) .在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护. 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数

分布式架构之--逻辑架构与物理架构

原文:http://blog.csdn.net/dinglang_2009/article/details/38636151?utm_source=tuicool 在现实开发过程和工作中,我们经常听到“架构设计”和“架构师”这样的名词,它并不神秘,但是却很少有人对“架构”有全面的了解和认识,更谈不上掌握了.事实上,也只有极少数人能成为或者被冠以“架构师”这样的title.为此,笔者总结了实践中对架构的一些理解,希望能够补充很多人对此认识上的不足,纠正一些误解. 架构的分类 对于“架构”来讲,理论

逻辑架构和物理架构

在实际开发工作中,我们经常听到“架构设计”和“架构师”这样的名词,它并不新鲜和神秘,但是却很少有人对“架构”有全面的了解和认识,更谈不上掌握了.事实上,也只有极少数人能成为或者被冠以“架构师”这样的title.为此,笔者总结了实践中对架构的一些理解,希望能够补充很多人对此认识上的不足,纠正一些误解. 架构的分类 对于“架构”来讲,理论上划分了5种架构视图,分别是:逻辑架构.开发架构.运行架构.物理架构.数据架构.根据名字,大家都可能大概能猜到其侧重点和含义. 这里先用通俗的文字简单介绍下,便于大

亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构第二版视频教程

14套java精品高级架构课,缓存架构,深入Jvm虚拟机,全文检索Elasticsearch,Dubbo分布式Restful 服务,并发原理编程,SpringBoot,SpringCloud,RocketMQ中间件,Mysql分布式集群,服务架构,运 维架构视频教程 14套精品课程介绍: 1.14套精 品是最新整理的课程,都是当下最火的技术,最火的课程,也是全网课程的精品: 2.14套资 源包含:全套完整高清视频.完整源码.配套文档: 3.知识也 是需要投资的,有投入才会有产出(保证投入产出比是

架构设计-谈谈架构

1.什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解.   此君说的架构和彼君理解的架构未必是一回事. 我们主要针对互联网服server系统(类似网站)来定义架构:架构是系统的骨架,支撑和链接各个部分,包括组件.连接件.约束规范,以及指导这些内容设计与演化的原理. 组件:类似应用服务,独立模块.数据库.nginx等等.     连接件:分布式调用.进程间调用.调用使用http协议还是tcp协议.组件之间的交互关系.     约束规范:    定规则做限制:例

DDD CQRS架构和传统架构的优缺点比较

明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概念.我个人也写了一个ENode框架,专门用来实现这个架构.CQRS架构本身的思想其实非常简单,就是读写分离.是一个很好理解的思想.就像我们用MySQL数据库的主备,数据写到主,然后查询从备来查,主备数据的同步由MySQL数据库自己负责,这是一种数据库层面的读写分离.关于CQRS架构的介绍其实已经非常