技术达人 谭望达 专访
受访人:谭望达 (Apache Hadoop 项目管理委员会成员 & Committer,Tensorflow contributor)
采访人:龙星镖局
(1)你会如何介绍自己?
说起来接触编程的时间已经很长了,而且很杂很折腾。从初一开始接触编程,整个中学时间都在刷题做信息学奥赛(算法)。上大学后对游戏图像引擎和游戏AI产生了浓厚的兴趣,折腾了好几个项目去参赛。毕业时为了准备面试试玩了腾讯、网易的几款游戏(之前只玩CS与暴雪),然后就放弃了继续做游戏坑害少年儿童的想法。
后来校招听宣讲会的时候第一次听到“云计算”的概念(2010年),然后碰巧听到了阿里云王博士的煽情演讲,加入阿里云开始做机器学习与分布式系统。做了一年的机器学习、MPI矩阵运算和MapReduce统计计算(ODPS的最早雏形)后,因为希望做更有影响力的开源并且厌倦了北京的环境。去上海加入了EMC Greenplum(后来拆分出Pivotal)做EMC版本的Hadoop,然后2014年加入Hortonworks并且搬家来美国,Hortonworks是我见过的开源路子走得最正的公司之一,好多公司的同事都是拿着公司的工资来全职给开源社区干活。直至今天,我们一直主导着Hadoop YARN的开发,并且使其能够适用于各种企业生产环境中。
(2)你参与过不少开源项目,是Apache Hadoop的Commiter,是什么机缘让你深度参与开源项目的,自己最大的感触是什么?
就像是前面说过的,当我在阿里做ODPS在飞天上的原型的时候,有机会接触到Hadoop以及生态系统的项目,比如说Hive、Zookeeper之类的。当时的感觉是,开源社区的实力真是强大,当时有好像想做的功能Hadoop已经实现了。虽然说阿里云飞天相比Hadoop来说是一个很新的项目,有着强大的团队而且发展也很快,但是开源那种更开放的Geek精神却深深的吸引了我。
在阿里云工作的期间自己做了一个开源的Python机器学习框架叫PyMining,主要是为了更方便的把机器学习的流程给穿起来。当时有一些类似的工具比如说Weka,不过性能确实是太差了,后来就自己做了一个玩玩并且开源出去。出乎意料的是收到了好多加入开发者的反馈说希望加入一起开发,并且有一些小公司还拿它用来解决自己的问题。
这些事情当时在我心里埋下了开源的种子。说起来开源的话,当年最火的就是Hadoop了,所以当收到了EMC/Greenplum Hadoop团队的邀请后,我就义无反顾的加入了他们。
最大的感触对于个人而言,能够深度参与并且主导一个开源项目能够:
- 扩宽自己的眼界,因为你会跟很多公司的人打交道,看到很多这些公司的用例。
- 提高自己的沟通能力,怎么去说服别人、怎么能够高效的沟通对于开源开发来说非常重要。不然一小心纯粹的技术讨论可能会演变成一场剑拔弩张的争吵,之后会导致没法把进度正常地推进下去了。
- 提升技术能力,因为你也需要设计好维护的架构,写出有质量并且看得懂的代码。而且需要review别人的代码以确保方向与质量。
- 最后也是很重要的,就算是你离职了,开源社区里面的代码都可以无风险地被带到下一个公司。
(3)不同于一般的项目,参与开源项目的人员比较多,但交流比较少,天南地北的很多都不相互认识,是什么机制保证大家协同工作推动项目进度的?
首先想要说的是,开源项目所需要的交流可是一点都不少。一般人对于开源开发者的印象是,大家都是远程工作,交流纯粹靠文字。其实在现实中,为了减少无效的Email之类的文字沟通,我们也会尽量的选择更直接的沟通方式:如果是同一个地方基本上会约出来面聊,如果远程的话也会打电话、视频来把问题一次性的说清楚。
关于如何推动项目进度,对于核心开源的开发者来说,一般来说是为了自己的公司项目而在开源里面工作。对于那些需要跨公司合作的新功能来说,不同公司的开发者共同的目标就是要把这个功能用大家都能够接受的方式按时做出来。所以简单来说开源社区的核心开发者绝大部分都不是闲云野鹤,是承担着有来自所在的公司的项目压力的。
(4)对于新人参与开源项目,有何具体建议?
建议开源项目是要做深了才有比较多的收获,这几年看到越来越多的开发者为了刷存在感,把全部的经历放在解决一些很小的问题上。我见过有人在Apache某个知名项目中半年就刷了上百个非常简单的commit的。从作为Apache PMC的角度上来说,我不应该阻止这些热心的开发者对社区的贡献,但是从个人发展上来说把全部的时间都放在这些琐碎的事情上会对社区与自己的发展都没有太大的帮助。
另外参与开源项目需要能够踏踏实实的做,我见过新人在社区发的第一个提议就是要重新实现某一块最核心的模块,并且没有太多的证据来支撑新的设计更好。对于新人来说很重要的是把自己希望做的任务能够保质保量的完成,并且能够听取社区里面的资深开发者的反馈意见。
(5) Hadoop这两年似乎到了瓶颈,你如何看待它的现状和未来。
我相信很多人都有这样的疑问:Hadoop是不是快不行了?其实我认为从企业应用的角度上来说,Hadoop还是在快速的发展。如果把Hadoop等同于Hadoop 1.0,也就是HDFS+MapReduce,那么确实它已经是老掉牙的东西了。不过在目前的企业应用中,很多Hadoop近两年加入的新功能是现在企业应用中非常需要的,比如说YARN里面的新的资源调度模型能够很好的解决不同的用户来共享集群的难题,HDFS里面的分级存储(Tiered Storage)能够平衡企业数据访问的性能与成本等等。此外Hadoop生态系统里面的很多项目也在快速的发展,比如说Spark/Hive LLAP去做ETL和交互式查询等等。这些生态系统的项目能够和Hadoop互补来满足很多企业的需求。
未来,我也确实能够看到一些风险。第一,一些新项目比如说Kubernetes对于长服务服务和容器的支持相对目前Hadoop YARN还是领先的,在这一方面我们正在努力的追赶。第二,云服务的兴起和进步能够使得很多Hadoop现有模块变得不那么有用,比如说S3会导致HDFS用处变小;在云上去跑Spark/Hive也未必需要把YARN暴露给终端用户。不过从个人看来,新项目(比如说Kubernetes/Docker)和云对于有钱也有人的互联网公司而言可能确实是一个很不错的选择。不过对于传统一点的企业用户而言,这些项目都还没有成熟到开箱即用,也不容易得到足够的技术支持。重视安全、稳定与性能的那些客户,比如说银行、保险等公司可能会很不愿意吃螃蟹。
总的来说我对于未来Hadoop的发展还算乐观:大的企业(不算互联网)迁移到云、容器只上至少还有2-3年的时间,考虑到Hadoop可能的进步以及目前的优势,Hadoop还将能领导开源企业软件至少五年的时间。
(6)据说Google对当初开源Android有点耿耿于怀,因为并未为自己带来足够的商业价值。现在开源项目一般盈利的模式有哪些,企业参与有何动力?
其实个人看法相反:开源Android来说实在是太重要了:据Oracle的报道截止到2015年底Google在Android上面挣了310亿美元。虽然这个报道因为是Oracle为了打官司捞钱有所偏差,不过Google因为Android成为移动互联网的最大赢家之一是毋庸置疑的。对于企业软件而言开源项目的盈利模式一般是技术支持、培训、卖付费高级功能、云服务(比如说Google提供Tensorflow-as-a-service)、卖广告(比如说Android)。对于企业而言,除了上面挣钱部分之外,企业还可以通过参与开源来树立更好的工程师文化以吸引更好的工程师,还可以建立更好的技术形象等等。至少在硅谷,很少有听说公司不支持工程师参与开源的了。
(7)你的博客有很多优秀的技术文章,但写过文章的人都知道写一篇不错的技术文章要付出很多时间精力,是什么让你保持写作的乐趣的?
说来惭愧我的博客有很长一段时间没有写干货了。
对我来说,写博客需要把一些难懂的知识讲懂,这样对自己的理解也很有帮助。此外分享知识也是一个很有意思的东西,可以说这也是一种开源精神吧 🙂
(8)如今Google,Facebook,Microsoft,Baidu等相继开源自己的机器学习库,如何看待这一波的大公司机器学习开源狂潮?巨头这么做是为了什么?
毕竟机器学习是过几年之后有可能是最赚钱的方向,目前谁都不想错过这个机会。目前感觉机器学习的商用化还处在战国时代,很难说拿个产品能够最终取得胜利。所以这一波开源主要的目的是把自己的底牌都露出来因为没有人自信自己的实力是绝对的强大。这种上来就开源的方式跟发片发无码是类似的(开车了)。目前看起来虽然Tensorflow最流行也有最华丽的团队,但是Google做产品的能力让人担忧,有些东西并不是钱说了算的。MS/Amazon相对来说做产品更为靠谱,所以MxNet还很有机会。
另外跟前面提到过的一样,开源也能够吸引人才,毕竟好的人才能把产品做大做强。
(9)对新人学习计算机编程有何建议?
从编程语言的选择来说很难说给出靠谱建议,毕竟自己会的编程语言并不多,函数式的语言都接触得少。个人觉得从语言的角度来说,需要有一个广泛应用、而且能够做得很深的,相对来说Java、Python会比较好,最好都会一点。那些漂亮而小众的语言不不建议新人去跟太深,毕竟工作机会还是很重要的。
对于底层知识比如说操作系统、算法、编译等等是懂得越多越好,勿在浮沙筑高台这句话不是白说的。很多时候底层的知识会成为自己的瓶颈。
另外方向的选择不能过于的三脚猫,什么都会等同于什么都不会。选择好了一个东西之后就最好能够走深一点这样收获才最大。
最后当然是多写,写得多了才有感觉;多读,好的程序能够告诉你怎样才能写出好程序。
(10)请谈一些自己感兴趣的话题。
希望大家喜欢这篇访谈。