作者:李冰
·微博:懒人李冰
·豆瓣:懒人李冰
引子:
9月底找到工作后,就想写一篇文章,总结一下自己的研究生生活和找工作期间的感受,拖到现在,今天补上。
为什么想写这篇文章:
1、读研的过程给了我很多启示,想记录下来。
2、在学习的过程中,没人指导让我感到无比迷茫、恐慌,想把这个记录下,让那些跟我一样的人不在迷茫。
3、网上记录校招文章,大多数都是牛校的牛人进了牛企的经历,对大多数人并不适用。
谁适合看这篇文章:
首先,你所学专业至少与计算机相关,因为后面会出现一些计算机类的专业术语。
其次,你最好不是计算机大牛(比如大学就代表学校参加各种国际比赛),否则,本文只会浪费你的时间。
最后,你如果跟我一样是非名校的普通学生,并对未来感动迷茫恐慌,建议你看下去。
先自我介绍一下:本人本科(通信工程)和研究生(计算机系统结构)所在学校均是非211、非985高校。在校期间,无奖学金、无数学建模、无电子设计大赛、无ACM大赛等荣誉。最终拿到MTK(联发科技)的offer。
如果你跟我一样普通,觉得自己拿Google、阿里等顶尖公司的offer基本无望,又想毕业找个还说得过去的工作,那就继续吧,写这篇文章的目的就是它。
本文不是面试回忆录,也不是校招流水账。主要记录研究生期间的困惑和体会(包括学习和工作)。
1、不知道该学什么?
首先说一下自己,本科专业是通信工程,考研调剂到计算机,计算机专业课只学过《数据结构》和《计算机网络》,C语言大二考完计算机二级,就再也没看过。研究生期间只能先是还账——学习基础专业课。研一时自己在上课之余,把本科专业的操作系统、网络、数据结构、C语言又从新看了一遍。因此,如果不知道学什么,就先打好基础吧,对以后的学习太有帮助了(尽管还没工作,已经感受到基础的重要了)。
①从网上直接搜集哪些专业课比较重要。PS:从找工作来看,哪门专业课学精了都能找到不错的工作,比如数据块、网络、算法、数据挖掘等,都有对应的岗位。
②向毕业的师兄(姐)问,注意,一定要向毕业的师兄(姐),至少是参加过找工作或实习了的师兄(姐)。不要问大三或研二期间没找过工作也没实习的。
2、通过哪种方式学习,看书,看视频,逛论坛?
不管哪种学习方式,都有它的优点和缺点。看书方便思考但乏味;看视频高效但知识点可能不全面,逛论坛易于发现问题但灌水比较多等等。因此,学习不同的知识,学习方式可能不同。比如学习一门语言,开始时肯定是看书或看视频,一边学习一边敲代码联系,等有了一些基础后,可以到论坛上帮人解决问题。
3、专业课该学到什么程度?
个人感觉,理论知识熟练到一定程度后,再继续看纯理论的书,效果就不太大了。比如,计算机网络,各种协议理论知识看的再多,还是感觉一头雾水,你不知道那些协议的格式都是如何实现的,这个时候,你就该看看别人是怎么实现TCP/IP协议栈的,比如可以看一些开源的协议栈,如uIP、LwIP或者BSD-lite等,我当时学习的LwIP协议栈,看后一目了然,即使后来忘了也没关系(后面会提到)。比如,操作系统,理论书看的再多,还是不明白进程管理是什么,内存管理是什么等,没关系,还是看别人是如何实现的,我当时看了《Linux内核设计与实现》《深入理解Linux内核》等书。再就是数据结构、算法、编译原理等,都是一样的,理论知识掌握到一定程度后,就可以进行一些实践了。
①理论知识一定要清除,不必能全部记住,但至少知道曾经看过,比如,TCP/IP的运输层有哪些协议都不知道,就先不要急着去了解协议栈是如何实现的了。
②对理论知识有一定了解后,就该适当的学习实践了,可以先参考,后自己动手实践。
4、该如何选择看哪本书呢?
刚上研一那会,由于自己底子太薄弱,加上没人指导不知道方向,所以,也是迷茫了好一阵子,不知道看什么书。
①对于计算机专业课,最好就是看公认的国外经典书籍,没错,就是国外(可中文版)的书籍,国内的很多都是东拼西凑的,最重要的是国外经典书籍给人是启发性的,对比谭浩强的《C语言程序设计》和Brian
W. Kernighan、Dennis M. Ritchie的《The C Programming Language》,一看便知。
②经典书籍里,还有一个先后顺序的问题,比如先《C Primer Plus》后《The
C Programming Language》,先《Linux内核设计与实现》后《深入理解Linux内核》,先《TCP/IP详解 卷1》后《TCP/IP详解 卷2》,先《数据结构与算法》后《算法导论》等等,反过来看,则会痛苦的要命。
5、看了之后很快就忘怎么办?
看了之后会忘,几乎是肯定的,没关系,看多了能记住了,千万不要因为怕忘记而不去看不去了解。
①重复看、多看。重复看是指一本书多看几遍,我开始学嵌入式Linux时,《嵌入式Linux应用开发完全手册》这本书,看了不下10遍,有的部分章节有20遍,到现在很多还是忘了,没关系,至少遇到问题,我知道去哪找了。多看是指,针对一个问题不要只看一本书,多看几本类似的,这样就可以从不同的角度了解一个问题,全面的了解一个问题有助于记忆,我在移植u-boot时,看了不下10个讲解u-boot移植的文档,尽管它们大同小异,但对于了解u-boot的移植,非常有用。
②写学习笔记,记录学过的内容,开始时是特别漫长且痛苦的,但对于一个程序员,它是有用的。我的第一篇CSDN博客写了近4个小时,现在看来就是一坨渣,没关系,慢慢写,会好的。当我们从百度或Google上搜到一篇不错的文章时,经常感叹:大牛啊,真厉害。没错,大牛也是记录自己。对于写博客,单独拿出来作为下一个问题讨论。
6、该不该写博客,以及如何写博客?
对于该不该写博客,我只列几点:
①世界上很多计算机牛人,都有写博客的习惯,不说stack overflow的创建者Joel Spolsky等国外牛人,国内也有很多,比如酷壳的陈皓。因为他们都有了自己的写的文章,我们才知道他们的存在的。牛人都不嫌麻烦,我们普通人为什么还要怕麻烦呢。
②自己是菜鸟,但博客也给我带来了实实在在的利益。通过将所学内容记录下来,面试时,给面试官看了自己的博客后,面试官给予了高度的肯定,这也是我能找到这个工作的一个很大的原因。记录你学的内容,这个不是突击能完成的,面试时可以作为自己平时学习的一个有力凭证。
7、呆在学校,跟外界隔离怎么办?
这个也是之前困扰我的问题,后来了解的越多,越觉得关键看你怎么看问题了。
①呆在学校虽然不能接触真正的项目,但可以打下坚实的基础,计算机发展这么多年,新技术日新月异,但理论基础基本没变,打好理论基础更能适应以后的工作。
②信息化时代,再谈什么没法接触外界,就有点自欺欺人了。网络资源如此丰富,想了解什么,只要你想,总能找到了解的途径。
8、如何开阔自己的视野?
这个问题与上一个其实差不多,单独拿出来,是想介绍几种可操作的方法。
①多了解名企里那些牛人都在用什么技术,都是怎么工作的,认真了解后,就能发现自己与其他人的差距了。而且你获得的是满满的正能量,你会发现这些人是如何拼命工作的。
②多去一些国外的论坛、网站。你不仅要知道一席还要知道TED,不仅要知道知乎还要知道Quora,还有Stack
Overflow 、reddit等等,不一定整天泡在里面,但至少知道这些都是干什么的,它们能给你提供什么。最重要的是,不要用百度,要用Google,这个是我最近一个月来最大的感受。
9、除了专业知识,还要什么呢?
其实,这个也是我想送给自己的,人这一辈子,不仅是一个职业人,还是一个社会人。知识分两种,所学领域的专业知识和其他的非专业知识。Lucida曾经说过,他自己想构建T型知识体系,即专业知识要深、非专业知识要广。针对某一问题,尽量听取专业人士的评论——这一点不仅适用于计算机,更适用于普通生活。
10、其他专业以外的东西呢?
专业以外的东西,只列举自己体会比较深的两点:
①只要不是是非对错问题,不要强加给其他人任何观点。这点自己尤其要改正。
②学会不理会其他人的看法,这点非常重要,不要活在别人的评价里,想想去年一年的时间,自己晚上在宿舍楼下的阅览室学到凌晨1点,周围人善意的劝解,要不是靠这点,还真坚持不下来。
11、找工作需要注意哪些?
个人觉得,如果上面的十条能做到的话,找个不错的工作,应该不是问题。其一,有一个个人的技术博客,面试时给面试官看了,证明了自己学过哪些东西(只是学过,但不能证明掌握了,其实我真没掌握)。其二,找工作的心态一定要好,联发科是我真正面试的第一家公司,也算是唯一一家,先前都是互联网公司,跟自己学的有些偏离,导致9月份整整一个月基本没有任何面试机会,月底才面试的。其三,平时看课外东西看的比较多,一面时跟面试官聊了下对校招的看法“为什么公司招985院校的学生是合理的”等等,面试官也很赞同。其四,一定要有执着的精神,不要脸!由于二面的时候,被刷,我是最后霸面了两次才进的。
总结:
事在人为,尽人事,听天命。