• 开源项目学习心得


    1、什么是开源?

      我们平时经常上github/gitee去查阅下载一些项目的源码,现成的代码拿来就用,白嫖就是爽。
    在这里插入图片描述
      那到底开源项目到底是什么?

    2、为何做开源?

      做开源不挣钱,这是确定的,但是为何要做开源,而且那么多人坚持做开源呢 —— 他们不是完全为了兴趣爱好,完全下班没事儿干。人只要付出劳动、付出努力,都是奔着目的性去的,有兴趣的原因,但是能让自己持之以恒做下去的,肯定不是兴趣。

      其实这个问题很简单,就像看书不挣钱(买书还花钱呢),但是为何要看书呢?因为大家都知道看书能提高自己的知识面和能力。而做开源也有相似的想过,只不过很多人没接触过不知道而已。我总结了如下几个理由:

      全面提高编程能力。 开源项目的发起者需要从 0 打造,每部分代码都需要自己负责。不像在公司中的一颗螺丝钉,只需要做好某一块就行了。
      提高自己的社区知名度。 github 上的 star 能间接的反应你的身价,它能让你得到业内认可。
      锻炼自己的产品意识。 因为做开源不再是单纯的技术活,UI、运维、推广、收集反馈、甚至成本预算,这些都得考虑。
      技术范儿、极客精神。 作为一名程序猿,能业余打造一款开源产品是一件很帅的事情,满足自己的虚荣心。
      有了充分的理由,那就开干!

    3、开源方向

    3.1、开源目标

      一些早期就知名的开源作品,很多都是因为作者在工作中遇到一个需求,而这个需求目前还没有开源产品去满足,因此自己做一个。但是对于我们大众基层程序猿,天天写业务代码,遇到这种需求的概率不是特别大。想要知道做什么,你就得先明白做开源的一些期望,然后再去想做什么。

      对于公司而言做开源就是为了提升公司在业界的知名度,说起 上海睿赛德电子科技有限公司,有谁知道是什么公司吗。

    3.2、不做什么

      即做出来,推出去,要快。即,你做的快,别人用的也快。按照这种期望往下想,首先你能排除不做什么:

      大型的框架,比如rtt。 短期做不完,使用成本高。
      模仿已经成熟轮子,比如cjson、paho-mqtt、lvgl这些 。 有成熟方案,用户不会换。
      小众的东西,比如我们的产线工具。 基本没人用。

    3.3、做什么

      排除以上这些,还剩下的范围就可以是我们可以考虑的:

      小而精的工具。 开发快,使用成本低。

      要有特色,哪怕是一个。 要和别人不一样,差异化竞争。比如llcom,就是可以在串口工具里面写Lua脚本控制工具的行为,这就比较有意思。

      受众要尽可能地广,目标使用者要足够的多。

      其中特色和受众广这个我觉得是最重要的,有时候一个东西实际没啥实际的作用,但是它start还挺多的。就这个我前几天看到的一个有趣的项目Kyome22/RunCat_for_windows,这个成绩看起来就非常的不错。

    在这里插入图片描述

      实际这玩意就是个检测CPU占用率,CPU占用率越高,猫跑得越快。受众也是非常的广,只要是个用电脑的人都有可能会用它。

    在这里插入图片描述

    4、开源项目包含什么

      开源项目并不是只是一堆源代码。我总结了至少需要有以下内容:

    4.1、源码

      源码由开源项目的发起者和长期贡献者共同维护,可直接修改项目代码。

      短期贡献者也可修改/提交代码,不过需要经过项目发起者审查,才可合入主干。前提是项目发起者制定了相应的规则,允许项目之外的成员提交代码,让其他人能够参与进来。

      上面提到了三个角色,这里简单说下我的理解

    • 发起者:要有着作为架构师掌握全局的能力,是方向的掌控者,是规则的制定者,也要对项目所涉及到的所有内容都一清二楚。

    • 长期贡献者:掌握一个或多个功能的开发/维护,对代码总体有一定的掌握,清楚提交代码意味着什么。

    • 短期贡献者:新增组件,修改部分遇到的bug,按照代码贡献规则发起pull requests。

    4.2、代码贡献规则

      比如rtt在pull requests提交代码时需要填写提交说明

      这是RTT制定的代码编写规范

    4.3、文档(Wiki)

    • 二次开发文档,项目中涉及到关键点(技术栈、函数、类)

    • 用户使用文档,我怎么用这个项目(未必需要参与到开源项目的开发中来)

    • 代码编写规则

    • 开源许可证

    4.4、开发环境&运行环境

    • 二次开发者按照文档说明可以正常配置出开发环境

    • 使用者按照文档说明可以正常把项目用起来

    4.5、问题(issues)

    • 用户提问,维护者答复

    • 问题共享(而不是私聊)有助于其他人遇到相同问题时去查阅

    • 提开发需求

    • 反馈BUG

    4.6、问题列表和升级计划

      主要是针对5.4中说到的3、4点。记录当前问题,指定开发计划,以及何时解决、何时升级。

    5、其他配套设施

      要做成一个成熟靠谱的开源软件产品,除了以上源码相关的方面,还需要以下配套的设施,才能完备。

    • 官网,如 rt-thread、wangEditor、LuatOS
    • 文档,可以和官网整合在一起
    • 问答社区, github issue
    • 及时交流社区,即 QQ 群、微信群
  • 相关阅读:
    SpringBoot SpringBoot 开发实用篇 6 监控 6.7 自定义端点
    电脑系统重装后音频驱动程序怎么修复
    labelme做标注
    测试时数据增广(TTA)与mmdetection3d中的实现
    四、二叉树-上(Binary tree)
    十四、【VUE-CLI】配置代理服务器
    BFO Publisher轻松将HTML转换为PDF
    Kafka 消息过期策略(时间相关参数)
    linux虚拟文件系统
    【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)
  • 原文地址:https://blog.csdn.net/weixin_44570083/article/details/126361151