作者刘同学,本科就读于同济大学软件工程专业,研究生就读于卡耐基梅隆大学。
我曾在同济大学软件学院度过了我人生中最难忘的四年,而后,我前往大洋彼岸的美国,继续追寻中心中的理想。回首四年前那个夏天,懵懂的我,机缘巧合的选择了软件工程。当年漫不经心的选择,却选中了恐怕是最适合我的专业,不得不说是冥冥之中才有的幸运。
那么什么是软件工程呢?软件工程,其实追根溯源,是计算机领域研究的一个方向,通过借鉴一些工程的方法,旨在提高软件开发的效率以及可维护性。这门学科是2002年国家教育部新增的专业,时间上远远比计算机专业开设的时间要晚。但其实,计算机和软件工程专业可以称的上一对孪生的兄弟,由于和计算机学院过于相似,我们时常打趣到,我们和计算机学院最大的差别,就是我们是软院的,他们是计院的,在名字上我们有优势。国家开设这门专业的原因,恐怕也是预料到了十年以后甚至二十年以后社会上源源不断的需求。前两年创业氛围比较浓厚,无论是走在路上,抑或是通过手机移动端,总能收到“万事俱备,只差一个程序员”的招聘信息。如果说前面的十年是移动互连网的时代,后面的十年,恐怕会是VR、AR、人工智能的时代,而软件工程师则是为这个时代直接添砖加瓦的人,有着较大的刚性需求。
软件工程的课程,以同济大学为例,大一主要是微积分,线性代数,计算机基础,编程语言再加上一些通识教育课。和大部分工程专业一样,大一先打好知识的基础,大二大三再进行专业性的学习。以下是一份典型的软件学生的课表
在必修课程的基础上,我院目前分为四个培养方向:数字媒体方向,涉及计算机视觉,交互设计,游戏脚本语言等课程。软件工程方向,涉及linux程序开发,windows程序开发等。大型主机方向,涉及大型数据库应用,数据挖掘与数据仓库等。以及嵌入式方向,涉及嵌入式软件设计以及移动开发等。
如何能够在软件工程的学习甚至工作中脱颖而出,要求可能分为两方面。一方面是实打实的硬实力,比如编程能力,逻辑分析能力,数理基础等。另外一方面则是专业以外的软实力,比如英语能力,表达能力以及团队合作的能力等。对大部分的高中生而言,编程可能是一个陌生又熟悉的名词。很多人会觉得编程很难,加上自己之前没有些诸如信息竞赛的经验而放弃计算机专业的学习。而且很多新生刚一入学,就会面对编程的第一个拦路虎——c语言。我回想起刚入学时自己那段挣扎的经历,也是诸多感概。仔细想想,长久来看,就软件工程而言,入门是极其容易的。只需要你在高中阶段养成的数理逻辑即可。当然,若要做到行业万里挑一的水平,那确实对天赋有一定的要求,但以大部分人的努力还没有达到需要比拼天赋的程度。倘若你真能自律的学习四年,注重动手能力,写写代码,毕业之日,你再回首时,恐怕也会感慨,之前挡在自己面前的,不过是被翻越的一个个小山丘罢了。
现如今软件工程还是一门更加面向全球化的学科,对英语要求遍布在学习的方方面面。很多高校的专业课程甚至只以英语进行授课。也就是前段时间,姚期智院士在给清华交叉信息研究院的同学上课的时候曾说,之所以现在用英语上课,是因为英语现在以及未来几十年仍会是国际上学术界通用的语言,我们学好它,也是希望语言不会是将来学术工作的障碍,更是希望几十年后,通过各位的努力,能够将中文作为主流的语言。而我在大学上课的四年,对曹布阳教授英语开设的软件项目管理课程印象颇深。这类课程是软件工程专业独有的课程,是针对具备一定的编程基础与工程能力的高年级软件学生开设的。这门课更多关注的不是技术本身,而是如何运用一套工业级标准,使得软件开发流程化。在这门课上,同学们各自组成一个个小组,讨论软件开发过程中的需求,功能域,标准,风险,工作量,时间安排与人员工作分配。如果当前开发计划失败怎么办,备用方案是哪些。如何和客户有效进行沟通,如何跟客户达成软件功能点上的共识等。最后课程考核以小组答辩,文档撰写的形式,高屋建瓴的考察学生对软件工程的理解。这些问题恰恰是从事软件开发工作经常要面对的,而制定一个工业级的标准流程,则是软件工程这门学科产生的源动力。
对于计算机学院和软件学院的同学而言,接校外企业的私活,非常常见,也是一段津津乐道的体验。一方面完成了知识与实际产出之间的转换,一方面有一笔足以支撑经济上半独立的收入。我也曾和几个小伙伴一起,参与过某汽车公司自然人机交互平台的一期开发。我们都知道特斯拉,近几年电动汽车领域的开创者。而特斯拉汽车有个非常显眼的特征就是它有一个巨大的控制屏,用户可以利用这个大屏幕来导航,查询附近的充电桩,听音乐,电台,查看车辆状态等。是智能汽车的大脑,也是汽车和用户之间进行交流的门面。而我们此次项目的目的,就是探究用户在开车时,对于这样一种交互方式,有什么习惯,以及有什么反馈。这个项目历时6个月,一半的时候用于讨论需求和如何实现,一半时间用于实际的开发。而实际的开发中至少有一半时间用来修改方案,很多实现的功能也因此被舍弃,真正花在最后的成果的时间可能还不到实际开发的一半,但这也恰恰是软件开发的特点。对这项目印象最深的事还是项目交付前夕,恰好是二月出头,一群人呆在那个寒冷而凄凉的车库进行最后的通宵测试与调整。一边写代码,一边在感叹:车库,既可诞生比尔盖茨,乔布斯这些改变世界的人物,也可以是一群饥肠辘辘的勤劳小蜜蜂们的日常归宿。最后成果移交给甲方,第一次实现了从无产阶级到小资产阶级的转换,我也因此开开心心的换了台比较好的新电脑,悄悄的做好了下次旅游的计划。
出国交换,则是大学生涯的另一份别样的体验。在大三的下半学期,我选择了去大洋彼岸,美国的罗斯霍曼学院进行了为期一学期的学习生活。在我看来,中国与美国算是计算机领域数一数二强大的两个国家了。在美国学习,感触颇深的一点就是美国人的务实。从课程的设计上可见一斑。在国内的时候,大部分课程基本都是一个期末考试,可能一个期中考试。倘若是计算机类课程,则再添一个相关的课程项目。而在美国,大部分课程都由数不清的作业,小型考试,项目组成。如果说在国内时候很多课程,可以通过期末考试前一两周的突击学习来攫取一个不错的分数。而这,恐怕在美国是行不通的。毕竟每周的作业和考试加起来可能就占了课程总分的一半。如果说国内的学习是一个100米的短跑,考验的是你在考察前掌握知识的能力,国外的学习更多像是一场马拉松,你可能要时刻认真警惕,才能保证自己不掉队。
软件工程学习中非常重要的一环莫过于实习了。而我,也是在从美国回来的几个月后,前往北京微软亚洲研究院,进行了为期6个月的全职实习。现在回想起来,这个机会得来也是诸多不易。亚研院每年面向全国只招几百个实习生,很多岗位还是一个萝卜一个坑,有些还跟清华北大中科大里一些实验室是定向关系,所以机会着实不多。公司里,我所在的组是系统算法组,我组里导师是浙江大学与美国密歇根州立大学联合培养的博士。刚毕业没几年,非常年轻。而年轻最大的特点,就是极具工作的激情。我当时和他日常每两天会碰一次头,讨论下手头在做的事情,有哪些成果,面临哪些困难。有时候甚至会一天碰几次头,在工位旁的讨论室,两个人,在白板上边写上想法,边进行讨论,有时候还会发生比较激烈的争辩。互联网公司崇尚人人平等,发扬个性。除了微软,互联网公司中具有代表性的facebook,也是极其推崇工程师文化。很多公司里面的产品与项目,甚至就是几个工程师聚在一起,讨论讨论,一拍版就决定开始做了。如果说学土木的希望能建造出百年不倒的大桥,做理论研究的希望能够在自己的研究领域的历史簿留下自己的名字,那么每个软件人追求的可能是,有一天能够开发出世界级的产品,亲眼看到世界因你而改变。
毕业之日历历在目,回首自己的四年大学,刚刚能称得上不悔。除了自己当新生的那年,每年新生开学都会和学弟学妹们分享自己的大学生活,以一个过来人的身份和他们谈谈,大学应该怎么过。告诉同学们不要志得意满,不要因为起点高而放弃了后面的努力,笑到最后的往往不是一开始跑的最快的,而是最有热情,最自律,最能坚持的人。许多基础好,起点高的同学由于沉溺游戏而最终面临退学的困境,同时每年也涌现出一批同学,开始毫无基础,通过自己的学习与实践,毕业成为了大家眼中的大牛。
以同济大学软件学院12级毕业生为例,大约有20%的同学去国外深造,30%的同学选择了保研或考研。继续学业和找工作的同学,基本都继续从事软件相关的方向。还有大约50%的同学选择了毕业工作(包含创业的同学)。(每届毕业生,找到工作的机会接近100%)。只谈工作,其选择也是多元化的,想做系统的就去做系统工程师,该搞大数据的就去做数据科学家。人工智能无比火热,也有一批优秀的软件工程毕业的学生加入了无人车团队。人生充满着无限的可能,更多的是兴之所至罢了。
最后,不由想起吴军博士在《浪潮之巅》里描述的愿景:“近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上,在这十几年到二十年间,它们代表着科技的浪潮,直到下一波浪潮的来临。”
“对于一个弄潮的年轻人来讲,最幸运的,莫过于赶上一波大潮。”