微信号:infoqchina

介绍:有内容的技术社区媒体

卓越程序员炼成记

2018-05-13 08:58 陶建辉


作者 | 陶建辉
编辑 | Eva  

各位网友大家好,我叫陶建辉,今天很高兴来到极客 Live,与大家分享一下我个人的经历。

建议在WiFi环境下观看,土豪请随意

学生时代
初识编程

我是 68年的人,今年年底就 50岁了。我自己第一次写程序是 1984年,高中一年级,那时候中国中学生里面很少有写程序的,我得益于一个故事:当时邓小平到一个中学考察,拍了一个中学生的脑袋说“计算机要从娃娃抓起”,这一句话让我们的中学一下有了六台蓝色 310的计算机,但是,我们中学还没有老师知道怎么写程序,我自己拿着蓝色 310说明书,之后又看了一本谭浩强的 Basic语言编程,周末就开始写程序了。这样到了高二的时候我已经完全可以自己编程了。

不过,上大学的时候,我并不愿意报考计算机系,因为觉得计算机挺简单的。所以,86年考进中国科大的时候,我没有进计算机系,而是进了力学系。整个大学期间,虽然我不是计算机系,但其实我们天天打交道的都是计算机。我自己学了 Pascal,还用 80、86写汇编语言。

两件自豪的事

90年,在中国科大,我进了 LB模实验室,帮老师做了一个 LB天平,是用 Pascal语言写,不仅如此,我还设计了整个电路。而当年写的程序,那个实验室的研究生老师今天还在用,这个事情让我觉得特别自豪。而且,由于写这个软件,我还拿到了中国科大的一个奖学金,500人民币,在当时是相当了不起的。拿了这 500人民币奖学金我就到新疆、青海玩了一趟。

我们科大当时出国留学的风气很重,本来 91年我是要到联想集团上班的,但看着我的几个长沙老乡,还有同宿舍的同学都要到美国留学,心里觉得有点羡慕,因为当时来看,到美国留学是我们那代人最佳的选择,所以我就觉得还是不能去工作,应该到美国去,因此我就留在了中国科大念书,并选择了天体物理,这样,91年我进了中国科大天体物理系念书。

虽然一心想着去美国留学,但结果很遗憾,92年的那个物理 GRE专项被取消,使得我 93年美国去不成。不过,就是 93年的那个暑假,我又做了一件很自豪的事情。

我姐姐是做财务的,她想买套用友的财务软件,大概两千人民币。当时我就跟我姐讲,这个两千人民币给我算了,我帮你写一个财务软件。我姐说,那好啊,你能帮我写一个,我就把钱给你。于是,我翻了一本 FoxBASE的书,写了个财务软件。令人高兴的是,我姐今天还在用我当年写的 FoxBASE的程序,服务了无数的客户,而且我这个 FoxBASE完全是为我姐财务定制的,因为我姐要给很多中小企业做帐,用友的财务软件没有办法做很多公司的帐,我那个小软件做几十家都没有问题。

职场生涯

94年,我到美国印第安拉大学学天体物理。1997年年初,我就到摩托罗拉上班了。摩托罗拉的老板面试我的时候,知道我是学天体物理的,特别喜欢,因此我就很顺利的进了摩托罗拉上班,走入通讯行业,真正开始了一个职业程序员的生涯。

在学校的时候,我一直是系里牛逼洪洪的学生,大家都公认我的程序写的好,觉得这个学生太牛逼了,太聪明了。

但是我到摩托罗拉上班的时候才发现,我离专业的程序员还有相当的距离。当时我的组,有一个 50几岁的老头,头发全白,负责写一个手机软件,我跟他写程序差距太大了,他写的每行程序都值得我学习。一直到现在,我还在用跟他学到的一些小技巧。比如,他特别会写那种内存小的程序,因为当时的手机的内存很小,才 128K,为节省内存,他写出的程序,消耗的内存就特别小。我当时就觉得,太值得我学习了。

刚开始,因为对通讯行业不太了解,我就到摩托罗拉大学,上了好多课,系统的、真的学习了很多软件工程的方法。

后来,我到了 3Com,遇到了人生很大的一个机会。大家都知道在大公司基本都是螺丝钉,你几乎不太可能开发一个完整的产品。我在 3Com遇到的机会,让我成为了真正的高手。这个机会就是做测试工具。

当时手机上网需要一个设备叫 AWS,这个设备好多 Bug,我们到的实验室测试的时候,老是出问题,搞得我们老板特别没面子,最后得出的结论,就是我们测试不过关,测试不过关是因为我没有特别好的测试工具,于是专门成立了一个七八人的小组,由一位贝尔实验室出来的美国白人带领大家开发一套测试工具。

搞了好几个月,但是最后这个测试工具还是不能用。最后我的老板,有一天早上随便跟我聊天说,人人都说你好聪明,你是中国的最牛逼的大学毕业的,你能不能想想这个测试工具怎么做?我当时跟我老板讲,你给我两个月的时间,我一个人来给你写个测试工具,行不行?我老板说两个月没问题,于是我就开始琢磨,后来不到两个月的时间,我就把一个测试工具做出来,之后在实验室演示的时候,完全让大家惊呆了,我做的测试工具把大家想的到问题全部解决了。

这个事情以后,我在 3Com公司的地位一下子不一样了,我的老板特别重视我,把我变成了所谓的架构师了,开始参与产品整体的讨论。我是留学生,当时留学生里面很少人参与产品整体设计,而且待遇各方面都很高了。

还有一个想要跟大家分享的,就是我总说的,努力是最重要的。

我是一个有 Bug睡不着觉的人。在 3Com的时候,我有天早上七点钟不到,就跑到实验室去 Debug,结果发现我的老板已经在机房里了,我一问我老板,他说他六点钟就到了实验室,还有好几个人,他们也相当努力。包括我身边好多朋友,有的比我年长几岁,当时都是特别努力,我意识到,所有优秀的人都很努力,这个我就不多讲了。

创业经历

98年,我在美国工作不到一年的时间,就贷款买了房子,房子很大,三千平方英尺的房子,很不错。我回国后,把房子卖了,这个事情我还专门写了一篇文章《芝加哥的房子》 纪念。

我在美国工作了将近十年的时间,工作挺轻松,收入也不错。后来,我是在摩托罗拉 CDMA的 CTO办公室上班。CTO办公室基本上都是技术高手,但是工作真的没意思,每天都不知道怎么打发时间,每天我们就解决一些小的难题之类的,很轻松,我觉得这样活下去没意思,我跟我太太讲,这简直是坐牢。

我觉得一定要重新做点事情,07年年底,我发现互联网的春天真的到来了,用户体验完全改观,我决定要做通讯,做及时通讯的工具。当时,我太太带着我儿子到波士顿去玩儿,我自己就一个人呆在家里写程序,整整 10天的时间,我把产品的原形写完了,不仅把客户单写出来,还把服务器写出来了,产品能够实现从一台手机到另外一台手机免费发短信,我演示给太太看,说我一定得回中国创业。

就这样, 2008年 3月 1号我回到北京,开始我的创业生涯,而且很顺利,马上挖到了志同道合的人,还拉到了几百万人民币的天使投资。因为当时大家觉得这个技术很牛,我能够免费发短信、彩信。大家可以到网络搜索一下,09年人民日报有一篇文章叫做《免费短信彩信的时代已经到了》,采访的就是我。

当时公司的名字叫做和信,大家可以百度一下,翻很多页,还可以翻得到和信的很多信息,但创业相当不容易,我们做了两年,几乎一分钱都没有赚到过,我们十几个人,到 10年的春节,一分钱都没了,春节后回到办公室,发现办公室被贴了封条,因为我们没有付房租。

当时觉得很气愤,怎么创业创成了这个样子,也开始想了很多办法,我的同学借钱给我,先把工资发了,把房租付了,又重新开干。正由于弹尽粮绝,人的潜能才能一下子爆发出来。我拉着我们的几个同事,拉来了一两百万人民币的合同,让我们度过了几个月的难关。而且很幸运,在谈融资的时候,台湾的联发科集团想收购和信,这样,2010年,我的和信被收购了。虽然这次收购价格不高不低,不过,正因此,我家里完全实现了财务自由,这让我太太很开心,不用担心上班的问题,不用担心家里没钱,这是我第一次创业,那之后我继续做 CEO,做了两年,因为我自己是个特别不安分的人,我特别不愿意有人管,因此我决定我要重新干。

那个时候我已经对手机行业很熟悉,我要做一个创新的产品,因为创新对我来讲是至关重要,我特别不喜欢做 me too的产品。

13年的时候,我觉得智能硬件会起来,我怎么利用智能手机来做一些事情,我就列了很多款可以做的产品,当时我列了测血压,测血糖,测 PM2.5,测皮肤干湿度,好多,还包括测酒驾。我最后挑了一个孕妇的胎心仪来做,我觉得我可以把胎心仪这个产品完全革命化,我就把测胎心的探头直接接到了这个手机上来做,后来这就变成了我的第二家公司,叫快乐妈咪。

网上搜可以搜到很多快乐妈咪的信息,好多朋友觉得我快乐妈咪做得很好,其实也是问题一大堆。智能硬件相当不好卖,而且我们人很少,15年年底的时候,我们帐上没有钱了,大概就几万人民币,我当时让几个人走,最后剩下了四个人,我就跟他们讲,我自己不领工资了,你们四个人就继续呆在办公室,卖卖我们的胎心仪,每个月也有十几万人民币,能够养活自己就行了。但是,我只回家了一个星期,我觉得特别气愤,怎么创业创到这个样子,又搞得我弹尽粮绝。几天之后我就回到办公室,说我要重新回来,不能这样。人在走投无路的时候,爆发的潜力真的是前所未有的,这样,在一个月之后我就把钱搞定,我的快乐妈咪又能继续做下去。

最后,15年年底,我跟太平洋网络谈成,我彻底退出,于是我就完成了我的第二次创业,至少让我们的投资都没有亏损,有一定的回报。

等我退出快乐妈咪之后,真的是想休息,不想折腾了。但是我看到很多项目之后,发现一点意思都没有,而且我觉得,我是真的爱写程序,那怎么办?我看了很多物联网的项目,我觉得又找到了一个机会,在物联网的平台里面,有一个相当重要的东西,就是这个时序数据的处理,它的存储、查询、计算、分析相当之重要,而这块,我分析了整个业内的提供方,我觉得竞争力都不够,一不够,我就觉得这是我的机会。

我自己是个动手能力很强的人,虽然我已经创业两次,不算发大财,但财务上也没有问题,但我依旧觉得应该动手做。因为这里面牵扯到算法,牵扯到一些核心的设计,这个设计必须出自我自己的手。因此我就跟我太太讲,我要重新做一个产品,这个产品要比时序数据库排名第一的产品性能高 5倍以上。如果高 5倍以上,我就重新做一家公司,高不了 5倍以上,就算了。

做了两个月研究,16年 12月 15号, 我写下了第一行程序,开始把我的环境搭建好,整整两个月的时间,我写了一万八千多行代码,这个代码完全验证了我对存储结构、索引结构、索引的方法,OK,这个验证,测试出来,比 MySQL性能高的多的多,我当时特别兴奋,我跟太太讲,我还要再折腾一次。

17年 2月份过完春节之后,拿到这个测试结果,我就开始找风险投资,找了一两个月,最后,薛蛮子说你怎么不找我?还有明势的黄明明,说,Jeff,到底做的怎么样?我跟他们讲完,他们就说 Jeff,我支持你,要多少钱?我说我要多少钱,股份多少,好,马上就谈成,因此我的第三次创业就开始了。

我们做的 TD引擎,是个相当技术性的产品,是一个基础软件,而基础软件,质量性能极其之重要,这种软件对研发人员的要求相当之高,而我自己是个相当资深的程序员,而且我在美国受的教育和训练相当之好,是国内很多程序员做不到的,因此我必须走在第一线,就算我在把团队组建完了之后,我自己现在写的程序量也已经超过了五万行,就在参加直播之前的两个小时,我还在 Debug。现在我们的同事,有个负责技术的同事,每天都在给我安排活“陶总,这个 Bug是你的活,你今天必须给我解决”。我很开心,因为我自己觉得很有乐趣,由于我的参与,我们这个产品的性能相当之好,无论是插入查询还是计算的速度,远远超过了我们的竞争对手,我说的这个竞争对手不是中国的竞争对手,而是美国的竞争对手,比如 Open TSDB。

我最后还想分享一点就是,我为什么做这个产品?做第三个产品时我已经接近 50岁的年龄,尤其在快乐妈咪离开之后,我自己琢磨过,钱对人来讲,多一点,少一点真的意义不大,人生能够被人记住的是作品。我太太是个业余画家,有人关注我的朋友圈或者微博,可以看到我太太画的很多画,我觉得可能一百年之后,都有人在看我太太画的画。我作为一个程序员,我能留下什么东西?我希望能开发一个最好的产品,能让这个产品留下来,让我的儿子,我的孙子特别自豪。我愿意做一个基础性的产品,像我现在做的这个时序数据库,是一个相当基础性的产品,是刚性的产品,任何做物联网,做车联网的必须懂这块,我觉得一定有市场,而且它的生命周期相当长,绝对不是一年两年,我认为是十年二十年,如果我们这个 TD引擎能够成为物联网时代的 Oracle,那就是我这个程序员一生最大的骄傲。

打破程序员 30岁魔咒

作为一个过来人,我从 84年写程序到现在应该有 34年,中间断断续续确实一直在写,我写过的语言有 Basic,Pascal,C,C++,写过几行 Java,也写过几行 Python,但 GO还没写过,脚本语言写过很多。好多人觉得程序员是吃青春饭,我不太赞成。我天天也在面试,在我手下工作过的研发人员至少也有一两百人。

作为程序员,最重要的,第一是要打好基础,这个基础相当重要。我面试的一些计算机系毕业的,你在问他一些操作系统的问题,他都不太懂,不是说怎么使用操作系统,而是操作系统里面的东西。举个例子,内存调度,CPU的角度,有很多方法,你至少要掌握其中的一两种,内存分配的方法你要掌握,这个方法不是说你要去开发一个操作系统,你要写一个 CPU的调度,而是这个 CPU调度的方法可以用在别的上面,这个内存分配的方法可以用在别的地方。

比如我面试的时候,我经常喜欢考别人一道题目,英文叫做 Consumer producer的问题,翻译成中文叫做生产者、消费者问题,到目前为止,我在国内面试这么多人,还没有一个人,当场能把 Consumer producer问题完美的写下来,这就是个基本功的问题。如果你能把 Consumer  producer问题写的很清楚,我觉得你写任何并发的程序都不会有问题,当然世界上已经没有一个真正的标准的生产者、消费者问题让你解决,但是你在实际的项目中一定会有 Consumer producer类似的问题。

写程序语言,你不能就满足学会写 Python,满足写 Java,你一定要触类旁通,我们那时候,国内计算机系的老师不行,等我到了美国,我就觉得计算机系能学到太多了。当时计算机系开一门课叫做,Program language,就是编程语言,它不是具体讲任何一门编程语言,而是讲任何一个编程语言应有的,比如说一个变量的作用范围,作用域,讲了很多这些东西,你要抽象,把 Java语言,C语言,C++,这种语言抽象出来看,任何一个语言它必须具备了一些元素,比如它一定要有流控制,它一定要有变量,变量就有作用范围,一旦懂了这个东西的时候,你学任何一门新语言都极其之快。虽然我快 50岁了,但是学任何一个新语言,我保证比你快,因为我看过的语言太多了,容易触类旁通。

你希望你的职业生涯长一点,你工资涨的更快一点,你的职位提得更高一点,就必须掌握工作方法。工作方法不是说你学会了学习的语言,这个学习的语言太简单了,但是工作方法就不一样,我在摩托罗拉和 3 Com工作的那几年的时间,跟我在学校里相比,学的最多的是工作方法。比如说,我们做通讯行业,一定要画状态机,如果不把状态机画出来,你是没有办法讨论问题的,你要画消息流,这个东西你不掌握方法怎么能行?怎么写日志很重要,大家都知道我 Debug靠日志,我们这种技术性的软件没有日志了,根本没有办法 Debug,但这个日志到底怎么写?这是要有一套方法的,你只要掌握了这套方法你就立于不败之地。这个方法各行各业不同,包括你使用的语言工具方法都不同,我还是比较老套的人,像我自己现在分析程序,我都是靠状态机,靠消息流,靠日志这些东西定位问题,也有别的方法,但是你一定要掌握。

还有要锻炼自己的抽象能力。我个人特别喜欢招学物理的,看直播的朋友,如果有学物理的,又搞程序的,我特别欢迎,因为学物理有一个特别的能力就是抽象能力。作为成程序员最最重要的也是要抽象能力,程序员绝对不能看到所有的场景都写一个程序出来。就像我们做快乐妈咪的时候,我们做了一个产品测胎心,也测胎动,后来加了血压,血糖,这些数据要同步,一个程序员给我写的是,血糖做了一个同步,血压做了一个同步,胎心做了一个同步,被我大骂一通,在我眼里胎心、胎动、血糖、血压一点区别没有,只是个数据类型,你这个抽象能力要有,否则你就把这个程序变复杂化了。

卓越程序员必备素质

我个人认为自己是个顶级的程序员,但不能说我是顶级的 CEO,也不是顶级的企业家,因为我还没有做成一个特别大的企业,从企业家的角度来看我不算成功的。但从程序员的角度来看我应该是一个相当顶级的程序员,顶级的程序员大概需要具备以下几项能力。

第一是基本技能,你基本技能当然毫无疑问要过关,你必须很会 Debug,你会把这个问题找出来,比如说各种工具你都用着很熟,这个你必须会。

第二个很重要的是要有产品思维,就是从用户的角度去想,要从产品经理的角度去想,产品为什么要做这个功能,做成什么样子,怎么让用户使用简单,如果有产品思维,这个程序员就上了一个台阶,而且有产品思维,你就可以创业了,如果你只是基本技能好,没有产品思维,我建议你千万别创业,你就老老实实做个程序员,做个比较牛逼的程序员算了。

第三很重要的是要有沟通能力,沟通能力主要表现在三个方面:一个是听,一个是讲,一个是写。听这个大家可能很容易理解,听,主要是听听用户的声音、产品经理的声音,你不能误解别人的意思,这也有技巧,你要锻炼,千万不能怪别人没讲清楚,因为你没有找到方法。第二个是要讲,你一定要会跟同事跟产品经理,跟客户介绍你的解决方案,如果你没有这个能力,你做不了领导,你不可能创业,你也不可能有更大提升的,讲很重要。第三个,很多人忽略的就是写。写,我认为比听和讲还重要,一个 PPT要会写,一篇文档要写的好,无论是内容,还是格式。

第四,顶级的程序员一定是一个不断学习的人,如果你不爱学习,那千万别做程序员,因为程序员面对的东西天天在变,今天有这个语言,明天有那个语言,今天有这个框架,明天有那个框架,当然不是说你要天天变框架,天天变编程语言,但你一定要学习,比如说区块链现在这么火,你不了解区块链能行吗?我自己春节的时候花了一两周仔细看区块链所有的东西。你说这个人工智能这么火,你不看,不了解人工智能不了解那些算法,不了解那些术语能行吗?你不了解,你就被淘汰,你不了解,你的工资就涨不上去,你不了解,你就别想找到更好的工作。你必须拥抱这个变化的世界,这是没有办法的,因此不断学习是对每一个程序员的要求。

第五个很重要的是健身。我自己健身是从 11年起,在那之前我毫不关心健身,后来因为我骨折的原因,我变胖了,什么高血压、高血糖、高血脂都来了,我觉得不行,我还要对太太负责,对儿子负责,我觉得非得健身。健身让我保持特别充足的精力,现在,我每周大概至少健身五次,跑步,或者是快走,每周日,奥林匹克森林公园快走 10.5公里,或者在家附近的健身房,或者就在家里骑自行车,我一定做。今天,我保证回家也要健身。看直播的你们,有想参加奥森快走的,欢迎加入,一般都是周日下午。如果你有很好的精力,脑袋转的很快,你一定能把程序写好。

最后我借这个机会说一下,如果你们有人愿意挑战技术,又有精力又爱写程序,欢迎加入我们涛思数据,我们欢迎各种人才。但是你要特别爱写程序,像我一样也能写到 50岁,而且喜欢做底层技术,我特别欢迎,我们需要人,谢谢大家。

今日荐文

点击下方图片即可阅读

左耳朵耗子:编程的本质是什么?



 
InfoQ 更多文章 Kotlin使用率达35%,Java要退位?百度软件中心的开源软件被发现捆绑恶意程序;微软提高开发者分成比例至 95% 左耳朵耗子:编程的本质是什么? 小爱同学背后负责人:大数据、AI全能的港科大博士丨二叉树视频 如何构建符合国内技术环境的微服务架构? 海量数据对比分析,技术面试里的那些门道
猜您喜欢 如何在前端开发中增加编码效率,这里有十款 Chrome 扩展可以帮你 Google新一代智能验证码 国外聊天机器人领域的现状 理解共识算法真谛,让你不再被忽悠 LVS典型故障排除之详解MTU