前言
我经常间断性的在想「三叶草」在编程技术上还能有哪些发展
作为一个以安全技术立足的小组,小组已有的较成熟技术方向有:「渗透」、「逆向」、「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写了一封技术邮件,希望得到解答。后来收到回复:「你妹!太客气了!」
所以我以实际经历证明:
当你像一个小傻逼一样向大师请教的时候,通常换来的只是大师客气的回复
若你能不卑不亢的向大师请教,通常得到的是很好的经验
因为第一种情况被请教者得不到好处,而第二种情况则是互相学习
所以如果有大师告诉你「互相学习」,请一定要当真,不是客套话,是真的互相学习
闻道有先后,那些大师也是普通人,不要过份自卑
寻找开源项目
首先我们得发现一些合适自己的项目,然后才能开始学吧
当然blog、weibo、twitter各种途径,我就不谈这些了
我主要谈一下,什么样的项目容易入门
学习代码,不要一开始就盯着那些很著名的开源项目
应该找一些容易上手,适合用来增长自信的项目,这样的项目通常是这样的:
- 小众,优美易用
- 专注于解决某一个问题,功能简单
- 使用方法简单,接口友好
- 项目规范,文档、示例、测试用例
- 代码简短,不要超过600行
- 开源者有在长期维护
加入开源项目
使用这个项目,发现它的优美与不足
阅读他的代码,遇到读不懂的代码怎么办?
在对应commit里评论那一行代码,提出你的疑问
发现BUG,或者使用有问题的时候怎么办?
New Issue反馈给作者
觉得代码写的不好了,或者可以增强了怎么办?
Fork一份,修改代码,然后Pull Request
怎样玩转GitHub?
- 至少有一个自己的项目,并且有他人Star
- 至少有一个Pull Request
- 至少有一个New Issue
- 试着连续7天有contribution,并且尽可能延续它
我觉得能做到这样,就能对外说到自己也是开源社区的参与者了
尽力成为大师
我心中的大师应该是谦逊、好学、好为人师、有责任心
我还很浅薄,不太敢谈论这个问题,我觉得可以这样做:
保持一颗积极进取的心
用心做一个开源项目,
尽力让项目规范,国际化
能够对这个项目负责,并且长期维护
我以Web前端项目为例,规范的开源项目通常有这些东西:
- 开源协议,MIT、BSD、GPL
- 代码风格配置文件 .editorConfig
- 最好是有双语版的文档,如果有添加繁体中文版就更好了
- 简单优雅的示例
- 测试用例
- 易阅读的源代码
- 压缩编译好的可供生产环境使用的包
- 支持 AMD 和 CMD 模块加载器
- 多途径发布,npm、bower、component
- 配置好的Gruntfile/Makefile
如何对项目维护?
- 在社区发布,接受反馈
- 制定 Milestones,增强项目
如何维护一个靠谱的开源项目,我也在学习探索当中,无法提供更好的经验,还请见谅
后记
如果IT界是江湖,「三叶草」也是其中的一个小小门派,「三叶草」成员修炼各种功夫,其中以安全技术最为擅长
希望此文能给小组同学在编程学习上提供更多一点的思路,并以此共勉
当然此文也不只限于「三叶草」成员,若你能告诉我你的看法或者意见,我会非常感激,并且都会认真回复
你可以通过博客留言、微博私信、知乎私信、邮件联系到我