什么是全栈工程师
掌握多种技能,并能利用多种技能独立完成产品的人
全栈工程师是一位资深开发工程师、架构师,以及具有敏捷开发技能的程序员
全栈工程师的价值
个人价值及自由度的极大提升
而当你成为一名真正的全栈工程师后,会感受到前所未有的个人价值与技术自由度的提升。
全局思维与技术前瞻性
于具备了各个开发环节与技术领域的知识,全栈工程师往往具有更好的大局观和技术前瞻性,能够在项目初期就选择正确的技术,并很好地把控一个项目的整体方向
降低沟通成本
栈工程师除了能够独立完成前后端的开发(甚至包括设计)外,如果能够在项目初期提前介入,便能很好地规避技术风险,过滤不合理的需求,从而显著降低因不同技术差异导致的沟通问题,显著降低项目风险
初创公司
初创公司往往资金有限,而一名优秀的全栈工程师能够帮助初创公司用最低的代价与最短的时间推出自己的产品
全栈工程师如何快速构建一个Web应用
1.网站定位与功能设定
资源发布与展示(核心功能,用户可以分享他们的资源,也可以看到其他人的分享)。
用户的第三方登录(为了快速开发,我省略了不必要的用户注册功能,全部采用第三方社交平台登录)。
用户反馈功能(用户反馈几乎是我自建的每个网站中都包含的功能,这使我能通过不断收集用户的反馈来改进这个平台)。
2.信息架构
业务实体
•User(用户)。•Resource(资源)。•Feedback(用户反馈)。
服务
•UserService(用户服务)。•ResourceService(资源服务)。•FeedbackService(用户反馈服务)
3.UI设计
借助现代网站设计工具(比如Blocs)或利用现成的网页模板去实现它
4.应用架构
没有最好的架构,只有最合适的架构。
为了便于系统日后的扩展,采用了前后端分离的架构设计
前端
目前最流行的两个前端框架是AngularJS和React
选择的是AngularJS(https://angularjs.org/)
可以使用它的Controller、Service、Directive等特性来构建出一个完整的Web应用
将来用Ionic来写出一个APP应用,由于Ionic也是基于AngularJS的
后端
基于Spring Boot(http://projects.spring.io/ spring-boot/)的框架,Spring Boot并不是Spring的一个升级版本,而是一个为构建微服务提供更好支持的全新框架。
借助Spring Boot,并基于Domain Driven Design的设计思想将系统的服务进行拆分,构建出一系列微服务。
后端使用到的框架技术组合
•Spring Boot:开发基于REST的服务,使用JSON作为数据交换格式。
•MyBatis:提供基于SQL的持久层支持。
•Redis:由于采用了前后端分离的做法,我用Redis来持久化用户Session信息。
•Spring Security:提供安全方面的支持,能与SpringBoot无缝整合。
•MySQL:在这个项目中我仍然使用了传统的关系型数据库。
•Maven:项目的包依赖管理,以及项目打包。
5.开发
基于Spring Boot及其他第三方库所提供的API来开发出基于REST的服务
在前端利用AngularJS将应用分为几个模块(UserManager,ResourceManger, FeedbackManager)分别开发
通过$http调用后端服务来进行业务处理和数据交互。
6.部署
(1)选择云服务器
上线初期,我们可以将系统的前端、后端和数据库都部署在一台云服务器上
如果你是一个学生,那么我建议你选择亚马逊云,因为它能提供首年免费使用的服务
(2)应用部署
后端:由于采用了Spring Boot,所以后端的服务可以用MavenPlugin直接打包成一个可运行的jar包,它集成了Jetty服务器可以直接向外提供REST服务
前端:前端是一个静态网站,包含HTML、CSS,以及图片文件。我将它部署在了一台Apache服务器上,当然你也可以选择Nginx这样的高性能服务器。
(3)安全
你需要定义出网站的安全策略,比如,用户组,用户权限的分配,出于对安全的考虑,尽可能将不需要开放的端口用防火墙隔离,只保留80等几个对外提供服务的端口
如果你的网站交互中包含一些敏感的信息,那么你还应该使用TLS对数据的传输进行加密处理。
7.性能调优
在正式上线之前,你还应该对网站做一些性能调优,以保证网站能够有比较好的响应速度。
使用YSlow等工具是一个不错的选择,它能告诉你网站加载缓慢的原因,并给出优化的建议。
常见的优化方法
合并压缩静态文件:将JavaScript、CSS文件进行压缩(去掉不必要的空格、换行和注释)与合并(将多个CSS或JavaScript文件合并成一个文件),并使用GZIP进行压缩,可以提高网站的加载速度
使用前端镜像库:对于网站中用到的第三方字体和前端代码库,我通过360和百度的前端镜像站点来获取,这样可以降低网站本身的流量开销,也可以提高网站的整体加载速度
利用云存储和CDN进行加速:技匠社的资源分享具备图片上传功能,而图片是最占带宽的,3M的带宽根本支持不了几个用户的同时访问
8.网站数据统计
网站上线后,你仍然需要对网站的访问量、用户情况进行持续的统计和分析。
我们可以借助第三方的统计平台来帮我们做这件事,如百度统计,你只需要在百度统计中注册一个账号并加入你的站点,然后在你的网站头部加入一小段JavaScript代码就能实现最基础的网站统计功能了,当你需要更多用户个性化分析时,可以在应用的内部增加相应的模块来进行数据的抓取和分析。
9.开发与设计工具
(1)Eclipse(https://eclipse.org/)
(2)Sublime Text 3(http://www.sublimetext.com/)
(3)CodeKit(https://codekitapp.com/)
(4)Sketch 3(http://www.sketchapp.com/)
优秀的全栈工程师应该走出去
参加技术大会
InfoQ、CSDN、GITC、优设、TED等网站都会定期举办各类技术大会
开拓思路,扩大技术社交圈
做公开演讲
全栈工程师作为团队的核心成员,他一定需要在团队内部做技术、管理等方面的演讲
尝试录制个人课程(视频或音频),并在慕课、网易课堂、优酷,或荔枝、喜马拉雅等各种媒体上分享自己的技能和知识
个人博客
优秀的全栈工程师懂得如何进行知识的积累,而技术博客就是一个很好的方式,将自己平时的实践、思考记录下来,配以tag标签方便日后的回顾
当你在不断记录和更新你的博客同时,来自不同地方的程序员也会通过你的博客认识你
参加线下活动
与以前的程序员总是宅在家里不同,现在的年轻程序员们更愿意分享和交流
很多网站也会组织不同技术主题的线下活动,在这些活动中你可以听到一些技术牛人的分享,还可以找到很多和你一样对技术富有激情的人