一、软件开发
不管你是硕士,还是博士,不管你是学 CS 哪个方向的,研究算法的也好,捣鼓人工智能的也罢,或者是图形处理、网络,大家将来都有一条共同的也是 CS 里最大的出路,就是去写 coe 编程做软件开发。很多人申请的时候,或者在学校读书学习期间,很在意各个方向的区别,痴迷于某个领域,但是工作几年回过头来一看,没啥区别,区别就是有的人通过学校期间的学习或者研究,具有 omain knowlege,然后去开发各种相应的 omain-specific application。
这么一说,可能大家就明白了,原来学 CS 的,不论你是什么方向,殊途同归。但区别还是有的,比如说现在 clou computing 比较 hot,不少公司在做相关的东西,如果你在学校里是研究这类技术的,公司可能会因为你的 omain knowlege 招你而不是一个研究图形学的,但是你将来的工作性质,跟开发图形处理软件的兄弟们是一样的。
二、软件测试
从软件工程的角度来说,有人写软件,就得有人专门跟在后面找 bug 提高软件的 quality。QA 的活一直被轻视,以前曾经被认为是可有可无的东西,不需要专门的 QA,现在被越来越重视了,当然还是有些人觉得 做 QA 不如做 evelopers 更重要,但是不可否认的事实是,QA 不可或缺,QA 工作现在很多,已经在计算机行业里占了很大的比例了。
QA 对技术的要求相对低。QA 可以粗略的分成两种,一种是 mannual testing,全手工测试,你不需编程,基本就是分析软件系统,制定测试计划和用例,然后用鼠标去点击为主,从技术角度来看,的确低级了点,早些年,evelopers 觉得去做 QA 是降级,跟发配充军一个意思,所以 QA 不得不到处找,来源很复杂,做 QA 的整体技术能力也比较低下 ; 现在随着公司对产品质量和测试工作的重视,有 CS 技术背景出身的 QA 越来越被青睐。第二种 QA,做的是自动化测试,就是用软件工具或者自己编程来自动化测试,这个就要求懂技术甚至要会编程,但是要求又没有 eveloper 那么高,这种技术性的 QA 也比较缺乏,现在的趋势是很多公司尽量用 automate testing 替代 mannual testing 来提高效率。
三、数据库 / 网络管理
数据库 / 网络管理对编程要求也很低,你不需要像开发数据库或者网络管理软件的人那样子,天天耗在编程里。这类工作优点很多:
1 就业范围广,稍微大点的公司、学校或者任何机构都需要有高级管理员来管理维护网络和存储备份数据库 ;
2 工作经验越丰富越受欢迎,因为很多 job 就是得经验丰富的 aministrator 才能处理好,不是随便扒拉一个没多少经验的人就能凑合着做的 ;
3 信息社会,公司对数据库和网络依赖严重,所以有时候一个经验丰富的 atabase/network aministrator 对公司可能非常重要,如果他突然撒手走了,公司又没有准备好替代人员的话,会损失惨重的。
因此,这类工作工资高,也比较稳定。前段时间有些金融公司即使大幅度裁员,核心的网络和数据库管理员也会被保留。这类工作的缺点是入门比较难,公司希望你能有相关的实战经验而不仅仅是会点学校里的理论知识,刚毕业的学生往往根本没有这方面的经验 ; 有时候需要在晚上或者周末工作,也可能有 on call 的情况出现。
四、其他
其他的工种也有,比如 release management,用户界面 (UI,user interface) 设计,usability,Technical support 等等,但是一方面这些工作数量相对少,另一方面,不同的公司里,相同的职位名称可能具体的工作性质不太一样,比如做 release managment 的,有的公司要求做很多 QA 的活,有的公司更靠近 evelopers,还有的公司可能让你安装 / 搭建系统来管理不同的 releases,跟个系统管理员似的,所以就不一一详叙。