“最浪费时间的事情就是给年轻人讲经验,该走的弯路其实一步也少不了,我们并不是希望大家不走弯路,而是希望大家能够意识到自己正在走弯路”,这两句话不是笔者总结的,是咱们这位阿里巴巴技术大咖说的。字面意思浅显易懂,背后的道理也让人清晰可见。
作为一个研发人员看到这一段话应该深有感触,学习了很多技术知识和架构理论,系统问题仍然会出现,只是或多或少或深或浅,重要的是能否意识到自己正处在问题中并主动去解决他,而作为软件工程本身从诞生到现在虽然发展了几十年,仍然面临着前所未有的危机。
软件工程危机的表现
1、软件需求基本很难满足,或软件生产进度严重失控,软件交付的质量很差,需求方和实施方一直处在矛盾对立面上。
2、软件的故障率很高,后续的可维护性级差,尤其是项目更换维护人员后出现问题则更加突出。
3、相关文档缺失或严重滞后于软件功能,导致相应功能的使用率和普及度不高,使得软件功能重复臃肿,越来越难以维护。
4、用户对软件的定位越来越模糊,导致软件呈亚健康状态发展。
由表及里,危机的根源是什么
任何事物都是有两面性的,一个软件或一个系统工具的诞生来源于需求,一个好的软件必是解决了一个或某个方面的核心需要才能发展起来,但成也需求败也需求。
需求是软件发展的动力,没有新需求或需求没有变化自然是不需要对软件进行任何改动的,但只要需求有变化就需要对软件引入变动,只要变动就会带来风险,甚至是从需求设计、评审、编码、测试、构建、发布链路的整个环节随意穿插,改变软件时间轴的时间,任意践踏规范。
这个时候就是考验软件架构师和研发实施人员能力的地方了,一旦基本功不扎实,就会出现连环事故,导致天不时、地不利、人也不和,而在这个时候一个好的架构师能够设计和重构出一个好系统,而一个差劲的架构师则可以毁掉一个好系统。
问题提出来了,怎么解决?
第一:合理的组织管理
第二:清晰的软件发展战略
第三:规范的流程与代码规范
第四:优良的系统架构设计
第五:适时地重构
上面五项解决方法中,合理的组织管理、清晰的软件发展战略是在公司或企业管理层面进行优化的,只要方向明确,目的清晰就可以及时优化;(PS:其实作为研发人员对这两项影响不大),规范的流程按照软件的交付节奏并根据实际业务选择下面其一即可:
1、原型模式:快速交付可用最小版本,认可后快速迭代继续优化
2、敏捷开发:分阶段、分批次、迭代式地实现需求,强调信任、协作、交互、拥抱变化。
下图是阿里、腾讯、百度、京东等大型互联网公司常用的敏捷开发流程规范,供大家参考(首次分享):
3、瀑布式:需要非常完善的产品市场分析、需求分析、特性分析,形成产品概要设计、详细设计、需求评审、编码、联调、测试、运维实施等流程。
代码规范无论是以哪一种标准为参考,只要大家遵守一套标准即可,如果没有可以参考《阿里巴巴Java开发手册》。
而优良的系统架构设计则凸显了架构师的能力,但“架构师”并非是一个明确的岗位,因为架构本身没有明确的对与错,只有因地制宜的架构设计,架构更多的是一种能力的体现,是所有研发人员或多或少都应该具有的能力,是在研发团队中具有系统把控力的大师,而近些年来,“架构师”被玩坏了:
1、有些架构师只会花框,缺乏实际编程的能力
2、有些架构师只会分任务,缺乏系统解耦的能力
3、有些架构师只会催任务,缺乏风险判断的能力
4、有些架构师只会PPT,缺乏业务洞察的能力
上面这四点并不是拥有左边的能力就不好,而是拥有了右边的能力才会发挥架构真正的魅力。
阿里大咖深入解读系统重构之道
作为软件危机解决方法最后一项的重构,对于软件一直是合理存在的,从代码的角度来说,好代码不是写出来的,而是改出来的。一个稳定而庞大的系统不是架构出来的,而是重构出来的。
只要系统架构设计出来,就一直在重新架构的路上,重构既要解决过去的问题,也要解决现在的问题,还能适度的解决未来的问题,但是一味地解决未来的问题,会使系统的风险、成本剧烈上升,所以系统架构是一种平衡的过程,而重构是合理的,因为:
第一:用户规模不断的扩大
第二:固有用户的自我进化
第三:商业竞争的残酷性
第四:技术栈的更新迭代
第五:研发团队的自身因素
以上种种都是从架构设计到架构实现再到重构都会现实面对的问题,这就给架构师和即将走向架构之路的研发人员提出了很多挑战。
2019云栖大会:听阿里技术大咖解读软件工程危机与系统重构之道
《阿里巴巴Java开发手册》、《码出高效》作者
阿里巴巴集团高级架构师 / 集团代码平台负责人孤尽老师
现场解读软件工程危机与系统重构之道
那么如何成为一名优秀的架构师并获得百万年薪 ?
通过阿里大咖的分享和解读,想要成为一名优秀的架构师,需要通过以下功法的训练,来达到目标:
第一项训练精准训练和掌握编程之道编程核心思维
不是所有的技术都是时间累积可以实现提升的,也不是所有的技术都是反复流水线一样的重复就可以提升。一旦陷入了代码搬砖模式,你不仅劳心费神,工作效率低下,而且无法满足公司的产品需求。
在这一项训练中,将训练你掌握什么样的编程思维,什么样的分析和解决问题的方法可以让你工作效率大幅度提升。算法、数据结构、设计模式这些基础内功不仅仅能提升你的逻辑思维和底层架构能力,还能在面试和笔试中帮你加很多分。
第二项训练系统化训练和掌握系统架构设计思想和方法
这个世界上没有最好的系统架构设计,只有最适合的系统架构设计,但是否能设计出适合业务发展需要的系统架构,这就需要系统化的掌握架构设计的能力,在这个部分,将从一下几个部分对架构设计能力进行强化训练
1、系统架构的目标:高可用性、高可扩展性、低成本、多快好省;
2、系统架构的原则:单一原则、DID原则、N+1原则、功能可开关、版本可回退等;
3、架构设计组成的关键点:业务架构、应用架构、数据架构、技术架构;
4、系统架构设计的演进方式;
5、在资源有限的情况下如何进行架构设计;
6、系统架构设计如何和项目管理进行关联并取得相应的平衡。
第三项训练结合企业真实场景,自己独立设计一套系统架构并进行架构演进
可能你之前也了解过一些系统架构知识,也知道系统架构的一些关键事项,但看的再多都不如从实践中获得真知。这部分讲根据企业的真实业务场景训练大家从业务架构、应用架构、数据架构、技术架构这几个方面进行入手,全面掌握系统架构的能力,主要从以下几个方面进行强化训练:
1、系统业务服务设计、隔离、基础服务下沉;
2、系统数据模型、数据对象的设计、数据表设计、数据库应用架构设计;
3、研发代码架构及系统分层和接口服务设计;
4、服务一致性设计、以及中间件选型和应用:
5、系统缓存架构设计;
6、各服务系统缓存服务设计;
7、系统自动化运维部署架构设计;
8、系统防止恶意攻击的预案设计等。
第四项训练深入架构进行各个环节的功能代码及部署实现
对于系统架构师,不仅能运筹帷幄设计系统整体的架构和系统演进路线,更能够实现具体的业务功能代码和服务部署,否则架构中存在的问题就无法提前预知和规避了,在这个部分将训练对具体业务实施和中间件使用的能力,确保遇到具体技术问题也能够及时有效的解决,这里将对以下架构中需要使用到的中间件和具体技术进行掌握:
1、数据库读写分离、数据库索引及数据库运行调优
2、Maven使用、Nginx负载均衡、CDN使用
3、Quartz、消息队列RabbitMQ、Redis集群、Solr搜索引擎集群、zookeeper、Docker+Jenkins
4、域名HTTPS安全证书安装、Jemter等中间件的掌握和使用。
第五项训练刻意练习,提升综合能力
技术人员的综合提升,不是仅仅完成现有的工作,一遍遍的重复,这样很容易陷入低水平重复的误区,还应该刻意做一些训练。将对以下方面进行【刻意练习】,不断突破自己的舒适区,提升自己综合能力,在职场上进步。
【刻意练习1】代码:每个人必须要多学多练、多敲代码,经常对感兴趣的开源项目代码进行review。
【刻意练习2】写作:每周一篇技术周报、总结近一周自己的工作学习所获,写文章是梳理技术知识的最佳途径。
【刻意练习3】讲解:很多人职场上受限的原因是因为不够open ,无法表达自己的思路,进而就无法跟优秀的人交流,这个往往是技术人员经常忽略的地方,需要不断和周边的人进行分享交流。
结合上面的五项训练并严格执行,就一定能够向一名优秀的架构师成功的迈出一大步。为了让大家快速系统的掌握BAT这些一线企业的核心架构能力,拥有更大的发展空间,因此我们将打造全国独一无二的Java高级架构师项目解决方案成长训练营。帮助想要成为架构师的你。
看到这里,想必你已经迫不及待地想报名参加了吧,别急!
在向你透露具体的报名程序之前,你必须知道,《Java高级架构师商业项目解决方案成长营 》计划不会向所有人开放,参与者必须符合以下条件:
1、你必须热爱编程,并具备奋斗者精神;
2、你必须拥有1年以上的Java开发工作或学习经验;
3、你必须愿意每周投入10小时以上进行学习和实践;
4、你必须具有很强的执行力,愿意听从我的建议,和成长营队友一起成长;
5、你每周必须写一篇学习或工作的技术文章(方向不限);
6、你必须有强烈的加薪加薪10万-20万以上以上以及升职的动力和愿望。
如果你觉得符合上述条件,可以直接在平台私信我哦!