前言
大家好,我是 「周三不Coding」。最近马上就要到秋招提前批啦,相信很多小伙伴都在忙着复习八股文、刷算法题、准备简历中。
最近我也关注到了很多同学都在问一个问题,如何做一个自己的项目。
项目的重要性想必大家都清楚,如果你的项目在开源社区内有一定知名度,在面试中会非常加分(一位腾讯面试官在面试时亲口和我说的)
那么如何在临近秋招,落地一个开源项目呢?今天这篇文章主要从开源项目的 「破局之道」 与 「破局之法」角度出发,详细和大家分析如何从 0 到 1 落地你第一个真正意义的开源项目。
个人经历
在开始具体的讲解前,不妨先听我讲讲我的故事。
从接触编程开始,我就是个躁动不安的人,总喜欢搞点事情。尽管那时候什么都不会,但经常去 Github
和各大编程论坛上逛,Star 一些项目,幻想着以后自己也有能力能够做出来一个开源项目。
但是,有个最大的问题,我相信很多同学也正在面临该问题,自己有想法,但是却担心无法落地,担心做得不够好,总而言之就是一万个担心。我当时也是如此,有过一些自认为很不错的想法,但在还没有迈出第一步时就夭折了。
最近,可能是伴随着我代码能力的提升,以及持续躁动不安的心,我终于迈出了自己的第一步,跟了一波 ChatGPT
的风,做出了 GPT Terminal
。
其实回过头看一看,做的过程真的很快。从我有想法,到我开始做,到最终项目发布到 Github
,耗时只有一周。
项目原理很简单,关键是我如何寻觅想法、获取灵感、克服完美主义、克服害怕失败的恐惧,这才是今天我要说清楚的事情。
大家对项目感兴趣的话可以看看我这个专栏 —— GPT Terminal 专栏
破局之道:执行力 >> 想法
首先,我给大家抛出一个我认为正确的结论
- 开源项目能够落地的两个必要条件 —— 想法 & 执行力
- 执行力 💪 >> 想法 💡
破局之道其一:想法
做自己的开源项目与跟着教程、视频做项目的最大不同在于:一个是主动输出,一个是被动输出。两者的差别十分之大。
- 被动输出
- 你只需要具备「做题家思维」,走一条「阳关道」,前方的坑都已经被教程的作者所填平,做的过程会十分顺利。你不需要过多的思考与设计,即可顺利地完成该项目。
- 但是这种项目注定容易烂大街,很难照搬到简历或作为自己的开源项目,导致面试求职时天花板低。
- 主动输出
- 你需要具备「出题家思维」与「产品意识」,一路上会遇到多个「十字路口」,你需要分析现有的用户需求,做产品的规划与设计。需求方可以是你自己,也可以是社会大众。在做的过程中,你会去不断地思考解决方案,并从多个方案中挑选出你认为的最优解。
- 经过这一系列的努力,最终你孵化出的开源项目,融合了你的思考,具备有你的价值导向。而且这种项目一旦具备创新性或趣味性,或解决了某种特定的需求,很容易成为爆火的开源项目。
要想做到主动输出,首先你得有一个想法,不论这个想法是否现实、是否可落地。相信很多同学就难倒在这第一步,由于长期的「做题家思维」,头脑空白,很难真正地挖掘自身需求或周边用户需求,或者想到有意思的产品内容。
接下来,我从三个角度和大家聊聊,我是如何 “破局”、如何生产想法。
开拓者心态
这一点说起来其实有点中二。大家在学习的时候,可能扮演的角色更多的是一个 Follower,跟着大牛的脚步,稳扎稳打学好基础知识。诚然,这一点十分重要,让你能够脚踏实地地学本领,但是,如果在学习的过程中,同时保持一个开拓者心态,经常性地去思考,我可不可以在某个细分领域,成为该领域的带头人,我也当一次大牛,出一些专栏、教程、视频等?潜移默化中,这种意念力会将你代入到这个开拓者角色中,思考一些框架、产品的设计,并幻想自己有朝一日也可做出来类似的产品。其实在思考中,你无意识地在向「出题家思维」转变,这一点至关重要。
产品思维
「开拓者心态」其实是一种虚无缥缈的东西,每个人都可以胡思乱想,通俗点来说叫 YY。所以说,它还需要与切实的思维逻辑相绑定,从而发挥出最大的作用。「产品思维」在其中起着重要的作用,这意味着你需要去站在用户的角度思考问题,关注用户需求,从而想清楚你要做一个什么样的项目或产品。如果你找不到需求,那也没关系,你只需要关注你认为有意思的东西。如果它能够起到娱乐作用,那么相当于你发现了用户的潜在需求,甚至你是在引导用户需求。
知识输入积累
当你具备了前两者之后,你应该很快就会发现身边的需求,产生一些初步的想法。但是,你还需要大量的知识输入积累,才能支撑着你把项目做下去、做成功。举个🌰,小学打游戏的时候,我就想做一个游戏脚本,辅助刷怪升级,但是我当时并没有对应的编程能力与技能,所以说这个想法在当时就只可能是想法。前期的「知识输入」重要的,当你有了足够的「输入」,你就会发现「输出」是顺其自然的事情。
Idea 分享
说了这么多,有没有什么实际的想法呢?其实是有很多的,这里给大家说几个比较简单的。目前 AIGC
非常火热,那么咱们可不可以从最简单的 ChatGPT
入手,考虑一下如何基于 GPT
来搭建一个新项目或优化我们的现有项目?
- 我之前写过一个编程论坛的项目,其中有问答模块,但是其实有很多问题都是比较重复的、简单的。如果网站用户反复地看到这些问题,会认为网站质量较低,丧失用户粘性。那么我们是不是可以将重复的问题过滤并收集起来,做成一个数据集,并 Feed 给
GPT
模型,将其训练为一个编程助手语言模型,这不就解决了网站中的重复性问题吗?(大家如果不知道如何可视化训练模型,可以看看我这一篇文章) - 做一个自媒体助手,通过
AIGC
辅助创作者创作文章、视频、音频等内容,你需要完善你的平台服务,提高用户创作内容的效率。这也是个不错的想法,而你需要做的事情比较简单,只需要对ChatGPT
进行微调,使其能够起到辅助创作的作用即可。 - GPT Terminal 项目的出发点是兴趣,我觉得将
GPT
与终端结合在一起比较酷。此外,我也是为了提升我日常的工作效率,我在设计之初加入了命令行翻译角色、中英文互译角色、SQL 翻译角色。这三类都是我最经常用到ChatGPT
的地方。
破局之道其二:执行力
这一点重要性其实不言而喻。在我看来,执行力 >> 想法。
想法很有可能是你在吃饭、散步、打游戏、刷视频时,突然冒出来的奇思妙想。思维活跃的人可能一天一个想法。但是如何将想法落地,最关键的是你的执行力。在有了想法之后,你如果确定想法是可落地的,那么你就不需要再继续想下去,毕竟你做的不是真正的产品,不需要你进行大量的需求分析,就算是真正上线的产品,也不需要你一次性做到完美,毕竟现在最流行的是「敏捷开发」嘛,通过多次迭代后创造出成功的产品。
所以说,在有了想法之后,不必继续深想,不必瞻前顾后。你只需要想方设法做出第一版 Demo,将你的想法落地,并不断完善,那么它就是一个有价值的开源项目。
这一过程中,执行力十分重要。你需要持续付出努力,完成你在每一个阶段设下的既定目标。
破局之法:从 0 到 1 落地开源项目
其实,做开源项目就像是搭建一个房子。
-
你需要负责房子的户型设计
-
你需要考虑修改房子需要用到哪些原材料
-
你需要为房子打好地基
-
你需要一层一层地将房子盖起来
-
你需要购置家具、装修样板房
-
你需要将你的房子卖给用户。
这每一步环节,其实都可以一一对应到我们做开源项目的过程。
相信聪明的大家已经猜到大概内容啦,接下来我给大家进行具体的拆解。
“规划你的摩天大楼” —— 项目需求、技术选型、设计方案
在有了项目想法之后,你需要对项目的想法进行细化,即你需要进行详细的需求分析,拆分你项目的功能点。这些功能中,有的是核心功能,有的是非核心功能。这也意味着,核心功能必须在你的第一版 Demo 中完成,而非核心功能可以排到后期完成。这其中我们采用了「分治思想」,将大问题拆分为小问题,逐个击破。这样一来,在做的过程中,我们不会有太大的压力,能够快速发布第一个版本。
拆分完需求之后,我们需要进行技术选型。如果只是快速落地想法、将开源项目做成,我认为咱们直接采用最熟悉、最简单的技术栈即可。
- 这里就不得不提到「学生思维」啦:在做项目时,总是过度选型、过度设计,导致最后罗列出一堆看似高大上,却完全用不到且不熟悉的技术栈。这样可能会使得你初期斗志满满,但是一旦受挫后就容易使项目夭折,中途放弃。因此,我建议首选熟悉的技术栈,除非你认为你的执行力足够强,一定能坚持到最后。
至于设计方案的话,因项目而异,大部分在 Github 上都有类似的解决方案,只不过你需要将其整合到你的项目中。
“打地基,搭架子” —— 最艰难的一步
这一步我愿称之为最艰难的一步,也是最容易劝退的一步。万事开头难,从 0 到 1 去搭建一个项目架构,很考验设计能力。对于完美主义的人来说,在这一步会浪费大量的时间,想方设法地去构建项目框架,想让其做到「可扩展」、「可维护」、「可迭代」。但是咱们冷静下来细想一个问题,如果你的产品已经到了快要无法 “生存" 的地步,你还会去费尽心思提升用户体验吗?所以说,最关键的是先 ”活“ 下来,再去考虑 ”发展“ 的事情。
因此,如何快速 ”渡劫“,关键之法在于,以做 Demo 的心态去搭架子,即使你最后写出来的是 ”屎山“ 代码,那你也可以第二版、第三版中不断维护、不断改进,任何事情都不可能一蹴而就。
“筑高台,大力出奇迹” —— 填充完善你的项目内容
恭喜你,迈过了最艰难的一步,顺利走到了这个阶段。这时候,相信你已经初步搭建起了项目的框架,并实现了部分核心功能。之后,你需要考虑的就是按照之前的层次结构,将其他功能点逐一实现并填充进去。如果你的项目比较简单,那么到了这一阶段,你只需要去复现其他的开源解决方案,将其集成到你的项目中即可。
大力出奇迹,当你投入足够多的时间到项目中,你的项目功能点会越来越多,并且越来越完善。
“门面工程,装修艺术” —— 修饰完善 README 文档
终于到了最后的轻松 + 愉快阶段啦。这个时候,你已经完成了项目的主体开发,进入到了发布上线的阶段。而为了便于你之后推广项目,你需要对其进行一定的修饰与包装,即完善你的 README 文档。
我相信绝大多数用户在浏览开源项目时,第一眼看的便是 README 文档。一个好的 README 文档能够给用户留下深刻的印象,使用户想要尝试去使用你的项目。
“装修” README 也是一门艺术,接下来我给大家列一个大概的 “装修” 框架。
具体示例可以参考 GPT Terminal。
-
项目 Logo:使你的项目高大上一些,吸引用户(可选)
-
项目简介:简明扼要告诉用户你的项目核心是什么
-
项目预览:通过图片、视频的形式,让用户直观地感受项目(可选)
-
功能概览:分点告诉用户项目的核心功能
-
快速开始:清晰明确地告诉用户,如何从 0 到 1 运行该项目
-
贡献指南:当你的项目吸引到用户时,你需要给用户一个渠道与方法,一起参与到开源项目的建设中(可选)
-
特别鸣谢、开源协议(可选)
“销售之道,用户心智” —— 如何推广你的项目
在《定位》一书中,多次提到获取「用户心智」在营销当中起到至关重要的作用。
其实咱们细想一下各个互联网领域的头部产品,其实它们正是做到了牢牢掌握用户心智,成为了这一品类的代名词。
那么,我们也是需要按照这一准则,去推广我们的项目。在推广的过程中,它一定是具备鲜明的标签,有着区分于其他项目的亮点,这样才能让用户牢牢记住你的项目。
我在推广 GPT Terminal
项目的过程中,主要以两个亮点为主:「终端交互」&「角色定制」,围绕这两点进行宣传,让用户直观地感受到 GPT Terminal
项目与普通 ChatGPT
项目的区别在哪里。
而且你需要坚持地维护项目,因为长期的维护本身就是一种宣传方式,这可以使用户感受到你是在用心做这一项目,一定程度上证明项目是可行的、可用的,出 Bug 的概率较低。
总结
相信大家看到这里,一定对于如何搭建一个开源项目,有了更加深刻的理解与认识。不过还是要牢牢记住「破局之道」 —— 想法与执行力。这两点具备后,「破局之法」是顺其自然、顺理成章的事情。
如果大家目前仍然没有一个具体的想法,可以参考想法部分的 Idea 分享。如果大家还需要我提供更多想法,我可以再写一篇文章,详细和大家聊聊我最近关于开源项目的思考~
祝大家能够尽快拥有一个属于自己的开源项目,为自己的简历添加点儿真东西!