看看迅雷的大牛市如何成长的吧。这也是采访过程中当面锣对面鼓的一问一答出来的,或许对你是有益处的。

迅雷星域CDN项目的创始人。

 

1. 对今年的技术背景的毕业生,有什么校招的建议?例如笔试、面试的方法,注意什么?

敬宓:校招主要是重视基础。

2. 自己作为技术路线的应聘者,在校招时候,是如何选择第一份工作的?考虑过什么因素?最后为何选了第一家公司?

敬宓:校招时选择工作的原因比较简单,主要还是兴趣驱动,尽量选择自己未曾深入研究学习的方向进一步学习。

由于我一贯是兴趣驱动,所以我的选择方法和大部分应届同学不太一样:我是从小学3年级左右开始做简单机械、无线电设计相关的学习,小学毕业后开始自学编程,考虑到电子和机械是小时候未能深入的方向,大学特意选择了机械电子。从入学第二周开始到大四毕业,基本没有假期地参与各种项目,到大四时断断续续积累了近10年的编码经验,对单纯软件开发、网站开发、安全、游戏开发、硬件开发都有一定的涉猎,所以选择公司时放弃了这些方向和公司,主要考虑后台和系统开发方向的工作,面试了百度和当时还属于雅虎全球的雅虎中国。

面试这两家公司主要考虑了他们的技术属性,当时百度是国内少有的技术驱动的公司,而雅虎在当时更是全球最大的 FreeBSD (我最热爱的系统)的维护、贡献者和使用者。另一个原因是因为此前已经干小作坊式的开发很多年了,所以希望毕业后进入更大的平台开阔视野,为以后的创业做准备。最后选择了百度。

3. 目前工作几年?做过几个项目?在技术方面,有怎样的成长?

敬宓:目前工作9+年,编码经历20+年,经历过的项目比较多,如果从规模、耗时、人力上有个范围设定会比较好统计。从项目类型上,经历过 Windows 客户端开发、网站前后台开发、系统运维、游戏、安全、操作系统、搜索引擎、自然语言处理、分布式存储和数据库、P2P、CDN 网络加速、模式识别、数据分析和挖掘这些方面的技术项目,这也基本反应了在技术方面的成长。

4. 让你获得进步和成长的方法,有哪些?

敬宓:获得进步和成长的方法主要依靠向开发论坛、社区的大牛请教学习方向,然后研究相关规范和标准,最后是不断实践。

这里要特别说一下方向的重要性:这些年面试了数百位候选人,很多人具有不错的开发能力,他们可以使出巧妙地招式,但是由于各种原因,他们对基础和细节的重视不够或者急于求成等原因,导致在实际的开发中总是或多或少遇到各种无法解释的现象,比如写 C/C++ 的工程师,很少有对 C 和 C++ 区分对待的能力,对他们各自的标准规范更是不了解,最后的表现就是代码出现各种诡异的问题。

工作第一年在百度修复了一个全公司几乎所有项目都使用的 hash 函数的序列点问题,那可能是百度诞生时就有的代码,但这个 bug 却存在了很多年。类似的问题还有很多,知乎上有个讨论最难调试的 bug 的讨论,其实很多都是由于对基础环境、条件的不了解,错误的做出了假设导致,如果完全熟悉整个体系的每一个环节,就会大大减少诡异 bug 的存在。

5. 在作为程序员工作的第一年,遇到过的最大问题是什么?如何解决的?

敬宓:作为程序员在第一年主要遇到的问题有两个:对项目难度和工作量预估不足,以及对工作计划做的不够好,这两个问题都直接导致了后来项目的大幅延期。当时因为项目需要,带一个小团队从头开始计划写一套分布式的数据存储和统计系统,结果延期了2、3个月也没有完成。最后根据需求重新设计了系统,同时申请了更多资源大幅扩展了团队规模解决。此后有幸和一个国外团队创业,学习和实践了项目管理的一些方法和技巧,更清楚的认识到之前在这些方面的不足。

6. 对程序员工作的前三年?有什么建议?

敬宓:建议是:尽可能的拓展自己的视野,对所有技术心怀学习的热情和好奇心:不能因为是写代码的,就忽略对硬件的学习;不能因为是写前端的,就减少对算法的了解;不能因为是写 C/C++ 的,就鄙视写 PHP 的;不能因为是做数据、算法研究的,就放弃对工程技术的专研。