作者:英特尔物联网行业创新大使 颜国进

、前言

大家好,我叫颜国进,现为英特尔边缘计算创新大使、百度飞桨开发者专家。回溯至2021年12月,那时的我,身为机械专业研一新生,仅在C和Python编程语言上有些许基础,对于深度学习的殿堂还只敢在门口窥探,对于OpenCV图像处理以及模型部署等技术更是所知甚少。然而,通过不懈的努力和对知识的执着追求,如今我已经能够娴熟地运用C++、C#等编程语言进行项目开发,并且能够使用Python和各类深度学习框架来训练自己的模型。值得一提的是,我已经发布并运营了一项名为OpenVINO C# API的开源项目,为在C#平台开发深度学习和计算机视觉应用的开发者提供更便捷的工具。围绕该项目,产出了多篇富有深度的技术文章,分享了我在使用OpenVINO部署深度学习模型过程中的洞见和体会。

在深入参与开源项目的过程中,我也广泛参考了网上的一些成功项目经验,得到了无数宝贵的经验和技能提升,这使得我的技术层次上升到了全新的高度。经过两年的探索与实践,技术能力得到了显著的提高,而更重要的是,我的努力得到了越来越多人的认可和支持,从而扩大了我在技术社区的影响力。时值我开展开源项目的两周年,我有幸应张晶和李翊玮老师的邀请,以及武卓博士的悉心指导,有机会整理与分享我从一个技术新手逐步成长到拥有自己开源项目的经验与感想。我希望我的分享能为刚刚踏入开源领域的新手们提供一些有价值的参考,帮助他们更迅速地融入这个富有活力和创新精神的开源社区。

下面,我将从四个层面并结合十个具体的问题分别向大家一一道来。

二、为什么要做开源

问题一:开源项目和社区做贡献

首先,我们来探讨一下为什么应该为开源项目和社区做出贡献。对于那些还在犹豫不决是否投身于开源项目的小伙伴们,我希望能够提供一个有力的依据。参与开源项目不仅有助于个人的技能提升和职业发展,更能推动整个技术社区的进步。通过你的贡献,我们可以共同创造一个更加开放、协作和创新的技术生态,让每个人都能从中受益。

参与开源项目和社区对个人具有多方面的积极影响。

技术提升——通过参与开源项目,个人能够接触和学习到更多的技术工具和前沿技术,推动自身技术的不断提升。并且开源项目可以获取全部源码,这对你深入了解一项技术实现以及应用,会有很大的帮助。

提升个人的声誉和影响力——通过专注于某一领域并在其中深耕,你可能成为该领域的专家,吸引其他技术专家的关注和求助。这些互动和认可不仅有助于建立个人的专业声誉,还可能带来一些荣誉称号,为未来的发展提供有力的支持。

塑造个人的未来发展轨迹——开源的自由性和包容性使得个人能够自主选择感兴趣的领域进行探索和发展。你可以将开源项目中的经验和技能应用到自己喜欢的领域中,或者通过开源项目发展新的兴趣和专业方向。这将为个人的职业发展带来更多的可能性和机遇。总之,参与开源项目和社区对个人技术提升、声誉建立以及未来发展都具有积极的影响。这是一个充满挑战和机遇的舞台,值得每个有志于技术领域的人积极参与和贡献。

除此之外,开源还对当前行业以及企业发展带来了更多的红利。

开源已经成为软件行业的基础——开源促进了技术的快速发展和创新:

第一点,由于代码是公开的,开发者可以基于现有的项目进行创新,而不需要从零开始,这样的协作和共享精神加速了新技术的诞生和成熟。

第二点,开源软件通常是免费提供的,这降低了企业和个人使用和实施新技术的成本,企业可以使用开源软件来构建复杂的系统,而无需支付昂贵的授权费用。

第三点,开源软件赋予用户更大的自由度,用户可以自由地修改和改进软件以满足自己的需求,这种灵活性对于需要定制解决方案的企业和开发者来说是非常重要的。

第四点,开源项目通常有一个活跃的社区,社区成员可以相互支持,解决问题,分享经验。这种广泛的协作和支持网络是传统闭源软件难以比拟的。

第五点,开源项目可以非常迅速地迭代和改进,社区贡献者可以快速响应问题,提交补丁,添加新功能,从而保持软件的活力。基于此,可以看出开源软件已经深刻地影响了软件产业的各个方面,并且在很多情况下成为了技术创新和应用的基石。

(上图由文心一言AI生成)

开源已经成为当前最前沿技术的发展的强大动力——开源模式鼓励全球范围内的协作和知识共享,由于开源项目可以被任何人审查、使用、修改和改进,这样的透明度和可接触性降低了进入门槛,极大地促进了创新的速度和质量。此外开源社区的参与者可以迅速识别和修复软件中的错误,增加新的功能,并持续改进产品,这种集体智慧的应用使得技术能够快速迭代和演进,经常超出单一组织的开发速度。开源项目往往吸引来自不同组织和行业的贡献者。这种多元化的视角和专业知识结合在一起,可以解决复杂的问题,推动前沿技术的发展。开源项目还是人才发现和发展的平台,许多开发者通过参与开源项目获得实战经验,进而成为行业内的专家。最后开源项目提供了高质量的软件基础设施,许多公司和组织可以直接使用或构建自己的产品,比如Linux操作系统、Apache Web服务器、MySQL数据库、TensorFlow机器学习框架、OpwenVINO模型部署框架等,都是开源项目,它们为最前沿的技术发展提供了坚实的基础。开源项目围绕它们构建了强大的生态系统,这个生态系统是持续创新的土壤,帮助技术不断进步。

(上图由文心一言AI生成)

废话了这么多,但也很难完全表述给开源项目和社区做贡献的好处,下面我将从个人经历简单讲述一下做开源项目这两年,到底给我带来了啥?

技术方面:刚开始做开源项目时,我的状态就是一个非计算机专业、没有编程经验和算法基础的新手小白,蜕变成为一个可以实现在C/C++、C#和Python环境下使用多种部署工具套件落地AI设备全流程开发,并且在稳定运行了多个小型开源项目。在这过程中,我学习了C++、C#以及Python编程语言,这样我就可以能够看懂开源新项目的源码;我做的主要领域时深度学习模型部署,因此我自学了OpenVINO、TensorRT、ONNX runtime 等模型部署工具,实现在各种平台下部署深度学习模型。并且由于所做工作为开源项目,为了遵循开源社区规范,自己也养成了良好的编程习惯以及代码规范,学会了开源项目从创建、提交、完善、维护、更新以及发布等全套流程。

开源贡献:结合自己接触的一些开源项目,自己选者了一个方向去做,主要是在C#平台部署深度学习模型。基于OpenVINO模型部署工具创建了OpenVINO C# API项目,并结合该项目,开发了当前流行的模型部署案例。截止到目前,自己已经在开源平台GitHub平台贡献了100,000多行代码,推出了10多个开源项目。除此以外,自己还结合所做的开源项目,在多个平台与开源社区发布了了多篇技术文章,获得了上千人的阅读,并且在CSDN平台打造自己的博客平台,截止目前已经发表了42篇文章,获得了80000+的阅读量以及1400+的粉丝关注,在分享自己案例指导指导其他开发者的同时,也收获了更多人的关注,提升了自己的影响力。同时由于自己专注于英特尔以及百度飞桨的开源项目工作,因此获得了英特尔边缘计算创新大使百度飞桨开发者专家等荣誉称号。

上面只是简单总结了自己这两年以来做开源项目所获得的东西,可以看出,给开源项目和社区做贡献,在成就开源社区的同时,更大的就是成就了自己。

三、如何为开源做贡献

上面我们讲了这么多给开源项目和社区做贡献的好处,可能有一些小伙伴就开始心动了,下面我们就展开讲述一下有哪些途径可以为开源做贡献,具体是如何做的。

问题二:如何提Issue?

首先向大家介绍一下第一种方式,也是入门级别相对简单也是比较容易实现的,就是给开源项目提交Issue。开源项目在发布时尽管发布者或者团队已经做了很详尽的测试,但由于使用对象以及使用环境等因素的影响,使用者难免会出现相关问题以及新的使用需求,因此我们提交Issue可以包括以下内容:

  1. Bug报告:你发现了代码中的错误或异常行为。
  2. 功能请求:你希望项目中添加一个新功能或改进现有功能。
  3. 问题咨询:你在使用或配置项目时遇到了困难。
  4. 文档改进:你认为项目的文档需要更清晰或更完整。

当然,这是是我列出来的常见内容,具体还是看使用者需求,因此提交Issue一定是该开源项目的使用者,再使用时碰到难以解决的问题时我们就可以通过提交Issue方式解决,这样不仅可以帮助自己解决问题,还可以促进开源项目的改进与发展,属于两全其美的事情。

再确定了你的问题以及你要提交Issue时,你需要先做一步问题检查,检查一下是否有小伙伴提交过相同的Issue,这样可以避免提交重复的问题,给开源项目发布人员带来不必要的负担,也是对做开源工作对其他人员的最起码的尊重。如果你发现这是一个新的问题,之前并没有人提过,那么好,你就可以开始提交你的Issue了,主要包括以下几个步骤:

第一步:创建一个新的Issue

此处以OpenVINO库为例,创建一个新的Issue。

OpenVINO官方提供了不同的Issue类型选择,此处可以根据你所需要的问题类型进行选择。

第二步:编写Issue标题:

使用简洁明了的标题来描述你的问题或请求,好的标题可以快速地让维护者了解Issue的主要内容。

第三步:详细描述问题:

官方人员在解决你所提出来的问题时,会首先复现你所出现的问题,因此在提交Issue时,一定要详细描述你所提交的问题复现步骤以及结果输出情况和日志,总的来说可以包括以下几个部分:

  • 上下文:描述你在什么情况下遇到的问题。
  • 重现步骤:如果是bug报告,详细列出如何重现这个问题。
  • 期望结果与实际结果:说明你的期望是什么,以及实际发生了什么。
  • 相关信息:如操作系统、软件版本、依赖库版本等。
  • 附加信息:
  • 日志和错误消息:如果有相关的日志或错误消息,请附加或链接到它们。
  • 屏幕截图和视频:如果它们有助于解释问题,可以附加在后面。

最后就是要使用Markdown格式来组织你的描述,使其易于阅读。并始终保持礼貌和尊重,因为开源维护者是在免费为你提供帮助。

第四步:提交并等待回复

最后在详细描述完问题内容后就可以提交问题了,提交后就可以等待光放人员的回复,如光官方人员在复现时或者解决时有什么问题,也会向你进行反馈,因此可以时刻关注问题的动态。最后在问题解决后一定要礼貌感谢一下官方人员。

问题三:如何提PR?

上面我们已经介绍了提交Issue,这对于刚入门的开发者来说是十分容易的,下面我们将介绍一下进阶内容,给开源项目提交PR。提交PR应该属于进阶版内容,因为他是从技术要求、编程能力以及对源码的掌握程度都会有很高的要求,所以这一块内容适合对项目十分熟悉的小伙伴。

但如果小伙伴们叨叨了这种程度或者是在使用中对项目源码做了修改使其变得更好,就可以开始向项目提交PR了,不过在提交前要先注意以下几点:

第一,确定一下该项目支不支持提交PR,此处主要是通过该项目厂库查看是否PR板块是否开放,以及在项目README中,作者是否表达了欢迎广大开发者对该项目进行改进的意愿。

第二,查看一下项目官方对提交PR的要求,这个要求一般会在项目厂库根目录下的CONTRIBUTING.md文件中,该文件中会规定了具体的提交PR的要求,包括提交PR的规范、代码风格以及编码格式要求和开源许可等内容。

在确定了以上问题后,就可以开始提交你的PR了,这里有两种方式可以提交PR,一种是在线直接提交,这种方式适合修改内容较少,不涉及源码修改等;第二种是本地修改后提交,这种方式适合有较大的改动,涉及到源码修改等。

方式一:在线直接提交

(1)选择要更新的文件

通过在 GitHub 中单击它来选择更新,以README.md文件为例:

(2)点击“编辑此文件”

该按钮位于右上角。

如果你没有Fork该项目,需要先Fork该项目。

(3)修改文件内容

此处增加两个🥰符号。

修改完文件内容后,点击Commit changes提交更改,并按照更改内容填写日志。

(4)创建 Pull Request

修改完该文件后,修改内容只存在于修改者当前分支,需要通过 Pull Request 提交到原作者仓库才可以。点击 Create pull request,创建PR。

按要求提交后,等待代码仓库管理人员审核并通过你提交的PR。

方式二:本地修改提交

(1)fork开源项目

找到要提交PR的项目,先将该项目fork自己的代码仓。

 

(2)克隆开源项目

将需要提交PR的项目克隆到本地,注意此处是克隆你fork到你自己厂库里的项目。

//打开CMD或者打开Git Bash Here

git clone https://github.com/grape-yan/OpenVINO-CSharp-API.git

(3)创建新的分支

提交PR时需要.为了防止在主分支上修改影响主分支代码,此处创建一个分支用于代码的修改。

cd OpenVINO-CSharp-API // 切换到项目路径

git checkout -b temp //创建名为temp的分支

git branch //查看已经创建的分支 如图有temp和csharp3.0两个分支

git checkout temp// 切换到分支

切换好分支后就可以直接根据自己需求修改项目了,此处你可以做一些必要的修改,但最后要进行测试,不要让你的修改影响到其他代码的性能。

(4)修改提交项目代码

将代码修改后,执行git status 命令查看修改了哪些文件,接着使用git add 修改的文件名添加到暂存区,最后使用git commit -m "日志信息" 文件名提交到本地库。

git status // 查看库状态

git add 文件名 // 将修改的文件存放到暂存区

git commit -m "日志信息" 文件名 // 将修改的文件提交到本地库

最后将本地项目代码提交到远程GitHub上

git push --set-upstream main mybranch

进入GitHub项目,切换到mybranch分支,查看是否修改成功。

切换到主分支,将分支mybranch代码合并到主分支,查看是否可以与主分支合并成功。

git checkout main // 切换到主分支

git merge mybranch  // 合并派生分支到主分支

合并成功后,将主分支推送到代码仓。

git add .  // 将修改的文件存放到暂存区

git commit -m "日志信息" // 将修改的文件提交到本地库

git push origin main // 推送到远程仓库

在GitHub切换到master主分支,查看是否合并成功

(5)提交pr请求

进入自己fork的项目中,点击项目中提示的更改。

点击Create pull requests

最后点击Create pull request,提交后开源人将会收到你的合并请求。

好的,到此为止,我们已经完成了提交PR的步骤,后面就等待厂库官方人员审核即可。

​​​​​​​问题四:如何创建自己的开源项目

在前文中,我们已经介绍了最常见的给开源项目做贡献的两种途径,但随着你做开源项目的深入,你可能就会发现一个新的方向并推出自己的开源项目,下面,我将结合我的讲演,向大家分享一下创建开源项目的经验。

1. 学习成功的开源项目

在GitHub上,有很多优秀的开源项目,对于新入门开源项目的小伙伴来说,学习并模仿一些成功的开源项目是十分必要的,主要学习以下内容:

  • 项目命名格式,包括项目名称、文件夹名称等等。
  • 文件夹结构,模仿与你所做项目比较相似的项目,学习一下人家是如何组织文件结构的。
  • README文件撰写,学习一下成功的项目他的项目README文件时如何组织的。
  • 编程规范,开源项目要有很好的编码规范以及一致的代码风格,可以学习一下开源项目所使用的编程规范。

以上只是罗列了一些比较重要的内容,需要学习的内容还有很多,学习永远在路上。最好是能够将集百家之长,然后形成自己的风格,这样就可以在自己的各个项目中使用,下次再创建新的项目时直接套用模板即可。

2. 固定自己的模板

通过学习一些优秀的开源项目,我们可以找到这些项目的共性,然后结合自己的风格,形成自己的模板。通过我创建开源项目的经验,可以很明确的告诉大家,一定要找到一个或者是固定一个适合自己的模板,这对自己后续创建项目以及维护项目是十分重要的。在固定自己模板时,应重点关注以下几点:

  • 项目结构:这一块主要是一个文件结构,在创建项目时,你要考虑一下你的项目都有哪些内容,需要那些文件夹,哪些内容放在哪个文件夹里,这些内容如果你一开始没有考虑好,后续调整会十分麻烦。
  • 编程风格:这是十分重要的一块内容,做开源项目,一定要遵循开源代码风格,现在比较常见的是谷歌代码风格,你可以结合谷歌代码风格,然后根据自己的编程习惯,形成一套自己的编程风格。
  • 文件格式:抛开代码文件不说,主要的就是技术文档文件,开源项目一定要使用Markdown(.md)格式文件,尽量不使用第三方插件;此外就是技术文档格式一定要规范,层次分明,如果项目比较关键的话,要有中英文版本。

通过模仿成功的开源项目,这样你就可以开始创建自己的开源项目了,相面我将会在此处讲讲开源项目中的几个关键内容:

3. README.md 撰写

首先是撰写README,当然这项工作是你已经完成了厂库搭建以及代码内容后进行的,属于项目的收尾阶段进行的工作。但是这确实极其重要的一步,README是对你项目的介绍,也是对外展示你项目的主要窗口,因此README文件的第一印象就会决定访问者对你的项目是否感兴趣,因此既要有实用的内容,也要做的好看。

此处我总结了一些README文件的撰写经验,首先第一点是README要包含哪些内容,主要有以下方面:

  • 项目简介:在README的顶部,用简洁的语言描述你的项目是什么,做什么,以及为什么有用,这可以帮助读者快速了解项目的核心概念和目的。
  • 项目徽章:使用徽章来展示项目的状态,如构建状态、代码质量、许可证等,这些徽章可以提供额外的信息,并增强项目的专业性。
  • 安装和使用说明:提供清晰的安装和使用说明,包括必要的依赖项、配置步骤和示例代码,确保这些说明足够详细,以便新用户能够轻松地开始使用你的项目。
  • 功能亮点:突出显示你的项目的主要功能和特性,以及它们如何解决用户的问题或需求。这有助于吸引潜在用户并展示项目的价值。
  • 屏幕截图和演示:如果可能的话,添加屏幕截图、GIF动画或视频演示,以展示项目的实际效果和用法,这可以使你的项目更直观易懂,并激发用户的兴趣。
  • API文档或链接:如果你的项目提供了API,确保在README中包含相关的API文档或链接。这可以帮助开发人员更好地理解和使用你的项目。
  • 贡献指南:提供一个贡献指南,说明如何参与项目的开发、提交代码更改、报告问题等。这有助于建立一个积极的社区氛围,并鼓励其他人参与你的项目。
  • 许可证:在README中明确指出项目的许可证类型,并提供许可证文件的链接。这可以确保用户了解他们使用你的项目的条件和限制。
  • 联系方式:提供你的联系方式(如电子邮件、Slack频道等),以便用户或其他开发人员与你取得联系、提出问题或寻求支持。

以上这些内容看起来比较多,如果放在一个文件里,就会显得十分冗余,所以对于一些比较大型的项目,可以将其中的一部分包含详细内容的部分放置在另一个文件中,然后在README文件中提供条目以及链接,这样使用人员可以很容易找到相关的文档。

除了内容要全面之外,README还要做的美观、大气以及有条理,能够吸引人眼球,因此,你还要学习一下README文件的美化。其实对于我们程序员来说,README文档的美化并不是做的要多么花里胡哨,只要做的规整、清晰有条理即可,因此要善于使用小图标、标题等级等内容,让你的README文件变得十分有条理。

另外,为了更好地推广你的开源项目,你最好提供的README文件包括英文版以及中文版,这样对于一些其他国家的开发者也可以明白如何使用。下面链接是我推出并维护的一个开源项目的README文件,,该文件我也是在不断学习与改进中,仅供参考:

https://github.com/guojin-yan/OpenVINO-CSharp-API/blob/csharp3.0/README.md

4. CONTRIBUTING.md

  1. CONTRIBUTING文件是一个重要的文档,用于指导贡献者如何参与项目的开发和贡献,它包含了一系列准则、规则和建议,以确保贡献者能够顺利地参与项目,并且保持代码库的质量和一致性。下面简单介绍一下CONTRIBUTING主要包含哪些内容:
  • 欢迎和介绍:在文件的开头,用友好的语言欢迎贡献者,并简要介绍项目的目标和背景。说明贡献的重要性,以及你期待的贡献类型。
  • 行为准则:为你的项目制定一个行为准则,定义在项目中可接受和不可接受的行为。这有助于维护一个积极、尊重和支持的社区氛围。确保明确说明如何处理违规行为和报告问题的途径。
  • 贡献流程:详细描述贡献的流程,包括如何提交问题、提出功能请求、创建拉取请求等。提供清晰的步骤和示例,以便贡献者能够轻松参与项目的开发。
  • 编码规范和风格:定义项目的编码规范和代码风格要求,以确保代码的一致性和可读性。提供相关的文档或链接,以便贡献者了解并遵循这些规范。
  1. 以上就是一个简单的CONTRIBUTING内容,对于我们个人创建的小型项目来说,这已经足够使用了。
  2. 问题五:开源社区中的道德规范

虽然开源社区是自由的,但是它也有一些规则和准则需要遵守。这些规则和准则是为了确保社区的秩序和协作的顺利进行。例如,尊重他人的贡献、保持礼貌和尊重、遵守项目的许可协议等。这些规则和准则有助于维护一个积极、健康和协作的社区环境。所以在此处我重点重复一下在开源社区中所需要遵守的一些进本的道德规范。

第一点:检查重复

这里的重复包含很多内容,例如问题重复、项目重复、PR重复、文章重复等等。

首先讲一下问题重复。假设您在本地计算机上安装并运行一个开源项目,但遇到了一个错误。或者您通读了文档并发现了缺失的步骤,您可能想提出一个问题来解决这个问题。但在执行此操作之前,必须检查是否提出了类似的(打开和关闭)问题或拉取请求,以避免重复。在 GitHub 上问题或拉取请求页面顶部的搜索栏中输入可能的关键字,以检查是否存在可能的重复。

然后是项目重复。如果你有一个新的想法,准备大干一场,创建一个新的开源项目,你首先要做的第一点就是检查一下当前是否有人在做相同的开源项目。可以通过GitHub的关键字检索,查找类似的项目,看看你的想法是否有人已经做过了。如果有人已经做过了,你可以检查一下他所做的项目与你要做的有什么差异,你所做的项目内容可能是对他项目的改进、升级等。这样的话,如果你需要创建一个新的项目,你最好可以跟原作者进行沟通,表明自己的想法,然后再创建时进行使用别名。

接着就是PR重复。如果你发现开源项目的一些问题你是能够解决的,这时你就需要通过提交PR的方式进行提交,但是在提交前,你需要做一步检查,第一点检查一下该问题是否有人已经领取,如果有人领取,但是领取人长时间没有提供回复、提供的PR你觉得存在问题或者你有更好的解决思路,那这样的话你可以在问题下留言,申请提交自己的PR。

最后是文章重复,这里可以是技术文章或者是博客文章。但是,文章重复是禁止的,因为文章重复会被认为是抄袭,你可以有部分是重复的,例如技术介绍,这些不是关键部分内容,但是对于关键部分,一定不能重复。另外如果你觉得逼人的文章比较好,你可以申请转载,在转载时注明文章来源即可。

    第二点:行为礼貌和尊重

在开源社区,一定要学会尊重和礼貌,在请教或者回复别人时,一定要有礼貌并尊重他人。首先是再请教别人时,一定要先表示感谢,然后要全面地展示一下自己的问题,最后再次表示感谢,在话语中一定要礼貌。另外在回复别人问题时,也要保持一种谦卑的语气,闻道有先后,术业有专攻,所以并没有什么优越感,要认可和尊重他人的工作成果和贡献,无论是代码、文档、设计还是其他形式的贡献,在适当的场合给予他人认可和赞誉。最后就是在自己的文章中也要保持基本的礼貌,不要含沙射影,不要谈论政治,不要涉及政治、宗教或其他具有争议性的话题,专注于项目的目标和愿景,确保所有人都能在一个中立的环境中参与和贡献。

    第三点:协作和分享

首先是要学会帮助他人,如果你看到有人需要帮助或提问,尽量提供帮助。因为开源社区大佬很多,你帮助了他,在未来他可能也会帮助你,而且付出总会有回报,因此不要吝啬自己的帮助。另外要学会分享知识与经验,积极与社区成员分享你的经验和知识,你所经历的事情在未来别人可能也会经历,因此学会把你的经验分享出去,避免更多人踩坑。

    第四点:保证质量和追求卓越

高质量的项目更容易获得用户和开发者的信任,当用户知道项目维护良好、少有bug,他们更愿意使用和推荐这个项目,这种信誉是开源项目成功的关键因素之一。并且随着项目质量的提高,用户基础和社区规模往往也会增长,质量高的项目更有可能持续发展,因为它们提供了一个稳固的基础,可以在其上构建新功能和改进。因此,我们要学会保证质量和追求卓越。

首先,要制定清晰的贡献指南,说明如何提交贡献、代码风格、测试要求等,帮助维护代码质量和一致性。实行代码审查制度,让其他开发者检查新的提交,以发现潜在的错误、改进代码质量,并确保新代码符合项目的标准。并且利用自动化测试来确保代码改动不会破坏现有功能。这包括单元测试、集成测试、系统测试和性能测试

其次,就是提供详尽的文档,包括安装指南、使用教程、API文档和开发者指南,让用户和开发者容易理解和使用项目。并且使用问题跟踪系统来管理bug报告和功能请求,保证所有问题都被记录和跟踪,使用版本控制系统如Git,并采取适当的分支策略来管理代码的不同版本和功能开发。

最后就是鼓励和促进社区成员之间的交流,通过讨论和协作来提高项目质量,要学会认可社区贡献者的工作,提供激励措施(如贡献者列表、感谢信等),以鼓励更多高质量的贡献。如果可以的话,可以提供开发者指南、教程和其他教育资源,帮助新成员更快地上手,并提升整个社区的技术水平。

四、如何推广自己的项目

前面我们已经讲了如何创建自己的项目,但是,项目创建好了如果不进行推广将会很难获得大家的关注,如果长时间没人关注,也会影响开发的动力,因此,当项目做好后,一定要做好项目的推广工作,一方面可以让更多的人看到我们的工作,给有需求的提供找到我们的机会,也另一方面有助于提升自己的知名度。下面我将从以下几个方面向大家介绍如何推广自己的项目。

​​​​​​​问题六:如何 为开源项目写技术博客?

给自己的开源项目配备相应的技术博客是很有必要的,这也是宣传和推广我们的项目最直接和最有效的手段;而且作为我们做开源的程序员,也一定要有自己的博客,方便展示和推广自己项目工作以及增加自己的知名度。

首先是博客平台的选择,目前国内博客平台也是比较多的,比如博客园、CSDN、沙土掘金、简书等,大家可以根据自己的情况进行选择。但是选这一个即可,无需多选,但是如果你觉得比较重要的文章,你可以在多个平台上发布,让更多人看到。当前国内用的比较多的是CSDN平台,虽然该平台被大家诟病很厉害,但是不可否认的是该平台用户量大,而且我们遇到问题是,使用CSDN也是最多的。大家可以根据自己情况进行选择,无论在哪个平台,只要你把文章写好,在哪里都能被大家看到。

下面就是文章的撰写,其实在项目做完后,撰写个对应的技术博客还是比较简单的,毕竟博客大部分内容都是对你项目的介绍内容,因此针对你所做的项目,你应该会有说不完的话。但是,为了写好这个技术博客,你还是要注意一些问题的。

第一点要注意的是文章标题,技术博客跟文章不同,文章的话标题可能还需要新意、修辞等,技术博客不需要考虑那么多事情。技术博客标题第一点要注意的就是简单、直接,能够准确描述博客的主题,让人看了一目了然,因为大家在看技术博客时,第一眼印象就是对你博客标题印象,因此要起一个简单直接的标题。第二点就是题目中要有主要的关键字,关键字可以是使用的主要技术、解决问题主要内容等,一方面是因为关键字可以快速吸引更多的读者观看,另一方面就是包含关键字更容易被检索出来。

第二点要注意的是文章的层次,不同类型的技术博客文章的层次应该是不同的。此处我以常见大项目技术博客为例,给大家简单介绍一下博客的结构层次。

1. 引言

引言部分类似于文章的摘要,要包含本项目的背景、介绍以及实现功能,能然人一眼看出你的项目有什么作用,这样才会吸引读者认真读下去。之一部分放在文章开头,可以不占用文章的章节编排。其实你平时在找相关项目时,发现题目可能相关,但是他没有一个简单的介绍,内容还比较长,你就会很难有耐心读下去,因此,有一个简单的引言是很有必要的。

另外在引言最后,一定要添加你的项目源码链接、视频链接等其他相关材料的链接,能然读者看出你这文章内容很全面,更加坚定读者读下去的信心。

2. 现状与技术介绍

接下来就是你技术博客的正文部分,这一部分可以有很多内容可写,例如详细介绍以下你的项目背景、详细介绍一下你项目中所使用的技术手段以及本项目的实现原理等。这一块内容根据你自己的安排去写即可。

3. 环境配置与项目安装

这一块内容主要分为两个方面,第一就是你项目所使用的环境配置流程以及你的项目安装配置流程。这一块是十分关键的,因为对于大多数人可能不太会关注你的项目源码,他就只会参考着你的博客进行实现,因此在写这一块时,要把自己当作一个使用者,自己如何从头开始一步步安装和配置该项目,并且对于每一步要有截图,这样才能更好的让使用者成功复现。

4. 项目关键内容讲解

下面这一块是对自己项目内容关键代码讲解,对于一个项目来说,项目代码可能会很多,因此无法在博客中做详细解释,因此在此处只需要对自己项目中的一些代码的关键部分进行解释就可以。重点是你所解决的问题那一块代码,或者是某项技术的应用代码,对这一块代码做一个简单讲解即可,也无需长篇大论,重点是让对着看到你这一块代码的重要性。

5. 项目结果展示与性能分析

上面介绍完项目内容后,接下来就是演示一下项目效果,此处最好是通过图片、视频等方式进行展示,当然使用文字也是可以的。这一块主要就是演示一下你的项目输出,方便读者查看你的项目输出效果是否达到他的预期。另外,如果你做的项目是对前人的项目优化或者是该项目高喊多个影响因素等内容,那你此处就需要做以下对比,对比一下常见的指标即可。

6. 总结

最后一步就是对自己的项目做一个总结,简单总结一下项目,可以对恶化也可以说一下自己项目的问题以及下一步要改进的地方等等,或者是感谢一下该项目中给你童工版主的人,最后增加一句感谢读者的话或这是对读者期待的话进行文章收尾。

第三点要注意的是博客的代码。在博客里面,我们难免要放一些代码,这也是写博客的一个很好的习惯。但是在放置代码时,一定不要直接复制全部的代码放进去,首先是要放一些关键的代码,例如项目中比较有创新的代码或者是某个关键技术应用的代码;第二点就是要注意代码的格式是否美观,我们在编辑器开发代码时,编辑器会根据代码特点增加不同颜色,因此在博客中我们也要遵循这种特色。想要实现这种方式也不难,因为现在一些博客使用的是Markdown语法编辑器,你可以通过设置成程序语言即可;如果你对该配色方案不满意,也可以通过一些其他的插件生成图片。

第四点要注意的是文章排版,让自己的文章变得更优美。前面我们已经提到博客现在多数使用的是Markdown语法,你需要学习一下该语法下文章排版的技巧,例如如何首行缩进、如何添加代码、如何改变文本颜色等等。此处也不用学的太深入,只要学习一些简单的语法即可,后续慢慢积累并养成习惯,你会发现自己的文章会越来越整齐美观。

最后一点要注意的是礼貌,注重自己的语言艺术,不要使用一些过激的语言,对带别人的项目也要做到尊重。

​​​​​​​问题七:如何为开源项目创建小视频?

在当前很长一段时间,视频依旧是一个很好的宣传媒介,尤其是在当前小视频比较火的今天,因此为自己的项目创建一个视频也是一个很不错的宣传手段。由于当前我创建的视频还比较少,很难提出一些特别有用的意见,所以在此处我先简单的介绍一下。

首先,就是视频类型,其实不用介绍大家也都知道视频的话可以分为两个类型,长视频与短视频,但是结合到我们的项目来说,主要对应两个内容,一个是项目演示的短视频,一个就是项目详细介绍于是用的长视频,前者是用于项目推广,后者适用于技术教学。所以在创建视频时,可以根据这两个目的来创建。

接下来,就是创作软件,在本科时我做过视频,当时使用的都是PR、AE等专业的视频软件,虽然做出来的视频质量很高,但是难度以及效率太低,不太适合我们使用。不过好在当前小视频盛行,所以也有不少新的软件可供我们选择,比较推荐的是剪影这个软件,这也是我当前用的软件,他对新手十分友好,上手很快,并且支持AI功能,能够剩下我们麻烦。除此之外就是视频录制软件,我这里比较推荐的是EV录屏,对于简单的视频录制可以直接使用免费版使用,如果需要录制比交付炸的视频例如桌面与摄像头同屏展示,可以花点钱开个会员即可,可以说该软件目前可以满足我们的所有的需求。

最后,就是视频内容。对于短视频来说,视频内容可以包括以下几个部分:项目简短介绍、项目效果展示两个部分,长度维持在1-2分钟最好。对于长视频的话,那就是可以自由发挥了,可以是项目的详细介绍、从安装下载到环境配置以及最后的效果演示等等,时长的话也可以根据内容进行控制,但是要保证项目内容的详细。

​​​​​​​问题八:在社交媒体上推广开源项目

在创建了自己的技术博客以及视频后,接下来你就需要接住你的任何平台想办法去推广出去,在大学期间我也做过一项宣传类的工作,因此宣传这块我觉得是十分重要的,不然你的项目做出来也很少有人看到。

首先是通过你自己的博客平台、视频平台等。目前博客平台的话都会有相应的推广,因此开始阶段你需要借助一些商业的博客平台,例如博客园、CSDN、沙土掘金、简书等,所以在开始阶段无需自己去搭建博客平台,使用这些商业的博客平台即可,等时机成熟以及你有了更大的能力后,你就可以创建自己的博客平台了。其次是视频平台,视频平台的话就比较多了,B站、抖音、微信视频号等,但是你还是需要要有自己的规划,以一个平台为主,建议使用B站平台,主要是B站他可以上传长短视频,而抖音、微信视频好的话定位是短视频,可以用作宣传使用。最后如果你能够持续产出并且有足够的经历,可以创建一个微信公众号,但是要充分考虑自己的能力以及时间,毕竟自己运营还是比较困难的。

接下来就是借助一些开源平台进行推广,这一点需要根据你的项目中使用的技术进行决定。例如我做的项目大多是使用的是英特尔OpenVINO,因此,在推广时我会将自己的技术文章发表在英特尔物联网微信公众号上以英特尔其他开源社区上。另外我做的一些项目还跟百度飞桨有关,因此我的项目还可以发表在百度飞桨的星河社区。所以,发布在什么社区,需要根据你的技术进行决定。

最后一点就是借助其他的一些平台,例如你的朋友圈、一些技术交流群等等。推广这个事是慢慢积累的,一方面是你的技术积累,要持续推出好的项目,才能积累更多的影响力,第二就是人员积累,慢慢积累更多的粉丝与及使用者,厚积薄发,慢慢的你就会发现,你所做的项目会有越来越多的人关注了。

五、阶段提升

如果对于上面的这些问题你已经做到了,那么恭喜你,你已经成为一位出色的开源工作者了,你可以回过头来看看,做开源这些时间以来,你学习到了什么、收获了什么、得到了什么。我相信到这一步你已经是在某一领域出色的专家了,那么如果你还想更进一步,除了可以在你所研究的领域继续深耕,或者是开阔自己的视野,继续研究其他更多的领域,也或是参与开源社区的技术布道工作并指导新加入的贡献者。下面我在此处简单讲一下参与开源社区的技术布道工作与指导新加入的贡献者,毕竟当前阶段我做的还不是很多,经验尚浅,所以有什么问题的话也欢迎广大读者进行补充。

​​​​​​​问题九:如何参与开源社区的技术布道工作?

可能对于大多数人来说,开源社区的技术布道工作是感觉一个十分陌生的领域,其实开源社区的技术布道工作主要指的就是通过传播、推广和教育活动,向更广泛的受众普及开源技术、文化和价值观的工作,旨在提高人们对开源技术的认识和理解,鼓励更多的人参与开源社区,推动开源技术和社区的发展。

具体来说,开源社区的技术布道工作可以是举办技术讲座或研讨会、制作视频教程或直播、参与开源项目并分享经验、在社交媒体上分享和传播、组织或参与技术活动等等,其实回头看,如果你之前的一些问题已经做过了,那么你已经开始开源社区的技术布道工作了。参与开源社区的技术布道工作好处也很多,可以是:

推动技术进步:开源社区是技术创新和发展的重要驱动力,通过参与技术布道工作,你可以帮助传播新的技术理念、工具和方法,从而推动整个技术社区的进步。

提升个人技能:参与开源社区的技术布道工作可以帮助你提升自己的技能,在与他人交流、分享和解决问题的过程中,你会不断学习和成长。此外,通过参与开源项目,你还可以了解最新的技术趋势和最佳实践。

建立个人品牌:在开源社区中积极参与技术布道工作可以帮助你建立个人品牌,通过分享你的知识和经验,你可以展示自己的专业素养和技能,从而吸引潜在的雇主或合作伙伴。

拓展人脉:开源社区汇聚了来自世界各地的开发者和技术专家,通过参与技术布道工作,你可以结识这些志同道合的人,与他们建立联系并分享经验。这些人脉关系可能会对你的职业生涯产生积极的影响。

提升职业机会:许多公司和组织都在寻找具有开源社区经验的候选人。通过参与技术布道工作,你可以展示自己的能力和对开源技术的热情,从而增加被潜在雇主注意到的机会。

那么我们应该如何参与开源社区的技术布道工作呢?其实参与开源社区的技术布道工作也是十分简单的,在前文中我们介绍的内容中,如果你已经做到了,那么恭喜你,你已经参与到开源社区的技术布道工作了,但是如果像更全面的参与进来,你可以通过以下几个途径:

(上图由文心一言AI生成)

了解社区:深入了解你感兴趣的开源社区,包括它的目标、项目、技术栈和社区文化,你可以通过阅读社区的文档、邮件列表、论坛和博客等,来了解社区的动态和需求,然后根据社区的需求,看展你自己的工作,为社区提交思路、项目以及贡献等等。

选择合适的项目:在了解社区的基础上,选择一个与你的技能和兴趣相匹配的项目,然后就可以开始自己的项目了,但是要确保该项目的技术栈和领域是你熟悉的,这样你才能更好地为项目做出贡献。

建立个人品牌:在参与开源社区之前,建立自己的个人品牌是很重要的。这可以通过在社交媒体上分享你的技术见解、写作技术博客、发布教程或演讲等方式实现,这将帮助你展示自己的专业知识和技能,并吸引潜在的合作伙伴和关注者。

提交贡献:参与开源项目的一种常见方式是提交代码贡献。你可以通过修复错误、实现新功能或优化性能等方式为项目做出贡献,在提交贡献之前,确保你已经仔细阅读并遵守了项目的贡献指南和编码标准。

参与社区讨论:除了提交代码贡献之外,你还可以积极参与社区讨论。加入项目的邮件列表、论坛或社交媒体群组,与其他社区成员交流想法、解决问题和分享经验,通过积极参与讨论,你可以建立与其他贡献者的联系,并了解项目的最新动态。

组织活动:作为技术布道者,你可以组织或参与技术活动,如研讨会、培训课程或线上交流会。这些活动可以帮助传播开源技术和项目,吸引更多的人加入社区,并提供一个交流和学习的平台。

分享知识和经验:分享你的知识和经验是参与开源社区技术布道工作的关键。你可以通过写作博客文章、发表技术演讲、制作教程视频或创建示例代码等方式分享你的见解和实践经验,这将帮助其他人学习和理解开源技术,并推动社区的发展。

​​​​​​​问题十:如何指导新加入的贡献者?

当你能力达到一定程度后,你就可以带动你身边的朋友以及你的学弟等人一起参与到开源工作中,这时你就要发挥一个导师的作用,指导并鼓励新入门的朋友。总的来说,你可以通过以下内容展开指导:

(上图由文心一言AI生成)

首先,向新贡献者表示欢迎,并简要介绍开源项目和社区,分享项目的目标、背景、技术栈以及社区的文化和准则,确保他们对项目有基本的了解。你可以向新入门的开发者展示一下自己在做开源项目以来所获得成果,包括你的项目、荣誉以及其他内容,者样可以激起开发者的兴趣,以及坚定他的决心,此外也可以给新入门的开发者提供一个前期方向。

其次,就是明确入门任务,为新贡献者提供一些入门级的任务,这些任务可以相对简单,帮助他们熟悉项目的代码库和工作流程。例如,修复小错误、改进文档或添加简单的功能,这些任务可以帮助他们建立信心并熟悉项目。不过你需要提供文档和资源,确保项目有清晰的文档,包括贡献指南、编码标准、开发环境设置等。这些文档可以帮助新贡献者快速上手并开始做出贡献。如果可能的话,提供一些教程或参考资料,以便他们更深入地了解项目的技术栈和架构。

第三点,就是鼓励新贡献者提问和提供反馈,他们可能对项目的某些方面感到困惑或有改进建议,为他们提供一个安全和支持性的环境,让他们感到自由地表达自己的想法和疑问。并且与新贡献者保持定期沟通,了解他们的进展和遇到的困难。通过邮件、聊天工具或定期的社区会议与他们保持联系,提供必要的支持和指导,确保他们在贡献过程中不会迷失方向。

最后,就是要提供认可和奖励,当新贡献者完成任务或做出贡献时,及时给予认可和奖励。这可以是一句简单的感谢、在社交媒体上的提及、或者在项目的致谢名单中列出他们的名字。这些认可可以激励他们继续做出贡献,并增强他们在社区中的归属感。

六、总结

在本文中,我通过问题问答形式,向大家解释了如何为开源项目和社区做贡献这个话题,但是由于我的个人原因,对问题见解还不是很全面,所以对于问题的回答仅供大家参考,也希望可以帮助到新入开源这个大家庭的朋友。

此外,通过本次文章分享,我也发现了很多在做开源时没有注意到的问题,后续我也会在做自己开源项目时多加注意。另外一点就是在做开源时对其过程的总结较少,所以后续在做开源时,我会注意这点,以后会根据自己的经验推出一系列教程文章以及经验分享文章,也欢迎大家持续关注。

如果大家有什么问题,也欢迎随时和我联系;另外在做开源时,也可以参考我的一些项目。大家可以通过以下方式找到我:

我的E-mail:guojin_yjs@cumt.edu.cn

我的CSDN博客:https://guojin.blog.csdn.net

我的GitHub:guojin-yan (颜国进) · GitHub

我的Gitee:Guojin Yan (guojin-yan) - Gitee.com

我主推的开源项目OpenVINO CSharp API:GitHub - guojin-yan/OpenVINO-CSharp-API: OpenVINO wrapper for .NET.

我的视频网站:椒顔皮皮虾的个人空间-椒顔皮皮虾个人主页-哔哩哔哩视频

我的微信公众号:CSharp与边缘模型部署

最后,再次感谢在我做开源过程中一直给我提供指导帮助的中国矿业大学机电工程学院教授范孟豹老师、中国矿业大学机电工程学院副教授杨雪锋老师、英特尔AI开发者市场部经理张晶老师、英特尔AI布道师武卓老师、英特尔开发者关系经理李翊玮老师以及其他在开源项目中提供指导与意见的各位开发者。

期待与各位共建开源社区的明天。

说明:本文中所使用的所有插图,标注“AI作图”标记的图片均由百度文言一心(文心大模型4.0)生成,其图片生成思路与文字均有作者提供。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐