今天一早,我给一位远在西安还从未谋面的程序员小邓发出了一份很不错的offer。一周前,他观看腾讯开发者大会的直播视频,听了我的演讲之后,加了我的微信,并主动告诉我,很想加入涛思数据。虽然他毕业的学校还有工作的经历,不是那么靓丽,但我一下看到了他简历里列的GitHub地址以及参与的开源项目,因此马上进GitHub浏览他的程序,发现程序挺漂亮,结构、层次都很清晰,代码可读性很强,更让我惊讶的是,用英文写的文档以及注释完全不输给我这个在美国留学工作10多年的海归。我立即让另外一个同事也去看一下他的代码,得出的结论是,这人很优秀,即使远程工作,也值得马上录用。因此我们马上视频交流,很快,我就定下了录用的决定。

如果没有GitHub,没法翻看他写的上万行代码以及文档,没法查看修改记录,我绝不会考虑录用一个连面都没有见过的小伙子,而且招聘时,还是会更倾向于我中国科大的师弟师妹,或有过其他名校就读和大厂工作经历的人。开源,改变了我的面试流程,改变了涛思数据,也改变了一个程序员的人生轨迹。

现在的软件系统往往很大,以大家熟悉的Linux内核为例,源代码行数已经超过2500万行,文件超过6万个,参与的开发者超过2万人。就连涛思数据开源的TDengine, 一个看似简单的物联网大数据处理平台软件,C/C++代码已经超过30万行,Python测试代码都已超过15万行,而且还会成倍增长。开发一款软件,更多的是团队协同,而不是单兵作战。单个程序员的贡献如何体现?如何让外界的人知道并评估?对于闭源软件来说,这个价值判断问题无从下手。但开源不同,因为程序员写的任何一行代码,注释,做的任何修改都会被记录下来,而且任何人都可以看到。能力的高低,贡献的大小随时可查。

TDengine 在 GitHub 上的页面

开源给程序员提供了一个展现自己个人能力的绝好机会,特别是对于大厂、大系统的开发者。这个展现,能让大家更加客观地评价一个程序员的价值。长期以来,大家更容易相信在大厂工作过的,虽然他有可能从没贡献过核心代码,从没解决过重大技术问题,只是一个滥竽充数之辈;大家更倾向于相信名校毕业的,即使他早已停止学习,只是曾经高考分数不错;大家更容易相信35岁以下的人,不相信大龄程序员依然有很强的战斗力。开源的代码,能让大家抛弃对教育、年龄、性别、经验、肤色、地域、文化的偏见,看到一个程序员背后真正的价值,便于组建团队,便于协同作战。

开源让程序员的代码成为了作品,与画家的画、音乐家的曲子一样,可以被全球程序员欣赏、使用,并传承。对于闭源的软件而言,这是不可能的,大家看到的只是UI或API,无法让人看到程序本身,更无从欣赏。你在微软为Windows 操作系统开发的核心模块,无论设计得多么优雅,你在腾讯为微信后台设计的消息处理模块,无论高并发能力有多么强悍,都无法让人欣赏、惊叹。但开源之后,一切都变了。只要你的代码足够好,解决了重大问题,那一定会成为传世之作。即使有瑕疵,后来者也可以在你的基础上修改,但你的名字永远会镌刻在代码上,而不会被历史冲刷掉。

有了作品这个感觉之后,程序员会天然的对自己的代码产生一种自豪感,会对代码的质量产生极致的追求,因为他不想自己的代码被人唾弃,而是被欣赏。在2019年7月决定将TDengine开源之前,涛思数据团队花了好几个月的时间整理代码,编写文档,目的就是不想让它过于难看,被人诟病。不开源的话,我们根本没有这个动力去做,因为用户是看不见的。在2019年底启动TDengine 2.0的开发,更是如此,就是想让TDengine的设计与代码更加优雅,结构更加清晰,让其他程序员看的时候,能享受到一种快乐和美感。3个月前,我花了几天时间动手为TDengine写了一个小模块tref.c,就想完美地解决在多线程情况下,资源的生命周期管理问题,而且就希望这个500来行的小程序能被全球的程序员学习、使用和改进,不再为多线程问题所烦。如果不是因为开源,没有会成为作品的感觉,我大半就是仅仅解决一个具体问题而已。

GitHub 上 tref.c 的一段源代码

对于初入茅庐的程序员而言,参与开源项目,更是一种学习的机会。不仅可以观摩、学习绝顶高手的代码,更可以参与其中,贡献一段代码。自己写的代码有问题,一定会被测试出来、被人指出毛病,甚至直接被人修改或抛弃。与大侠直接过招,相比闭门造车,相比自己摸索,成长的速度要快N倍。而且参与的方式有很多种,除直接贡献产品代码外,还可以贡献测试例、测试代码,贡献文档,贡献使用案例等。就象TDengine,测试代码的行数将会远超过产品本身的代码行数,而且对技术的要求一点都不亚于产品本身。我的第一行程序是1984年写下的,当时正读高中一年级,只能看到谭浩强编写的《BASIC语言程序》这本书,书里尽是一些简单得不能再简单的程序。如果当时就能像现在这样访问无数优秀的开源代码,对于一个如饥似渴的学生而言,那无疑找到了世界上最好的课本和老师。

对于90后00后程序员而言,开源,让他们赶上了程序员前所未有的黄金时代。对于我这个52岁的大龄程序员而言,仍然是赶上了黄金时代,因为可以依靠自己的实力证明,编程没有年龄的限制,而且仍大有用武之地。真心的希望,三十年之后,还有人在看在用我写的代码,而且我自己还能给TDengine贡献代码,那才是我最大的幸福。

这台Mac为TDengine贡献了4万多行代码

“这是最好的时代”,开源,让程序员的价值能更客观地展现,让程序员有了属于自己的作品,让程序员去追求极致,有动力去打磨作品,让其成为传世之作。对于真正的程序员而言,毫无疑问,这是最好的时代。

“这是最坏的时代”,开源,让滥竽充数的程序员无所遁形,能传承下去的一定是精美的作品,不再会有劣币驱逐良币之说。对于靠拍、靠混,依赖炫酷的PPT和报告升迁的程序员而言,毋庸置疑,这是最坏的时代。

无论年龄,无论学历,无论是在BAT还是在startup工作,  只要你热爱编程,就一定要参与到开源的浪潮中。无论你是全职加入涛思数据这样的开源软件公司,还是作为社区贡献者参与一个开源项目,只要持续努力,你一定会给世界留下一个印迹,给人类留下一幅作品。

陶建辉

2020年12月27日于北京望京

开源 – “这是最好的时代,这是最坏的时代”相关推荐

  1. 李开复看2019投资趋势:最坏的时代将酝酿最伟大的公司

    来源:网易智能 摘要:12月3日下午,创新工场在北京举办了2019投资趋势分享会.创新工场创始人.董事长兼CEO李开复,创新工场联合创始人.管理合伙人汪华与创新工场合伙人张鹰对目前中国经济形势和投资趋 ...

  2. Java程序员:这是一个最好的时代,也是一个最坏的时代...

    狄更斯的<双城记>有一句话:这是一个最好的时代,也是一个最坏的时代. 对大多数人来说,这是一个最坏的时代.因为变化太大.太快,远远超过普通人的想象力和承受力.对极少数人来说,这也是一个最好 ...

  3. 这是最好的时代,也是最坏的时代

    这是最好的时代,也是最坏的时代 这是一个最好的时代,只要你有能力,你可以自由驰骋,同时,这也是一个最坏的时代,能力相近的人,会因学历,背景,机遇而被分隔在众多门墙之外. 祝诸君与我好运.接下来,找工作 ...

  4. 德勤2021技术趋势:繁琐、点状的匠人AI时代将终结,MLOps时代来临

    作者 | 宋慧 出品 | CSDN 头图 | 付费下载于视觉中国 德勤在近日发布<2021 年技术趋势>报告,这已经是德勤连续第十二年发布全球技术趋势报告.纵观今年的九大技术趋势,德勤给出 ...

  5. 你们觉得这个时代好还是父母那个时代好?

    小时候总盼望着长大,看了几部青春的电影,就热血沸腾地幻想自己的以后.真正一路披荆斩棘仆仆来赴,才发现小时候梦寐以求的长大并没有自己想象中的那么美好,处在学校和社会的岔路口,没有什么不让人感到迷茫,社会 ...

  6. 计算机时代杂志好吗,计算机时代是什么级别的刊物

    计算机时代是什么级别的刊物 经过查询计算机时代是省级期刊,计算机时代由浙江省计算技术研究所;浙江省计算机学会主办,浙江省科技厅主管的正规期刊. <计算机时代>(月刊)创刊于1983年,由浙 ...

  7. 随谈时代更迭,以及互联网时代和人工智能时代

    众所周知的,现在我们是处于互联网时代. 但究竟互联网时代给我们带来了什么呢? 爆炸的信息?井喷的app?全世界的触手可及? 互联网带给我们的远远不止这些,回首十年前,与现在的生活方式可以说是发生了翻天 ...

  8. 这是一个最好的时代,也是一个最坏的时代 ?

    从现在看历史,从过去看未来,时代的变化总是风云变幻,而其间,从社会结构到消费需求,从主观选择到被动追赶,从真正的价值与被时代裹挟着走,从潮流与经典的对峙,从真正值得往前看的和真正值得往后退一点坚持的. ...

  9. 站在时代的风口:人工智能时代的思维方式

    百度CEO李彦宏在5月23日的百度联盟峰会上,提出了一个问题:人工智能时代已经到来了,我们的思维方式是不是要做一些转换?李彦宏说:"从互联网到移动互联网就已经有思维方式的转换,何况是从互联网 ...

最新文章

  1. TCP/IP详解--第五章
  2. PyTorch 实现 GAN 生成式对抗网络 含代码
  3. 备忘-常用工具/网页
  4. 冲刺第六天 1.7 MON
  5. how is SAP UI5 extension component being loaded in the runtime
  6. CSS 技巧tips1
  7. mysql [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘
  8. java 监听request_ServletRequest 监听器
  9. [转]windows和linux进行socket通信
  10. shell基础之exit,break,continue
  11. Apache Flink®生态所面临的机遇与挑战
  12. 金士顿优盘不被电脑识别的小技巧
  13. 20155305《网络对抗》信息搜集与漏洞扫描
  14. JES专栏:Portlets的国际化和本地化(eNews 第二十八期/2007.09)
  15. 机器学习Machine Learning
  16. 20130719CF比赛141div2
  17. Webflux异常处理
  18. 苹果电脑快捷键找不到了怎么办?一步简单高效的方法请收好
  19. 树莓派+12864液晶视频播放实验
  20. c++的3D游戏笔录-基于panda3d(2)

热门文章

  1. 中国计算机科技前沿网,专委动态科技前沿-中国计算机学会专委.PDF
  2. java的switch_Java中Switch用法代码示例
  3. 基于Linux+6818开发板实现普通电子相册翻页功能
  4. Nginx使用及可能遇到问题
  5. 如何挑选最适合自己的车
  6. Java开发你需要了解的那些事,面试必会
  7. OpenCv创建读取,显示图片与灰度,透明图片,控制图片窗口大小
  8. 【吐血整理】2019年所有精品文章分类汇总!必收藏!
  9. CKA考试习题:存储管理-普通卷、PV、PVC
  10. Guice的scope