ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

开源入门从HelloGitHub开始:每月精选项目,从阅读到贡献PR

开源入门从HelloGitHub开始:每月精选项目,从阅读到贡献PR 如果你在 GitHub 上逛的时候总有一种“项目太多、不知道从哪看起”的无力感那你大概率需要认识一下 HelloGitHub。这个每月一期的开源项目精选合集从 2016 年创刊到现在一直在做同一件事把那些“有意思、能上手、不劝退”的开源项目用最接地气的方式推荐给开发者尤其是刚入门的开发者。我第一次接触 HelloGitHub 是 2018 年那时刚转行做开发面对 GitHub 上动辄数万 star 的仓库完全不知道该从哪下手。后来朋友发给我一期 HelloGitHub我按图索骥地把里面的项目挨个 clone 下来跑一个下午就跑通了四五个小项目那种“原来我也可以”的正反馈直接决定了我后来在开源这条路上走了多远。这篇文章不打算复述某一期的具体内容而是想跟你聊聊 HelloGitHub 本身它到底好在哪里每一期是怎么被组织起来的拿到一期你该怎么“吃透”它以及你完全可以反过来给它投稿、甚至借它完成你的第一个 Pull Request。无论你是刚摸到编程门槛的新手还是已经写了几年代码的“老油条”这篇文章里应该都有你能用得上的东西。1. HelloGitHub 是什么为什么值得你每月追1.1 一句话说清楚它是什么HelloGitHub 是由开发者贝贝发起的一个开源项目核心产物是一份每月更新的杂志——你可以把它理解成一个“GitHub 开源项目月榜”但不是那种机器爬出来的 star 排行榜而是有人真正把项目打开、跑过、玩过之后再手写推荐语的精选合集。每一期 HelloGitHub 大约会收录二三十到四五十个项目覆盖 C/C、Python、Java、JavaScript、Go、Rust、Swift 等主流语言再加上机器学习、数学与数据结构算法、有趣项目、工具、学习资料几个固定栏目。每个项目下面都有一段几百字的介绍讲清楚这个项目是干嘛的、为什么值得你关注、怎么把它跑起来。这里“怎么把它跑起来”特别关键。很多开源项目你刚点进 GitHub 就会被劝退因为 README 写得云里雾里依赖装到一半就开始报错。而 HelloGitHub 对每个项目的介绍都尽量做到“给个台阶”——目的就是让你能真正在自己电脑上看到它跑起来的样子而不是收藏之后吃灰。1.2 它解决的痛点开源入门为什么这么难我自己带过不少新人发现大家第一次接触开源时遇到的最大障碍几乎都一样不是不想看而是不会选。GitHub 上每天都有成千上万个仓库在更新star 高的大项目动辄几十万行代码你点进去除了“哇”一声什么也做不了star 低的又不知道质量怎么样万一是个“坑货”一整天时间就搭进去了。HelloGitHub 解决的就是这个“选择困难”。它把“看哪些项目”这件事替你做了而且是人工做的——每期推荐的项目都经过实际验证能跑、有趣、代码量可控。这就有点像朋友帮你把一家店里最值得点的菜都试过一遍再画好菜单给你你只管照单点菜就行。还有一层HelloGitHub 一直在强调“快乐开源”的理念。它希望让你觉得开源不需要什么崇高使命也不需要你一开始就能写多牛的功能——你先跑起来一个别人的项目改一行字提一个 issue这就算迈进了开源的门。这个理念比任何技术教程都重要因为它解决的是心理门槛而不是技术门槛。1.3 我的个人使用轨迹从读者到贡献者我自己的经历其实特别典型。2018 年我第一次从 HelloGitHub 上找到了一个用 Python 写的命令行小游戏clone 下来后花了半小时把源码从头到尾读了一遍第一次感觉到“原来别人写的代码我也能读懂”。后来每个月都追从推荐的项目里逐渐建立起了对各类语言的认知也靠着某个项目的源码学会了用 WebSocket 写实时应用。大概到 2020 年我开始不满足于只看就尝试给 HelloGitHub 投稿自己发现的好项目。第一次投稿被拒了理由是项目“没有代表性”当时还挺不服的。后来仔细看投稿要求才知道HelloGitHub 选项目看的是“有趣 易上手 有价值”不是你自己觉得好就行。被拒几次之后我慢慢摸清了它的口味也投中过几个。那种自己发现的项目被几千人看到的成就感说实话比写业务代码爽多了。所以这篇文章后半部分我会把我摸出来的这些门道都写出来包括怎么投稿、怎么避免被拒、怎么借 HelloGitHub 完成第一个 PR。2. 一期 HelloGitHub 是怎么组织起来的2.1 内容栏目的划分逻辑别小看那份目录它的栏目划分其实经过了很多年的迭代背后是有逻辑的。常驻栏目包括 C/C、CSS、Go、Java、JavaScript、Python、Rust、Swift 这几个语言类目每个类目下一般是两到五个项目。之所以按语言而不是按应用场景分类是因为读者打开一期杂志时通常脑子里想的是“我想看看 Python 最近有什么好玩的”而不是“我想找找有没有处理图片的工具”。按语言分类符合大多数人的第一直觉也方便不同技术栈的人各取所需省去在一堆项目里大海捞针的时间。语言类目之外几个特色栏目才是 HelloGitHub 的灵魂有趣项目不局限于某种固定技术栈只要东西好玩就收录。历史上出现过用 Python 做表情包生成的、用 JavaScript 还原经典游戏登录界面的、用深度学习让老照片动起来的选题非常跳跃,每期都像开盲盒。机器学习专门给对 AI 感兴趣的读者准备的栏目收录的都是偏入门、偏应用的模型和工具不是那种丢给你一篇论文让你自己看的硬核项目所以哪怕没系统学过机器学习跟着示例也能玩起来。数学、数据结构与算法这块适合准备面试或者想补基础的人经常收录各种可视化排序算法、数据结构演示工具。我看到很多读者靠这个栏目把枯燥的算法学得津津有味。工具实用向收录能直接提升开发效率的软件比如终端增强工具、截图美化工具、命令行文件管理工具等。这个栏目是“用完即赚”哪怕你只是为其中某个工具点了 star,这期就没白看。学习资料不一定是代码仓库也可能是开源电子书、教程合集、面试题库。这个栏目尤其适合新人我当年就靠它白嫖了好几本高质量的编程电子书省下了不少买书钱。看到这里你应该明白了HelloGitHub 不是一个简单的“项目列表”它是一个按“读者视角”重排过的内容产品——你把目录从头翻到尾其实就完成了一次对当前开源生态的快速巡礼。2.2 项目入选的硬性标准虽然 HelloGitHub 的推荐文章语气都挺轻松的但项目入选的标准其实相当严格。我根据自己投稿被拒的经历加上跟维护者的交流梳理出下面几条硬性标准有趣是第一优先级。无趣的项目哪怕代码写得再好HelloGitHub 也大概率不会收。因为这个杂志的定位是“让编程变得快乐”如果一个项目读起来像在写需求文档那它就违背了初衷。必须能跑、能上手。下载下来、按 README 操作至少在主流系统上能跑通依赖不能太离谱。我自己投过一个小而美的 HTTP 服务框架功能确实好但构建依赖了一个很冷门的库Windows 上很难装结果就被拒了。代码量要克制。HelloGitHub 不太推荐那种几万行代码的大型框架因为读者大多是来找“周末能玩完的项目”的。几千行以内、结构清晰的项目最受欢迎因为只有你能真的读懂这个项目才会对你产生价值。有明确的“读者收益”。要么能学到某个技术点要么能解决某个实际问题要么纯粹让人开心——三条里至少占一条否则就没有推荐价值。单纯堆技术、讲概念的项目编辑们看过太多了。这条标准其实也解释了为什么很多人觉得 HelloGitHub 推荐的项目“不像大厂项目那么正经”——因为它的目标读者本来就不是去看架构的而是去找能玩起来、能学进去的东西。2.3 每期内容的编排节奏观察一段时间你会发现HelloGitHub 每期的编排是有节奏感的不是随机堆材料。一般而言靠前的语言类目是“正餐”收录的都是有代表性、有学习价值的项目中间穿插有趣项目起到调节阅读节奏的作用让你看了几段严肃的技术介绍之后能会心一笑工具栏目是“实用补给”让你觉得这一期看完没白费时间最后的算法和学习资料栏目则负责“向上引导”让有兴趣的读者往更深的地方走。这个编排有点像做菜不能全是硬菜也不能全是凉菜。HelloGitHub 把“让读者每个月都愿意点开”当成一个产品问题来对待这种用心程度是它区别于其他开源推荐账号的核心原因。所以我现在每个月收到新一期都会在周末泡杯茶从头到尾慢慢翻一遍把这个习惯当作一种固定的输入补给。3. 拿到一期内容后正确的“食用”方式3.1 按语言筛选先找你的主语言很多人打开一期 HelloGitHub 的习惯是“从头到尾看一遍推荐语”觉得感兴趣的收藏一下这期就算看完了。这样的“消费方式”其实有点浪费因为你只是知道了“有这么个东西”却没有真正跟它产生交互。我的建议是拿到一期先干两件事第一看你正在学或者正在用的语言在当期有什么项目第二看有趣项目栏目里有没有让你好奇心爆棚的东西。前者保证你不会错过与日常工作强相关的内容后者保证你能保持对技术的兴趣两者缺一不可。以 Python 栏目为例如果当期出现了一个“用 Python 写的小说阅读器”而你正好在学 Python那这个项目就值得你打开源码认真捋一遍它用了哪些库入口文件在哪数据结构是怎么设计的这些对你的学习价值比看十篇教程都大。因为教程是别人嚼碎了喂给你的而项目源码是你自己啃下来的两者的内化深度完全不一样。3.2 从“有趣项目”切入先玩起来再说如果你是新手我的建议是从有趣项目栏目入手而不是按语言栏目来。原因很简单新手对“语言”本身往往没有强烈的兴趣但没人能拒绝“一个自己跑起来、能看到图像或交互效果的玩具”。我印象很深的一次是HelloGitHub 推荐过一个用 Python 写的俄罗斯方块游戏代码只有几百行逻辑也不复杂。我跟着它把整个项目读完之后第一次理解了“游戏循环”这个概念。后来面试遇到相关问题我还能想起那个项目里的写法直接就给面试官画出了流程。这种从“玩”到“学”的路径真的比从语法书开始有效率得多。所以拿到一期别急着一本正经地“学习”。先找一个好玩的、能跑的把它跑起来玩两把再看代码。这个顺序能让你少走很多弯路也能让你在正反馈中把“看开源项目”这个习惯坚持下去。3.3 读 README 的正确姿势HelloGitHub 的推荐语写得再好也只是“引子”真正决定你能不能把一个项目用起来的是它的 README。但很多新手看到 README 就头疼因为英文长、术语多、还有一堆不知道干嘛的命令读着读着就放弃了。这里分享一个我总结的三步法第一步先看 README 开头的几行搞清项目是干什么的、解决什么问题。不要一上来就奔着安装命令去因为安装成功不等于你会用先知道“它是什么”更重要。很多项目的 README 开头都有个 Gif 动画或截图别跳过那是最直观的“它长什么样”。第二步看项目目录结构。打开仓库页面先扫一眼顶层文件夹和主要文件心里有个“大概哪个文件管什么”的印象再去跑它会从容很多。我见过不少人项目跑到一半报错文件找不到就是因为压根不知道文件在哪个目录。第三步再去看安装和运行部分。记住一个原则优先按 README 的命令跑别自己“优化”。我做新手的时候特别喜欢自作主张换命令比如把 pip 换成 pip3、把安装参数“简化”一下结果经常因为环境差异踩坑。后来才学会老实照做跑通了再研究能不能改。3.4 把项目跑起来的完整路径顺着上一节往下说把 HelloGitHub 推荐的项目跑起来其实有一条几乎通用的路径不管是哪个语言、哪类项目大体都走这四步。第一步检查环境。看项目要求的语言版本比如 Python 3.8、依赖管理器pip、npm、cargo 等是不是已经装好。这一步最容易出问题的是 Python 版本不匹配建议有条件的话装一个版本管理工具比如 pyenv 或 conda按每个项目的要求切换版本别让全局环境变成一个“大杂烩”。第二步安装依赖。看项目是单体文件还是需要安装依赖。单体文件比如单个 .py 或 .js 文件最好办直接跑需要装依赖的建议先建一个虚拟环境Python 的 venv、Node 的独立项目目录机制别图省事直接往全局装不然装多了全乱套后面排查起来极其痛苦。第三步准备输入数据或配置。很多项目运行前需要你准备一些东西比如 API Key、图片文件夹、CSV 数据等。README 里通常会讲仔细看有没有“配置”或“Config”部分别忽略。我曾经因为没填一个看起来不起眼的 API Key把整个程序调试了一晚上最后发现只是配置漏了。第四步跑起来看输出。命令跑通之后认真看一下程序输出的日志和界面确认它真的“按照预期运行”了而不是报了一堆警告之后假装成功。我第一次跑一个爬虫项目全程没报错但一个数据都没抓到后来才发现是没设置 User-Agent被目标网站拦截了。这个坑不跑起来仔细观察光看代码根本发现不了。这四步看起来简单但每一步都有对应的坑。后面我会专门开一节讲我踩过的环境坑这里先不展开不然信息量太大了。4. 从看客到参与者如何反向给 HelloGitHub 添砖加瓦4.1 投稿项目的完整流程很多人不知道 HelloGitHub 是一个开放性社区它欢迎任何人投稿而且投稿的门槛比你想象的低。官方一般通过网站和 GitHub 仓库接收投稿流程大致是去 HelloGitHub 的官网或项目仓库找到投稿入口按模板填写项目的基本信息项目名称、链接、分类、推荐语等提交之后等待审核。这里有个容易忽略的点推荐语一定要自己写不要直接翻译 README。审核人员看过太多“这个项目是一个……工具支持……”这种干巴巴的翻译腔完全看不出项目哪里好玩。你写推荐语的时候应该像给朋友安利一样说清楚“你用它做了什么”“它哪里惊艳到你”。用我在 1.3 节那次被拒的经历来说我第一次投稿失败就是因为推荐语写得像产品说明后来改成“周末我用它给女朋友做了一张会动的照片她以为我学了专业特效”才顺利通过。投稿之后的心态也很重要。我见过有人在被拒后跑去质问维护者这真的没必要。被拒不代表你发现的项目不好可能只是它和这一期的主题不符或者推荐语没写到位。改一改下一期再投就是了我还见过同一个项目被不同人投了三次最终入选的。保持耐心把这件事当成一次和编辑的长期配合而不是一次成败的博弈。4.2 不写代码也能参与的方式如果你觉得自己还写不了专业代码也不用担心参与 HelloGitHub 有很多种方式相当一部分完全不写代码适合任何水平的读者。比如你可以加入 HelloGitHub 的读者群帮忙反馈内容错误可以在官网或公众号文章下面留言推荐你发现的有趣项目这也是重要的项目来源还可以帮它做校对、排版、翻译等工作——毕竟杂志内容涉及多个语种的项目名称和文档需要志愿者的地方很多。这些工作都不依赖很强的编程能力只要你认真、愿意花时间就能帮上忙。我认识一个大三的学生他第一次参与开源就是帮 HelloGitHub 校对文章里的错别字后来顺藤摸瓜给某期推荐的一个项目修了个文档链接拿到了人生第一个 PR 合并。你说这事技术上难吗一点不难但它确确实实把他带进了开源这个圈子。后来他维护自己的项目也成了别人的引路人。开源参与的门槛本身并不高很多时候只是需要一个“开口的地方”而 HelloGitHub 提供了无数个这种开口。4.3 以 HelloGitHub 为跳板完成你的第一个 PR这是我最想展开说的一部分。很多人把“第一个 PR”Pull Request向开源项目提交代码合并请求当成一道必须跨过去的坎其实它最重要的意义是让你体验一遍完整的协作流程fork复制仓库到自己的账户、clone拉到本地、开分支、改代码、提交、发起 PR、等待合并。这整个流程走一遍你对 Git 和开源的认知都会上一个台阶。具体怎么做呢我的建议是不要自己随便挑一个项目去“贡献代码”。你没有任何上下文的话看大型开源项目的代码根本不知道从哪里改起。正确做法是先从 HelloGitHub 推荐的项目里挑一个你已经在用的、甚至已经读过源码的对它做一次“顺手”的改进。比如你发现它的文档里有个错别字或者安装命令在 Windows 下会报错而你成功解决了或者你觉得某个功能可以加个小开关——这些都是很好的 PR 素材。你因为熟悉这个项目改起来不费劲项目本身又是 HelloGitHub 筛选过的“好项目”维护者通常也比较友好更愿意接纳新人的首次贡献。我自己第一个正式合并的 PR就是给一个 HelloGitHub 推荐过的命令行工具补了 Windows 下的路径处理逻辑改动不到十行。但那一刻的感觉真的足以支撑你继续走下去。5. 常见问题与避坑实录5.1 我踩过的环境坑写这一节我真的很有发言权“跑不起来”几乎是我接触开源初期最大的劝退因素。统计下来我遇到的环境问题无非就那么几类挑最常见的说说。最经典的是语言版本坑。有些项目基于 Python 2 写的你电脑上装的是 Python 3一跑就报语法错误。这种时候别急着怀疑人生先看 README 里写的版本要求再确认你的解释器版本。推荐用虚拟环境来隔离每个项目一个环境脏了删掉重建比辛辛苦苦把全局环境收拾干净容易得多。我现在的习惯是任何新项目第一件事就是建虚拟环境这个习惯帮我省了不知道多少时间。其次是依赖缺失的坑。很多项目 README 只写了“pip install -r requirements.txt”但 requirements.txt 里没写系统级依赖比如某些图片处理库需要先装系统的 libjpeg。遇到这种问题把报错信息里的“libXXX not found”字段复制去搜索基本就能找到对应系统的安装命令。这个坑踩过两三次之后你就会养成“先看报错再动手”的习惯而不是对着代码瞎猜原因。最后是依赖下载受阻的坑。个别依赖源在国外国内下载可能比较慢甚至超时——这方面我建议大家老老实实配置镜像源不同的包管理器都有对应的国内镜像配置把官方文档搜一遍就清楚了。千万别信那些来路不明的“加速脚本”很容易把环境搞乱我身边就有人因此把整个开发环境重装过一遍得不偿失。5.2 读者群里最高频的问题我长期混在几个 HelloGitHub 读者群发现大家问的问题高度集中。我整理了一个速查表把最典型的几个问题和我心里的答案放一起方便你随手对照。高频问题我的答案我英语不好能玩开源吗能。多数项目的 README 借助翻译工具都能读懂而且 HelloGitHub 的推荐语本身就在帮你降低语言门槛。先读代码后读文档代码里的英文注释比文档简单多了这么多项目我到底选哪个选那个你能在 30 分钟之内跑起来的。先从小项目建立正反馈再往上走别一上来就挑战最难的只读代码不提交行不行当然行。先做一个普通用户把你觉得好的工具用起来这也是一种支持。不是每个人都必须成为贡献者跑不起来想放弃怎么办先把报错原封不动地复制去搜索九成的报错都能在搜索结果里找到答案。真解决不了再求助别自己内耗这些问题的共性其实是“畏惧开始”。学开源就像学游泳你在岸上看再多的教学视频都不如先下水扑腾两下。HelloGitHub 的巨大价值就在于它帮你把“下水点”选好了——那些项目都是浅水区扑腾几下不会淹着。5.3 给新手的四条忠告最后想给准备跟着 HelloGitHub 入门的读者几条忠告都是我吃过亏之后总结的算是压箱底的经验。第一条别收藏要运行。看到感兴趣的项目当天就 clone 下来跑跑不通就记下报错、搜解决方案。“收藏即遗忘”是这个时代最大的学习陷阱克服它的办法就是给每个想学的项目设置一个 30 分钟限期超过就暂时放下别内耗。你收藏一百个项目带来的安全感不如真正跑通一个项目带来的成就感。第二条从小的项目开始。几百行的项目给你的真实收益远大于几万行的项目给你的心理安慰。选项目时按代码量从少到多排序优先于按 star 数从多到少排序。我见过太多人从“最出名的大项目”开始结果一个月过去了连源码目录结构都没看完最后彻底放弃。起步时的正反馈比什么都重要。第三条遇到问题先搜索再找人问。把报错信息原封不动地复制到搜索引擎里大部分情况下第一页就有答案。提问之前先确认你确实试过几种方案这样既是对别人时间的尊重也能锻炼你自己解决问题的能力。等你以后工作了就会发现“能独立排查问题”是一项比“会写某种语法”值钱得多的能力。第四条记录你的每一步。我建议你从第一个跑通的项目开始就写记录你遇到了什么问题、怎么解决的、学到了什么。这个笔记会在三个月后变成你的能力证明在你面试或写总结时直接可用。我自己的成长里回头看最有价值的既不是某个具体项目而是当年跟读者群、跟读 HelloGitHub 时留下的那几十篇笔记。它们记录了我从一个看到报错就慌的人变成能给别人解答问题的人的全过程。
返回列表