这篇文章不是纯粹的技术文章,更多的是我对编程技术,国内技术社区,以及自身技术之路的一个回顾和总结,我会将自己的技术价值观和开源经验,和大家一一分享.如果你也曾对作为程序员的未来迷茫过,相信这篇文章一定会对你有所帮助.
接下来我会按照如下目录大纲和大家分享我自己的感悟:
我对国内开源项目的思考
国内开源项目/社区的不良风向,是如何加速招聘的“内卷”?
做开源项目能带给我们什么?
从零到一,如何打造一个高执行力,快速迭代的开源项目?
分享几个有价值的开源方向
首先在阐述任何观点前,大家都应该以一种批判的角度来看待和消化,因为任何人的思考和观点都可能是局限的.
项目开源是一件非常崇高且有意思的事情.这是我曾经一直持有的看法.国外的开源大佬TJ等人,国内的汤姆大叔等,一直是我的技术偶像.
他们和我的唯一共同点就是不及格的发量,这让我找到了些许安慰.
所以阅读这些优秀的开源项目让我成长很多,也学到了真正有价值的开源项目该如何去做.
但是最近2年,我在看github的trend的时候,不免有点尴尬,同时夹杂着些许的力不从心.当我看到大量国内割韭菜式的开源项目之后,不禁在草稿纸上写了一句:
好了,不吐槽了,接下来总结一下我对优秀开源项目的一些感悟.
从项目自生结构的角度
项目目录结构清晰
文件/文件夹命名规范,可读性强
清晰完整的readme介绍
简洁的项目描述
项目版本信息,辨识度高的logo
项目应用场景介绍,demo案例
api使用文档
清晰的todo和undo清单
贡献指引和相关生态
规范而详细的package.json文件(或者项目描述文件)
从项目实用性角度
解决了当下开发环境的某一痛点(比如模块化解决方案amd,cmd等)
能快速提高开发效率(提效工具,工具/类库等)
能很好的解决某一框架遇到的瓶颈(比如vue/react之于jquery)
能很好的降低使用某一框架开发项目的难度(比如vue/react/jq等的插件)
能很好的解决企业通用业务需求(比如antd-pro,egg,H5-Dooring)
能让程序员快速理解开源项目的开源(比如翻译类文档,技术思考性稳定,能快速磨平认知差异)
当然还有一些方向可以去思考,比如底层技术方案(操作系统,基础语言等),离我太远,暂时搁置.
内卷:本意是一类文化模式达到了某种最终的形态以后,既没有办法稳定下来,也没有办法转变为新的形态,而只能不断地在内部变得更加复杂的现象。
最近两年大家有没有发现,各大技术社区内充斥着大量求职面试相关的文章,层次不齐,千篇多少有点一“绿”.想认真看看技术文章,还得花时间往下多翻几次,因为顶部推荐基本被面试文,进大厂文霸占了.
虽然求职找工作需要准备,但是我个人觉得没必要过渡准备,否则必然会遭遇我们最熟悉的名场面:"卷王面试官"和“卷心菜求职者”的相爱相杀.
这里我来给大家伙分析一下为什么过度释放面经导致越来越卷的原因.
面试官想:出什么面试题呢,社区上这么多面经,想必大家一定有所准备,那就来点刚的(有难度的).
求职者想:最近看各种面经,不管是大厂小厂,面试题都这么难,我要多刷几道题.
好的,还没完,接下来就是上的+笔/面试题,刷去吧,刷完了你没进大厂,不是题的原因,是你的原因.
好家伙,被这样的环境培养出来的程序员,未来对技术能有多大的想象空间呢?这里不经让我想到我另一位偶像的经典名言:
想象力比知识更重要.——AlbertEinstein
同时想到一位想象力触及火星的国外老铁:
所以说这一节我主要想表达三个观点:
被刷题榨干的求职者未来会对技术还产生多大的长远兴趣?是道德的沦丧还是人性的扭曲?
国内开源环境充斥着大同小异的面试题,国内个人开源项目未来还会有多大的想象空间?难道国内有价值的开源真的是有大公司才能玩的起?
没有持续的兴趣和想象力,永远做不出好的有价值的开源项目.
这里当然不是不鼓励这些,意在不要过渡重视刷题,其实偶尔做做有价值的开源项目,也会为面试加分.毕竟在近3年的求职面试中,我是从来没有为面试做过任何准备的.
在上面几小节的观点中,各位提炼有价值的观点即可.我们接下来进入今天的正题.
做开源项目能带给我什么呢?这也许是大部分想做开源项目的人的一个疑问.大部分人也会走入一定的误区,虽然这个问题很简单,但是简单的问题往往更复杂.
首先一部分人会觉得,开源项目可以给自己积累项目经验,简历上加分,巩固自己的知识体系,积累人气等等.我之前也是怎么认为的.但是这种开源思维只适合初级开源,一般的结果是:虽然开源项目让自己加深了对技术的熟练度,简历上也可以写写了,但是随着时间流逝,最终会被遗忘.
所以现在的我,在思考这个问题前,一定会先问自己几个问题:
我做这个开源是为了解决什么问题?
目前已有的解决方案有哪些?
我怎么做,才能做的比已有的方案更好?
我如何才能让我的项目持续发展下去,而不是过眼云烟?
在解答了以上4个问题之后,我们做开源项目会更有目标和框架感,也更能明确自己能得到什么:
独一无二的解决方案
对该领域有更深度的研究和了解
对未来职业发展更有谈资
收获了更多技术方案和开源小伙伴
通过项目价值体现个人价值和某一领域影响力
收获money,流量,企业offer
所以我们不要过度的追求结果,我们在做有价值的开源项目的过程中,自然会让自己变得更有价值.从我做H5-Dooring这个项目之前,我就已经充分回答了自己提的上述4个问题,所以项目最终的结果,大家也有目共睹.在我做完第一版之后,为了解决第四个问题,我就筛选了几个志同道合的朋友,和我一起迭代,让项目按照提前规划持续推进下去.
就以我自己实际经历作为佐证,来谈谈开源项目的打磨过程.
不要问我这个流程为什么像个“心”形,我只是想表达开源作者们10个有7个都是为“爱”发电.(所以默默为这些优秀的人)
1.目标规划期
首先在明确了为什么要做这个项目之后,我们需要对自己的开源项目有个清晰完整的规划路线.比如1.0版本需要做哪些功能,哪些功能是高优先级一定要完成的,哪些是不紧急的,可以后期在完成.所以我们要充分利用好四象限法则.
其次就是明确的功能拆分,需求池管理,学会过滤需求,而不是一股脑的全盘接收,因为有时候用户提的需求他自己也不知道,所以需要评审.
有了以上目标规划和管理法则,我们就能有一个清晰而高效的目标规划了.
2.项目基建期
项目基建期主要是项目的雏形,这个阶段一定是项目负责人搭建,需要对项目的整体技术选型,架构,解决方案设计等有完整的思路和落地方案.这样才能为以后团队开发,迭代和项目优化打下基础,否则最终会乱成一片.在项目初期也是按照这个思路走的,我先把项目完整流程设计出来,并在上开源,后面才能找到一批直观且感兴趣的朋友来维护和优化.
3.团队组建期
团队组建也是非常关键的环节.首先创始人需要具备一下特质:
具备一定的技术实力(能独立做出解决方案,把控整个项目)
对项目有一定研究深度并且有明确的目标规划
绝对的执行力,发挥领头羊作用
格局放大,接受能力比你强或者比你弱的朋友,发挥其长处
对项目有坚定的信念
谦虚+追求极致
相互学习和共同成长的态度和团队相处
只有具备以上3点以上,才能打造高效且有凝聚力的团队.
同时,我们只有选择价值观相同,对项目感兴趣,且有一定执行力的协作者,开源项目才能稳步发展下去.所以团队人数多不一定做的就快,团队人数少,也不一定做的就慢.所以之前有很多朋友想加入dooring,我都会请自和他们聊一下,做一些基础性的考核和筛选.目前我们DooringX的团队虽然人不多,但是个有专长,相信未来一定会把项目做的非常出色.
4.团队协作/磨合期
团队协作/磨合也就是我们在任务分工时,相互之间做的一些交流,沟通等.
我们需要让每个共建者明确我们共同的目标,以及各自的分工.这个阶段往往也是考核团队的最佳时期,我们可以发现团队不同的成员擅长什么,可以胜任哪些工作,哪些任务可以让他通过项目来获得提高和成长.
所以定期交流必不可少.在的磨合期确实也发现了一些不合适的朋友,有些可能时间紧,有些是价值观问题,这些都需要沟通解决,解决不了就要果断处理.项目发起人不用过渡考虑个人感情问题,彼此创造相对舒适的环境才是最重要的.毕竟各自都有需要奔赴的彼岸.(有点谈恋爱分手论的感觉,就此打住)
还有一点就是善用人才,虚心听取优秀的建议.每个人都是团队的贡献者,各司其职,我们需要沿着我们目标的主线不断前进,所以需要给合适的人分配合适的任务,让优秀的人带动大家一起成长.创始人是让项目成功的助推器,所以需要接纳优秀的建议和发展方向,从而审视自身的局限.毕竟,每个人都有闪闪发光的地方.
5.版本迭代和复盘期
每个阶段我们的项目都需要有一次复盘,反思.所以做完是第一步,如何让项目做的更好,才是项目长期发展的关键.团队中每个人都可以提建议,提出自己的看法和发展方向,不断的头脑风暴,把项目做到极致.当然其中需要把控,取舍.就好像PDCA循环.
分享几个有价值的开源方向和开源项目
选择开源的方向其实我在上面的开源项目的实用性中已经阐述,不过前提还是需要根据自身偏好和擅长点来选择,笔者这里列出几个可以做的开源方向:
页面可视化搭建平台
埋点可视化搭建平台
基于浏览器的文档引擎
协同系统
智能客服插件
鸿蒙系统工具插件
无线端js应用搭建平台
可视化图形引擎
jsai相关
跨端搭建平台