查看原文
其他

我的梦想是十年内成为架构师,该怎么办?

码农翻身刘欣 码农翻身 2021-04-27

这是来自我的星球“码农翻身”的一个提问:


在掘金上把老刘的所有文章都读了一遍觉得特别好,现在有了压岁钱就屁颠屁颠的来加入星球啦。 


我是一个普通二本cs专业的,今年夏天就要去实习了,虽然在学校也学的很认真跟着老师做了不少小外包的项目,但是觉得自己学的好杂好乱,前端会点vue 微信小程序 后端会点php的tp框架,然后最近又跟着老师在学javaee,现在感觉自己只是一个html填空的码畜。


看了老刘的文章以后开始重视基础,最近也在看网络原理和算法还有Java虚拟机的一些书, 但我还是很迷,没有一个系统的规划,不知道我应该学什么,怎么学,学到什么效果算掌握了,请大佬指点一下,我最近想从事Javaweb方面,也梦想能在10年内成为一个架构师。


下面是我的回答:


现在已经有确定的目标了,真不错!很多人连自己的职业目标还没有确定。


架构师这个职位没什么神秘的,简单点儿说就是用户需求转化成技术实现,只是在转化的时候会遇到一系列问题,比如:技术如何选型? 如何设计才更简洁、更容易实现和扩展?如何满足非功能性需求,如性能、安全、高可用性、审计......


除此之外,还得和客户以及分析人员沟通需求,确保没有跑偏,有时候还得引导一下,去除或者改变那些不可能实现的需求。


和程序员沟通,让大家理解技术选型和设计,顺利开展设计和编码。


“软件架构师自身需要是程序员,并且必须一直坚持做一线程序员,还需要承接编程任务,如果不亲身承受因系统设计而带来的麻烦,就体会不到设计不佳所带来的痛苦,接着就会逐渐迷失正确的设计方向。”  -- Bob大叔


软件架构师不是一蹴而就的,是一个循序渐进的过程,是一个职责不断扩大的过程


刨除好奇心和对这个行业的热爱, 我个人认为至少需要在这些方面进行发展:


1. 掌握技术的原理


做一个架构师会涉及到很多技术,要求技术的广度,如果掌握了原理,不但对技术认识深刻,学习新的东西就能迅速抓住本质。

计算机的基础知识就不用说了, 网络、操作系统、数据库、编译等, 相对枯燥,最好在大学阶段完成。


你是Web开发方向发展, 至少要掌握这些应用层的东西:


Web开发框架

HTTP/HTTPs

SSO

OAuth

RESTful

序列化

安全框架(如Java的Shiro, Spring Security等)

RPC及相关框架

Web安全攻防

虚拟机

并发编程

缓存

数据库相关的范式、SQL,事务,索引,锁

.....


真是不少啊,关键是在应用层学习的时候,要多问为什么?  我建议你用这样的句式: “因为有xxxx的问题,现有的xxx和xxxx解决不了,所有才出现了xxxx这个技术。


举个例子,现在大家都知道websocket是做什么用的,但是它要解决什么问题? 为什么不能直接在JavaScript中使用原生的Socket呢?  为什么还要用HTTP协议作为“启动”,然后切换成websocket?


当你在追寻这些技术的本源的时候,对一个技术的思考就会更加深刻,就能超越很多人。


那怎么算把一个原理给掌握了呢? 我认为标准就是你能用自己的语言给别人讲出来,让别人能理解。


2. 获取项目经验和最佳实践


只知道原理,还是纸上谈兵,必须得做很多项目,在项目中去体会它们,应用它们,获取一些最佳的实践。


现在能从头开始设计项目的机会不多了,作为初级程序员,只能从现有项目中去学习,去研究下系统中的网络请求是怎么走的? 负载均衡是怎么做的,四层还是七层? 如果做的集群?如何做的复制? ......


一定要努力地往上看,看到整个系统,看到端到端的流程,不能把自己局限在一亩三分地里, 做一个认领工作,完成工作的HTML填空人员, 那样路子真的就越走越窄了。


同样,要多问为什么,  在你通过自己或者求助别人探寻答案的时候,也许会发现现有设计的问题,这就是你的机会。


当你从局部慢慢走到整体以后,你的机会自然就越来越多,承担的职责越来越大,话语权越来越重,离架构师越来越近。


3. 锻炼自己的抽象能力


写程序是一件挺简单的事情,把一个高中生拉来培训一下,就能写得像模像样。


但是想写好程序又是一件非常难的事情,因为系统越来越复杂,通过堆砌代码的方式来实现,很快就干不下去了,难度会成几何级数增长。


解决这个问题的关键就是抽象,架构师得找到系统中那些不变的东西,把他们作为支点来架起整个系统的设计,升华一下就是一些正交、分层等思想。


通过把系统的组件划分到不同维度,不同层次就可以实现封装“变化”的目标。


这些思想从哪里学习? 怎么内化成自己的能力?


一是从项目中来,我相信你的项目肯定有这些思想的体现,只是你去用心去发现。


二是阅读书籍,阅读源码,看看牛人们是怎么做的。


三是自己要总结思考,总有那么一刻,你会顿悟: 啊,原来如此!


4. 要发出自己的声音


做开发的很多都是性格偏内向,喜欢和电脑打交道,但是想发展成架构师,只是闷头干活肯定是不行,必须得在小组内,部门内,公司内发出自己的声音。


例如对于架构,设计,编码,工程实践,技术发展趋势都能提出自己的见解,让别人能信服、尊重你的意见,这样才能成为自然的技术领导。 


如果只是靠领导的任命或者威权来领导,那下属可能要造反。 


对了,这里的“声音”可以是小组讨论,部门会议,紧急任务处理,技术演讲,博客,客户交流等等。


总之,等到你精通原理,能把基本的思想应用到项目中, 还能看到全局,有足够的项目经验,被别人尊重、信服,那架构师离你就近在咫尺。



加入码农翻身知识星球,和各路技术大牛一起沟通交流,例如下面这几位我印象非常深刻:


@大飞,他是微信早期员工,腾讯高级工程师,技术leader。


@老穆,大三腾讯实习,毕业入职阿里,先后负责过飞猪,天猫,支付宝等Android客户端开发。


@小孩子,MySQL技术专家,他的小册《MySQL是怎么运行的,从根上理解MySQL》在掘金上非常热门。


@crossoverJie ,他造了很多轮子,秒杀架构、可插拔IoC容器、分布式IM等等。


@千古壹号 从Android转到前端,入职京东,写了自己的经历,前端的学习路径, 每次有人问从Android转型的话题,我都会把他拉出来。


@Jerry@SAP  写了很多和SAP相关的文章,有ERP的问题,外企的问题,找他没错。


@吾是锋子  坚持刷LeetCode ,全英文文章, 在他的带动下,很多人都开始刷起来了。


@李大胖  他写的文章HBase列式数据库科普,session的发展, 面试,Spring WebFlux 都让人印象极其深刻,是一个冉冉升起的大V了。


@抓狂 现在很多人都认识他了,LISP大牛,思考非常有深度。


......


除此之外,免费送15个福利视频,都是我过去两年编程提高群第一季第二季中讲课的精华,这些视频就就值回票价了。


漫谈计算机组成原理和计算机编程语言 

程序的机器级表示

漫谈操作系统之虚拟内存

进程和线程

漫谈文件系统

缓存

BTree 及其在数据库的应用

新人在职场

Java 并发编程

分布式文件系统 FastDFS

Web安全

字节码和AOP

Web SSO

微服务入门

如何用 Antlr 实现自定义的简单脚本语言


扫描二维码,加入码农翻身知识星球:


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存