一个土木工程专业背景的开发者,讲述开源带给他的力量

简介: **谭雪峰在TDengine Open Day分享开源经历,揭示程序员如何通过开源项目成长。自学成才的他,从土木工程转行编程,借助开源社区学习、贡献代码,参与TDengine HiveMQ挑战赛获胜,最终加入涛思数据。开源不仅提升代码质量、提供实战经验,也拓宽技术视野,助力个人品牌建立,促进开发者、项目和社区的共赢。程序员通过参与开源,能从代码编写者转变为问题解决者和工具创造者。**

在前段时间我们举办的“TDengine Open Day”第一季技术沙龙中,TDengine 应用研发高级工程师谭雪峰进行的“开源之路:程序员的成长与探索”主题分享获得了众多参会者的好评。谭雪峰从自身独特的职业发展经历出发,分享了自己在开源领域的种种收获以及在进行职业转换过程中面临的挑战及应对。本篇文章基于此次演讲整理而成,给到有需要的开发者参考。
谭1.png

从土木工程到软件开发,开源是我的“老师”
我并不是科班出身,大学学的是土木工程专业,最后转来转去,就成为了一名开发者,过程中所有的编程知识我都是自学的。从土木工程到软件开发,这一转变几句话可能就概括完了,但我在其中付出的精力和努力不是能简单用文字概括的,现在想想,幸好坚持了下来,最终也结出了一个不错的成果。

最开始就是因为对游戏的热爱,引发了我对游戏逆向工程的兴趣。我开始使用工具如金山游侠、Cheat Engine(CE)、OllyDbg(OD)、IDA 等,来探索游戏的内部工作原理。这一过程让我熟悉了汇编语言和伪 C 代码,进而激发了我对底层编程的兴趣。通过参与 Capture The Flag(CTF)比赛,我进一步锻炼了我的技术能力,并在解决复杂问题中找到了乐趣。

之后,我从逆向工程转向了更广泛的编程领域,开始自学 JavaScript、Python、PHP、Lua 和 Go 等语言。在刚开始工作时由于编程知识的基础不足,工作上还是非常困难的,我就边实践边学习。这一路上,我的知识几乎都是通过网络学习来的——通过百度和谷歌,我能够搜索到几乎任何我需要的学习资源;同时,技术社区如 CSDN 和 Stack Overflow 成为了我解决编程难题和学习新技能的宝贵平台。这些资源对我帮助巨大,让我能在编程的世界里越走越远。

还有一个很重要的学习途径就是参与开源项目。刚开始我就是在 GitHub 上学习别人写的开源代码,等有了成长之后就不单是学习了,我自己也开始贡献代码,成为了一名 Contributor。我参与的第一个开源项目是关于寻路算法的优化,在从 ActionScript 到 TypeScript 的转换过程中,我发现了一些算法的 Bug,并开始尝试修复,最终成功修正了源算法的狄洛尼三角网生成错误以及包围盒调用错误。这是我第一次向开源社区贡献代码,感觉自己真的是从使用工具到改进工具的一个转变。
谭2.png

之后我印象比较深刻的一个项目是关于 H265 视频流。在某次工作中,我在一个项目中需要处理 H265 格式的视频流,要优化延迟时间。我花了一些时间进行改进,后端取到 H265 裸流进行处理之后用 Websocket 实时推送 Web 端,然后在 Web 端我将 ffmpeg 编译成 webassembly,之后在浏览器里用 Worker 实现多线程软解,最终通过 Canvas 进行实时监控,并成功实现了毫秒级延迟。这个项目让我学到了很多关于视频处理和浏览器性能优化的知识。后来,我把这个前端解决方案开源了,希望能帮助到其他面临相同挑战的开发者。

最具戏剧化的一次开源经历就是参与 TDengine HiveMQ 挑战赛,这次经历也让我与 TDengine 真正连接在了一起。在这场比赛中,我最终以第一名的成绩获得了“优胜奖”,结果还是很不错的。这也是我第一次参与开源社区活动,感觉能展示自己还能回馈社区,这正是我想做的事情。接着我就收到了涛思数据抛出的“橄榄枝”,最后很幸运地成为其中一员,目前我主要负责 TDengine 的应用研发和一些周边生态建设。
谭3.png

其实在这之前我就在研究 TDengine 了,我之前所在领域是工业物联网,对各种时序数据库都需要了解一些,国产的时序数据库数量比较少,其中开源的就更少了,在这些开源数据库里面 TDengine 性能又是其中非常高的,当时要将TDengine 引入到平台里面,就认识了涛思数据的人。后来因为一些开发任务我开始研究 TDengine 的源码,为了能在 Windows 上应用便用 GCC 编译做了一些修改,这也是我首次参与大型开源项目。

通过这些经历,我从一个简单使用工具的程序员,变成了能够自己“造轮子”的开发者。现在,我不仅能解决问题,还能创造工具帮助他人解决问题。这就是开源给我的最大礼物—成长和自由。
谭4.png

开源让用户、项目、开发者多方共赢
发展至今,开源社区已经演变为一个日益壮大的全球性多元化舞台,开发者可以在社区中分享经验、解决问题、合作开发,共同推动项目的发展。越来越多的企业意识到开源的重要性,积极支持开源项目,并且在自己的产品和服务中采用开源技术。许多大型企业也积极参与到开源项目中,贡献代码、资源和经验,推动了开源社区的发展和创新。
谭5.png

上图是 GitHub 2023 年年度报告,从其中我们可以看到,2023 全年一共有 4.2 亿个项目、2.84 亿个公共仓库、6.5 万个公开的生成式 AI 项目、总共做出了 45 亿次贡献。可见开源项目数量不断增长,涵盖了各个领域,包括操作系统、编程语言、框架、工具、应用程序等。

开源产品无疑是当今技术发展的一大趋势。通过开源,产品可以吸收来自不同使用者的广泛反馈,不合理之处可以通过提交问题(issue)来指出,而社区的开发者则能贡献自己的代码改进。这种模式促使使用者、开发团队和社区三者之间形成协作,共同丰富和完善项目内容,确保了项目的持续健康发展,而不是闭门造车式地过早终结。

以 TDengine 为例,不同于许多时序数据库采用的是单机版免费而集群版收费的模式,TDengine 提供的集群版同样是开源的。这不仅使得开发者能够深入学习数据库集群的解决方案,还为使用者提供了更优质的集群版时序数据库选择,实现了多方共赢的局面。

当下的“开源盛景”无疑也为每个开发者提供了很大的机会。开源让开发者展现自己的同时还能帮助到其他人,分享越多得到的就越多,你可能觉得自己掌握的知识很简单,但也有很多人还不懂,他们得到了你的帮助也会诚心的去感谢你。以我自身参与开源的经历来说,我认为通过开源项目主要能让我们获得以下四个维度的能力提升:

  • 提升代码质量
    我们可以选择一些优质的开源项目,多看多学习这些开源代码。但想要成长还需要多写,不光要写代码还要把优化的过程写出来,最简单的办法就是写完一段代码之后半个月再去看,如果觉得当时的写的非常 low 那就说明有成长了。最好就是自己写东西开源出来,帮助别人的同时与开源项目一起成长。

而且开源代码还会促使开发者保持高标准,因为知道自己的代码将被公开展示,我们便会更加注重代码的整洁和清晰。Linus's Law 曾说过一句经典名言“Given enough eyeballs, all bugs are shallow”,这句话的意思是如果有足够多的人检查代码,那么所有的 Bug 都将无处藏身。

  • 获得实战项目经验
    参与开源项目为程序员提供了接触和探索各种规模代码库的机会,这些代码库的规模从几十行的小型脚本到多达数百万行的复杂系统不等。通过研究和实践这些现有的代码,程序员不仅可以学习到如何构建简洁、高效且易于维护的代码结构,还能深入理解多种设计模式和算法的实际应用。此外,参与这些项目还可以帮助他们在实际开发中更好地理解代码的性能优化、错误处理和用户体验改进等关键方面。

  • 技术视野拓展
    当一项新技术开始引起关注时,开源项目往往是最早采用和实验这些技术的平台之一。参与这些项目不仅可以使程序员在早期阶段就接触并掌握这些前沿技术,还能深入了解其背后的原理和实际应用场景。这种直接的实践经验不仅能够提升个人的技术能力,还有助于帮助我们形成对未来技术趋势的敏锐洞察,在不断变化的职业市场中保持竞争优势。

  • 建立个人品牌
    随着开源技术的深入和广泛应用,开源社区的影响力日益增强,越来越多的企业开始认识到开源项目中隐藏的人才价值。企业不仅在技术创新上依赖这些开源解决方案,同时也倾向于招募那些在开源社区中积极贡献的程序员。那些在开源社区中有所贡献的程序员,往往更容易获得企业的青睐,从而获得更好的职业发展机会。

但相应的,拥有“Contributor”的头衔不仅是一种荣誉,更是一种责任。作为开源社区的一员,我们需要从内心深处发挥回馈社区的责任感。开源项目的成功不仅仅依赖于代码的质量,更重要的是依赖于社区成员的积极参与和持续贡献。这包括对项目的负责,关注并推动项目的长期发展,维护社区的健康生态,以及确保软件的高质量和稳定性,为用户提供卓越的使用体验。通过这种全面的投入,我们不仅提升个人技术水平,还为整个开源生态系统的繁荣做出贡献。
程序员与工程师
在软件开发中,程序员和工程师虽共同致力于软件的创建与完善,但他们的角色和职责各有侧重。程序员主要专注于编写、测试和维护代码,解决特定的技术问题。他们是代码实现和逻辑的专家,通过精确的编程确保软件功能的实现。

而软件工程师的职责更为广泛,不仅包括编程,还涵盖项目的整体规划、设计、测试、部署与维护。工程师需要在整个软件开发周期中进行综合考虑和资源协调,以确保项目的顺利执行和质量标准的达成。因此,每位工程师都应具备扎实的编程能力,而成为一名合格的程序员仅是迈向全面软件工程师之路的起点。通过积极参与开源,程序员可以逐步扩展自身的技术和管理视野,最终成长为能够在更广泛领域内作出影响的软件工程师。

目录
相关文章
|
29天前
|
算法 搜索推荐 量子技术
技术探索之旅:从基础到创新的心得体会
在技术的浩瀚海洋中,我踏上了一段从基础学习到创新实践的旅程。这不仅是一次知识的积累,更是一场关于自我挑战与突破的冒险。本文将分享我的技术感悟,展现如何从零开始,逐步深入,最终实现技术创新的过程。
|
1月前
|
存储 小程序 Java
移动应用开发之旅:从新手到专家的演变之路
【10月更文挑战第2天】在数字时代的浪潮中,移动应用已成为我们日常生活不可或缺的一部分。本文将带你踏上一场移动应用开发的奇幻旅程,探索从基础概念到高级技巧的转变过程。我们将通过一个实际案例,逐步构建一个简单的移动应用,并深入探讨移动操作系统的核心原理。无论你是编程新手还是希望提升现有技能,这篇文章都将为你提供宝贵的知识和启示。
39 8
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术性文章移动应用开发之旅:从新手到专家的蜕变之路
【8月更文挑战第30天】本文将介绍人工智能的基本原理和应用,包括机器学习、深度学习和自然语言处理等。我们将通过代码示例来展示如何使用Python和TensorFlow库实现一个简单的神经网络模型。
|
3月前
编程之我见:技术与创新的融合之旅
【8月更文挑战第21天】在数字时代的浪潮中,编程不仅是技术的展现,更是思维的飞跃。本文将通过个人的技术成长经历,探讨如何在编程实践中结合创新思维,提升问题解决能力,并实现自我突破。
|
前端开发 程序员 开发者
开发者要想走更好的出路必须选全栈工程师这条路吗?
虽然说“技多不压身”,“术业有专攻”,但是作为程序员,尤其是做业务场景的开发者来说,并不是会的面越广越好,而且现在的技术迭代速度太快,不管是前端领域还是后端领域,技术栈或者技术框架更新迭代的周期越来越短、越来越快,学习成本越来越大,尤其是要做资深的全栈工程师,需要学的知识是非常的多,而且还需要各个方面的时间沉淀,考虑到人的精力会随着年龄的增长而递减,成反比例,所以虽然全栈工程师有着丰富的工作从业经验和经历,但是如果想要具备各个方面都差不多,难度是很大的。
201 1
开发者要想走更好的出路必须选全栈工程师这条路吗?
|
程序员 开发者
什么是全民开发?|概念、技能和优势
国内普遍将Citizen Development翻译为公民开发,但草料二维码认为Citizen Development并不一种技术,而是一种工作模式和规范,应该被翻译为全民开发,即每一个懂业务的人都可以成为开发者。
145 0
|
数据可视化 C语言
玉伯:开源有带给我什么
在2021年527蚂蚁技术日上,蚂蚁内源社区举办了内源专场,在专场上玉伯给大家分享了《开源有带给我什么》,以下为演讲的图文整理。
玉伯:开源有带给我什么
|
NoSQL 程序员 应用服务中间件
如何通过开源让自己的技术水平更上一层楼
  本篇内容选自 Gitee 发起,邀请全体开源爱好者共同参与的开源百科编写项目《开源指北》。   什么是开源,相信前面的章节已经说的非常清楚了。开源作为一种贡献技术的方式,对整个技术界和开源社区的正向回馈是巨大的。近 10 年来,越来越多的项目加入了开源界。其中有许许多多的知名开源项目被人所认可和追捧。   操作系统:Linux,Android编辑器:Vim,Emacs,Atom,VSCode版本管理:SVN,Git,Fossil数据库:MySQL,MongoDB,Redis大数据平台:Hadoop,ElasticSearch,HBase容器:Apache,Nginx虚拟化软件:Dock
143 0
|
运维 开发者
认知升级——不做开始爱好者!
你会不会制订一个计划,其实你从来坚持不下来,只是享受制订计划那几天的快乐?把开始当成结果,这是大部分人都有的心理习惯,我们他们称为“开始爱好者”。
536 0
认知升级——不做开始爱好者!
|
物联网 开发者
阿里云MVP:开发者的超能力,用技术创造更好世界
开发者的超能力,用技术创造更好世界
4610 0