架构师 如何从梦想变成现实?
这个题目,不是标题党,也不是为了给出答案,而是自问,写出来一些看法,和自己对未来几个月的规划,当然更加希望同僚能多提意见或建议。
很久之前,从大学毕业开始,自己就一直做着“成为一个架构师”的梦,并且也在磕磕碰碰中前进和提升。但到现在已经工作了5年,却也还是不如人意。
从最开始做技术支持,到码工,到高级码工啥的,角色好像变了,但总是觉得有非常非常多的东西要学,要不断地历练。到现在再换了一个环境之后,心里真是更加清楚自己到底有几斤几两。不能全面否定自己的进取,应该说来,自己对架构师的角色越来越清晰吧。
首先说说自己到底想成为哪个方面的架构师。因为一直从事跟web相关的工作,什么前端,后端的开发都做过,所以,自己就想成为一个web开发的软件架构师。当然因为主要用java,也毫无疑问要跟java有关的工程。
从哪些方面出发呢?在这5年的工作中,有两到三年实际上跟开发有点脱钩,我没有好好开发,总是丢三落四的承担一点点开发工作(因为要带团队,有些身不由己)。总是会在静坐时清醒一些,想想自己应该干什么。终于在去年离开老公司,进入新环境,也更加清晰地认识到自己应该再从哪些领域着手提高:
1.针对业务或者是产品,以及工程或产品的生命周期选择开发语言和开发框架。
必须强调的是,任何架构,都不能脱离产品或工程需要而存在。尽管很多成熟框架可以在很多地方使用,那也是要针对特定的情况而言。而需求永远都是我们首先要考虑的,否则就会影响我们的判断。就像孙子定的是36计,而不是仅有一计,道理相同。只要你符合具体需求,哪怕是自己写的框架也是最成功的(DDD强调业务领域的重要性)。
用了几年java,说实话,没有java实现不了的,但是对一些实现,成本是很高的。就目前来看,java之于web开发,还是相当强劲的,因为有很多第三方软件的支持。从这个角度讲,可以给公司节约很多成本,但是java世界的开源环境是一个大而杂的生态状况,正如当今社会的鱼龙现状。于是,个人觉得应该再学习一至两门其他语言,用于针对不同的问题,实施不同的解决方案,而不是手里拿着锤子,看啥都像钉子。
因为接触的项目90%以上是java开发,所以,要对java相关的技术了如指掌,包括:jvm(尤其是6,7两版)、java api、web容器、设计模式、开源框架(如spring,guice等),重构技术等。
了解jvm,是要清楚java的底层实现,避免写出易于出错,或效率过低的代码。Java原产地的人总是很注重对基础信息的把握,但是我们却总是急于求成。
熟练掌握好api,是使用一门语言最开始就要达到的要求。因为java的底层实现是很优秀的,除非有特殊的效率等方面的需求,java中给我们的任何操作都提供了大量唾手可得的类和方法。尤其要熟练掌握的有:集合、io&nio、多线程等几个常用包。
web容器重要性尽人(开发同僚)皆知。至少要了解一到两个容器吧。(还是太少,开源的就得两三个,企业版的如weblogic,websphere直流的也应该会搭建,会部署,了解一些调优知识)
设计模式,应该在学习框架之前,最好是学过之后,再去看框架,因为很多框架中用了大量的经典模式,spring就是其中一个极为牛X的牛叉框架。我忍不住再说一次,这是个牛叉框架,在用spring之前,最好把Johnson的那边expert one on one弄来看看,我是看电子书,书有些老,挑其中关键点读,很受用。
重构,对java来说,尤其是可持续发展的java工程来说,是永远都不可避免的一种开发行为,有必要把Fowler的那本书好好啃啃。
2.深入了解存储。
要掌握关于缓存,数据库相关的知识。这点不想多谈,就是想让自己在数据库调优及数据库建模方面有所建树。涉及的数据库也不多,oracle和mysql。而缓存方面,因为本身这个世界就是百家争鸣百花齐放,所以,应该多了解如ttserver,memcache之类的文件或内存缓存实现。
知道存储,就要将其融于架构。让最大的读取压力集中到缓存,而把仅有的写操作施加于数据库,这种决策不是说了这么一两句就能搞定的。甚至这些是java架构调优的重中之重。
3.了解网络传输。
在分布式系统如此风靡的今天,要是不了解分布式,那我们的软件就固步自封了,同时也会给我们的硬件带来很大的压力,增加公司成本。在这个方面,很希望能从各位同仁处,得到些许建议。
4.熟悉操作系统。
Linux。
越写心里越是惊叹不已。因为真的有很多东西要掌握,而无法突出重点。
回看过去的5年,心里也很惆怅,曾经壮志凌云,今朝却有迷茫。不管怎么样,一个步子一个步子地迈出去。既然需要学,那就学。第一个5年已经过去,尽管不想俺们党说的第一个五年计划成果那么显著,至少也看到了自己的成长。