有图有真相,全栈工程师和架构师与架构师待遇差距大吗

(北京单身圈)
(千夫影子)
(python学习)
第三方登录:全栈工程师
全栈工程师,也叫全端工程师,英文Full Stack developer。是指掌握多种技能,并能利用多种技能独立完成产品的人。
全局性思维
现代项目的开发,需要掌握多种技术。互联网项目,需要用到后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API设计和OAuth等等,比较前卫的项目,还会用到Single Page Application、Web Socket、HTML5/CSS3这些技术以及第三方开发像微信公众号微博应用等等。
Web前端也远远不是从前的切个图用个jQuery上个AJAX兼容各种浏览器那么简单了。现代的Web前端,你需要用到模块化开发、多屏兼容、MVC,各种复杂的交互与优化,甚至你需要用到Node.js来协助前端的开发。
所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局性思维的人非常非常重要。&
以上是百度百科给我们的定义。
曾经看到这样一个段子,意思大致是:
老板说:“小王啊,最近我们接了个项目,启动资金没有给,人才也比较短缺,时间也比较紧,你最近就加班一下吧!”
小王就说:“又要加班啊,那给我组织一下人手吧,我怎么也得要一个前端人才,一个数据库人才才行啊。”
老板有点不高兴了:“你不会html么,不会css么,不会js么,不会数据库么?还要什么前端,要什么帮手,资金没下来没人手,我们也没办法啊,最近抓点紧,项目做完,你就是全栈工程师了,到时候好处少不了你的~”
虽然是一个段子,但是其中映射的道理却很现实。我们为什么不能够满足于学好一门语言胜任某个职位?那是因为,展现你价值的舞台大小,是由你身怀的“绝技”所决定的。在IT行业,我们不能够满足于“找到工作”这一点而把自己锁死在一个小黑屋里,只会按部就班的完成领导安排的任务,那样,我们的向上的台阶就封死了,通往更大舞台的大门也因此而关闭了。我们还谈什么“年薪百万”这种理想呢?还设立什么“先挣它一个亿”这种“小目标”呢?还说什么“改变人类,改变世界”这种口号呢?你连自己都改变不了!
我们的产品、项目在实际开发中,往往是以分工合作的方式来进行的,这就意味着,做前端的人可能不需要知道业务上数据是怎么传递合计算的,是怎么储存的;做后端的的可能也不需要知道界面是怎么设计的,数据库是怎么优化的;……每个部分的人直观把自己的部分做好,然后告诉相邻环节的人我们需要什么和给出了什么就可以了,这样的分工方式体现到了代码低耦合性的优势——各个部分之间的关联极大地减小。更专业一点,每一个部分对于其他部分的人而言,可以称为“黑箱”(即那些既不能打开,又不能从外部直接观察其内部状态的系统)。
我所理解的全栈工程师
并不是需要你真正意义上的在实际开发中从0到1地去完成某个产品亦或是某个项目,而是需要你具备这种能力。不是像上文说的,使用别人给你的“黑箱”,而是将每一个“黑箱”在你的脑海中搞清楚、给透明化。
要知道,不仅仅我们在项目中的某个部分的代码是复用的、职责单一的、和可维护的,甚至我们所使用的语言,也是可以替换的的!如果你够“全栈”,你就会知道,数据库的管理系统就有好多,比如SQLServer,MYSQL,ORACLE,DB2,Sybase,甚至你不知道以后还会出现哪些更多的东西,包括我们使用的开发语言,比如.NET、C#、VB/VB.NET、C语言、C++、Java、Python、Perl、Ruby、汇编语言等程序开发语言,以及以后会出现的更多其他的语言,包括我们使用的前端语言:html语言,css样式代码,javascript脚本,最近又新推出了 html5,css3,jQuery等,以后也会有更多的版本甚至其他的语言。
&如果我们自己的技术局限,项目中中的沟通成本会提高,项目之外,我们要将自己的技术提升也很不轻松,如果往高了说,要做到产品设计,架构师,几乎是没有可能的,因为你根本不懂别人给你的是什么东西,更谈不上如何设计和优化了。
于是我们要把自己的定位提高一个档次,从一个只会完成功能的“码农”提升到一个懂本层原理、会思考的“程序员”,然后,可以在提升一个档次,做一个懂得架构中各层运作原理的“全栈程序员”,之后可以再提升一个档次,做一个会分析需求,懂项目设计的“分析师”或“设计师”,亦或是懂底层实现,会设计和优化的“架构师”等等,技术底子足够强大,发展空间也更为广阔。
在公司中发展的路径不外乎:程序员-系统分析员-架构师-技术经理-CTO(首席技术官),程序员-项目组长-项目经理-项目总监-CTO,程序员-产品设计师-产品经理-CTO这几种。职业不是只有一个的,“全栈”也不光指你的技术的,更可能影响到你的职业生涯,也让你有能力去完成你的梦想、实现的的“小目标”,甚至是改变世界。
所以,不就是一个人完成一个项目么?我们“可以干“!
阅读(...) 评论()全栈工程师和架构师的区别? - 知乎246被浏览27680分享邀请回答2添加评论分享收藏感谢收起431 条评论分享收藏感谢收起查看更多回答全栈(19)
首先我们看什么是架构师?架构师应该具备哪些能力?
大家都知道很多公司都有架构师这个职位,但是我想告诉大家的是看一个人是不是架构师不是看职位,而是看他所具备的能力以及正在做的事,所以有架构师头衔的人不一定具备架构师的能力,而不是架构师的人却在做着架构师的工作。
架构师类似于建筑行业的总设计师,通常在一个软件项目中,架构师需要完成软件项目中所有技术环节的设计,架构师虽然说不用亲自编写所有代码,但是架构师会对项目中所有运用的技术环节了如指掌。
因此架构师既可以是一个很简单的工作,也可以是一个具备超高难度的工作。而具体的难度系数,取决于具体的项目类型。就好像盖一个两层小楼,和一个跨海大桥,对架构师的要求截然不同。
在今天的课程中,陈老师给大家画了一些不同类型项目的架构图。如果想要成为架构师,大家可以看一下要成为架构师针对不同项目类型需要掌握的技术。
大家可以看到框里面并列列出了很多技术,只要位于同一层的技术掌握一个就可以完成完整的软件流程设计,不要求掌握全部。
我们来看第一张图
比如说我们现在目标任务是开发一个自主品牌的mp3播放器,我们的架构师需要懂硬件,比如单片机,传感器,声音设备,再利用汇编或者C语言,来对该电子系统编写相应的程序,就可以完成这样的一套mp3程序开发。
但软件的架构师在不断进化着,在计算机发明的初期,几乎大部分应用程序都是直接针对硬件来编写的,但是这样会导致程序的通用性差,所以才出现了操作系统。在目前市场上流通的大部分软件都是工作在操作系统之上的。
因此我们可以看见第二张图的这样的架构。
编写这样的应用程序需要我们架构师了解硬件,了解操作系统,并且能够使用C,C++,VB,等编程语言调用操作系统SDK完成软件功能开发。
由操作系统去跟硬件系统打交道,这样对于开发人员的要求就降低了很多,同时应用程序的通用性会变得更好。
再看看第三张图
随着计算机软件的发展,我们发现很多软件都是在和数据打交道,用户数据需要记录到系统中,同时应该能快速的检索数据,因此在我们的单机应用中出现了数据库这么一类应用程序。
在需要存储数据,搜书数据,以及对数据加工处理统计的时候可以把这些工作交给数据库去处理。
做这类应用软件的开发工程师,对硬件和操作系统了解即可。需要他精通数据库,并且能用任意语言调用系统提供的SDK。
在看看第四张图
这个是C/S应用程序架构,这里的客户端架构与第三张图单机应用类似,唯一不同的是在数据的来源的上作出了改变。原本的单机应用程序数据存在本地,但是一个软件系统如果有多人使用多个客户端连接的时候,不可能把数据库再放到莫一台客户机中。
解决方案就是让数据库通过网络对客户端提供数据服务。直接通过客户端远程连接直接操作数据库这种方式也是不可以的,因为数据库如果直接对外提供数据服务,那么凡是能连接到该网络的用户都可以绕过客户端操作数据库,这样数据安全就得不到保障。
因此出现了Server,我们通过服务器端程序来操作数据库,客户端程序只能选择与服务器端交互,所有的业务操作由服务器端完成,这种模式就是C/S架构。
完成C/S架构的架构师就比做单机应用的架构师难度大很多,不仅要懂得单机应用开发所需要的知识,还需要掌握网路数据库系统,以及web服务,socket服务等技术。
C/S应用程序架构存在一些缺点:需要更新所有已安装的客户端版本,而且会出现多个版本并存的情况,后期维护代价极高,而且很不方便。
因为这些原因,就出现了B/S这些架构的软件。
如图所示,我们可以看到此架构的服务端与第四张的服务器端基本一致。
主要区别是B/S架构的应用程序不需要安装客户端程序,而是使用大部分的计算机都有安装的浏览器来作为系统前端来与用户交互,而浏览器加载的内容全部来由服务端输出。
这样B/S的架构师难度相对来说比C/S架构师低很多,并且有诸多的成熟的解决方案,比如:java的javaee架构,微软的asp.net架构,完全开源的lamp架构,都是很成熟的解决方案。
这样架构的优点在于因为存在大量的成熟的解决方案,只需要一台可连入网络的服务器,就可以让整个系统运转起来。开发速度快,运营成本低。这种解决方案被广泛接纳。所以做这样架构的程序员数量很多,也因此往往不被当做架构师来看待。但是做这样架构的应用程序设计也架构设计中的一种。
我们来看第6张图
从2010年以后,智能手机在国内大量普及,几年时间诞生了数百万的App与手机游戏,往往一个项目既拥有自己的网站,又拥有独立的APP,而且作为一个整体的系统,iOS,安卓,与网页的数据应该是一致的。
那么要做到这样的架构设计的话,我们需要让我们的ios,安卓客户端共用我们的服务端,这样我们的多端才能保持数据高度一致。
服务器端的结构没有太大的变化,但是软件设计的方式产生了变化,原本B/S架构中由服务端向浏览器输出相应的html,css,js等静态内容即可,但如果涉及到移动互联网应用开发,我们会将我们的应用程序规范化,把前端和后端完全区分开来。
服务器端提供数据交互服务,并编写相应的接口,移动端进行接口调用,并完成界面数据填充以负责用户交互,即便是移动端浏览器,也应采用这种方式来交互。
接下来看第7张图
它和6张图比较类似,但多出来几块。我们把横线以上的部分叫服务端,横线以下的叫前端。我们在移动互联网络时代,经常会涉及到自己的平台与第三方平台的交互,我们的应用在接入支付宝,微信,微博等功能后,还会涉及到与第三方平台的功能交互。
通常需要我们通过服务器发起请求调用第三方的API,并且为第三方的平台保留回调的接口,因此在制作这样的应用程序开发的时候,架构师除了要掌握移动互联网络的技术外,还需要对第三方提供的功能与规范以及相应接口有充分的了解。
来看第8张图
如果只是从功能实现来说,能够按照第7张图完成架构设计的架构师,已经能满足需求。但是在实际运营的项目中,除了有功能需求以外,还要有质量需求,比如:网站的负载能力,网络并发连接数,系统的数据吞吐量,项目是否具有扩容能力等。
之前所展示给大家的所有架构,都是基于单服务器架构来设计的,如果只有一台服务器,无能我们怎样花钱来升级他的硬件配置,我们会发现很快将无法进一步扩容。最好的CPU,最大的内存条也是有限度的,因此采用集群架构,才是解决问题的正确方法。
而第8张图所画的就是标准的分布式集群架构,集群的扩容原则就是一个人干不完的活多个人一起干,让服务器与服务器之间,进行分工与协作。
而做分布式集群的架构的架构师,也有着较高的要求,而互联网上受人敬仰的架构师大多属于这类。你也可以认为这才是真正的架构师。
服务器端同第7张,第8张可以是一致的,具体是选择哪个服务器的架构,取决于项目的规模。
项目初期用户量少,可以选择单服务器架构,如果项目后期服务器负载压力过大,可以重构为分布式集群架构。
第9张图的重点在于项目前端,我们来看前端的技术架构图,这里所画的是市面所流行的混合APP的架构。
著名的混合APP应用有很多,比如说支付宝手机客户端,还有Facebook,这些应用都是采用混合APP架构设计的。
混合APP应用使用html,和css打造用户界面,无论是在浏览器,微信端,还是在APP中,都是如此。因此他具备B/S应用程序的优点,可以在服务器端更新应用内容,并且让应用在ios,安卓,浏览器端保持高度一致性。
利用单页web APP开发技术,能够让网页程序像原生应用一样流畅,而web APP的缺点在于,网页js程序无法调用手机硬件功能,但是混合APP架构可以通过微信sdk,微博sdk ,iOS bridges,安卓bridge是等方式来获取微信APP,微博APP以及手机硬件的功能。
因此混合APP架构同时具备了web APP与原生应用的优势,成为了市场上主流的移动应用架构设计方法。跨平台兼容性好,开发成本低,开发速度快。逐步取代了大量的原生应用。这也是我们全栈工程师学习的主要内容。
这次课程主题叫做全栈工程师通网架构师之路
为什么定这个主题呢?其实我们会发现全盏所涉及的开发领域和架构师基本一致,区别在于能力与深度
比如分布式服务部分,如果全盏工程师,可以使用类似Laravel框架这样的全盏框架解决本地服务,webservice ,消息队列等问题,
但架构师则应该能深入了解其中原理,并做出相应设计
全栈工程师只要加深各个领域知识深度,很容易向架构师方向发展
当然学习的同时也应该注意误区,很多人以为全栈是学习linux+php+h5+移动端,这是典型误区
因为在以往的大公司大团队时代,学科越分越细,因此无论大学课程还是培训机构,此前都是按专业和学科划分
如果学linux,那么从组网做网络配置,搭建文件共享或者邮件发送,web服务等都需要学习和掌握
学h5的话,webgl游戏开发,网页开发都有学习,其实对于全栈或者架构师发展来说,这样并不好
如果做全栈,那么我不需要学习如何做网管,所以使用linux应该集中在web服务环境上,类似,学h5,应该着重在移动端触屏设备开发为主,所以划分维度不同,
如果有了这个认识,就不会被误导,以为全栈或者架构师就是什么技术都学,什么都会。我么要的是更专业,学习更深。
相信通过今天的分享,大家对如何学习,如何发展,如何成为架构师,能有一个很好的认识。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:92701次
积分:1483
积分:1483
排名:千里之外
原创:50篇
转载:40篇
评论:12条
(1)(1)(3)(1)(1)(5)(20)(3)(1)(1)(3)(1)(1)(1)(1)(4)(3)(1)(11)(27)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 什么是全栈工程师 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信