新年新事,来点轻松的话题。咱们调剂一下后再继续讲CAS SSO单点登陆吧由于后面的内容所有和代码有关,你们会以为枯燥。因此今天咱们先来点”番外篇“,讲讲什么是架构师,什么是架构这个永恒的话题吧。此篇源出自我在公司内部写的一个PPT,它是用于在公司内部向广大技术人员作普及用的一个资料,而CSDN这边的编辑不支持图文混排的效果,所以一些章节我就直接截取自个人PPT里的内容了,这样可能对你们在阅读上会显得更加生动和活泼一些吧。 程序员
架构的定义
先来看看软件架构的广泛定义吧。
- 一个程序和计算系统软件体系结构是指系统的一个或多个结构。结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系。
- 体系结构并不是可运行软件。确切的说,它是一种表达,使软件工程师可以:
- 分析设计在知足规定需求方面的有效性。
- 在设计变动相对容易的阶段,考虑体系结构可能的选择方案。
- 下降与软件构造相关联的风险。
软件架构的生命周期
软件开发有其生命周期,它应该是:
而软件架构也有着其生命周期,它又是怎么样的呢?
软件架构的重要性
为何说一个软件架构是很重要的呢?直接编程直接开发,多EASY?请看下面几点: 面试
- 软件架构可以知足系统的品质
- 架构设计使受益人达成一致的目标
- 架构设计可以支持计划编制过程
- 架构设计对系统开发的指导性
- 架构设计可以有效地管理复杂性
- 架构设计为复用奠基了基础
- 架构设计可以下降维护费用
- 架构设计可以支持冲突分析
什么是好的软件架构
这个问题,可能你们一直都在问,包括一些IT企业也在问,对于这个问题的回答,可能不只仅是一个简单的语句或者是定义就能够回答的出的,咱们来看下面的几个形象的例子:
这个是什么东东呢?乐高玩具,乐高玩具你们确定都玩过吧?
它便可以以一个完整的模型卖给你,你也能够把它所有打碎了从新从一个模型自由的再去组装成另外一个模型,由于每个乐高的模块在横向、坚向里都有标准的接口,这就是咱们常说的高内聚、低耦合。
什么又是糟糕的架构
你们看看上面这幅图是什么?
一个是清代的八股文,一个是孔乙己。
还记得回字的四种写法吗?
那么你专门就研究回字的四种写法 ,但你有没有想过我把回字折开来又能够变成几个字?是否好折?
要知道最时髦的并不必定是最好的
为何M1A2和阿帕奇直升机里不用A8处理器,或者是最新的奔腾处理器啊?
实用、通过检验的才是最好的!
成功的软件又是怎么样的呢
咱们谈的是软件架构,架构的最终体现是一个软件,那么什么是成功的架构什么是成功的软件呢?
你们看左边的这个图,是美国的“阿利伯克级”宙斯盾驱逐舰,右边的是印度模仿美国的宙斯盾本身设计和建造的”德里级”的“咖喱盾”驱逐舰。
两艘战舰一对比,怎么样?
- 一个是模块化的设计,总体线条流畅,战损时模块能够任意替换。
- 一个倒是拼拼凑凑,线路外露,甲板上布满了各类电子设备和天线,一旦战损,极难维护
架构之美
架构,架构,到底什么是架构?我之前上大学时有一个70多岁的老教授,他上课每讲20分钟左右,须要2个同窗”架“着去上一次WC,咱们的架构师固然不是指这种”架构湿“。那么咱们一直说的架构,到底它是一个什么样的东西呢? 怎么样又能够作出一个完美的架构呢?
架构就像是迷踪拳
动做轻灵敏捷,灵活多变
它其实违背一切传统拳法,所以能够克敌制胜。
架构就像是独孤九剑
破剑式、破枪式、无招胜有招,它发源于传统武术,又扩展了传统的武术
架构就像是一件艺术珍品
有时一个看似简单的架构每每倒是一件艺术珍品。
你们知道这幅画吗?他是挪威画家蒙克的一幅做品叫”呐喊“,蒙克这我的是一个疯子,这幅画很简单,就是随手涂鸦通常,可是你们可知道这幅画值多少钱吗?2012年该画在纽约苏富比拍卖上以1.19亿美圆被拍卖。
架构的意境
一个好的架构不该该受限于框架,受限于语言,受限于技术,受限于各类条条框框,它是一种意境。
架构时须要考虑的几个基本因素
JAVA通用领域的相关技术
固然,咱们这边主要说的是JAVA,那么做为一名学习JAVA、J2EE的架构师来讲,要具有一些什么样的技能才能达到架构师的水平呢?
上面这张图,咱们这样来看,它分为3个部分:
- 顶部,是咱们须要掌握的一些技术领域的知识,它可使咱们应对通用领域如电商、企业OA、银行保险金融等领域的一些解决方案和设计
- 中部,为了达到顶部这些技术咱们须要了解的一些中间件、数据库、开发框架这些知识,它是一根支柱
- 底部,底部呢?它是咱们的基础,为铺设咱们通向中间或者更上层的一个基石,这也是为何你们有时发觉个人博客和其它博客有不同的地方,不只仅有编程还有”中间“的这一层即数据库、性能、安全、框架搭建这些东西混合在里面的缘由,由于我不但愿你们经过阅读完了个人博客还只是停留在一个码农、码工、螺丝钉的这种水平上。
架构师的职能
说了这么多架构,咱们来讲说架构师吧。
你们看到了没有,
架构师的第一职责就是关注:
non-functional requirements,即非功能性需求
。
不少人对功能性需求和非功能性需求的界线划分仍是不清楚,我这边举2个例子说明一下吧:
功能性需求
页面查询,这个查询是关联哪些哪些数据库表,由于个人业务是有这样这样的需求,在界面A里点了一个按钮,而后弹出窗口B,在窗口B里要显示什么样的数据,最后界面A里点完后,当我打开界面B时哪块数据已经随之发生了更改。 数据库
非功能性需求
咱们的系统查询速度小于2S,是否考虑使用异步查询、使用队队列机制,系统要求能够容纳1000个并发,这个系统要能够作成插件式的,要能够横向扩展,要符合XXX协议,这个Webservice要作成SOAP HEAD内带有BASIC认证,仍是作成符合NTLM的认证的,仍是使用令牌环认证的?
这个下拉框要作成便可输入又能够下拉的,这块认证要访问LDAP?
不少以业务为主的项目型公司认为架构师就是trouble shooting(即排错、查错的意思,就是有错误、出问题了再找架构师),把架构师当成了fireman(救火员),但是你不本身想一想为何出了问题架构师过来2秒、2分钟或者1天半能够解决大家1个月几十人每天到零晨也解决不了的问题呢?嗯?
解决了说这是人家应该的,解决不了,说人家架构师不合格呢?是否是咱们应该从这个软件最先的框架上、架构上去发现一下问题呢?
架构师啊,这不是一个trouble shooting的问题啊。
在节前我也进行了一些面试,出于纯技术角度来讲,即走架构师,TECH LEADER这样的路线的侯选人。
我仍是发觉了很多的问题这也是中国的一个通病:
即咱们的程序员,不少时候不是在作程序,而更多时候是在作业务逻辑,成了一个某一领域的业务人员了。
固然,咱们的程序员在其职业生涯的前3年、4年都是作某一块领域的代码的,这个是没有问题的,可是请必定必定记住,咱们是编码,是IT,是程序员,不是“业务人员”!!!
什么是IT?什么是程序员?什么是Tech Leader?什么是架构师?
这个问题你们有必要好好的去问一下本身,去好好的想一下,架构师的要求是什么?
我这边随便说一些东西:相信对一些要走技术道路的同窗们是有帮助的:
TCP/IP协议,加密解密,计算机原理(增补反码),JPG码,MPEG2-3协议,逻辑电子电路,计算机编译器原理(堆、栈、队列),这些东西你平时工做时一直用到吗?这些是你一直关注的底层吗?
若是你是要走技术路线,必定必定请记得“数据库+ASP/JSP”不是技术,它只比表单制做,报表制做人员稍微强了那么一点点。
请必定记住,技术路线关注的是
非功能性需求
,
非功能性需求啊
,就是一种一通百通的东西,有了这块底蕴,任何需求和你说清了,对你来讲是没有任何“难度”的,或者你再去学,是能够触类旁通的啊。
最近一直面试一些侯选人,作架构师的,在此过程当中我对此深有感觉,找一个程序员开发不难,招一个架构师,难。。。唉,我以为你们有必要要考虑一下,若是我走技术路线,我缺什么,我怎么补,还要关注些什么?
科技是第一辈子产力,管理方法论中的所谓的六SIGMA即六西格玛的第一条就是“技术人材是当下企业的第一辈子产力”,你们看看可以发财的是哪些公司?阿里,淘宝,支付宝,GOOGLE, 腾迅,互联网,高科技等等等一些企业,他们靠的不是业务逻辑,而是真正的技术,这足以说明问题了,因此你们若是要走技术道路,请多关注一下更细节,更底层的东西吧。
- 第一宗罪:重业务不重技术
- 第二宗罪:编程开发人员沦为业务开发人员、沦为码农
- 第三宗罪:IT市场沦为自由市场、小菜场同样的叫买
- 第四重罪:技术无用论的诞生
- 第五宗罪:闭门造车,与实际脱节,彻底抛弃业务
- 第六宗罪:消极怠工
- 第七宗罪:不思进取
架构师的分类
通常会把架构师分为:
通常就是把系统架构师和应用架构师合成一类。这个从本质上来说倒没有什么太大的区别,不伤大雅。
架构师会作什么
一个架构师在一个团队中或者说在一个企业中它具体要作哪些平常工做呢?
架构师并非万能的
架构师很牛B,但是架构师也是人,他不是超人。
架构师须要掌握的软技巧
技术,是架构师的Hard Skill,那么架构师的Soft Skill有哪些呢?
架构师不是皇冠上的明珠
你们必定必定要记住,架构师决不是像你们想像中的那样,是所谓的皇冠上的明珠,架构师承担的责任是至关的大的。
如何成为架构师
人类是如何进化的?
学习、使用工具、社会协做性、不断的总结经验。
架构师也会退化到比通常的程序员都不如
若是中止了学习的步伐,那么。。。。。。
编程
谈架构师的自我修养
学习之道
须要掌握的基本功中的基本功
你们注意,上面这个列表在学习时是有前后顺序的,从上至下分别为第一步,第二步,第三步。。。。。。不要以为枯燥,你能够去试试,真的,被折腾着和被快乐着。
Bad artist copy good artist steal
放正你的心态
不断的须要自我激励
成功的惟一方法即是,认可现实,超越现实,鼓起勇气并善用它。
- 学会平静的对待生活中的不完美之处,适应本身的情绪,了解如何让它们天然宣泄出去
- 学习如何把不完美的地方转换成咱们的优点,激发咱们的创造力
- 自我激励,无论外部条件是否有激励性,找到一种激发最佳状态的情绪,学习如何在咱们的意识中制造一些波动来激励咱们前进
此文献给开春后工做的众IT技术人员和那些将要或想要走上IT道路的朋友们,祝你们新年新事,工做和学习顺利,最后我还将在2015年继续个人博客写做。
--吾以吾血荐中华之IT。