两周前,涛思数据正式宣布完成 B 轮 4700 万美元融资。一个 40 人的的团队,四年的时间,前后共获得了来自红杉、经纬、GGV、明势等近 7000 万美元的投资,估值已超 3 亿美元,人均估值超 5000 万RMB。消息公布后,迎来很多惊叹。我自己,一个 53 岁的程序员,更是感慨万分。我本已到游山玩水的年龄,却凭自己 2017 年初写的一万八千多行程序,开启了第三次创业之旅,而且持续获得资本的青睐,得以继续折腾,追寻自己的梦想。周末得闲,总结一下自己的心路历程,与大家分享。
一个人,两个月,一万八千行代码
2016 年,我看了很多个物联网、智能硬件的项目,发现大家都在用通用的大数据平台处理物联网的数据,效率不高,运维复杂,且普遍抱怨大数据技术人才难找,尤其是很多传统企业,想做数字化转型,但由于待遇、管理方式等问题,找大数据技术人才更是难上加难。
作为一个研发人员,看到这么多通用痛点,我第一反应就是应该用技术的方式来解决这些问题。分析了物联网数据特点后(关于物联网数据特点,详见我之前的文章:我为何要开发一个专用的物联网大数据平台,还开源它?),我觉得可以充分利用这些特点来设计和实现一个新的存储和计算引擎,开发一个 All in One 的物联网专用大数据平台,这样可以大幅降低软件系统设计和维护的复杂度,提升数据处理效率,降低总拥有成本。
考虑到联网设备的数量在高速增长,我预计今后世界上 90 %以上的数据将全部来自物联网,这将是一个巨大的市场,需要一个专用、高效的大数据平台来处理,于是我判断,这是一极佳的创业机会。
有了这个想法后,我自然马上想到组建团队来做,自己仅定方向、参与整体设计。但仔细思考发现这么做很不靠谱,因为大数据平台是底层软件,抛开创新的设计不说,工程实现的难度很大,对编程的要求极其之高,不是一般程序员能胜任的。作为一名创业老兵,我深刻理解对于物联网大数据平台这样的创业项目而言,技术是核心,创始人必须深度参与到产品的研发,否则一定失控。因此我决定自己一个人开干,先把 Prototype 做出来,验证自己“一个数据采集点一张表”和“超级表”的创新设计是否能完胜市场现有的产品。
我人生的第一行程序是 1984 年写下的,当时念高一,由于邓小平的一句“电脑要从娃娃抓起”,我就读的长沙县一中幸运地得到了团中央赠送的 6 台 Laser 310,从此让我与编程结下了近 40 年的缘分。后来无论是在中国科大念书,到美国留学,在美国 Motorola , 3Com 等公司工作,都写了太多的代码。但从 2008 年我自己创业起,虽然产品的核心代码都是自己写的,比如和信的推送引擎、快乐妈咪的胎心计算,但我绝大部分时间都不在一线作战,因此已经很难说自己是研发高手。
但近 40 年的“码龄”经验和持续创业的项目经历让我坚信,一切不是问题。几天时间,就把自己以前熟悉的 vim , cscope , gdb , valgrind 这些工具再捡起来。本想用时髦的 Go 语言来开发,但一想世界上最有名的数据库都是 C 语言写的,自己又是一个久经考验的 C 语言程序员,因此最后还是决定用 C 语言来开发。
2016 年 12 月底,我正式开始上阵写代码。持续两个月时间,每天平均工作 12 个小时,写下了一万八千行代码。通过基本的对比测试,证明了我创新的设计能完胜市场现有的产品。
53岁,迎来研发状态的巅峰
产品原型经过验证后,加上对物联网未来广阔市场的信心,我顺利获得了明势资本、蛮子基金的天使投资,开始组建团队。
我认为底层软件开发,人多没用,而且创业公司更需要十倍程序员,因此对选人极其严格。团队规模一直很小,最开始的一年半,包括我自己,胜亮、洪泽两位科大师弟,计算所毕业的廖博士,就4个程序员,夜以继日的写程序、debug,外加两度创业老搭档王婧负责所有非研发的工作。
2018 年 8 月,涛思数据发布 TDengine 的第一个正式商用版本,确定产品定位为物联网 All in One 的大数据平台。一直到 2019 年 7 月,涛思团队也才 7 个人,其中 6 个都是程序员。
现在回过头来看,TDengine 的技术开发难度,远超我当初的预期。虽然产品易用性不错,性能也卓越超群,但稳定性问题一直困扰我们。抱着产品不稳定公司就要关门的信条,抱着死啃技术硬骨头的决心,我和团队把 TDengine 重构了多次。特别是 2.0 版,完全推翻了最开始的代码和设计,重写各个模块、加大测试力度,一下将稳定性提高到了产品能商业化使用的程度。
由于总要处理各种棘手的技术难题,比如内存泄露、内存 overwrite 等等,我自己的技术水平和实操能力也得以不断提升。为了完全系统地解决多线程异步调用场景下资源的生命周期管理问题,我写下了 tref.c 模块,让系统稳定性提升了一个量级。2020 年整个疫情期间,我为 TDengine 就递交了近 200 个 PR ,解了太多的 BUG ,而且写下多篇内部技术博客,剖析各种具体技术问题。
就这样,我在半百的年龄,不是在美国,而是在中国迎来了自己技术水平的巅峰。所以,程序员哪儿有什么 35 岁的魔咒,你只要想写、爱写、持续写,巅峰就在下一站。
开源引来了巨变
好产品,还需要好的推广。怎么让物联网、车联网、工业互联网等行业尽快用上 TDengine ,思考了很长时间,最后我们决定将核心代码完全开源。
在忐忑不安的心情中,2019 年 7 月,涛思数据宣布将 TDengine 单机版正式开源。2020 年 8 月,我们又将集群版开源。
开源的效果,远超预期。在 GitHub 全球趋势排行榜上,TDengine 曾多日雄踞榜首。现在 TDengine 在 GitHub 上的 star 数已经超过 15K , fork 数超过 3800 ,每天 clone 代码的人数超过 1000 ,每天新增的 TDengine 实例数超过 200。
每天看到这些数字,我都是兴奋不已,因为说明自己写的程序得到了大家的认可,没日没夜的 debug 没有白费。更令我开心的是,在李广、江燚销售团队的努力下,虽然代码开源,销售收入却实现了成倍增长。这让我们得以证明商业的闭环,得以证明 Open Core 的商业模式在中国是可行的。
由于开源的成功,我们迅速获得资本的关注。2020 年 1 月,涛思数据获得 GGV 纪源资本、红杉中国种子基金的 Pre-A 轮投资;2020 年 4 月,又获得 GGV 、红杉中国的 A 轮投资;两周前,又获得经纬中国、红杉中国、指数资本的 4700 万美元 B 轮融资;前后融资总额接近 7000 万美元。
由于开源的成功,我们也获得了技术大牛们的青睐。多年好友,远在硅谷却一直在帮涛思数据出谋划策的 Steven 终于全职加入;在 360 一直做数据库研发的怡豪同学加入了,在华为、 Oracle 做研发的潘魏同学加入了;一直在技术创业的科大师弟明磊、伟灿同学加入了,在网易做底层存储研发的李创同学加入了,还有很多很多。
我们当初的 5 人团队终于成长为 40 多人的团队。而且除研发外,终于有了专职的人事和专职的财务。我前两次创业的搭档肖波同学加入了,组建起专业的交付团队。
程序员的黄金时代
2000 年的时候,就有很多人说IT已经到了顶峰,最好不要搞软件开发了。到现在, 20 年过去,中国 IT 从业人员估计是 2000 年的 10 倍。大家可能想象不到,福特汽车一半以上的员工是软件工程师,苏宁的软件开发人员已经超过一万,平安的软件研发人员更是超过万人,软件成为各个企业的增长引擎。而且随着数字化转型的深入,软件研发人员的规模还将进一步扩大。
最令人激动的是开源,它让程序员步入了黄金时代。开源让程序员的代码成为了作品,与画家的画一样,可以被全球程序员欣赏、使用,并传承。对于闭源的软件而言,这是不可能的。你在 Oracle 开发的数据库核心模块,无论设计得多么优雅,你在阿里为电商后台设计的交易处理模块,无论高并发能力有多么强悍,都无法让人欣赏、惊叹。但开源之后,一切都变了。只要你的代码足够好,解决了重大问题,那一定会成为传世之作。即使有瑕疵,后来者也可以在你的基础上修改,但你的名字永远会镌刻在代码上,而不会被历史所淹没。
开源,会让程序员对自己的代码质量产生极致的追求。在 2019 年 7 月决定将 TDengine 开源之前,涛思数据团队花了好几个月的时间整理代码,编写文档,目的就是不想让它过于难看,被人诟病。不开源的话,我们根本没有这个动力去做,因为用户是看不见的。在 2019 年底启动 TDengine 2.0 的开发,更是如此,就是想让 TDengine 的设计与代码更加优雅,结构更加清晰,让其他程序员看的时候,能享受到一种快乐和美感。我也曾向非研发同事展示过 TDengine 的代码,毫无技术背景的他们,竟然也能看懂一段代码的大致逻辑。这一切都得益于开源, TDengine 的每一行代码都是抱着“这是我自己的作品” “这是要给全球开发者展示”的想法敲下的。
如果你去 GitHub 下载甚至 fork 我们 TDengine 代码 (https://github.com/taosdata/TDengine),就是对我们一心想打造的精致作品的欣赏,就是对我们开源的最大支持。
开源,给程序员提供了一个展现自己个人能力的绝好机会。无论你毕业于清华姚班,还是二本学校,无论你是 90 后,还是像我这样的 60 后,无论你是男生还是女生,无论你是科班计算机专业出身,还是我这天体物理专业毕业,无论你是在东半球,还是在西半球,“show me the code”。代码是你实力的最好证明。
开源的代码,能让大家抛弃偏见,看到一个程序员背后真正的价值。
53 岁程序员能做到的,你也能!
我 49 岁创建涛思数据,独自一人开发出 TDengine 的第一个版本,随后带着团队不断重构迭代产品。今年 53 岁,又慢慢离开研发第一线,聚焦到运营和管理上,但我相信,只要有需要,我随时又可以重返战场,与小伙伴们一道 debug ,解决技术难题。而且我坚信,即使我到了 80 岁,只要还能动弹,也依然能写程序。
在中国,普遍认为 35 岁的程序员不再有竞争力,需要做技术管理或转行。细看软件研发,虽然应用在不停地改变,各种新的架构层出不穷,程序员需天天学习新的知识,但其实基本的方法和原理是少有改变的。比如大数据的处理,不外乎是 Divide and Conquer 的一种具体实现,分区、分片技术是很自然的事情,高可靠、高可用,对于我这个通讯行业研发老兵而言,也就是在新的场景下,重新炒一次饭而已,没有什么新意。对于时序数据的处理,与消息队列的处理没有本质的不同,只是增加了计算分析的部分。
人类在科学技术的基本原理和基本方法的突破上,其实一直是很慢的。程序员只要掌握了 IT 技术的基本原理和方法,爱写、想写程序,有挽起袖子大干一场的决心,年龄不再是问题,你的每行代码都会得到认可,得到回报。
儿子喜爱击剑,教练 Miller 说: “Scores don’t determine if you lose or not, you do. Throwing down your sword and mask is true defeat”。作为一个程序员,也是一样,年龄大小、技能高低没那么重要,但只有当你远离键盘不再Coding战斗时,你才是真的被世界淘汰了。
陶建辉
2021 年 6 月 6 日于北京望京