Server Side Engineer Roadmap


到成都研发中心已经有一个多月,现在已经有10位工程师逐渐地参与到服务器的开发工作中来,他们大部分之前都是做客户端的开发工作,有做iOS开发的,有做Android开发的,还有部分之前是做Symbian的开发工作的,大部分都没有服务器开发工作的经验,有一些甚至之前也没有接触过Java。

在实践中学习的效率是最高的,所以我们不会专门安排一段较长的时间专门给他们用于学习,通常我们要求他们用一天的时间搭建开发环境,然后第二天或者第三天就开始实际的编码。这听起来似乎有点残酷,或者说,新手能够在第二天就写出有用的代码吗?

答案是可以的,因为我们采用了结对编程的实践,每个新手在一开始的时候,都由有经验的人带着一起Coding,包括从头创建一个项目,进行配置,创建必要的脚本,一起完成具体的业务需求,一起写测试,一起重构,并发布到服务器。经过这样的过程,新手也能在很短时间内,对整个服务器的开发流程有一个很具体的认知,因为这些都是他亲身经历的(新手通常在Pair的时候应该承担更多的实际的编码工作)。恐惧来源于未知,亲身经历过整个过程以后,开发的每一个方面对这曾经的新手来说,不再是未知的怪兽。

当然,这个时候大部分人应该还只是知其然不知其所以然,“我知道怎么完成任务,但是我不知道他们运行的机制和原理”,有这种想法的工程师最少不是一个平庸的工程师,因为他有探索本质的欲望,这是很多优秀的工程师(以前喜欢说架构师,但是现在觉得工程师更贴切)的共同的特点,有更高的目标才能进步更快。

应这些有追求的小伙子/小美女们的要求,在这里尝试整理一些学习的资料和学习路线图,帮助他们更快的成长!

注:目前我们的技术Stack以Java为主,所以推荐的资料大部分都是Java Web相关的

基础篇

这里提到的基础知识,我认为是必须掌握的。

基础篇之Java

  • 抽象类和抽象方法
  • Java面向对象中的继承、多态
  • 集合工具包 List, Map, Set 的使用
  • 多线程,锁机制
  • 范型

基础篇之前端开发知识

  • HTML,HTML5
  • CSS
  • JavaScript基本语法

基础篇之数据库

  • SQL语法
  • MySQL基本操作

提高篇

提高篇中提高的框架和知识点,掌握了之后对工作效率的提高有明显的效果。

提高篇之相关知识点

  • HTTP协议
  • RESTful架构
  • Servlet和JSP规范
  • JPA规范

提高篇之软件框架

提高篇之编码技能

进阶篇

目前Web开发技术的发展速度越来越快,成熟的Spring + JPA + MySQL的组合的缺点越来越明显,他们对移动互联网的业务开发来说,有点太重了:

  • Spring MVC尝试把所有的事情都在服务器端解决,但是现在前端框架的能力已经越来越强大,很多事情放在浏览器里面完成更方便,用户体验更好
  • 打包之后动不动就几十M安装包、更新版本之后重启JVM需要漫长的等待,这些因素都跟现在的移动互联网的敏捷的开发周期不相符
  • 使用到的第三方的依赖包有几十个,具体做什么事情不是特别清楚,发生问题时候,不同意定位

现在的趋势是后端只提供RESTful的接口,展现和控制逻辑完全在前端完成。

Node.js

Node.js利用Google Chrome的V8引擎来运行本地的JavaScript程序,构建快速、高并发的网络应用程序,他的优点是:

  • 采用事件驱动的模型,非常适合高并发、高IO访问、低CPU计算的应用,一台服务器可以轻松处理10万个并发请求
  • 使用解释性的JavaScript,无需编译,适合快速开发、快速迭代
  • JavaScript语法对大部分工程师来说,是很容易上手的;同时,JavaScript也是前端开发的最主要的技能

JavaScript是目前最流行最前卫的语言,从Github上面的语言统计可以看出来:

{% img /images/2013/06/github-top-languages.png %}

Go

Go 是Google在2007年发起的一个开源的服务器编程语言,有如下的优点:

  • 简单!表现在两方面,一是语法简单、清晰,Java、C++里面一些复杂的语法都不会出现在这里,你能在Go里面发现简洁的替代方式;另一方面是Go自身所带的库以清晰的结构提供了绝大部分所必需的功能
  • 高性能。Go是编译成本地的二进制运行的,运行效率跟C是一个级别,是PHP之类的动态语言无法比拟的
  • 优秀的并发编程模型,Go里面的Channel和Goroutine在进行并发业务开发的时候,无需担心内存共享中很麻烦的锁的问题;同时Go的并发模型可以有效的利用现代服务器硬件的多核资源
  • 工程编译速度快,同样规模的Go项目,编译时间比C语言项目少很多

Go开发RESTful的服务的速度很快,跟使用PHP的开发效率差不多,并且在代码越来越多的时候,Go的优秀的工程管理优势会越来越明显。

NoSQL产品

MySQL作为最流行的数据存储方案,已经统治了这个领域很多年,现在出现了各种各样的NoSQL产品,实际上是作为传统数据库的补充方案,每一种都有自己的特点,应该根据实际的业务需求选择:

  • Memcache
  • MongoDB
  • Redis
  • Hadoop 和 HBase
  • Neo4j