玩笑之余,我们还是来划分一下同时程序猿有什么分别。竖向分的话,从下往上,大部分公司都是有Software Engineer (SWE), Senior Software Enginer, Staff Software Engineer和Principal Software Engineer等等,这些都是根据员工的不同经验和能力来划分的。Principal和Staff都属于公司内部的各大高手,数目也很少,一般都是独立开发过大系统的人才能够胜任。刚毕业的大学生能够投的也仅有初级的SWE,有过一些工作经验的也可以投Senior Software Engineer的职位。
横向我们如果按照从事的产品的层次来划分的话,我们可以分为前端工程师(Frontend Engineer) 、后端工程师(Backend Engineer) 、数据库工程师(Database Engineer)、架构工程师(Infrastructure Engineer)、数据工程师(Data Engineer)、数据科学家(Data Scientist) 等等。
前端工程师一般就是设计前端页面,主要职责是利用(X)HTML/CSS/JavaScript/Flash等各种Web技术进行客户端产品的开发,以及UI/UX各方面的知识。前端工程师直接决定了公司的颜值,所以也是很重要的。前端工程师经常需要和Design(设计人员)和Product Manager打交道,所以也需要了解一些产品设计的内容。所以有一些小公司可能也把前端和UI/UX,美工等混用。
后端工程师负责后端设计各种网络服务,主要需要掌握的是各种后端语言如Java, Python, PHP等等。后端工程师的最重要指责是维护产品的稳定性和性能,类似网页访问是否足够快,访问量大了是否网站会挂掉,以及各种负责的商业逻辑大部分都是属于后端工程师的内容。为了追求更好的性能,后端工程师也会经常去骚扰更后端的数据库工程师和架构工程师。
数据库工程师负责数据库的维护和操作,需要掌握的是各种数据库的维护知识,以及SQL语句。现在大数据兴起,各种NoSQL等全新概念的数据库也应用颇广。在某些公司里边可能数据库工程师和后端工程师是混用的。
架构工程师负责各种基础架构的搭建和维护,如各种分布式系统、网络、系统日志管理、大数据等全局通用的平台。这里边也是高手如云,一般只会在大公司会有此设置,一般的公司可能直接使用云计算,就免去了自己的架构设计了。
数据工程师则是随着大数据的飞速发展而新增加的职位,所以要求也不尽相同。有的强调数据库编程、有的强调系统设计的能力、有的突出应用数学和统计学要求、有的则要求有投行或者咨询公司经验、有些是希望能找到懂得产品和市场的应用型人才不一而足。数据科学家一般是在这一类当中偏向于研究数学模型的职位。
现在很流行的一个全栈工程师(Full Stack Engineer)就是要求你掌握所有的这些技能,一般在小公司或者Startup里边比较多这种位置,因为公司的业务也很灵活,职位也不会固定,所以你最好十八般武艺样样皆能。
我们还可以按照流水线的前后来划分,一般分为Software Engineer (SWE), 测试工程师Software Engineer in Test (SET), Quality Assurance (QA)。大家可以脑海中想象一下一条流水线,最前端的是SWE写成各种代码,然后测试工程师会不断的去写测试用的代码去验证你代码是否妥当,最后QA会从前端开始模拟用户的操作去测试你写的代码达到了指定的功能,同时又不损害原有的功能。经过这三者之手之后,你的代码就可以上线和普通用户见面了。当然有些公司可能不会单独分出来SET,而是让SWE就直接去写测试代码。
除了工程师的岗位之外,下面介绍一些辅助性或者行政性的职位。
产品经理(Product Manger),顾名思义就是要关注产品的细节,设计出合适的features,然后把产品需求交给