##三个在校学生有关在校学习、考研、编程语言、未来工作的疑问及答复 **【来信1】**  周学长:  您好,不好意思打扰了,我本科是重庆邮电大学的。学的是微电子,从CSDN上看到了,想麻烦请教几个问题。  昨天研招网上收到了大连海事的一个省实验室的复试通知,调剂的是计算机专硕。正好认识个东软的学长,他说大连海事这些省部级的实验室实力普遍弱,相当于边缘地带,都是搞很多理论性的课题和研究为主,也有物联网的项目,但不多,按他的意思是小实验室其他项目基本接不到。  但好处就是可以正儿八经的学计算机,补算法和数据结构,可以好好的巩固下我薄弱的基础。我一直很想从事数据库数据挖掘方面的,这个实验室也正好有这个方向。  那么问题来了,还是恳请学长指点下:  第一:边缘地带的小实验室出来工作肯定会被看不起,但这个比重究竟有多少?通过加强理论和基本功的学习能否弥补呢?  第二:这个实验室现在看来非常重视算法理论研究,那么将来找工作,是理论层面搞的好的会有优势,还是说项目和实习接的多的学生有优势呢?  第三:工作单位是否非常看重研究生项目阶段的经历呢?是专精一个项目好(只有物联网) 还是说你研究生阶段很多项目都有涉猎好?  谢谢学长,这是我的思考和顾虑,还望给小弟指点下,谢谢了。 **【答复】**  你好!  在考研这个事情上,我总是告知大家要三思而后行,一定要有自己的想法,因为这涉及到自己未来若干年甚至是一生的职业发展方向。  从你的邮件里,我了解到你最大的疑虑是想利用研究生这几年补充下计算机方面的理论知识,但又怕太偏重理论了而不好就业。现实的情况是如果你不想继续深造(读博),那么在研究生阶段一定要做一些实践性强一点的项目,这样对找工作有好处,毕竟用人单位也希望你能够尽快上手,而不需要重新培养很长一段时间。  下面来具体回答你的问题:  问题一:是不是小实验室出来的并不是最重要的,最主要是看你做过什么、学过什么,是不是合用人单位的胃口。举个例子,如果你在研究生阶段做过的项目也是未来的雇主正在做的,那么你就有很大的机会被录用。通过加强理论和基本功的学习只能让你知道的理论知识多一点,关键还是看你的动手能力、实践能力、举一反三的能力,看你拿到一个东西之后是不是能够很快学会它。  问题二:这个要看你未来找的工作的性质,是像研究所里面那样搞理论研究的呢,还是像一般软件企业做产品开发的呢。不过,根据我的了解,一般企业还是喜欢项目和实习经验多的学生,因为他们做过实际的东西,在接触到新东西之后能够更快地上手。在读研期间,这两个方面都不要荒废,在学习的同时要实践,在实践的同时也要学习。  问题三:工作单位确实非常看重研究生阶段的项目经历,因为这显示出了你做事情的能力、态度等。项目的多少不重要,重要的是你从这些项目中学到了什么,是否通过做这些项目提升了自己的能力。如果你做过很多的项目,但基本上都是在打酱油,啥也没学到,那不如专精一个项目来得更好。现在物联网很火,如果做了这方面的有实质性内容的项目,对你未来的就业还是很有帮助的。  研究生阶段与本科阶段很大的不同在于前者对于个人自主能动性的要求更高,你必须要主动地去研究一些东西、去做一些感兴趣的项目。只要你确实学到了真本领,那么找到满意的工作应该不是很难的事情。你的努力决定了你的未来。  我的以上建议,请参考。希望你做出最合适自己的决定,并选择好自己未来的发展道路。感谢你的来信及对我的信任,请继续关注本人博客。 * * * **【来信2】**  周老师,你好!  我是计算机专业的在读研究生,现在对于IT行业的工作还不是很清楚,在学校根本不知道企业里面职位还有具体工作内容,想提前了解一下,现在我所知道的有开发(就是需要编写程序和文档),还有测试,维护,销售,这些都听说过,但是具体工作内容也一点都不了解,所以想请教步入IT行业能做哪些,到时候可以自己选择。 **【答复】**  你好!  IT行业的分工非常的细,我只能就我所知道的情况给出答复,请参考。  企业里面的招聘分为校招和社招两种,对于这两种性质的招聘,企业的选人标准是不一样的。一般的大型企业每年都会有校招和社招的名额,而初创型的小企业更倾向于社招,因为社招的人能够很快独立承担起工作。  为了便于说明,我将IT企业分为两类,一类是技术类企业,另一类是非技术类企业。技术类企业是需要独立开发软件产品的企业,像BAT、华为、中兴等;非技术类企业是不需要独立开发软件产品而以运营为主的企业,像三大运营商。这里,我介绍一下技术类企业的职位和具体工作内容。  对于计算机相关专业的学生来说,应聘的岗位主要有这几个:开发、测试、运维和销售。其中,又以开发和测试居多。  开发人员,也就是所谓的程序员,主要做这些工作:  1) 对软件需求说明书进行评审,明确需要开发的软件的功能。  2) 编写软件详细设计、单元测试和集成测试规程文档。软件详细设计文档是最重要的文档,在里面,要写清楚自己程序的流程、函数设计、异常保护考虑等。在动手写程序之前,一定要将软件详细设计文档写好,等评审通过了再写代码。  3) 编写代码,用程序实现软件的功能。很多人认为的软件开发就是写代码,其实这是一种很狭隘的理解,写代码在整个开发流程中,只占了很小的部分。  4) 程序写好之后,开发人员要对它进行单元测试和集成测试(也叫自测),确保程序的正确性。这里就出现了“测试”二字,但与软件测试所做的“测试”是不同的,他们做的是“系统测试”。等自测通过之后,并且相关文档也写好之后,就可以提交程序版本,供测试人员进行相对专业的测试了。  5) 解决软件故障并制作软件升级包。是程序就会有bug,不管是测试中发现的问题还是客户反馈回来的问题,开发人员都要在第一时间将其解决掉。另外,很多软件都会有版本的演进,这就需要对已经运行起来的软件进行升级,开发人员要制作软件升级包并指导相关人员进行升级操作。  测试人员主要做这几件事情:  1) 搭建测试环境。这个是很重要的,也是比较难的事情。什么是“测试环境”呢?就是说,不管什么软件,都有个运行的条件,如操作系统类型、参数设置及配套软硬件设施等,这些统称为“环境”。为了保证程序功能的正确性,要在软件发布之前,尽量模拟软件实际的运行环境,这就是搭建测试环境时要做的事情。很多软件在正式商用之后出问题,就在于测试的时候没有还原现场的环境所致。  2) 对软件进行系统测试并输出测试报告。所谓系统测试,就是指将配套的所有软件都运行起来,看一下所有的功能是否正常。当出现问题的时候,要及时和开发人员联系,以修正软件缺陷。  3) 指导现场人员安装软件程序,并在必要的时候亲自出差到现场去安装软件。因此,测试人员也可能会经常出差的。  运维人员的主要任务是保证软件产品的正常运行,如果发现产品有故障,要在第一时间叫专业人员来将之解决掉。运维人员一般不会接触到软件的程序代码,但会编写一些简单的脚本来获取软件运行状态或安装定时任务等。  销售分为售前和售后,据我的了解,售前的主要工作是向客户推销软件产品,力求签订软件购置合同;而售后的主要工作是安装软件产品,并对软件产品进行维护。很多销售人员都是由开发和测试人员转过去的。例如,有些开发人员工作了几年过后,想换一下工作的性质,就可以考虑转到销售岗位上去(在大型企业里面,很多开发人员都是这么做的)。 一个人步入IT行业能做哪些,取决于这个人的综合能力。我总结了一下,对于研发类工作岗位(开发和测试),要求有以下这些:  1) 对具体编程语言的要求。如C/C++开发工程师、Java开发工程师、数据库开发工程师等,就需要大家分别熟练掌握C/C++、Java和SQL语言。因此,大家在学校一定要熟练掌握至少一门编程语言。  2) 对专业知识、英语等的要求。如果想应聘通信类的研发岗位,那么大家就要对通信原理、通信网、移动通信等基本概念和原理有一定的了解;如果应聘计算机类的研发岗位,那么大家就要对计算机组成、计算机操作系统、计算机网络等比较熟悉。此外,某些岗位对英语也会有要求(本科生至少过4级,研究生至少过6级)。  3) 对学习能力的要求。一般公司都会要求应聘者具备较强的学习能力,因为到了单位之后,要学习的东西还很多。如何体现大家的学习能力呢?在校的获奖证书、所做过的项目、实习经历等,都是很好的证明。  4) 对人际交往能力的要求。很多公司会要求应聘者具备较强的沟通能力,这是因为大家是在一个团队中工作,不会开口是不行的。在学校的时候,大家要适当地参加一些社团和班级所组织的活动,培养自己与别人打交道的能力。 对于在校学生来说,可以看一下心仪公司的心仪岗位对应聘者的要求,这样开展针对性的学习,你会感觉到每天过得都很充实。  我的以上意见,是从我自身的经验为出发点的,不一定都对,请参考。能够去往哪个公司,取决于你每天的努力和选择的方向,请根据你的实际情况制定出学习的计划并坚持执行之。希望你找到满意的工作。再次感谢你的来信,请继续关注本人博客。 * * * **【来信3】**  周老师(可能叫你学长更合适,虽然我不是南邮的),我现在大四了,研究生阶段要读电子与通信工程。现在在导师这里帮忙做东西。我本科学的是集成电路,但因为和同学给外面的人做个小项目,就学习了软件开发(其实主要是c#),现在也是做的c#,手里面现在有两个需要帮老师做的东西,也是用c#。现在有几个问题想请教学长,希望你能给点建议。谢谢。  1.c#现在好多人都不看好,我现在也不知道需要继续深入研究还是现在这样就去学习别的。老师让我赶紧做完去学c++。如果我学c++的话,c#我还有必要去继续学习吗?  2.研究生阶段要学电子与通信工程,如果只学习软件的话总感觉和软件专业的相比没有优势,我看学长你微博是中兴通讯的,不知道对于这种做嵌入式应用层(老师说不让我了解底层,不做驱动啥的)的要求是什么呢,如果将来有幸我也想去中兴,所以我想看一下要求把握方向。  3.在做现在的两个小软件以前吧,我对自己还是比较自信的(可能也是自大吧),觉得学习的挺多了。现在自己写总是容易出现各种问题,有时候写着写着就写不下去了。我想知道学长在一个人的时候是怎么让自己坚持学习的。  一点小事就写这么长,总感觉很抱歉,学长你有空就和我说一下。  非常感谢你的意见,祝你工作顺心,快快乐乐每一天。谢谢你。 **【答复】**  同学,你好!  软件行业变化很快,没有哪一项技能是包治百病的良药。为了用不变应万变,我们要掌握解决问题的思路和方法,要抓住变量后面的不变量。对于你即将要读得研究生来说,很多知识在本科阶段其实都已经学过了,你一定要主动地、深入地研究一些自己感兴趣的课题,以此来训练自己的思维,千万不要流于表面、浅尝辄止,这样就失去了读研的价值了。  下面来具体回答你的问题。  1.有关编程语言的问题。  每一门编程语言既然存在,那么就有它存在的价值。不管是C#也好,C++也罢,都有它们特定的应用场合。因此,说不看好某门编程语言,其实是比较片面和狭隘的。更进一步说,你还不知道自己未来要从事什么工作,因此千万不要说自己只需要学习某种编程语言就行了。你现在要做的是根据自己的兴趣及未来规划来学习编程语言,当然,导师的意见也可以参考,但最终的选择权在你自己手上。你要学习的编程语言不限于C#和C++,但比较熟悉(或者精通)的编程语言最好不要超过两种。 2.有关未来工作的问题。  很抱歉,我也不清楚对于嵌入式应用层的要求是什么,但你的老师不让你了解底层其实是不对的。如果你不了解底层,那么你就不会明白计算机和程序运行的机理到底是什么,这样对于你学习更加高端的知识是不利的。科学技术发展到今天,很多专业之间已经是相通的了,更不要说计算机专业和通信专业了。你所谓的没有优势,我理解就是自己只会编写代码。每个人都有一个专业(也就是研究生阶段的研究方向),把自己专业领域的大部分知识都弄精通了,这就是你的优势。不光是中兴,几乎任何公司都希望应聘者同时具备软实力和硬实力,软实力包括:分析解决问题的能力、与人沟通交流的能力、承受压力的能力、自我调节的能力、分享知识经验的能力等,硬实力包括:专业能力(学校里面的课程主要是培养这个)、业务能力(包括编写代码和文档的能力等)等。希望你在学校好好培养这两种能力。 3.如何坚持学习的问题。  学习是一件比较枯燥的事情,编写程序也一样。你的这种情况,我也遇到过,一般说来,我是这样克服学习障碍的:  (1) 在感觉到有点疲惫的时候,我会从座位上站起来,到房间外面去呼吸一下新鲜空气。等感觉疲劳感消失之后,再来接着学习。  (2) 在学习的时候,我会将社交软件(如QQ、微信、微博等)关掉,让自己全身心地投入,避免分心。  (3) 如果确实学不下去了,那么我不会再强迫自己学习,我会选择去参加一下体育锻炼,或者去看一场电影,等自己状态好的时候再学习。  此外,你可以找几个志同道合的“学友”,大家一起学习,共同提高。当然,你一定要学会利用互联网来学习,向网上的牛人们学习。 我的以上意见,请参考。希望你利用好研究生三年的学习时光,学到过硬的本领。不管别人怎么说,只有你自己才知道想学到什么、想往哪个方向发展,只有你才能决定自己的未来。加油! * * * 本人微信公众号:zhouzxi,请扫描以下二维码:  ![](https://box.kancloud.cn/2015-12-30_5683a1d2cd147.jpg)