[转]架构师的修炼之路(Java)

架构师的修炼之路javascript

国内咱们对架构师,项目经理,开发经理或者是技术总监这类职业定位广泛不都不清晰,不少的状况是“能者多劳”,一人身兼数职。达尔文的理论在咱们的行业是绝对适用的,我从进入这个行业开始我就不甘于成为淘汰者,而我也由心地热爱着这个行业很年前我就立志要成为架构师(当年流行叫:系统分析员 )这目标进发。回首这10几年的磨练,我总结了一下一名合格的架构师应该具有哪一些方面的能力以及怎么才能获得这些能力html

1、编码能力

架构师是一个职业,是一种经历了各类磨练与终年开发经验积累出来的。另外我一直认为:不会编码的架构师不是一个好的架构师。我见过不少所谓的架构师彻底不懂编码,但总喜欢拿着架构说事。但从严格来讲他们并不属于“软件架构师”的范畴,充其量只能算是个“系统架构设计师”,遇到这样的”架构师“我总喜欢说一句话:”Don’t tell me the concepts show me the code!“。java

不参与编码并不表明不会编码,若是没有过硬的开发基础,巨量的编码时间积累为基础,在设计软件时必定会忽略很是多的细节,而这将会直接影响到整个项目的成败,试想一想当项目经理按照架构师设计的软件蓝图订制开发计划与安排项目资源时因为“蓝图”内存有大量未肯定的风险因素,以及由风险触发后所带来的不可预知的结果,最后项目是否能成功 ?程序员

  • 多看 - 多看别人的代码,从别人的代码中读出软件的架构与设计的设计思路编程

  • 多学 - 掌握各类语言,不要偏执于某一技术阵形,无论java, .net , phyon 仍是javascript每种语言都有其优缺点,成为一名语言控,从语言自己学习与理解语言设计者的思想。设计模式

  • 多作 - 疯狂编码,从时间与实践中去体验与领悟,工多艺熟。架构

  • 勇敢 - 严格要求本身不要写出”发臭“的东西,勇敢地重构!让代码变得优雅,易读充满你的设计思想。框架

2、表达力

世界上最难的两件事是:将别人口袋的钱放到本身的口袋里面;将本身脑子的想法完整放到别人的脑子里面。工具

我认为一份成功的设计是 ”能让不一样层面的人都能看得懂“。为何这样说?那么得了解谁须要看设计,又是出于何目的来看设计。学习

  • 销 售 - 从设计中寻找卖点与特点,丰富销售方案和定制预售计划。

  • 项目经理 - 根据设计进行时间估算、项目资源准备与工做分解。

  • 开 发 - 根据设计要求进行技术准备、开发环境、编写DEMO以及最终编码 。

  • 测 试 - 根据设计划分测试粒度、准备测试环境、定制测试计划

不一样的开发方法与开发流程都会有不一样的设计文档要求,而受众无非也是上述几种。做为项目/软件的设计者,能清晰地向受众准确地传达本身的设计思路就显得极其重要。这里指表达不是指嘴上的功底,更多的是在工具的掌握能力与文字的表达能力。使用不一样的工具表达向不一样的受从表达相同的理念,这基实是对架构设计的一种验证,这种沟通与表达能有效地融合不一样角度的观点,也能让架构师能更深刻地理解本身的设计方向。

要面对如此多的复杂性应该如何来锻炼本身的表达性呢?

多与人沟通,多参与头脑风暴

练习用人类语言表达“非人类”的专业知识。一张用铅笔画的框图每每比一个使用专业UML设计工具作出来的设计更容易让人理解。 UML为做架构师基本上是必修课,也是辅助架构师思惟的工具,但对于不懂UML的那就是“非人类”的文档,设计是给人看的,别人看不懂再专业再标准化的设计也只能沦为废纸。

培养测试先行的习惯 - 在设计时多写范例与测试,在很大程度上能够减小设计误区和验证被实现的可行性。这样能够在将设计交付给开发、测试后节约大量的沟通时间。

3、拥抱变化

正如XP(极端编程)中所说:“世界上惟一不变的就是变化”。拥抱变化、预测变化、控制变化不单纯是优秀开发人员的和项目经理的要求一样也是架构师一种重要的能力。

“变” 个人理解 设计中的“变” 就是 “可定制化” 的要求,可定制化程度越高系统/项目的可扩展性就越强。架构师就是须要锻炼的是控制这种变化的范围与程度,“变”是双刃剑,容许过多的变化就会形成“过分设计”,出现一大堆“将来可能使用的功能”;过于封闭则会变得僵化难以适应新的要求。

“不变”这里所说的“不变”也只是相对而然,在系统/项目中相对不变的就应该是“核心”或者是“基础框架”,举最简单的例子就是 .net framework 就是其中一者,虽然它会不断发展,加强功能。但其基础核心设计理念与架构也历来没有发生过质的改变。更具体的一点来讲“不变”的是规则、用法和基础设计理念。 我认为学习控制变化的最佳方法是多看出色的类库或系统,多问为何这样作,理解原设计师的想法。通过必定时间的积累,随着对“变化”观察的增多,天然而然会在自已的设计中按设计要求将”变“与”不变“应用得当。

4、方法论

针对架构设计的方法论众多,应该如何选择?我也读过不少的相关书籍,我只选最实用的,这里我推荐几本书。

《设计模式》- 要读懂、活用,我读了10几年每次均可以从中学到不同的想法,将其应用于架构内能够极大地简化不少复杂的问题。

《Java 编程思想》 - 谈面向对象方面最好的其中一本书,提升面向对象的设计能力会有很大帮助 《Refactoring》- 重构不仅仅是一种作法和程序员才关心的事。重构重于意识与思惟彻底能够用于架构设计 。

《eXtreme Programming》- 虽然讨论的是开发方法,但它最能诠释什么是”变化“。

方法论的实践与应用也须要时间磨合并融会贯通,它们给予咱们更多的是理念与意识,必定要避免走进为实践方法论而设计的误区。

5、学习能力

对于普通程序员来讲,成为高级架构师的门槛主要有如下几点:

一、错误的学习方法。在技术突飞猛进的今天,谁在单位时间学到的知识更多,谁的学习方法更高效,谁就得到更强的竞争优点。而不少程序员在工做中,还用着学校时的学习方法,很是低效,公司不是学校,啃书本的学习方法已再也不有效。

二、完整的知识体系。没有造成系统化的知识架构,最重要的是不知道哪些技术须要重点掌握,学习时频繁踩坑,最终浪费大量时间。

三、对编程的认知。顶级程序员和平庸程序员,本质区别是遇到问题时的思考方式,这就是所谓的顶级程序员思惟,一种高效解决问题的思惟方式。这种思惟方式,不是读几本Java书能学到的,而须要通过大量项目实战,才能总结提炼出来。

四、差的学习环境。不少程序员的学习环境不好,在公司常常加班,工做几年后,发现本身除了更熟悉公司业务外,能力没有获得半点提高,或周末基本不学习,而是出去玩。这么差的自制力和学习环境,很难让能力提到大的提高。

构建完整的知识体系感兴趣的朋友能够来参考下我从业十余年总结2018年互联网公司中最主流的学习路线: 这是Java程序员的一个架构梦,我专门设立了一个Java架构学习的群:619881427里面找朋友上传的都是下列图片中的技能知识点,若是感兴趣你能够进来瞅一瞅,能够免费领走你的架构师学习资料。

既然有梦想,干吗你不来!

相关文章
相关标签/搜索