步入开源世界

#Life #GitHub

前言

我经常间断性的在想「三叶草」在编程技术上还能有哪些发展

作为一个以安全技术立足的小组,小组已有的较成熟技术方向有:「渗透」、「逆向」、「Windows安全编程」(至于「Linux」我一直认为它暂时不算是一个技术方向)

成熟的定义是:已经有很多小组成员学习研究过,有一定的成果,形成了知识体系,后人能比较容易的通过前人留下的经验进行学习,并且能有较多的前辈指导

小众一点的暂时不太成熟的技术方向有:「Android安全」、「RFID无线安全」、「Python编程」、「Web前端编程」

这里不太成熟的定义是:有小组成员学习研究过,但是还没有沉淀下来形成知识体系,后人很难利用前人的学习经验进行参考,少有前辈指导

小组有成员在谈到「编程」时,常常喜欢提到「开源」:因为黑客精神是崇尚自由的,所以要开源

我勒个去~

那时图痒图森破,以为简单的把源代码扔在网上就叫「开源」

尼玛,就算是这样,我要把怎样的代码扔到网上?扔到哪个地方?通过什么方式扔过去?

仅仅做了这些就算是步入「开源世界」了么?

而我们到底应该如何步入「开源世界」?

探寻小组历史:

小组师兄@renewjoy创办《桃源》杂志,算是小组在「开源世界」的一个里程碑,现在《桃源》也做到了第六期

有前人探路,必有后人跟随

而更广阔的开源世界在哪里?

常常有小组同学在谈到「技术学习」的时候,都喜欢说「发现大师,跟随大师,成为大师」。

可是我也想问:到哪去发现大师?如何跟随大师?如何成为大师?

下文会以「发现大师,跟随大师,成为大师」为线索,谈论一系列关于「编程和开源世界」的乱七八糟的问题,它包含且不只包含下面的问题

到哪去发现大师?如何跟随大师?如何成为大师?把怎样的代码扔到网上?扔到哪个地方?通过什么方式扔过去?

当然也请各位原谅我的浅薄,我仅能以我在Web前端学习道路上的经验来谈论这些问题,在以后我也可能会觉得这篇文章幼稚

但如有误人子弟的观念,还请大家指出,我会及时修正或者删除

从发现大师开始

Git & GitHub

诚然小组有很多前辈,它可以是大家的大师

但是很多基础不错的同学可能需要寻找更厉害的大师

如何发现更多更牛逼的大师,学习一群人的经验,肯定好过只学习几个前辈的经验

师兄@CasperKid曾经在技术分享时谈论过「国内黑客和国外黑客的差别」

我觉得这个分享有一个更大的意义是给了大家一个意识,眼光应该更辽阔一点

但是,很多同学对开源的认识还停留在Linux源代码

也有老师经常装逼的说:大学时代没看过Linux源代码,都不好意思说自己是学计算机的

我拜托这种老师以后不要再提这种陈年旧事了

现在是2010以后了,开源社区GitHub已经普及到这种程度了,我都不好意思推广它了

搞的我们学校做编程的很low一样

狭义一点的来讲,现在「开源世界」的代表就是GitHub

这里引用师兄@filod在12年5月给我的邮件里的一句

开源世界,不要局限自己的目光,第一步先用会git & github(当然,开源世界和linux是分不开的)

如何理解这句话:

开源世界的核心是Git,而不是Linux

就算在Windows上,只要学会使用Git,一样能很好的学习

所以对Linux有恐惧的同学不用担心

但是开源世界和Linux仍然有着千丝万缕的联系

进入开源世界从Git和Github开始

GitHub上有全世界上各种最顶尖的程序员,有各种顶尖的代码,有良好的社区氛围环境

若你忌惮E文,这里也有一大批中文项目,驻扎这里长期耳濡目染,E文渐渐也就不会是问题

找到你喜欢的大师,follow他,从他们的GitHub项目学起吧

最后罗列一些于Git和Github的资料:

我引用其中一段「在GitHub,如何跟牛人学习」作为本小节的结束

追随牛人,与他们一起修行

修行之道:关注大师的言行,跟随大师的举动,和大师一并修行,领会大师的意境,成为真正的大师。

正如这首禅诗所言,与其在墙内仰望牛人,不如直接在GitHub:

  • watch、fork牛人们
  • 对他们的项目提交pull request
  • 主动给牛人们的项目写wiki或提交测试用例,或者问题
  • 还可以帮他们翻译中文

Blog & Weibo & Twitter

除了代码,其他更直接的方式,阅读大师的博客,这里有他们重要的积累

关注他们的Weibo,发现更生活化的大师,发现其实大师也是普通人

当然有很多大师,我们还会关注他们的Twitter

当你习惯越过墙外的时候,一切都是那么美好

更流畅的Google,更短广告的Youtube,更多的X片资源

如何跟随大师

不卑不亢的心态

从我的经历来看

很多同学在技术入门期间喜欢使用「膜拜」、「求带」这种略微浮夸的字样

当初我也是这样的一个年少无脑的脑残粉

如果你表现的跟一个小傻逼一样,你所追随的大师都会很无措,这样你又如何学习他们经验,如何与他们交流

我的亲身经历:我怀着虔诚的心给师兄@filod写了一封技术邮件,希望得到解答。后来收到回复:「你妹!太客气了!」

所以我以实际经历证明:

当你像一个小傻逼一样向大师请教的时候,通常换来的只是大师客气的回复

若你能不卑不亢的向大师请教,通常得到的是很好的经验

因为第一种情况被请教者得不到好处,而第二种情况则是互相学习

所以如果有大师告诉你「互相学习」,请一定要当真,不是客套话,是真的互相学习

闻道有先后,那些大师也是普通人,不要过份自卑

寻找开源项目

首先我们得发现一些合适自己的项目,然后才能开始学吧

通过exploretrending是基本的途径

当然blog、weibo、twitter各种途径,我就不谈这些了

我主要谈一下,什么样的项目容易入门

学习代码,不要一开始就盯着那些很著名的开源项目

应该找一些容易上手,适合用来增长自信的项目,这样的项目通常是这样的:

  1. 小众,优美易用
  2. 专注于解决某一个问题,功能简单
  3. 使用方法简单,接口友好
  4. 项目规范,文档、示例、测试用例
  5. 代码简短,不要超过600行
  6. 开源者有在长期维护

加入开源项目

使用这个项目,发现它的优美与不足

阅读他的代码,遇到读不懂的代码怎么办?

在对应commit里评论那一行代码,提出你的疑问

发现BUG,或者使用有问题的时候怎么办?

New Issue反馈给作者

觉得代码写的不好了,或者可以增强了怎么办?

Fork一份,修改代码,然后Pull Request

怎样玩转GitHub?

  1. 至少有一个自己的项目,并且有他人Star
  2. 至少有一个Pull Request
  3. 至少有一个New Issue
  4. 试着连续7天有contribution,并且尽可能延续它

我觉得能做到这样,就能对外说到自己也是开源社区的参与者了

尽力成为大师

我心中的大师应该是谦逊、好学、好为人师、有责任心

我还很浅薄,不太敢谈论这个问题,我觉得可以这样做:

保持一颗积极进取的心

用心做一个开源项目,

尽力让项目规范,国际化

能够对这个项目负责,并且长期维护

我以Web前端项目为例,规范的开源项目通常有这些东西:

  1. 开源协议,MIT、BSD、GPL
  2. 代码风格配置文件 .editorConfig
  3. 最好是有双语版的文档,如果有添加繁体中文版就更好了
  4. 简单优雅的示例
  5. 测试用例
  6. 易阅读的源代码
  7. 压缩编译好的可供生产环境使用的包
  8. 支持 AMD 和 CMD 模块加载器
  9. 多途径发布,npm、bower、component
  10. 配置好的Gruntfile/Makefile

如何对项目维护?

  1. 在社区发布,接受反馈
  2. 制定 Milestones,增强项目

如何维护一个靠谱的开源项目,我也在学习探索当中,无法提供更好的经验,还请见谅

后记

如果IT界是江湖,「三叶草」也是其中的一个小小门派,「三叶草」成员修炼各种功夫,其中以安全技术最为擅长

希望此文能给小组同学在编程学习上提供更多一点的思路,并以此共勉

当然此文也不只限于「三叶草」成员,若你能告诉我你的看法或者意见,我会非常感激,并且都会认真回复

你可以通过博客留言、微博私信、知乎私信、邮件联系到我