先上图:大型高性能高并发网站系统从前端到后端的整体技术架构图:
一、序:
怀着求知、进取的心开启本文,望与大家共进步。
细想一下,自己用过的语言应该也不算少。简述之、从最底层开始,画过电路板(GPS导航)。用过VHDL硬件编程语言写译码器。用汇编语言写过驱动、微操作系统中断向量表等。弄过keilc嵌入式开发。工作用c语言更多的是写些驱动、串口,I2C、算法之类。c++嘛,写过一个简单项目,没深究。弄linux的话,少不了要写shell脚本的,所以shell语言当仁不让要加入到开发的语言队列中。接下来,就开始了神奇的上层语言开发之旅。java,本人最喜欢的开发语言。也算是自行花时间研究比较深入的一门语言了。Next,弄过一段时间php,虽然曾经LAMP(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)架构风靡整个互联网(中国公司使用php作为上层语言居多),开发效率极高。用php写过一个公司内部工单系统、但是我对php确实不怎么感冒,可能对java更过偏爱的缘故吧,情有独钟。当前随着阿里系,京东派把网站整个转为java架构体系,java在国内也是空前火热。谈谈神奇语言--python,断断续续用了三四年,整体说来也算是自己比较喜欢的一种语言。python在国外当然是一片火热,不过在中国不温不火。猜测原因:中国懂python的太少,精通的更少。再说国内用python的公司也少,有名点的也就豆瓣大规模用python。结论:java一抓一大把,python一人难求,所以注定python国内短期内没法太火。不过在google等大牌的大力推崇下python发展势头还是很迅猛。不过python效率比java要低,而且是小众语言,后续发展有待验证。最后顺带列出捣鼓过的前端语言:html、css、javascript、jquery(DIY过js分页插件)。前端语言似乎没太要说的必要,大部分公司用的都差不多。
说了这么多总结一下:
使用时间排序:cpythonjava其他
喜欢程序排序:javapythonc其他
二、架构师杂谈:
首先参考一下微软架构师分类:企业架构师EA(EnterpriseArchitect)、基础结构架构师IA(InfrastructureArchitect)、特定技术架构TSA(Technology-SpecificArchitect)和解决方案架构师SA(SolutionArchitect)。微软的这个分类是按照架构师专注的领域不同而划分的。
国内比较少会这么细分,企业很大程度希望架构师具有上述四种职能。当然如果一定要细分的话,我更倾向于从语言层面来分。
1、基础平台架构师:该职位职责,更多的是架构一个通用的,平台性的,与语言相关性较少的框架系统。ex:图片服务系统、分布式缓存、分布式存储、统一监控系统等等,很容易发现这些基础系统都不受制于开发语言,也就是说,用java开发的系统,和用c语言开发的系统,抑或php系统,如果需要使用分布式缓存,只需要调用各自语言的分布式缓存接口即可。
2、软件开发架构师:该职位职责,更多的是在某个特定领域具有比较深入的技术沉淀,从而根据特定环境制定特定的优秀软件架构系统。ex:JAVA架构师、DotNet架构师、LAPM架构师。
综述:无论哪种架构师,都无法完全脱离语言层面的东西,只能说根据职能不能,对语言层面依赖多少问题。因此架构师几乎都是从程序员转变进阶过去。
回头再谈谈对某些话的一些肤浅想法。
“写程序,语言本身不重要,重要的是思想,语言都是相通的”。
假若你是技术大牛,那我很佩服你,因为你说这句话的时候,我想你应该在好些领域都精通了,至少也精通某些领域。所以依靠经验你确实可以忽略语言层面的东西。但是假如工作时间不长,这句话应该还是存在一些可质疑的地方。
举个例子,有人可以用php一个周完成一个网站。那你用c语言,或者汇编语言给我弄出来看看,当然这个例子有点极端。那就让你用java给我写吧(前提你不懂java,现学,但是你懂php)。就算你加班加点学完javassi或者ssh弄出来了,但是刚学java的你、java程序质量又能有多高呢?不懂JVM工作原理、不懂GC又如何写出高效程序;程序中总要用到hashMap吧、不知道hashMap底层数据结构,又如何能用好hashMap?(当然其他语言也有hashMap,原理大致差不多,但是如果你没有一定经验,你就怎么能确定java的hashMap和其他语言原理实现是一致的呢。而且确实也有各个语言实现不一致的情况,譬如java的内存自动GC,所以设计时候会略有不同)。就这个论题捎带多讲几句、对于c++而言、map底层为红黑树、hashmap为链接数组、不懂底层如何根据具体实际情况选择出效率最高的数据结构?越上层的语言对经验要求就越高,因为语言本身都会提供一整套完善的库让你调用,如果不熟悉,那么很抱歉,就算你是汇编高手,我想你来写java照样会是一团糟。犹记得,第一次写java程序时候,排序算法全部自己DIY,后来才知道,上层语言不像嵌入式,常用的工具类,基本都有,直接调用即可,而且性能一般说来要优于自己直接写。所以语言差别还是蛮大的。
吐槽这么多,总结下:如果你是基础平台构师级别语言确实不重要,因为架构技术都是相通的。如果你是开发实现、编码人员及特定语言平台架构、要想写出相对高质量的程序,和技术框架,还是有差别。所以我觉得语言选择于系统架构也相当重要,架构出来的东西还是要考虑如何能更好的实现才好。这就是为什么之前说的阿里系,京东派大规模转java架构体系原因。
所以对那些只是在YY着技术架构,光谈理论,不管实现的“技术大牛”,甚是难以理解。
再谈“青春饭”。简单谈下自己的一些理解吧。
我想如果足够热爱技术的话,为什么年龄到了三十,三十五就不能编程了?大家都知道国外很多大牛编程编到老(不过他们更多的是编码一些技术和经验要求很高的技术框架)。
那么“青春饭”,这又是为什么?
首先我们抗不过大环境。通俗的讲,中国软件行业国情决定了这个大气候环境。所以针对“青春饭”就不能着眼于国际来分析。那么问题来了。
假若当所有的人都认为到了一定年龄就不适合编码了,如果你还在编码那确实只能说你是个怪胎(因为你与国情不符)。
关于怪胎几点定义:1、还在编码,不能做技术管理或者技术架构(为公司创造更大价值)。2、要价很高。3、思想固化。4、缺乏激情。
这样就很容易理解计算机“青春饭”了。假若你工作七、八上十年了,你还是一个编码人员,管理不了团队,做不了技术架构之类的高级职务那么找工作确实困难。当然如果你要价和刚毕业的学生一样,那你技术上肯定还是很具优势。问题是,这可能么。再者,就算要价和刚毕业一样,你工作也缺乏了刚毕业学生的激情。最重要的一点是,对于刚毕业的学生,公司让他做什么,一般都会毫无怨言,自己找时间加班加点完成,你还能行么。如果不行,那么公司为什么要选你。还有一个就是,你都编码了那么久,还没达到一个相对较高的职位,我想更应该反思自己那么长的工作时间里,为什么没有成长到相之于编码更高的职级。其实原因很简单:要么你不适合这个行业,要么你不够努力。这样IT行业就被一些无聊之人给“青春饭”了。所以,我的观点是,计算机的“青春饭”是片面的。
(猜到大家对某些问题会有自己独特的见解,再次申明:所有文字仅代表个人观点,若与您观点不符,还请谅解)
重读百度百科之架构师:
架构师培养路程:
架构师不是通过理论学习可以搞出来的,不过不学习相关知识那肯定是不行的。总结架构师自我培养过程大致如下,仅供参考。
1、架构师胚胎(程序员)
学习的知识是语言基础、设计基础、通信基础等,应该在大学完成,内容包括java、c、c++、uml、RUP、XML、socket通信(通信协议)——学习搭建应用系统所必须的原材料。
2、架构师萌芽(高级程序员)
学习分布式系统、组建等内容,可以在大学或第一年工作时间接触,包括分布式系统原理、ejb、corba、专业治白癜风泉州白癜风医院