作为一条咸鱼,此刻我还是努力的想要翻身。
浑浑噩噩了一年,从未静下心来想想什么工作是适合自己的,也从未想过,自己需要为之付出怎样的努力。那从现在开始,话不多说。就认真的看一看,想一想。
首先来看看大方向。从近期的面试情况来看,绝大多数的面试官都对数据挖掘,机器学习以及云计算领域非常感兴趣,只要简历中提及,他就一定会详细的询问。结合趋势来看。如果想从事基础的研究与研发,我们需要至少学好,学透其中一个相关领域的知识 。
再来看一看小方向。首先来分析一下google的招聘需求,看看如果我们想要得到一份很棒的工作,到底需要努力做得什么程度?
以google最为普遍的软件工程师职位需求为例:
Minimum qualifications:
1. BS degree in Computer Science, similar technical field of study or equivalent practical experience.
这里讲到了相关的实践经验,我觉得这个经验既可以是实习经验,也可以是项目经验。下面来分析一下这两种经验。
实习经验:如果我们提到了自己的实习经历,那么我们绝不能在项目中扮演一个跑龙套的,亦或者是完成一些简单的任务。否则,这个实习经历完全是画蛇添足。我们需要做得是完整的回忆起项目流程,以及项目中涉及的技术要点,自己所扮演的项目角色。另外很重要的是,我们需要记起自己在攻克项目中某个难点时,做出的决策和行动。对此,我们需要对每一个实习经历写一份详细而完整的总结,对实习中的一些简单了解的技术要做一些深入拓展的学习。在实习过程中涉及一些我们没做的,但是很想去做的,可以做一些深入背景调查,然后在面试中谈及,来作为自己对项目改进的想法和建议。经常被问到的问题有:你印象最深的实习是哪个,为什么?从实习中你收获了什么?你在实习过程中有什么不足的?你为整个团队带来了什么?
项目经验:同实习经验相似的是,我们需要弄清项目中的所有技术要点,但不同的是,实习的时候,我们主要是是扮演团队中的一个小角色,项目的结果并不是最重要的目的。而项目经验则恰恰相反,一个好的成品胜过千言万语。你说的再多,不及一份最终产品和报告。直观展示在面试者的眼前是最吸引的方式。所以我觉得,我们应该将过去曾经做过的所有项目重新找出来,加以完善,改进,总结。做一个作品展示的个人网站,可以录制一些demo,在简历中直接给予链接。一些简单的产品,我们可以试着将最新学的一些知识和技术引入,否则,太过于简单地项目也是没有任何竞争力。举例来说,我们可以使用一些算法效率优化,一些设计模式的使用,引入多线程。这些也都是编程的基础,面试者最爱考的知识点,如果能在项目中直接使用,相对于苍白的解释不是更好的答案么。
2. Software development experience in one or more general purpose programming languages.
程序设计语言也是最基本的需求,但面试中我们往往会被问到非常核心底层的知识点,例如C语言中的析构函数,多态绑定,java中的垃圾回收处理,一些底层的内存管理优化,多线程编程等等。每当回答这些问题,我们总是支支吾吾的。所以为了应付面试,我们必须深入的学习一门语言,完整的阅读一本相关著作(thinking in java, C++ primer, etc)这些书确实枯燥,但已经到了你必须逼迫自己看一本的阶段了。我们已经有了太多的实践,我们需要升华更进一步。所以无论多枯燥,一定学透一门语言。我觉得C++,Java两者可选其一。这两门受众最广的语言至少学精一门,绝对不会有错。其他的像python等,多多益善。但是不需要学到非常精通。但可以写一些小型项目做为语言的成果展示。
3. Experience working with two or more from the following: web application development, Unix/Linux environments, mobile application development, distributed and parallel systems, machine learning, information retrieval, natural language processing, networking, developing large software systems, and/or security software development.
从这个要求可以看到,前面所提的很火的话题再一次出现了。linux, distributed and parallel systems, machine learning, information retrieval, natural language processing. 这些知识点总的来说就是我们这学期学的课程。我们需要认真的把课堂知识加以总结,至少在面试时可以对一些基本算法和技术做到对答如流,另外,我个人认为,需要花一些时间学一些linux基本指令和linux操作系统的一些基本知识。毕竟linux在当今时代,无论是做数据挖掘还是云计算都是首选的开发环境。对于我个人而言,我对机器学习(数据挖掘,这两者在很多时候界限模糊)很感兴趣,我需要深入的了解,去读一些相关的书籍,然后用一个项目来作为实践。这也是近期目标。
Preferred qualifications:
1. Experience with one or more general purpose programming languages including but not limited to: Java, C/C++, C#, Objective C, Python, JavaScript, or Go.
google作为一个互联网公司需要我们去学习一些web开发语言,了解一些基本的web框架,和设计模式。所以我们要了解javaScript或者php背后的原理,可以将android课程的期末项目加以改进和完善,用于学习。
2. Experience in embedded system development such as Android, Chrome OS, and proprietary device platforms.
嵌入式暂时不是很了解,但是了解一些智能手表里的一些嵌入开发,可以作为课外阅读。如果面试中问到,至少能表达一些观点。
3. Experience in a wide variety of projects utilizing natural language processing, artificial intelligence, data compression, machine learning and search technologies.
google作为一个走在技术前沿的公司,肯定会时刻关注最新的技术或者研发最新的技术,我们需要多多阅读一些最新的科技论文拓宽思路和眼界,因为像google这样的公司,不会仅仅只是一轮技术面试,肯定会对你的眼界和知识面也有所要求。
4. Working proficiency and communication skills in verbal and written English.
为了实现自己的理想,一定要将英语练好,对于大多数优秀的人来说,流利的英语绝不算是一个问题。有太多的东西需要竞争,而英语最不应该成为自己的短板。强迫自己苦练吧。