NJUCS学子专访暨系友生涯访谈

今年有幸加入到母校的系友回访计划,虽然我依然是职场里的一条小鱼,但也希望能给学弟学妹一些帮助。同时借此机会拿出这些问题问问我自己:毕业两年,到底有哪些成长。

问题一

本科期间认为最重要的课程是哪些,如果非要给出五门课程,它们会是?工作之后,您认为最重要的课程是哪些,如果非要给出五门课程,它们又会是?如有变化,则变化的原因是?

在本科期间,我会觉得这五门课最重要:《计算机组成原理》、《操作系统》、《算法》、《数据结构》、《机器学习》(本科也叫《数据挖掘》)。

组原和操作系统,包括操作系统的大作业PA,都是让你最直接接触到计算机底层的课程,当然也是最难的几个课程。学习这些知识是一个本科生和培训机构训练的程序员最本质的区别,你在遇到问题时可以从最接近计算机的角度去思考。算法和数据结构是写任何程序的基础。而机器学习则是当前最火热的领域之一,能让你投入到这个世界的技术中心。

在工作之后,最重要的课程可能就是《软件工程》代替了《机器学习》,一方面是因为我从事的职业和机器学习没有太紧密的关系,另一方面也是我工作之后,能够深刻领会到作为一个工程师,在学校里学的软件工程相关知识是多么的不足。本科写的代码都太简单,甚至不足以称之为工程。也有很多软件工程课里的实用知识技巧,被我转眼抛到脑后。比如我正要重新学习一下UML图例。

问题二

本科期间认为最重要的能力是哪些,如果非要给出五项能力,它们会是?工作之后,您认为最重要的能力是哪些,如果非要给出五项能力,它们又会是?目前这个岗位,您认为它的能力模型是?

在本科期间,我认为最重要的五项能力分别是:逻辑思维,阅读理解,编程能力,交际,领导力。

逻辑思维和阅读理解就是我们常说的数学语文课程,如果读的是英文材料,也就变成了语数外三门高考课程。虽然高中学习应试成分居多,但是我觉得这三门课程代表的两项能力是我们持续学习的基础。编程能力就是考验你产出的能力,另一方面也反映了你的思维是否和计算机专业相契合。最后的交际和领导力是表现你是否能合作,以及合作能产生什么样的收益的体现。

工作以后,我想要加入到五项能力的是表达能力,代替领导力。一方面是因为我还没有到领导层。另一方面,表达能力分为口头表达和书面表达,这项能力是沟通交流的基础,演讲和文档也是除了代码以外最重要的产出。进入工作后,你不再只是单方面地吸收,还要积极地反馈。

我还没有达到能够总结出行业能力模型的水平。

问题三

您的职位是什么?您的工作职责是什么?在这个岗位上您的日常工作内容是什么?

我目前是比较初级的软件工程师。工作职责就是负责接手项目,或者只是项目某一主要功能的设计、编码和维护工作。在此期间,除了埋头写文档和代码之外,还需要与上游的产品同事和下游的测试同事沟通协调,共同开发好一个产品。

我可以列举一下我今天的工作内容:

  • 开了一场例会,汇报工作进度和后续安排
  • 大概有半天时间投入在新项目中,在已经完成需求分析和概要设计文档评审的基础上实现代码
  • 在实现的过程中,就几个规范和技术问题与开发团队五个人站着面对面做了一些交流
  • 白天剩下的一些时间基本是在回邮件,处理之前项目的bug等等。
  • 晚上自我安排的时间,准备这一次的回访问题。按照目前的进度可能还需要一个晚上的准备。

问题四

这个行业的薪酬待遇一般是怎样的?晋级高级岗位需要的条件是什么?

软件工程,或者说一整个计算机行业,薪酬待遇都是很高的。当前的世界仍然处于信息时代,那么计算机行业的从业者就始终走在最前列。具体的薪资水平其实不好比较,和加入的企业,所在的城市地区等都有关系。包括整个行业的经济增长,也会让三年间的薪资水平有很大的改变。

如果一定要看到具体数据,一些官方统计肯定更具权威性,例如可以参考最新的《2019年中国大学生就业报告》蓝皮书。我校毕业的学生,在平均水平上再翻一倍也没太大问题。

至于晋级高级岗位需要的条件,我分享吴军博士对工程师五个档次的划分:

  • 第五级:能独立解决问题,完成工程工作;
  • 第四级:能指导和带领其他人一同完成更有影响力的工作;
  • 第三级:能独立设计和实现产品,并且在市场上获得成功;
  • 第二级:能设计和实现别人不能做出的产品,也就是说他的作用很难取代;
  • 第一级:开创一个产业。

在各级之间,就是你不断积累量变的过程。如果你刚毕业,处在第五级以下,那么你就需要锻炼自己独立解决问题的能力,无论是自行实验还是去网上搜索答案,你要能够独立漂亮地分析问题,给出方案,解决问题。如果你工作了一段时间,已经达到了五级工程师,那么你要锻炼自己的领导力,寻求和别人合作,在合作中掌握话语权,领导团队完成你一个人无法完成的“更有影响力”的项目。以此类推。

问题五

这个行业在不同城市之间是否存在不同?具体不同是什么?

软件工程这个行业在不同城市之间存在着很大的不同。计算机行业作为高新产业,对城市有很高的要求。最主要的一项就是尖端人才:北京、上海、杭州、南京都因为城市内成批高质量的高校聚集了大量的人才。深圳似乎是一个特例,虽然高校质量比不上其它几座城市,但它作为改革开放最早试点,依靠包容创新的城市精神,海港独特的地理优势和政策的倾斜同样吸引了大量的优质创新企业。计算机企业的崛起为城市带来了充足的发展潜力,城市的发展又吸引更多的人才和企业聚集。当城市的计算机企业发展到一定程度时,规模效应又进一步促进了正向循环。马太效应在这些大城市上表现得淋漓尽致。

当然值得注意的是,中国还有下一批城市正在崛起,这是中国城市化进程中不可阻挡的趋势。未来十年在哪里工作或寻找机会仁者见仁智者见智。

问题六

您认为从事这份职业需要哪些知识、技能和经验?或从业需要接受哪些培训或教育?需要哪些证书?

从事这份职业,所需要的基础知识都囊括在学校课程中了。而额外的知识,则是按照你的目标,所从事的工作动态变化,自行去学习的。

需要接受的培训每个公司也都会组织,基本上就是然你熟悉你将要负责的工作,了解工具,再加上一些职场和心理的培训。

我觉得不需要什么证书,如果非要有证书的话,可能就是英语四六级吧,能保证你的注释,变量函数命名没有问题,也能查阅英文资料访问英文社区。

最后是经验,我觉得认真完成学校的各项作业,尤其是编程练习,参加一次数学竞赛锻炼思维能力,和导师好好沟通,做一个有意义的创新项目或是一个有技术含量的毕业设计,有机会进行实习去大公司看看未来的工作环境,也就基本足够了。大学里有的是各种挑战和机会,问题是你在看到这些经验值时选择打怪还是绕路。

问题七

这个行业对从业人员的能力和性格特点有什么有要求?

第一个要求是诚实。我想,不仅工作要诚实,在学校学习考试,读了研究生做学术都需要诚实。诚实作为我南校训是一个基本的做人要求。即使不能做到时时诚实,事事诚实,也最起码要经常以诚实约束自己,以诚实反省自己。

第二个要求是终身学习的能力。这其实分为两部分,一是你要有终身奋斗的目标,二是你要有为了这个目标在茫茫的技术海洋中孜孜以求的坚持。终身学习不仅代表着你能看到新知识,理解新知识,运用新知识。它还代表着你有学习新知识的动力,也知道该学习什么新知识。

在我眼里这两项是必须的,而剩下的能力和性格都会是你的加分项。能力包括出色的逻辑分析和推理,良好的代码风格,独到的眼光和看世界的角度。性格就更多种多样了,无论你是内向外向,脾气火爆还是温文尔雅,都无关紧要。我看到各种各样性格的人都能拿出坚实的成果,在这个世界,你的产出是你个人最好的代言。

问题八

在学校中做些什么可以对从事这个职业有帮助?

培养自己读第一手的资料的习惯和能力,从最近的角度观察你将要进入的世界。学C语言就去读”K&R”,学各种算法就去看看他们背后的论文,少看已经被人加工过后的材料,这也同时能帮助你在生活中提升辨识能力。

Follow各位业界楷模,找到自己的偶像,从而找到自己的目标。

最后还有的就是结交一群挚友。我常有让自己保留记忆回到过去一鸣惊人开启巅峰人生的白日梦,但这梦中唯独不想错过的就是自己的那些朋友。如果朋友能帮助你在职场晋升固然不错,但即使只是烦闷时闲聊吐槽,也会让你的工作,你的人生轻松不少。

问题九

就您的工作而言,您最喜欢的是什么?最不满意的是什么?

对于我的工作,我最喜欢的就是不断闯入一个新领域,研究一个新技术,直至把它看懂看透,运用到我的代码中,看到代码跑通的那一刻。

我不是一个会有不满情绪的人,虽然有时会抱怨一下不断变更的需求,但可能最不满意的还是有的时候自己真是太懒太窝囊了吧。

问题十

在这份工作中,什么是最有挑战性的?

软件工程这份工作,最具有挑战性的是不断跳出自己的舒适圈。

跳出自己的舒适圈有两种情况:一种情况是,你接手的项目或者公司对你的要求不断超出你的知识边界,你不得不去学习新的知识,掌握新的技能,以更好地完成工作。直到你再也跳不动了,或者你的舒适圈已经足够自己在公司里生存下来,你的职业生涯可能也就能一眼看到头了。

另一种则是你自己为了理想的目标不断逼迫自己跳出舒适圈,去广泛了解各种技术,了解前沿社区群体的关注方向,了解你的偶像在做些什么。

两种情况的表现都是一样的,但第二种无疑能够更持久,工作起来也就不觉得那么辛苦了。这之间只是一层心态的转变。

问题十一

您认为,拥有同样知识技能的人还可以从事哪些职业?会有什么发展?

这一点我并不是很清楚,因为我只从事过软件工程师这一个职业,软件工程师现在是我世界的天,在我能飞上太空之前,我的眼睛无法透过天看到宇宙更深处。

不过在我看过的材料里,有的人做了科学家,不断突破人类知识的边界;有的人做了风投,扶植这个世界新兴的技术;更多的人做了公司的管理者,使用他们的技术积累和经验帮助公司不断发展。

问题十二

您是通过什么途径获得现在这份工作的?

目前这份工作是通过校招面试获得的。从事的工作内容可能和预想的有些差别,但我也正努力让自己向自己预想的目标靠拢。

问题十三

对于一个即将进入这一行业工作的人,您的建议是什么?

不要被金钱所迷惑,尽快找到自己的目标,并开始向目标进发。

懂得做事的边界,在边界内做事(比如不要去尝试实现一个算法复杂度低于O(nlogn)的排序算法)。

多做减法,把自己最主要的时间放到最重要的事情上去。

等等等等,学到的感悟到的建议还有很多。但是,李嘉诚说:“最浪费时间的事就是给年轻人讲经验,该走的弯路其实一米也少不了。”看名人传记,读学长访谈,但不要寄希望于自己能够一朝改变。有所触动后,去踏踏实实走自己的弯路才是成长最朴素有效的方法。

问题十四

择业的理由

这个问题多少有些私人。当然我也可以给出一些很官方的回答。我择业考虑的主要有几个方面:

  • 首先是薪资情况,最直观也最容易讲,自己不感到委屈就好。
  • 其次是工作内容,虽然不少公司拿到Offer之后进公司会进行再分配,但大体能知道自己将要从事的是什么行业。也不能要求每个人都能做自己梦想中的职业,但起码不应该感到枯燥无聊。
  • 然后是工作伙伴,看看来面试你的人,第一面技术面的人大多就是你进入公司三年的样子,终面可能就是你进入公司最后会达成的样子。看看他们的谈吐和工作方式,是不是你期望自己达成的样子。
  • 最后还有很多考虑的方向,所在城市,离家远不远,是否安稳。
  • 另外我个人比较相信先进入大公司的原则,能帮助自己快速积累成长,养成良好的习惯。

至于我为什么选择了现在的公司,我想,除了以上几点外,总有一些绕不过去的“缘”在其中。

问题十五

在软件工程这个工作上,计算机系的学生和软件工程的学生相比由什么优势和弱势吗?

我认为,在软件工程这项工作上,两个专业的学生基本没有区别。或者说,个人学习态度和技术追求的差别要远大于专业带来的差别。软件工程可能比我们多了一些实战经验,但经过每个公司的实习期,也就没什么区别了。计算机科学可能学习过更多的理论知识,但是如果请你在暑假好好想想自己上学期学了多少,似乎也不能有系统地说出个所以然来。而两种专业培养我们的不断拥抱变化的学习态度,和一些具体的学习方法,可能才是在工作长跑中拉开距离的要素。你是不是能有逻辑地解决bug,解决问题,有没有耐心看完一页英文资料,看到新技术会不会心痒难耐,这些才决定了你能够达到的职场高度。