首页 > 程序人生 > 谈谈在校程序员技能培养
2016
06-03

谈谈在校程序员技能培养

趁年初跳槽人数多,公司想多捞一些员工进来, 一直激励员工内部推荐, 我也尝试着收集一些简历内推之, 但是没什么收获。 沮丧之余,越来越感觉到当前互联网行业人才的青黄不接。

一方面是社招太难, 特别是对于当前火热的移动开发和Web开发, 稍微有一年经验以上的熟练工都是供不应求的情况。 各个企业简直就是"跪求候选人给企业一个面试他(她)的机会"。

另一方面又是大学生校招找工作难(本文说的是互联网相关专业的大学生), 个人认为原因主要有两个: 一个是很多大学生在校期间沉迷游戏,荒废学习,导致自己技能点不强,找工作难。 另一个则是因为学习上走了一些误区,很努力但是最后才发现当前社会形势所需的不相符。 在此主要谈谈后者。 主要是个人一路走来的一些经验之谈, 希望能帮到一些人。

【大学生不一定要好好上课】

因为是个人经验之谈,所以先交代一下本人自身情况, 我本科是北邮通信工程专业, 我从大二起基本上就没有去上过课。 很多课程都是期末考试的时候才知道老师长什么样子。 但是我也和其他认真学习的学生一样,保送了研究生。 原因并不是我有多聪明,只是我个人发现, 大学的考试和高中不同,大学的考试内容有限, 而且历年考试内容相差不大, 所以使得大学生考试想要拿高分的话, 必须格外重视考试前的复习,也称抱佛脚时期,大概是考前一个月之内。 与此同时,好好上课的同学也许也会发现, 大学时候的老师和高中时候的老师不一样, 讲课水准也差别很大,经常是你花10分钟看书就能明白的事情, 却讲了两个小时都没讲明白。

就是因为我的考前一个月实习的拼命学习,预习和复习一起搞定, 使得我在期末考在各个科目经常都会名列前茅,甚至考第一。 这样就让我尝到了甜头, 从此我想通的一个事情,既然我能只花考前一个月的时间就把所以考试搞定。 那我整个学期的其他三四个月的时间(包括上课时间), 就都可以用在自己感兴趣的地方上。 虽然我没有好好上课,但是实际上我比谁都好好学习。 在大学里面,上课和学习经常不能划等号。 我就是因此比别人多出了大量的时间可以做自己感兴趣的事, 可以写自己想写的代码,所以在编程等技能上面得到的实践更多, 在之后的找实习和找工作中都有很大的优势。

上面说的是本科上课的事情,其实研究生也是同理, 包括对待实验室里面的项目也是同理。 这个可能每个上过研究生的人都懂的。 比如下图:

【适度刷题,慎重选择实习】

几乎在北邮里面谈到互联网程序员校招的时候, 都会提到一个词叫"刷题", 因为这个词都使得校招成了一场攻略。 特别是想去谷歌之类公司的人来说,亲测有效且屡试不爽。 这个详情不多说,无数成功先例摆在北邮人每年的校招里面。

就拿我个人来说,其实我算是刷题比较早的(相对那些等到找工作才开始刷的人来说), 虽然错过了大一开始的ACM校集训队,从大二才开始接触刷题, 但是个人觉得也不算晚,当时刷题最吸引我的主要是一些很巧妙的思维题, 会让我感觉算法的美妙之处,虽然他们其实在工作上很少能派得上用场。

虽然不是校ACM集训队的,也没有去参加过ACM区域赛。 但是也拿过校赛的金奖,也算刷题刷出一点点手的熟练度, 至少能让我在之后的找实习和找工作中,遇到算法题的时候还算能够得心应手。

但是我要说的是"适度"刷题, 其实现在也经常会有招聘的人吐槽招到一些只会刷题的人, 做起工程的时候总是掉链子。 比如刷题刷得很顺手的人都在自己简历上写着熟练使用 C/C++ , 却在工作中使用 stl 的 vector 都不知道 vector 扩容时内存会重分配, 导致的一些坑。 甚至连线程安全如何加锁都不清楚,就动不动就扯什么异步编程和无锁编程。 刷题这种锻炼算法基础的事要做,但是工程基础也要重视。

这些观点其实是当我在阿里实习的时候明白的, 当时我记得身边有一批刚入职的正式员工, 其中有个员工在工程实力上脱颖而出,简称他为A, 屡次受到一个资深员工的当众夸奖。 后来的发展很显然A就深受重用了。

在一次吃饭的时候,我向A讨教经验的, 他才提醒我要注重工程项目的锻炼,而不是只顾着埋头刷题。 借此开始下一个话题。

【选择实习时不要过分看重名企光环】

A告诉我说当时他在校的时候参加实习, 第一家实习的公司是百度,实习打杂了几个月, 一直在一个大的系统周围修修补补, 觉得对自己能力的提升非常有限。 就果断跳出来,去参加了创新工程的一家创业公司, 这家创业公司就是后来的创业明星–豌豆荚。

在豌豆荚早期的时候,因为员工有限, 实习生也被当成正式员工来用, 当时的某个项目,就只有一个正式员工和他两个人共同负责。 也是因为该项目,从零开始写,最后完整搭建起一个成型的项目。 让他受到的锻炼非常大。 也借此打下了C++扎实的基本功。

现在看来豌豆荚已经是明星公司,但是在当时, 豌豆荚只是一家名不见经传的创业屌丝公司。 他从百度出来之后,去参加一家毫无名气的公司, 在别人看来是非常不理解的。 因为找实习的很多人都一味的追求名气光环, 恨不得把BAT三家公司都遍历实习一遍。 其实如果一直都在名气实习,但是却一直都是在里面打杂。 那其实得不偿失。

A给我的启发非常的大, 当我从阿里跳槽出来之后, 我也有选择的去面试了几家创业公司的实习, 并选择了其中一家自己看中的岗位。 当时对自然语言处理和搜索引擎很有兴趣。 刚好该创业公司缺一个这个方向的实习生, 来接任之前一个阿里高工遗留下来的代码。 然后和A一样,我的因此获得在大公司得不到的严重锻炼, 至今仍然庆幸有这么一段经历。 大大增强了C++开发的技能点并为自己之后的技术方向打下基础。 并借此开发了自己的开源项目。 这个让我印象最深的是,自从自己的工程能力显著提升之后, 在后来找实习和找工作都异常的顺利,甚至经常让我很享受面试。 记得去小米面试的时候,我和另一个人一起参加面试, 当时小米的面试环境很简陋,两个人两张桌子在同一个角落里面。 从一面开始面试官看看简历,聊聊我之前做的项目,聊聊我的开源项目之后, 二面和三面都一起快速面完,三面后部门Leader就带我去熟悉办公环境, 并答应第二天就叫HR发offer。 而当我收拾好书包要离开的时候, 才看到刚才和我一起参加面试的那个同学, 还在和一面面试官讨论面试算法题。 让我受到了很大的鼓舞。 而且我所认识的工程牛人学长们, 校招的时候基本上面试都是走个过场而已。 offer都是信手拈来。

因此个人建议,对于在校生来说,实习是一个最锻炼自己工程能力的机会, 找实习时应该多精挑细选,不要一味的拿名气说事。 适合自己的才是最好的。 而且关于本科几年级应该出去实习的观点,个人建议越早越好。 最好从大二就开始,最晚大三也得开始实习。 byvoid 大神是从大一就开始实习,仔细看看他博客的人都知道。 他拿到阿里星顶级Offer是当之无愧的。

【多关注行业动态以调整自身发展】

几乎是从事互联网行业的人都知道,北邮人找互联网的工作特别拿手。 甚至被说成如蝗虫过境一般。事实却是也是如此。

而这在我看来,80%的原因是因为 北邮人论坛 的功劳。 北邮人论坛上关于互联网的信息非常之多。 经常会有关于行业一些趋势和职业选择的讨论。

但是在关注的同时,也需要有自己明辨是非的能力。 比如当09年安卓刚火起来的时候, 我记得北邮人论坛上就有关于嵌入式开发和安卓开发两者的对比。 我记得论坛的一些ID很得意的鄙视安卓开发, 觉得安卓开发非常Low,门槛低,连培训学校出来的人都会做。 而嵌入式开发门槛高,逼格高。 导致当时的学校风气就是很不屑安卓开发。 但是他们是错的。

人再努力也不可能打败趋势,就像运营商注定会没落, 互联网注定要往移动互联网转变一样,这些都是大势所趋。 事实上也是如此,当时做嵌入式的人也大部分都转行搞安卓开发了, 而当时一直搞安卓开发的人现在应该差不多都已经是独当一面的 Leader 了。 这就是行业趋势,并不为个人喜好而改变。 不过技术还是非技术,都应该顺势而为。

【最后】

下班回去的路上脑海里面千言万语, 觉得都是肺腑之言有感而发,但是真的打开电脑开始写的时候, 却发现很多东西不太容易表达清楚。 毕竟我研究生也没有念完就退学参加创业公司了, 直接参加的是社招也没有参加过校招。 对很多事情的理解也都是比较久远了, 不一定准确,毕竟行业形势每年都在变。

每个人的技术成长路线都不一样。 没有绝对的褒贬,本文只是个人观点,仅供参考。

原文: 谈谈在校程序员技能培养

编程技巧