Blog | Phodal - A Growth Engineerhttp://www.phodal.com/blog/2015-08-28T06:05:54.296133+00:00Blog为什么你应该深入Github2015-08-19T13:43:05+00:002015-08-28T06:05:54.296133+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/why-you-should-work-hard-with-github/[为什么你应该试试Github?](http://www.phodal.com/blog/why-you-should-work-hard-with-github/)
在我大四找工作的时候,试图去寻找一份硬件、物联网相关的工作(ps: 专业是电子信息工程)。尽管简历上写得满满的各种经历、经验,然而并没有卵用。跑了几场校园招聘会后,十份简历(ps: 事先已经有心里准备)一个也没有投出去——因为学校直接被拒。我对霸面什么的一点兴趣都没有,千里马需要伯乐。后来,我加入了Martin Flower所在的公司,当然这是后话了。
这是一个残酷的世界,在学生时代,如果你长得不帅不高的话,那么多数的附加技能都是白搭(ps: 通常富的是看不到这篇文章的)。在工作时期,如果你上家没有名气,那么将会影响你下一份工作的待遇。而,很多东西却会改变这些,Github就是其中一个。
##我与Github的故事
注册Github的时候大概是大二的时候,我熟悉的时候已经是大四了,现在已经毕业一年了。在过去的近两年里,我试着以几个维度在Github上创建项目:
1. 快速上手框架来实战,即demo
2. 重构别人的代码
3. 创建自己可用的框架
4. 快速构建大型应用
5. 构建通用的框架
###Github与收获
先说说**与技能无关的收获**吧,毕业设计做的是一个《[最小物联网系统](https://github.com/phodal/iot)》,考虑到我们专业老师没有这方面知识,答辩时会带来问题,尽量往这方面靠拢。当我毕业后,这个项目已经有过百个star了,这样易上手的东西还是比较受欢迎的(ps: 不过这种硬件相关的项目通常受限于Github上硬件开发工程师比较少的困扰)。
毕业后一个月收到PACKT出版社的邮件(ps: 他们是在github上找到我的),内容是关于Review一本[物联网](iot)书籍,即在《[从Review到翻译IT书籍](http://www.phodal.com/blog/review-it-books-with-translate-book/)》中提到的《Learning Internet of Things》。作为一个四级没过的"物联网专家",去审阅一本英文的物联网书籍。。。当然,后来是审阅完了,书上有我的英文简介。
一个月前,收到MANNING出版社的邮件(ps: 也是在github上),关于Review一本[物联网](iot)书籍的目录,并提出建议。
也因此带来了其他更多的东西,当然不是这里的主题。在这里,我们就不讨论各种骚扰邮件,或者中文合作。从没有想象过,我也可以在英语世界有一片小天地。
这些告诉我们,Github上找一个你擅长的主题,那么会有很多人找上你的。
###Github与成长
过去写过一篇《[如何通过github提升自己](http://www.phodal.com/blog/use-github-grow-self/)》的文章,现在只想说三点:
1. 测试
2. 更多的测试
3. 更多的、更多的、更多的测试
没有测试的项目是很扯淡的,除非你的项目只有一个函数,然后那个函数返回``Hello,World``。
如果你的项目代码有上千行,如果你能保证测试覆盖率可以达到95%以的话,那么我想你的项目不会有太复杂的函数。假使有这样的函数,那么他也是被测试覆盖住的。
如果你在用心做这个项目,那么你看到代码写得不好也会试着改进,即重构。当有了一些,你的技能会不断提升。你开始会试着接触更多的东西,如stub,如mock,如fakeserver。
有一天,你会发现你离不开测试。
然后就会相信: **那些没有写测试的项目都是在耍流氓**
##为什么你应该深入Github
上面我们说的都是我们可以收获到的东西,我们开始尝试就意味着我们知道它可能给我们带来好处。上面已经提到很多可以提升自己的例子了,这里再说说其他的。
###方便工作
我们可以从中获取到不同的知识、内容、信息。每个人都可以从别人的代码中学习,当我们需要构建一个库的时候我们可以在上面寻找不同的库和代码来实现我们的功能。如当我在实现一个库的时候,我会在Github上到相应的组件:
- Promise 支持
- Class类(ps:没有一个好的类使用的方式)
- Template 一个简单的模板引擎
- Router 用来控制页面的路由
- Ajax 基本的Ajax Get/Post请求
###获得一份工作
越来越多的人因为Github获得工作,因为他们的做的东西正好符合一些公司的要求。那么,这些公司在寻找代码的时候,就会试着邀请他们。
因而,在Github寻找合适的候选人,已经是一种趋势。
###扩大人脉
如果我们想创造出更好、强大地框架时,那么认识更多的人可能会带来更多的帮助。有时候会同上面那一点一样的效果。
###其他
实际上,这也是一个和影响力有关的话题。只有更多的提高自己的曝光度,才有机会去接触更多的人。
##Github项目分析
对于Github来说,你并不需要创造一个特别好的框架,你只需要一个好的主题,或者你一个好的Demo。目测,当前在国内最受欢迎的就是各种Android、iOS的库。
之前曾经分析过一些Github的用户行为,现在我们先来说说Github上的Star吧。(截止: 2015年3月9日23时。)
用户 | 项目名 | Language | Star | Url
-----|---------- |----------|------|----
twbs | Bootstrap | CSS | 78490 | [https://github.com/twbs/bootstrap](https://github.com/twbs/bootstrap)
vhf |free-programming books | - | 37240 | [https://github.com/vhf/free-programming-books](https://github.com/vhf/free-programming-books)
angular | angular.js | JavaScript | 36,061 | [https://github.com/angular/angular.js](https://github.com/angular/angular.js)
mbostock | d3 | JavaScript | 35,257 | [https://github.com/mbostock/d3](https://github.com/mbostock/d3)
joyent | node | JavaScript | 35,077 | [https://github.com/joyent/node](https://github.com/joyent/node)
只要有下面这些类型
- 库和框架: 和``jQuery``
- 系统: 如``Linux``、``hhvm``、``docker``
- 配置集: 如``dotfiles``
- 辅助工具: 如``oh-my-zsh``
- 工具: 如``Homewbrew``和``Bower``
- 资料收集: 如``free programming books``,``You-Dont-Know-JS``,``Font-Awesome``
- 其他:简历如``Resume``
一个好的主题可容易在短期受欢迎,一个库主要依赖于长期的增长,除非有很高的曝光率。
##其他
我的Github: [https://github.com/phodal](https://github.com/phodal) (ps: 已经连击316天,欢迎共勉。)
[iot]: http://www.phodal.com/iot/