专访Josh Wills:从数学到编程,如何成为更好的程序员?
鉴于在少年时代着迷于微积分,长大后的Josh Wills前往杜克大学选修了理论数学专业。在大学的最后一年,他认识了统计学这样一个学科,虽然比起偏微分方程,Josh更喜欢后者,但他确实在那一刻起就喜欢上了这一个学科。
在那之后,Josh去过IBM一小段时间,然后去得州大学奥斯汀分校成为一名运筹学研究方向的博士,主要研究内容是解决NP-难的问题。在那之后,他便进入了初创公司领域,在Zilliant做一名统计学家,然后去了Indeed,最终来到了Google。
Josh Wills
Cloudera数据科学主任
在这篇访谈里,Josh讲述了文学与数据科学交融之处的魅力,怀着谦虚与渴望之心去学习,努力去挖掘开源项目资源,以及Google的工程开发部门对自己的深远影响。Josh Wills现在是Cloudera的资深数据科学主任。他在那里的工作用他自己的话说就是“让数据变得精彩”。
1.作为采访的起始,我们想要听听您的本科经历。在本科毕业之后,您直接选择了学术路线,就读了研究生,这些过往经历是如何一路引导您走到今天的?
我本科学的是数学专业。但是其实很搞笑的一点是,虽然我从小到高中之前一直都很擅长数学,但是其实我从来都不喜欢它。我当时其实更钟情于历史学或者政治科学,直到我上高中以后学到了微积分。我深深地沉醉其中,觉得微积分堪称我在学术领域遇到的第一个有意思的东西。
我在高中是一个学霸级别的人,班里其他人都不能“望我项背”。我甚至在几乎没有听课的情况下就自学去参加大学考试。在高中的前几年,我在没有试听过一节课的情况下参加了政治科学和比较政府这两门课的大学考试,并且考得很不错。
所以在我高中时光的后几年,我又如法炮制,通过了艺术史、经济学以及物理学等学科。然后我又在一个假期里看完了全部的微积分AB和BC课程,然后是多元微积分,并最终学到了线性代数,这一切过程都是我自己完成的。到那个时候,我就完全被数学的魅力征服了,正如站在一幅美丽的油画面前一样,欣赏着一门艺术。
最终我来到了杜克大学。杜克大学很棒的一点就是我可以随意选择所有我想上的数学课。我的第一门课程就是研究生级别的拓扑论。那是很有趣的一门课,并且当时与我一同上课的人很多都是很出色的数学家。
很明显这门课对我来说太超前了一些,虽然我很出色,但是别人都是研究生,比我高了一个级别了,所以我在当时非常谦虚。我觉得所有人都早晚会遇到妄自菲薄的一天,我很幸运地觉得自己的这一天来得很早,在我大学的第一年就来到了,所以我在此之后有大量的时间去慢慢重建自信。
总而言之,我当时跟数学杠上了,并且我也一直觉得自己会成为一个数学教授。但与此同时我也对很多其他的东西感兴趣——我选修过一段时间哲学、经济学,然后在那之后着迷于认知神经学。
很幸运的是在大学的第二年暑假,我去了卡内基梅隆大学参加了“本科生研究项目”,旨在完成道路建模和空间导航方面的工作。那是我人生中第一次认识了Matlab这个编程工具,第一次建立模型来模拟人脑的工作。正是那段经历让我喜欢上了编程。
2.您是否开始马上在杜克大学学习各种编程课程?
是的。我选修了杜克大学的计算机科学课程,并且学会了写C++程序。但是我没有学算法或者操作系统一类的计算机专业课程。在之后的职场生涯里,尤其是面试过程中,我都发现了这些缺乏的课程给我带来了很大的麻烦,它们也成了一些很尴尬的门槛。
在我上大学的第三年年初,我决定暂时不去读研究生走学术路线,而是去找一份真正的工作。我去面试了一些初创公司并且拿到了一个Offer,但是这一切都被随之而来的2000年和2001年年初的互联网泡沫破解彻底击碎。
这在当时是普遍现象,而杜克大学的求职部门很给力地帮我们这群倒霉的家伙到处找工作。最终我获得了一个在IBM奥斯汀办公室的工作。我就职的第一天是2001年6月17日,然乎就在我入职后的一周,IBM宣布停止招聘,所以我觉得我就是那种擦边进去的人。
IBM的奥斯汀分布有一个硬件团队主攻芯片设计和系统组合,简而言之,就是你需要钻进那些非常原始的硬件组件中,去查出每一个错误,这样你才能加载运行操作系统。
我在当时负责管理一个用于测试微处理器的MySQL数据库。整个数据库有15GB大小,这在当时看起来是一个庞然大物,但是现在看起来小得可怜——我的手机都比那整个数据库有更大的容量!我在当时的任务是开发仪表盘,然后针对机器的性能和芯片的表现做一些统计分析,为的是基于一些晶片制造过程中的测量指标来判断芯片可以跑多快。这就是很传统的统计学,很传统的数据分析,只不过需要做一些编程工作。
实际上,这是一项很无聊的工作,我很快就觉得无比厌倦。日后我经常回顾这一段时光,觉得自己在那种情况下还能做出点东西来真是奇迹,这段经历也算是证明了我这个人无论在喜不喜欢的情况下都能把工作做好。
鉴于已经厌倦了那份工作,我申请了得州大学奥斯汀分校的运筹学研究项目。得州大学并没有统计学院,而其实统计才是我想要学习的东西,所以在当时运筹学研究所已经是我在奥斯汀找到的最好机会了,而在当时奥斯汀可是一个非常不错的城市。
我在本科的最后一年才选修了统计课,但这已经是我离校的那一年了。那一年我选修了音乐鉴赏、逻辑学简介(很奇怪吧,是一门哲学系的课程)以及统计学简介。统计学简介在当时其实是研究生课程,但是鉴于我早就有过线性代数和偏微分方程的底子,那门课对我来说其实蛮容易的。
而且很好笑的一点是,我一上就喜欢上了那门课。我曾经选修过的很多哲学和神经科学课程里都有认知论和符号推理部分,那些课程的主旨是去试图理解如何才能确定我们确实知道某些东西。
3.而统计学是关于量化不确定性以及我们不知道的东西的。
非常正确!这是一门量化可知与未知的学科。这是你的数据,你能从中得到什么确定的结论?我对此很有兴趣。就我个人而言,这些东西简直让我痴狂。我喜欢统计学。现在我们快进到我的得州大学时光,那段时间我在得州大学上着全套的运筹学课程。
在那两年间,为了拿到硕士学位,我一个学期需要上三门课,与此同时我还在为IBM工作。那是一个很糟糕的点子,完全就是一场灾难,我根本没有生活可言。
4.听起来您在IBM学会了如何做简单的统计分析,并且觉得“我想要更多地学习一些这方面知识”。
没错,就是这样!我在IBM的软件工程需求其实很简单,并且我写了很多很疯狂的Perl脚本,在一定程度上自动化了我的工作。但是那个地方教会了我基本的统计学知识,并且让我认识到统计学其实在现实世界中更有用处。而我当时的想法就是,如果你想要学习更多的东西,学校是最好的地方,所以我又回到了学校。
在读研的第一年,我又做了另一个转变:我换到了IBM的另一个部门,为的是可以做一些“真正”的编程工作,而不是弄弄仪表盘、写写Perl脚本。我换到的部门需要做一些非常底层的C++固件编程。那项工作基本上就是为那些还不能正常工作的硬件系统写固件程序。我作为小组的一员,开始学习类似于版本控制、测试等一些我从学校从未学到的东西。
而这其中最重要的技能,莫过于我学会了如何调试黑盒子系统。当时我想要让一个固件在一个还不能正常工作的硬件系统上跑起来,而我的工作就是想办法解决这一过程中遇到的所有问题,并且让它顺利地运转起来,无论我遇到什么bug,我都需要去解决它们。当时我对硬件的了解不多。其实直到现在我的了解也不多。我现在都不会对一盒磁带编程。我觉得最后我之所以转做软件工程师,也是因为我不了解那些不是我自己设计的系统。
总而言之,那个黑盒子就是那个没法运转的硬件。当我给它一些输入的时候,它却不会给我一些输出。我必须要黑进那个系统里,用一些命令或者指令让这块硬件重新可以与系统的其他部门通信。而在这一过程中,那个对着黑盒子调试的经历,可能是我在这个地方学会的最重要的能力。
5.您从调试这些黑盒子的经历中学到了什么?
我不觉得这个黑盒子有多神秘:我只是着迷其中。我是那种可以花费五六个小时时间去玩乐高积木的孩子。我到现在都依然很喜欢乐高积木。我生于1979年,大概也算赶上了千禧年。对于我来说,如果一个计算机系统不按照我给的指令去工作,这是不可接受的情况。
无论需要花费多少时间,我都有决心去搞定这个黑盒子,直到它能按照我的指令去工作。
这是一门量化可知与未知的学科。这是你的数据,你能从中得到什么确定的结论?我对此很有兴趣。
在我的过往,我曾经遇到过几个这样的好问题。一个好的问题就是无论你的水平有多高,但是问题依然比你的水平要更高一些。你在努力地去做那个比你的水平要求更高一些的工作,这是一种很好的感觉。我往往会沉醉其中。但是每当这种时候,我的人际关系都会濒临崩溃,因为我完全没有办法对工作以外的事情产生兴趣。
曾经一段时间有种潮流是,数据科学家工作的面试就是让应聘者在面试过程中去真枪实弹地分析数据。我对于这种行为非常赞成。我曾经有过一次面试,在面试中他们给我一个问题以及数据集,然后让我在两个小时内***去完成数据分析工作。那可能是我一整年中最开心的两个小时。我简直可以为了这种感觉去多参加几次面试。
6.但是您曾经提到过,在您的学术经历里,曾经有一段时间备感煎熬。学术的一大特点似乎就是一旦你到达了一个特定的点,你就可能需要花费大量的时间去攻关尖端问题。您的性格似乎很擅长这样的工作,为什么学术界后来对您不再有吸引力了呢?
作为一个“伪千禧一代”,其实我不仅是名头上冠以“千禧”,实际上也和他们一样的缺乏耐心。我慢慢觉得学术圈不再吸引我了。在我达到你说的那个点,那个可以容许我花费大量时间去攻坚一个简短问题的点之前,我需要做太多的事情。
一旦你读研了,你就需要为某位导师工作,并且完全按照导师的命令去做,做许多他让你做的事情。然后你需要做博士后很多年才有机会成为一个助理教授。在你经历了所有这些痛苦之后,再过十年,你就可以获得终身教授职位。
这一段时间实在是太长了,而在那之后,你才有机会去花时间做你想做的事情。即便做到了教授,我还是觉得不值得,因为你依然需要花费大量的时间去申请经费以及管理学生和博士后们。
现在我35岁。从时间上看,我可能正处于事业的顶点。我有一份非常好的工作,在这个岗位上我可以做所有我想做的事情、所有我喜欢的事情。但同时这也是需要谨慎考虑的机会。这种随你做任何你想做的事情的岗位是很有压力的,因为如果你搞砸了一些项目,或者是错过了具有重大影响力的机会,没有任何人会替你背锅。
Amr Awadallah曾经撰写过一个关于一个CTO应该做什么事儿的帖子。他将CTO的职责与CFO相比较。CFO是那一类不需要为每个季度的销售数字负责的人,但是如果出现一个重大错误或者遗漏,CFO就可以被炒了。与此同时,CTO是不需要为产品交付上线负责的,那是工程师副总裁的职责。但是如果CTO错过了一些重大的科技风潮,他就可以走人了。
7.您能不能简单谈谈IBM和Cloudera有什么区别?您是如何发现各种区别的?
我们的聊天跳过了研究生阶段,在那时我上了一门关于价格最优化的课程。其中一名教授同时也在为奥斯汀本地一家名为Zilliant的初创公司工作。我在当时想要一个专注于运筹学研究的工作,所以我的教授就聘用我做了一名数据分析师。在那里,我学会了SAS和R,并且开始针对类似于市场细分和价格弹性等问题做数据分析和建模。
当你从学术界走出来,一般来说你都会发现现实世界比它看起来还要有趣,并且你需要解决的问题其实比看起来要难得多。
当你从学术界走出来,一般来说你都会发现现实世界比它看起来还要有趣,并且你需要解决的问题其实比看起来要难得多。定价优化之所以不像软件工程一样大热,主要是因为大部分世界五百强公司所面对的问题仅仅是确保售价比成本要高。
如果他们连成本是什么都记不住,他们根本不可能知道应该定什么样的价格才能保本。这不是火箭研究那样的高科技。你根本不需要数据科学家去做这样的事情。你只需要一份好的报告就能解决所有问题。
8.为什么这些公司会连这些很重要的信息都不知道?
这看起来是一个很重要的部分,但是事实就是他们很多都不知道。问题出在销售动机上。卖东西的人,也就是销售人员的目的是获得合同,因为他们的收入是完全基于这些合同的。他们需要将要售卖的东西放在一起,打包进行销售。这一过程中会需要一些材料和专业服务,主要是文件和各种合约。
这些文件会被不停地阅读和完善,但是没有人会去想,为了折腾来折腾去地签署这些合同需要花费多少钱。这类费用差异太大了,而人们总是很乐观地去估计这笔费用。他们不会估计他们的生意谈判会有冲突和不顺利。他们不会估计到他们的报告会有错误。他们不会估计到他们的行程中可能会出现飓风。
这些不是小到可以忽视的问题,但是它们依然不是那一类可以很好地套进你在研究生阶段学过的各种技术中的问题。它们是完全不同的一类问题。
它们确实是小问题,虽然小但是不容易解决。正如减肥是一项简单但是不容易的工作。大部分业界公司的问题都很简单,但都很难解决。
9.所以在Zilliant之后,您是不是将解决业界问题定为您的目标?
我希望让自己变得有用。我喜欢去解决别人的问题。我也希望自己可以帮助到别人。我本性上是很乐于助人的。我确实热衷于去抽象概念,并且我喜欢艺术以及其他具有奇怪审美的东西,但是我更希望每天的工作能更多地专注于人们的问题,并且让他们的生活变得更好。而美学和理论都不如前者更有吸引力,因为它们总是将我从现实的问题中扯离。
10.在加入Google之前,您曾经在一系列的初创公司工作过。您在这些初创公司里是在解决不同的问题吗?最终是什么让您选择了Google?
Google的工作让我永远地离开了奥斯汀。我实在太害怕离开奥斯汀了,以至于被我推掉的机会都可以列出一个很长的列表了。2005年,我收到一个Google的工程分析岗位Offer,我拒绝了。2007年,我收到Facebook的数据科学家Offer,我也拒绝了。我至今都在努力地不去想如果我当时接受了那个Offer,现在会是怎样的一片光景。
它们确实是小问题,虽然小但是不容易解决。正如减肥是一项简单但是不容易的工作一样,大部分业界公司的问题都很简单,但都很难解决。
最终让我动身前往旧金山的东西是拍卖理论。我曾经在得州大学的博士阶段修过一些有关博弈论和机械设计的课程,其中包括了拍卖理论。我真的很喜欢它:这是很漂亮的数学模型,并且可以用来让很多社会问题得到最优化。我一直都想知道,如果将拍卖理论应用于现实世界会是怎样的,但是在奥斯汀实在是没有任何机会让我去实战设计一个拍卖理论的问题。
很幸运的是,我一直都跟Diane Tang有联系,她曾经在2005年试图招聘我进入Google,并且负责管理Google的广告质量团队,该团队的职责就是广告拍卖。
她是Google的第一位也是唯一一位女性Google学者,不过当时她只是将我招聘到Google工作并且全职负责广告拍卖工作的一个朋友。她是我的一位良师益友,也是我职场生涯里最重要的贵人。
11.Google的广告质量团队是怎样的?是不是一个聚集了一群学过拍卖理论的人的地方,目的是为了将这个理论运用于现实世界中?
我想要说的关于Google的一点是,在它的核心系统里有太多的偏才软件工程师。Eric Veach,他是一个计算机图像学博士,但是没有机器学习经验,正是他设计了Google最原始的机器学习系统。Eric曾经遇到了这个问题,于是去翻书,最后拿出了整个解决方案。
我还记得当我第一次来到Google时,尝试理解整个机器学习系统是如何工作的。那真的是一个非常聪明并且独一无二的解决方案,被用来解决世界上第一个真正的大规模机器学习问题。
它最原始的算法非常聪明,并且我从来没有见过这个算法被发布在任何期刊上,并且我觉得我们永远也不会将其发布。当然,Google现在早就已经超越了那个阶段,并且奔向更为智能的机器学习系统。
Eric是那个设计了Google最原始的拍卖算法的人。同时,他是一个搞图像的家伙,从来没听说过拍卖理论。所以他去读了有关二次价格的拍卖理论,并且想出了一个非常简单的叫作GSP的生成算法——生成二次价格拍卖。
我曾经涉足过许多与拍卖有关的问题,并最终来到了Google。我真的很喜欢Google,但是最终在Google我们做的关于拍卖的问题也只是和人们理解的拍卖行为一样复杂。
现在广告商们很有热情,这是好事儿,但是实际上真正有趣的拍卖策略与拍卖模型都是非常复杂的,并且需要大规模的计算量,我们需要有很强的工程团队加入进来才能完成我们的设想。但是Google并不想要拥有这样复杂的拍卖模型,因为除了搞拍卖模型理论的人,恐怕没有人会喜欢它。
12.这听起来像是学术圈与业界的一个显著差别。在学术界,你总是想尽办法去获得最好的结果。但是在现实世界中,你会发现开发落实优先级最高的指标不仅有指标,也有易用性和用户体验。这样的转变一开始对你来说困难吗?
我不觉得这是什么问题。我非常幸运。我的大部分有关运筹学的研究生工作都是关于一些不可能解决的问题的。运筹学研究包含有一些很基本并且很难的问题,那是一些你根本不可能找到答案的问题。那类研究的目的就是让你尽量做到最好,其实我很喜欢这一类工作,因为它们的目标要求不会高。如果是一个不可能被解决的问题,而你得到了一个答案,哪怕那个答案距离最优解还有很远,也是很有趣的。
13.有一个笑话:“如果你有一个NP-难问题,你稍微做出一些东西,那么可能你的解决方案已经比起前人好了几个指数级别了。”
我非常赞同这句话。这一个很耐得住钻研的方向。运筹学研究是一项在科学和学术界相对偏应用的学科,所以对我来说转向业界不算难。
14.您的故事说明,要想成为数据科学家,你多多少少必须要有一些自我压迫能力。你必须要有意愿去离开自己的舒适区,进入一个你基本不熟悉的领域里,从新学员开始做起。您的编程开发水平怎么样?
我不觉得自己的这方面能力很强。曾经在学校的时候,我的算法和最优化模型程序写得挺不错的,但是我从来都不是一个很出色的团队程序员。即使在IBM的时候,虽然我是一个4人开发小组中的一员,我们其实也不需要太过紧密的团队合作。软件的架构其实已经被规定好了,接口也是很明白的。
当我在Zilliant的时候,公司决定重写他们的定价引擎。数据分析师们集中到了一起,写了一个关于他们对于新的定价引擎的规格。其中需要一些编程专家的帮忙,而在那个时候,我已经为IBM写过几年代码了。所以我主动请缨完成软件开发工作,但是很快几乎所有人都发现了我其实并没有如何从零开始搭建一个真正的软件产品的经验。
在这里我给Zilliant的经理点一个大赞,因为他在那个时候做的事情是:给我安排了一位资深开发工程师作为导师,John Adair,他是我的另一位良师益友。三个月之后,他写出基于那个规格设计的新系统,然后我对其进行了单元测试。在那三个月里,我每天负责撰写单元测试模块,并且用它们去测试John写的程序。
那是我职业生涯里最有效的一段学习经历,因为John的代码写得非常漂亮。当我向别人描述这一段经历的时候,他们总是不屑,因为那听起来很无聊而且很糟糕,大概绝大多数开发工程师都不喜欢写测试单元。但如果你测试的是自己的杰作,你花费一整天来对自己的工作进行评测,从这个角度来看这项工作就有趣多了。并且我也终于学会了如何从零开始开发一个软件系统。
当我向别人描述这一段经历的时候,他们总是不屑,因为那听起来很无聊而且很糟糕,大概绝大多数开发工程师都不喜欢写测试单元。但如果你测试的是自己的杰作,你花费一整天来对自己的工作进行评测,从这个角度来看这项工作就有趣多了。
当系统开发进入到后部,我也开始写一些关于这项设计的工作,所以我既知道规格也知道软件。亲眼看着如何写出那种能通过测试的代码是很有趣的。John和我对系统进行了几次重构,但是最终在测试部门测试整个系统的时候,他们只找到了两个错误。这是我所有参与过的软件项目中最出色的一个,代码实在是太漂亮了。
在离开Zilliant之后,我在Indeed公司短暂停留过一段时间,岗位是在搜索引擎部门。在那里,我是一名统计师。我写一些代码,但是主要是在那里运用我的统计学知识。并且在之后我离开Indeed进入Google的时候,我依然是作为统计师受聘的。
Google里到处都有漂亮的代码,以至于你可以随便去读、去用、去学习。在Google待了9个月之后,公司将我的岗位从统计师调整为软件工程师,并且给予了我擢升。我对此一直都很心虚,因为我的代码质量从来都没有通过Google内部系统检测。
对于像我这样的人,我只是擅长模仿而已,并且无论是什么东西,学起来都很快。Google里边有太多的出色代码,这对我来说是一段无比精彩的经历。仅仅因为我曾经就职于Google,看过这里的精英们如何写代码,就足以让我比起一般的软件工程师出色20倍。这绝对是无与伦比的经历,非常精彩!
15.您能不能具体描述一下您在Google做什么?您是不是去询问那些写代码的人问题,从他们那里获得各种答案,模仿他们写代码并且读他们的代码?您在那里是如何学习的?
我不知道其他地方是怎样的,但是Google其实是将这一切灌输给我的。它要求我像Google里的其他人一样写代码。可读性要求是一个很大的问题。无论你写什么语言,你的代码可读性必须达到一定要求,才被允许加入Google的原程序库里,或者你的代码可以被某些有资格检测可读性的大神批准。
为了让自己的代码拥有足够的可读性,你必须要按照Google的代码风格写许多的代码,而且可读性检测被看作软件工程师的噩梦。我永远不会忘记Sawzall库对我的代码的可读性评价。
当时我写了一些用于分析广告日志的代码,研究一些广告标的之间的相关性以及不同的机器学习概率。我写了一些很简单的相关性代码,并且将它们提交到了Sawzall库,结果评价我代码的人是Rob Pike。
你可能不知道Rob Pike,他曾是AT&T实验室的一员。他写了第九计划,并且他是Go语言的创始人之一。同时也是他创造了Sawzall语言。他也是我在Google见到的最苛刻的代码检测人,并且我相信他会将我的这句话当作一种赞许。
在他审核我代码的那一次,我前前后后找了26个代码审核员帮我,才通过了他的审核,那种经历简直不堪回首。事情最后恶化到我甚至在考虑直接辞职。居然有那么多、那么多、那么多刻薄的评语。我觉得这正是Google的伟大之处,他们通过让我去注意这些所有小细节,迫使我成了一名更好的程序员。没有痛苦就没有进步。
16.这大概就是成为数据科学家的一个美妙之处。这是一个交融了很多学科的领域,所以如果你特别擅长于某一领域,你可以谦卑地觉得自己在其他领域还只是入门,并且问道:“我能从这个人身上学到什么东西啊?”
我觉得这是作为数据科学的职责列表里非常重要的一项。事实就是,学会这些所有东西是一个非常曲折漫长的过程。对于那些软件工程师来说,前一个人可能会给我很严厉的代码审核,但是后一个人可能会过来问我一些数据分析问题,因为他们知道我是一名统计师,一位听得懂他们的专业术语并且可以将东西解释给他们听的人。
保持谦虚是很难的,但是要记住谦虚终将会带来进步。有朝一日如果你能成为一个专家,一个可以将自己的东西流利地说出来的专家,那就再好不过了。
17.您是如何从Google这样的超大型公司——一个类似于研究机构的地方,转到Cloudera这样的初创企业的呢?
我怀念Google的很多东西。我怀念那里的人。我怀念那里的食物。我怀念那些玩具。Google里大神太多了。而我们在Cloudera的数据科学团队其实就是Google的一个延伸,我们把所有我们喜欢Google的方面都带了过来,并且做出了一个开源的版本。
这就是我们做的事情。这是世界上最简单的产品管理方案,了解你喜欢的东西,然后进一步完善它。
虽然我不是世界上最好的程序员,但是这不意味着我不能做出一些贡献,随之而来的社区和Crunch的拥笃是我一直都引以为傲的东西。
当我到Cloudera的时候,那个地方大约有85个人。虽然那时它已经不算是一个初创公司了,但是规模还是很小。我进去的时候说:“嗨!大家好,我是新来的数据科学主管,我应该做什么?”当时没有人有任何点子,而且我也没有任何点子。我当时并不清楚他们招我去是做什么的。
有几天我非常忧心这件事,感觉在里边我完全无所事事。在Google,差不多我每天可以收到150封邮件,全部都是找我要东西的人发的。但是在这里,我简直可以养老了。这就是我之前说的那种自在给你带来的焦虑。
所以我在Cloudera的工作就是搞清楚我可以做什么。我花费了大量的时间与客户交流,直到今天我依然在这么做。我给予他们建立数据科学团队的建议,或者给他们一些解决特定问题的方案。
同时我也开始着手处理一些客户们提过的问题,或者是一些客户需求里有趣并且有用的东西。我在当时是Hadoop的外行新手,所以我的很大一部分工作就是去学习Hadoop是什么以及它是如何工作的。我记得有一次我写了一个模型用来检测药物副作用,那个算法一开始是用非MapReduce方法写的,但是那绝对是一个完美的MapReduce问题。
那是我做的第一个有用的东西,并且我知道做得很成功,因为Mike Olson——我们的一个联合创始人,在一个大会上用了五分钟时间展示我的结果,并且在那之后有关它的很多报道和Twitter评论。
在那之后,我致力于完成一些关于处理地震图片数据的问题,这一类主要是油气公司分析的时间序列数据可以帮助他们找到地下石油和天然气的储存地点。那个时候我真的很怀念FlumeJava。那是一个解决这类问题的绝好工具,所以我几乎重写了FlumeJava以解决我的问题。
那段时间让我回想起了曾经在IBM调试黑盒子的岁月。初到Google的时候,我曾经用过FlumeJava去写数据通道,所以我知道API大概是什么样子的,但是我真的不知道那个黑盒子下面是什么,只知道如何让它运转起来。
FlumeJava曾经发布过一篇关于那个系统的论文,而那篇论文确实很有用处,但是你依然需要坐下来告诉自己:“好的,我知道这些API是这样工作的,但我不知道为什么它会这样子,所以让我们坐下来认真看看到底里边是怎么回事儿,是什么让这一切跑起来的。”
可能我对于自己的开源作品实在有点妄自菲薄,但是感谢我在Google的那段时光,让我对于自己的代码质量的所有自大都随风而去了,而且我也很愿意将我的代码发布出来,让所有人都可以去看去加工,让它变得越来越好。
虽然我不是世界上最好的程序员,但是这不意味着我不能做出一些贡献,随之而来的社区和Crunch的拥趸是我一直都引以为傲的东西。
【美】Carl Shan(单研)著
本书选取世界知名的25位数据科学家进行了深度的访谈,从不同的视角和维度,将他们的智慧、经验、指导和建议凝聚成册。每一篇访谈都是一次深度的交流,涵盖了这些数据科学家最初从菜鸟起步,运用各种知识武装和充实自己,一直到最终成为一名卓有成效的数据科学家的全过程。通过阅读本书中的访谈,读者可以形成对数据科学的宏观认识和了解,更深刻地认识和体验数据科学家的角色,并且从这些前辈的过往经历中学到宝贵的知识和经验以应用于自身的成长和事业中。
本书适合有志于成为数据科学家的人、正在从事数据科学相关工作的人、数据科学团队的领导者和企业家以及商业人士参考,也适合对数据感兴趣的普通读者阅读。
长按二维码,可以关注我们哟
每天与你分享IT好文。
在“异步图书”后台回复“关注”,即可免费获得2000门在线视频课程
异步图书福利送不停
邀请10名好友关注10天直接获取异步图书一本(点击文字获取活动详情哦)
点击阅读原文,购买《数据科学家访谈录》
本文转载自异步社区。
原文链接:
https://www.epubit.com/articleDetails?id=Na037a141-0cf7-422b-ad66-345ca0e308e3
- 点赞
- 收藏
- 关注作者
评论(0)