职业规划的过程中经常会被问到这样的问题:
我是该深入钻研专精一门,走技术大牛路线,还是所有都要精通,做一个全栈工程师?
类似这样的问题还有其他变种问题,是不是到了30岁最迟35岁就要转管理了,是不是技术年龄大了就没有优势,精力跟不上了?
这些都是从业者普遍存在的问题,反应了技术发展的两个方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。 到底选哪个呢?
很多人对前端、后端、全栈都是按能力排名的,排名方式如下:
前端>后端>全栈,然后人们都喜欢最牛掰的,就像没人知道第二个登上月球的人一样,然后全栈就火了。小编先把这三个工种该做什么不该做什么,大家就清楚怎么做了。
前端:
所有你能看到的东西都是前端做的,比如界面、交互,当然还有数据从后台读取展示和向后台发送数据。
(具体对比如图,一图抵万言。)
后端:
所有跟业务逻辑权限控制数据处理有关的都是后台做的,比如权限控制、订单管理、数据库交互。
全栈:
前端后端都有一定的了解和能力,能够前后端独立工作。
通过以上三者的综述,大家可以清晰的分出前端和后端的工作内容和所需技术,但是对全栈还不是很了解,至少他不是简单的前端+后端技术的叠加。那么全栈到底工作内容是什么呢?他的价值又在哪呢?我们是否需要成为这样的人呢?
首先全栈必须是掌握多种技能,并能利用多种技能独立完成产品的人 。
他们掌握着独立完成产品常用的20%技能,另外的80%需要的时候有能力获得。而另外两个工种是掌握着专业领域80%的技能,甚至是90%,另外的10%通过其他渠道获得。
全栈工程师的工作内容和价值是融在一起的。
全栈工程师就算是各方面都是80%(确实有这样的人存在),但是精力有限,他一个人不能长期干3-5个人的活儿。所以他们工作的大部分内容在全局性把握和沟通,特别优秀的全栈能做到关键性技术指导。
全局性把握
项目的开发,很少是只用到一两种技术的,特别是在移动互联网大潮下。随便一个互联网项目中用到的技术,就会需要用到后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFulAPI设计和OAuth等等,一些比较前卫的项目,可能会用到SinglePage Application、Web Socket、HTML5/CSS3这些技术,还有像第三方开发像微信公众号微博应用等等。
Web前端也远远不是从前的切个图用个jQuery上个AJAX兼容各种浏览器那么简单了。现代的Web前端,你需要用到模块化开发、多屏兼容、MVC,各种复杂的交互与优化,甚至你需要用到Node.js来协助前端的开发。
所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局性思维的人非常非常重要。
在恰当的时机用恰当的技术开发实现恰当的产品常常要远比具体某个功能实现要复杂和重要的多,而这是全栈工程师需要考虑的。
沟通成本
项目越大,沟通成本越高,做过项目管理的人都知道,项目中的人力是1+1<2的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。
而全栈工程师的成本几乎为零,因为各种技术都懂,胸有成竹,一不小心自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多,你让一个后端和一个前端去沟通,那完全是鸡同鸭讲,更不用说设计师与后端了。但如果有一个人懂产品懂设计懂前端懂后端,那沟通的结果显然不一样,因为他们讲的,彼此都能听得懂。
全栈工程师的机会
创业型公司和中小型公司的发展,尤其是在万众创业的风潮,会促进全栈工程师的发展,也会更加凸显他们的价值,因为虽然单个全栈工程师的工资很高,但是远比专业性分工团队的成本要低得多,而且全栈工程师更能应对多变的创业公司需求,降低团队沟通成本。
但是,很多人为了成为全栈工程师或者已经是全栈工程师面对着巨大的困境。
1.一个工作两年的切图都比一个全栈工程师切图好,一个8k的Java都比3W的全栈写的代码快,他们经历着博而不精的煎熬。
2.成为全栈很多人需要花费大量的学习时间,到最后依然是无功而返。
最后造成了一个现象是,你确实什么都会,问题是我要的是一个8k的切图,而不是一个3万什么都会一点的全栈。
造成这两个现象的原因有内因和外因两个方面。
内因看个人定位不清晰,在该专精的时候选择了全栈。
不管是前端还是后台,全栈的意思是你能够独立工作,不是你前端会切个图,后端你会写个sql就行的,而一个领域没有三年是达不到上述情况的,而很多人工作三年切图或者js就想着全栈了。
全栈不是一不小心成为的,是你的工作经验堆出来的,不是学出来的,全栈是经验不是课本,而是一种思维。
天我来谈谈我对传统HTML与VUE的区别理解(不谈太深的区别,查了一下网上那些说的都一样,我只谈很多人最关心的不一样的,说不对请理解,对不太了解或想了解VUE的人)。
1、 什么是vue
官网介绍:vue是一套构建用户界面的渐进式框架。它与其他重量级框架不同的是,vue采用自下而上增量开发的设计。Vue的核心库只关注视图层,非常容易学习,非常容易与其他库或已有项目整合。
Vue的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图层组件。
2、什么是HTML(HTML5)
HTML5是Web中核心语言HTML的规范,用户使用任何手段进行网页浏览时看到的内容原本都是HTML格式的,在浏览器中通过一些技术处理将其转换成为了可识别的信息。
总结:它们相同的地方就一句话:用途和结果都是一样的,不管是VUE还是HTML,最终都是将数据使用各种UI及方式展现给用户,也就是都是视图层页面的。
有人会说使用HTML和VUE开发有什么区别呢?许多人觉得结果都是视图层表达,而且VUE打包发布后不还是HTML+一堆JS文件,而且还要引入导入编译感觉特麻烦,感觉VUE好难,为什么要学VUE?
1、开发和部署
VUE 开发过程确实挺麻烦的,要安装依赖,要npm一堆包(还经常失败)。而HTML就简单多了,直接就拿来主意,下载下来,改改就用。
部署的话都差不多,都是在任何服务上都可以直接使用,而且都没有什么依赖。
但是我觉得VUE的开发类似于开发一个APP,所以他的打包结果是比纯HTML+JS更安全的,相当于做过混淆,因而他发布后的体积更小。
2、数据通讯
HTML+JS 数据POST,GET 等基本访问方式,但是如果直接在HTML中使用数据判断,或数据循环输出必须借助js,jquery等通过前端处理然后对id进行赋值操作,所以一般只能借助动态语言如php,java,.net等语言环境进行转化,但这样使得web对动态语言环境依赖性过强,造成后端迁移时太过于复杂,而且这样的Web一般要求前端和后端部署在一起。
VUE则不依赖于动态语言输出环境,只要是双方约定了数据传输接口,服务器放在哪里,不管使用什么后台语言都没关系,因而他的灵活性更强。
3、安全性
有些产品有些公司对语言是有选择的,主要是不想让代码暴露太多,而HTML+JS的方式往往是达不到要求的,因而现在许多企业还是在使用桌面软件的形式,又或者是要你使用对方的云服务,而私有云部署则要贵的很多,而且比较贵的软件还要安装秘钥软件,加密狗等方式,无非就是防止你将软件转移或无限使用或获取他的核心算法(虽然js也是有混淆方法的,但很少有人会这么做,我也没试过但是很影响效率)。
以前我在一个公司就是加班写了一个WEB程序里边有一个算法是分析公司产品结构的(那时VUE还不盛行),正好呢又遇到一个懂点的老板(居然会用F12),结果看到核心代码了,当时就否定了,改用了WinForm 重写,那个辛苦你懂的。
VUE的打包的话,其实就是根据在页面中所使用到的组件然后根据你的逻辑关系等进行混淆打包,然后在用户加载时按需进行加载解析,从某种意义上来说做WEB是一种保护。我觉得这与桌面程序及APP打包效果是一样的(软件和APP也是可以反编译嘛,反编译后的结果就是混淆),当然不说加密混淆了。
现在国内出现了像DCloud、APICloud(虽然这二家经常打架,毕竟相似度很高,我不做评论,但不可否认对一个只会写HTML+JS的人转写APP是一个不错的选择)这些由HTML5开始的跨平台软件也开始支持VUE了。
最后附上VUE打包后的调试预览图,纯HTML的就不多说了,自己F12吧。
诸多的企业尤其是创业型公司中,HR 在招聘时往往希望可以招到一名技术全能型人才,而这种人才又被称之为全栈开发者。
简单地说,全栈开发者就是可以构建完整应用程序的人。他们了解前端和后端技术、工具和服务,并结合所有这些技能开发出可以在生产环境中运行的东西。
那么对于全栈开发者而言,都需要具备哪些技能?
1.JS交互设计
JS即JavaScript,就是适应动态网页制作的需要而诞生的一种新的编程语言,如今越来越广泛地使用于Internet网页制作上。JS 能够使原先纯展示的页面增加动态效果,全栈工程师需要掌握JavaScript基础语法、进阶以及高级编程。
2.HTML5+CSS3
HTML5是开放的Web网络平台的奠基石,CSS3原理同CSS,是在网页中自定义样式表的选择符,然后在网页中大量引用这些选择符。对一名全栈工程师来说,HTML5+CSS3的掌握是工作的基础,最主要需要掌握的就是HTML5相关基础知识、HTML5 语法及使用技巧、HTML5 常用标签等相关内容以及 CSS 语法及使用技巧等。
3.小程序与APP开发
小程序是一种依托于微信的应用,而APP是一种技术,依托于浏览器存在。小程序背靠微信,流量大,受众多,一度刷爆互联网,而APP是随着智能手机的发展应运而生的,为广大用户带来了很多便捷,这两种技术目前来说相对火热,同时也是一名合格的全栈工程师必须掌握的。
4.Node开发
Node 是一个让 Java 运行在服务端的开发平台,用于方便地搭建响应速度快、易于扩展的网络应用。一名全栈工程师需要能够使用 Node.js 进行 Web 服务端开发以及使用 Node.js 操作 MongoDB 数据库,Node是新兴的一个前端框架,有很多吸引人的地方,全栈工程师还可以使用它来开发一些快速移动Web框架。
5.前端框架
前端框架主要是提高前端开发效率,降低开发难度。它其实是一套解决方案,就是按固定的规则来安排代码结构,有了框架,前端开发能够事半功倍,所以说全栈工程师是要会使用这些前端框架的,比如最基本的Vue框架、React框架、Angular框架等。
6. Git
Git 也称为版本控制系统,开发人员可以跟踪其他人对 codebase 的更改。
了解有关 Git 的信息将有助于你正确理解并获取新代码。除此之外,你还必须了解如何更新代码的各个部分,如何进行修复,如何在不造成任何中断的情况下修改代码。当然,如果你想在全栈开发人员中脱颖而出,你需要对 Git 有更全面的了解。
7. Web 应用程序架构
掌握了语言、编程和其他一些基础知识后,接下来就是棘手的部分。这一部分与创建复杂 web 应用程序有关。你需要知道如何正确地构造代码、分离文件、托管大型媒体文件、在数据库中构造数据以及执行特定的计算任务等等。
获得关于这些应用程序体系结构知识的最佳方法就是实际项目操作。这将帮助你识别和解决在开发复杂 web 应用程序时可能发生的各种问题。
8. 数据结构及基本算法
这个部分在开发领域中存在争议,有些开发人员不太重视它们。但是,全栈工程师应该了解几乎所有开发过程和实践的专业知识,如果你不懂数据结构和基本算法的话,可能会让你陷入大麻烦。所以,如果你想进入大公司并获得成功,你必须掌握这方面的详细知识。
9.Web 存储和数据库
在开发应用程序时,需要将数据存储在某处,以便稍后可以访问。因此,你需要了解 Web 存储和数据库,如理解相关数据的用途,学习 NoSQL 数据库,寻找优解,连接数据库与所选的后端语言,了解内存数据存储的重要性,Web 存储,cookies,session 和缓存数据。
10. 后台支持语言
后端确保能够很好地处理用户身份验证、数据库操作和应用程序逻辑。没有需要学习的特定后端语言。SQL、Java、JavaScript、Python、c#、PHP、IOS 和c++ 都是您必须了解的语言。
全栈工程师虽然学术渊博,但不意味着他们能抄捷径,要成为一名全栈工程师,至少要使用过多种编程语言在各种领域的不同平台工作多年。
如果你未来的职业规划是一名出色的全栈工程师,一定要记住深刻挖掘自己潜力,务必打好基础体系架构,把一门学科做到深入甚至精通,自然融会贯通。
*请认真填写需求信息,我们会在24小时内与您取得联系。