这是一份Python高级全栈工程师+Python自动化运维架构+Python项目实战视频教学吗课程,在Web与软件开发的世界中有3个基本的关注点:前端、后端与全栈,全栈工程师既要了解后端开发,也要了解前端开发。
全栈工程师
他们是“全方位”的工程师,熟悉服务端的同时又懂客户端用户体验。全栈工程师理解Web开发进程的每一个方面,同时又会就整体策略与最佳实践对相关干系人提出建议与指导。
角色演变
在早期的桌面计算时代,我们常常会看到一个人就完成了整个应用的开发工作。随着程序变得越来越复杂,以及越来越多的技术涌现了出来,一个人很难再完全掌控应用开发的各个方面。
在21世纪初期,一些拥有专业化技能的专家开始出现。由于复杂性的持续攀升,当Web 2.0站点开始出现时,很多程序员又回到了更简单的方式上来。相比于构建复杂的数据库和企业计算网络,开发者开始部署稳定的LAMP栈(Linux、Apache、MySQL与PHP),并创建出了灵活的面向对象语言,如Django与Ruby on Rails。在这种环境下,全栈工程师的价值变得越来越大,因为他们熟悉大多数现代框架与语言。
运维复杂性的回归
不过,由于移动计算与iOS和Android平台的兴起,我们又回到了复杂性的新时代:低成本的云服务器如Amazon Web Services和微软的Azure、MongoDB等数据库、Node.js与Angular.js等前端技术、Docker等容器技术。这些平台、服务与框架都拥有自身的特性。因此,一个人几乎无法成为能够掌握所有技术的全栈工程师。
通才与专才
在当前的环境下,成为全栈工程师的好处在于没多少人拥有足够的知识、经验与沟通能力来整体把控使用了各种平台与框架的项目,如HTML5、机器学习及Scala等。因此,高水准的全栈工程师总是供不应求的。
不过,坏处则在于对于全栈工程师来说,他需要能够熟练掌握这些组件,但这是非常困难的事情,况且未来还会有新的技术涌现出来。你可能很聪明,但这些组件本身却是非常复杂的,每几个月都会出现新的语言和平台。要想时刻保持技术上的领先是一件极其困难的事情。出于这个原因,专才拥有自己独特的优势。组织倾向于雇佣专门的角色,因此相比于其他开发者来说,专才在深层次的知识以及某个狭窄领域的经验上会更胜一筹。
全栈工程师的前景
无论选择在前端还是后端进行深入学习,抑或是将自己定位成一个全栈的通才,从工作前景上来看都是好的。以北京为例,2017年北京全栈工程师的平均收入为20K,但是仍有75%的用户觉得此数据偏低。
从简单的雏形到完美的成品,全栈工程师通常被认为是**多面手,那全栈工程师到底做什么呢?
全栈工程师需要哪些技能
为了在激烈的市场竞争中占据一席之地,全栈工程师需要不断学习各方面技能,主要包含以下方面:
服务器管理/DevOps
程序员必须具备基本的服务器管理能力,包括并不限于以下知识:
1.在非GUI环境中,通过终端连接远程服务器2.会写Shell脚本编程3.服务器上的用户和群组管理4.管理Apache和Nginx等服务器程序来提供应用5.管理防火墙和权限6.安装及更新软件
除了这些基本功,程序员还需要懂得如何通过Docker或虚拟机来创建完善的、运行良好的独立开发环境;以及熟练操作版本控制系统,以便可靠地生成备份和可共享的协作代码库,来根据时间追踪代码变化。
云端/Cloud
除了物理服务器与虚拟服务器外,全栈工程师还需要了解云端,例如Google Cloud、Azure、AWS等。
虽然很多工具或平台可能不会立即应用,但长远看来,熟悉每个人都在讨论的服务可能会派上大用途,客户可能随时要求更换服务端,所以需要早做准备。
后端/Back-end
除了需懂得选择哪种语言,还应该熟悉:
1.与运维紧密相关的Web服务器,如Nginx和Apache2.NodeJS会将Java,CSS编译为静态文件,用PHP可以避免NodeJS的问题3.依赖管理工具的使用,比如PHP中的Composer4.良好的API设计,当前大多数网站是基于API的,很少有独立的前端交互5.对性能提高非常重要的搜索引擎使用6.用Gearman类工具,Crunz等库进行Cronjobs及后台作业7.缓存技术非常重要,使用Varnish,Redis或其他工具分片存储数据
数据库/Database
除了需掌握架构稳定的关系型数据库,如MySQL , PostgreSQL,一个全栈工程师还应该对非关系型数据库熟练应用,如MongoDB, Redis, Cassandra,更不用说Neo4j这样的图形数据库了。
数据库是在服务器上的,需要全栈工程师的控制,同时也存在远程解决方案,比如Mongo类的RestDB或Google的Firebase等。
前端/Front-end
说到前端,技术栈可能比较混乱。作为一个全栈工程师,你需要了解:
1.NodeJS和 NPM2.Yarn3.预处理器和编译器(如Babel),用来编译 Type, ES6, LESS, SCSS, SaSS4.构建和任务执行工具,如 Grunt和 Gulp5.框架,如 VueJS、React、Angul**.模块打包工具,如 Webpack、Browserify、Rollup
设计/Design
开发者需要知道产品在转为可用的HTML、CSS代码前应如何画原型,然后用Java进行交互,在后端用虚拟数据做模拟测试,只有当原型图完成,用户体验和交互界面设计完成,产品才可以开始真正的开发。所以设计本身就是非常巨大的挑战,需要使用一套特殊工具:
1.Photoshop ,Illustrator或一些开源工具如 Gimp , Inkscape等。2.好用、快速的编辑器,比如 Atom或 Sublime Text3.背景选择器,如Subtlepatterns和匹配颜色的颜色选择器4.CSS的栅格系统5.用于Java模拟的相关知识6.把原型图放到网上供用户查看和反馈的方式,比如Ngrok
日志
为了有效的监控应用的健康度,开发者需要追踪错误,找到这些日志并找出其中有价值的信息,还需要预测一些趋势,比如需要注意CPU及I/O占用率的上涨,以防服务器突然崩溃。这些和运维有一定联系,也需要掌握更多专门的技能
移动端
最后说到移动端,随着 iOS和安卓的webview变得越来越高效,以及PWA(渐进式web应用)的到来,原本的应用逐渐不再流行,因为他们开发起来过于复杂。所以一个全栈工程师必须了解 PWA或 React Native,或Native、Tabris、Cordova、Phonegap等好技术开发出基于API的客户端。
评论0