开源面前无门第,寒士皆可成功名

木杉,开源者,deno开发者,本科生。

你觉得,开源对你影响大吗?

开源对我影响挺大的, 做deno那段时间收获很多很多


主要收获在哪?

可能要比之前两年加起来学到的还要多,可以说把以前学到的东西实践了,首先是git的使用, 这之前我只会git commit push。还有是读代码的能力。

我刚开始接错deno的的时候, 它什么都没有, 我是在deno/std开始开发的时候加入的,我做了deno_path, 其实就是把node path抄了过来。因为node path是有一部分内部依赖的, 所以我需要把这些去掉, 换成deno的写法,所以我肯定需要先把代码读懂。

这是我参与开源社区真正意义上的第一个pr——我发现了node path的一个bug。

写完path, 我开始真正参与deno std开发, 我选择的切入点是server。但是刚开始的时候, 它的server启起来后, 别说浏览器上看了, 就真的只能curl。我只能想办法解决这个问题,把server相关的代码读完, 不知道它在干嘛, 虽然只有几百行。把依赖读完, 还是不知道在干嘛,我尝试改改, 并没卵用...

后来大概花了一礼拜时间学这个,查了很多资料问了很多人,然后ksm给改好了。我看了他的pr,因为之前这些代码看得很熟了, 就恍然大悟原来要这么改,这个时候server已经能在浏览器上看了。

因为一年前我尝试写node web框架, 我想着干脆把那个项目拿过来, 用deno跑。

这个时候我开始想一个问题, 我为什么要写这个框架, 它对我有什么用, 相比较其他成熟的轮子, 做这个有没有必要,从这个时候, 我确定了自己开源的目的: 最重要的一点是简单, 然后才是性能,所以我把它叫做abc, 也是有简单的意思。

但因为是我第一次做框架, 现在想想还是有很多缺陷的, 很多地方为了性能, 违背了简单这一点。

确定这两个目标后, 就是设计框架的api,什么样的api简单, 学习成本低。我看了无数的框架实现, 不仅仅是js的还有golang, rust, java等等。这段时间很久,有种"书读百遍其意自现"的感觉。突然发现自己随便什么语言拿过来都看得懂了。(参与开源能读懂别人的代码真的非常重要,要读懂了才能开始写。)

为了简单, 所以我不可能做类似koa, express。他们只有一个核心, 其他全靠插件完成,我最讨厌这样了, 初学者找插件找半天。我肯定要做一个整体,那么最重要的就是要整合router,现在所有的node框架的路由, 都是基于正则的。于是我做了基于前缀树的,这样在复杂路由的情况下能大幅度提升性能然后我发现, 虽然我能写前缀树的题目, 但真的拿来写一个项目好像真写不出来。就开始找别人的实现, js的找不到找c的, c找不到找go的,又看了很多代码, 才好不容易把这个路由写完。

这段时间, 我提升的都是读代码的能力, 然后abc的基础写好了, 发布之后就开始帮忙写deno了,读代码的能力真的很重要, 我很明显的发现, 改deno bug的速度明显提升了,以前遇到一个问题总是要找别人帮忙,现在不用了,甚至可以在gitter, issue里面帮助别人。

发现问题 -> 解决问题。这是参与开源的基础, 不断做这个, 就能变熟练工,然后是提feature。

我第一个尝试是给abc增加了一个装饰器,我记得以前写项目的时候, 每次要写dto, 很烦啊, 特别是koa的项目, dto特别不好写,我想要利用ts能声明类型的特性, 让写dto的时候不那么痛苦, 甚至在很多情况下不写dto。
然后我做了这么一个api,第一次在脱离代码参考的情况下写大的feat,其实不是很满意,api设计可能增加了很大的学习成本, 可能除了我之外很少人会觉得好用。

不过这之后, 我开始做deno的feat,我觉得file_server的默认模板太辣眼, 我觉得应该提供一个api, 让用户能使用自定义的模板。但是被拒绝了...ry说我们暂时不考虑这个, 先美化默认模板,我跟他据理力争,最终美化了现在的模板...(现在想想被拒绝很正常, 当时我设计的api真的蠢到爆了)

我应该借鉴其他项目的, 其实我们遇到的几乎所有问题, 都能找到类似的案例, 这么一看, 其实做feat也不难。但一直做别人做过的事, 一直抄真的很没劲啊。就像我一开始做的abc的数据绑定, 起码我没找到类似的实现, 虽然做的可能不那么好, 但挺有挑战性的

然后我就想做前端框架, 或者说一年前就想做, 当时有很多想法, 但没能力实现。这次一定要记住自己的目标了, 就是没有学习成本, api也是自己一年前设计的, 就是0 api。很有挑战很有搞头,也很容易碰壁。先写完想法, 比如做完之后, 自己希望这个框架是怎么用的, 然后朝着这个目标去前进。

因为写这个框架的时候, 我几乎没有前端基础, 我只是单纯的觉得前端入门太难,很快的, 马上碰壁了, 关于template和jsx的选择,两个我都尝试了, 首先排除template。因为我没有能力去维护一个解析器。然后我用了jsx, 走上和react硬干的路。

遇到一个难点, 解决还是妥协最好是全部解决, 但很难做到的, 比如最开始, 我觉得自己不可能去写一个解析器,这个过程中我不断看r/a/v三家的解决方案。以前在网上说什么这框架不好那框架不行, 在自己开始做之后才发现, 他们那些不好的, 有瑕疵的实现是有道理的,我始终做不到一开始设想的那样子, 不管怎么做, 要么越写越像angular, 要么react,他们妥协的地方我发现我也不得不妥协,这段时间真的很绝望, 很无力

这个时候明白"纸上得来终觉浅", 自己做了才能知道网上喷的那些不好的地方, 不是随随便便什么人都能解决的。比如大家都说用goto不好, 但我还是想用用看, 总不能一无是处吧
这个前端框架到现在还在搁置中, 上学期找了一学期突破点, 还是无能为力。我打算放放, 做点自己开心的事情。比如随便逛逛github。

我觉得是别被自己项目拖累。我想着就放松一段时间, 起码考完研, 然后学一段时间数学, 然后再看看开源社区(前一年真的太累了)


如果你目前的水平是100,接触开源之前水平大概多少?

在参与deno之前, 我只能写业务代码,就是crud。如果评分只能是60分。


如果不接触开源,你估计现在水平是多少?

但如果不接触开源, 我估计现在仍在60-70分徘徊, 仍在闭门造车, 有想法但实现不出来, 然后放弃的阶段。
接触开源社区, 是眼界的提升, 能大大提高上限, 但如果没有积累, 还是没办法进步。


你是什么契机接触到开源的?

这多亏了typescript, 我在无意中发现了ts, 开始对前端感兴趣, 然后了解到了angular, 开始了一段时间痛苦的学习 (大一下学期末, 也就是几年前的今天)。那个时候我只会用spring做简单的论坛。
刚开始学习angular的时候异常痛苦。完全没有中文资料, 完全没有中文社区, 而且还在b测, bug奇多。而我那时很菜, 甚至有的时候不知道这是bug, 以为是自己写错了,再加上我高中全班倒数第一的英语水平。而且angular各种设计模式(我什么都不知道,那真是我有史以来最痛苦的半年,我入门入了半年。
我坐地铁都拿手机刷angular的文档,当时真的把他的英文文档背下来了。同学问我问题, 我直接说你去看文档哪一部分,然后就造成了我现在能不用翻译看英文文档却没过四级?
这个时候我不知道angular的设计是好的, 但我觉得它一定很nb,于是我就在知乎上当ng吹,没事研究研究他的源码

然后我收到了第一节ngchina的邀请。我跟主办方商量, 我有很多同学也想参加, 但是付不起门票, 然后促成了学生票, 看到了很多nb的人
当时在知乎上评论了一句就在我学校旁边欸, 然后收到了社区的邀请。莫名荣幸。这个时候意识到自己真不能闭门造车

刚好我遇到一个需求, 具体是啥我忘了, 估计是花式编译ts,我怎么都找不到解决方案, 又排斥webpack。问了一个学长, 他推荐我试试grunt,我刚好要试的时候, 他跟我说, 最近出了一个东西, 叫deno。
好巧, ry刚建仓库第一天,只能tmd跑个readfile。不过deno的目标看上去很美好, 成为ts runtime(虽然并没有)。

接触开源挺巧合的, 恰好我通过angular对ts很熟悉, 恰好我遇到了一个需要deno的契机, 恰好deno发布第一天。


你觉得大学生有必要接触开源吗?

我觉得是非常有必要的, 但感觉很难, 没有接触开源的人往往很难意识到自己要加入他们

曾经我尝到开源的甜头后, 也在社团内强推开源, 学长们也十分赞同, 但结果并不好,大多数人只是注册了一个账号, 或是把github当作网盘来用。并没有意识到合作才是开源
他们还会觉得, 我放百度云上, 跟我搭档分享, 这不是跟github一样了么,git命令对新手也不友好, 很容易仓库就炸了。当时在我专科学校那个社团, 真正把git用起来的在校生就我一个人,大多数人都是毕业工作后才看到git的好处。

然后给学弟学妹推, 但大家最终也只是建一个账号

在学校里最多接触到两三个人就能完成的项目。比如这个, 以前在专科的时候跟同学一起做的, 我写的后端, 另外两个同学写前端react。最多的合作也只是这种分工明确的, 你push你的, 我push我的,说白了也是当网盘用

我觉得业务代码可能并不适合用来作为接触开源社区的入口(这东西最终还是你干你的我干我的, 因为大家都看不懂对方在干嘛)。需要一种, 我觉得这个项目对我有用, 但一用, 发现有缺陷, 然后我改改, 还很好改这种项目作为接触开源的入门

我第一次pr就是改了typeorm里的一个错别字, 然后头像作为contributor加到首页了, 这样就很有成就感。还能在同学面前炫耀: 你用的这个库我是contributor欸, 不会赶紧来问我,反正大家都不懂其实我只是改了一个错别字。

原文地址:https://www.cnblogs.com/jhy16193335/p/12233382.html

时间: 2024-11-12 07:56:26

开源面前无门第,寒士皆可成功名的相关文章

小人物的开源史

危楼高万丈,千日方入云.不见小人,凄凄苦苦,一言不发,负石而行:却见高士,深谋远虑,羽扇纶巾,谈笑风生. 引言 也许你见过很多大牛在讲台上讲述自己的对于开源的贡献与想法:也许你也见过很多一夜爆红的项目和他背后的人的努力与心得.但是开源并不仅仅只有这些,有很多小人物在默默的为开源做出贡献,他们大部分都名不见经传,没有很多人关注他们,但是他们还是默默的在努力,为这开源界贡献自己的一份力.他们改变了自己,改变了开源界,也改变了整个世界.他们就是这个合辑的主角,开源界的中坚力量,一群默默耕耘的小人物.

FDM:免费开源无广告的下载工具

简介 FMD,全称:Free Download Manager 是一款和 IDM 各方面都非常类似的下载工具,其特点是跨平台 (支持 Windows 和 Mac 系统),支持磁力链接和 BT 下载 (IDM不支持),界面简洁,支持中文,开源且无广告,最最重要的是:完全免费! GNU 通用公共许可证:Free Download Manager已基于GNU公共许可证开放源码. BitTorrent(BT)支持 上传管理器:方便地共享您的文件 Flash影视下载:已支持从视频网站(例如Youtube,

语音识别开源项目

语音识别项目: http://www.oschina.net/project/tag/203/tts-speech sf.net http://www.codesoso.net/Search?q=%D3%EF%D2%F4%CA%B6%B1%F0&l=c http://search.codesoso.com/Search?q=%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB http://simon-listens.blogspot.com/2012/12/simon-04

MongoDB,无模式文档型数据库简介

MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂的金融事务,如证券交易,数据的一致性可能无法得到保证”.若想了解更多关于MongoDB的信息,请看51CTO数据库频道推荐<MongoDB,无模式文档型数据库简介>. NoSQL数据库都被贴上不同用途的标签,如MongoDB和CouchDB都是面向文档的数据库,但这并不意味着它们可以象JSON(J

2013 年最不可思议的 10 个硬件开源项目

这篇文章是总结 2013 年发布的最令人不可思议的开源硬件项目,大部分都是众筹项目,这也说明了在 2013 年,开源业界的创新发展很繁荣,受到很大的关注.与此同时,很多大公司,创业公司和个人开发者都开始对开源创新给予很高的关注度,展望 2014,开源创新将会发展到另一个更高的高度! 五月: 开源实验仪器 Red Pitaya 源代码: 尚未公布 可 以肯定的是,购买实验室器材设备是笔很昂贵的开销,这也是为什么 Red Pitaya 项目组决定要创建一个硬件来改造手机,平板或者是电脑来作为实验的设

291.博客园安卓&amp;苹果手机客户端开源项目整理

1.简介 1.1本贴简介 本贴主要收集一些博客园安卓&苹果端的开源项目,方便园友参与开发和下载,各个风格不同,根据各人审美参与开发和下载使用,欢迎下方留言投稿. 1.2本贴说明 本贴为个人整理,与博客园官方无关,其中所有观点看法均为个人看法,不代表博客园官方和开发者,如有侵权或言论不良,请下方留言,必定删除或修改. 下方排序为本文博主接触及收集顺序,并不是安全性.美观性等标准的排序. 博主简评为个人看法,并不代表该应用的全部特点,只是选取个人认为比较方便实用或者突出的特点进行说明,如有本同看法欢

中国历史十大经典战役

中国历史十大经典战役  NO.1 牧野之战 "牧野洋洋,--时维鹰扬,凉彼武王肆伐大商,会期清明"现代人根据史书记载的天象,甚至推算出了具体时间是公元前1106年2月4日.周武王统率兵车300乘,虎贲3000人,甲士4万5千人,汇集各部落的兵力,大破商军的共约17万人于牧野. NO.2 城濮之战 面对锋芒必露的楚军,晋文公选择"退避三舍",然后集中优势兵力对于楚军3路兵马实行各个击破,最后战斗以晋文公在践土朝觐周王,会盟诸侯结束. NO.3 长平之战 秦赵为了上党的

第一部分 基础篇 第一章 走进MongoDB

声明:该文章主要来自<MongoDB实战>一书内容,主要想通过该书学习MongoDB的相应知识,加深理解,故写在自己的博文当中,作为记录在最后的章节中,会有一个自己集合MongoDB数据库应用的JavaEE的web应用. 第一章 走进MongoDB MongoDB是一个高性能.开源.无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种,它在许多场景下可用于替代关系型数据库或者键/值存储方式,MongoDB使用C++开发,MongoDB的官网是地址是:http://www.mongod

第七章 本源时空(补充)

                第七章        本源时空(补充) ?      第七章是匆匆结束的,有点文不对题.什么是本源时空,没有详细的论述.2个月来.我一直想做个小结,无奈心不在焉,忙于正业的玩游戏.看小说.其实,真正的原因.后面或许.会说一下吧.     我敢确定相对论.量子论等垃圾理论,100%是错误的,都将成为历史.按照本人30多年的实战经验总结,我的理论95%以上是对的:或许在小节上.不经意的地方有错误吧.嗯.注明一下:我不是"春哥",不需要"信我者永生&