给你一年的时间,你会怎样去提升你的水平???react
正值这可贵的sick leave(万恶的空气),码文一篇来纪念一个过去的366天里。尽管想的是在今年里写一个可持续的开源框架,可是到底这依赖于一个好的idea。在个人Github 孵化器 页面上彷佛也没有一个特别让我满意的想法,虽然上面有各类不样有意思的ideas。多数都是在过去的一年是完成的,然而有一些也是尚未作到的。git
尽管一直在Github上连击看上去彷佛是没有多大必要的,可是人总得有点追求。若是正是漫无目的,却又想着提升技术的同时,为何不去试试?毕竟技术很是好、不须要太多练习的人只是少数,彷佛这样的人是不存在的。大多数的人都是通过练习以后,才会达到别人口中的“技术好”。程序员
这让我想起了充斥着各类气味的知乎上的一些问题,在一些智商被完虐的话题里,无一不是由于那些人学得比别人早——哪来的天才?所谓的天才,应该是将来的智能生命通常,一出生什么都知道。若是并不是如此,那只是说明他练习到位了。github
练习不到位便意味着,即便你练习的时候是一万小时的两倍,那也是无济于事的。若是你学得比别人晚,在很长的一段时间里(可能直到进棺材)输给别人是必然的——落后就要挨打。就好像我等毕业于一所二本垫底的学校里,若是在过去我一直保持着和别人(各类重点)同样的学习速度,那么我只能一直是Loser。面试
须要注意的是,对你来讲考上二本很难,并非由于你比别人笨。教育资源分配不均的问题,在某种程度上致使了新的阶级制度的出现。如个人首页说的那样: THE ONLY FAIR IS NOT FAIR——惟一公平的是它是不公平的。咱们能够作的还有不少——CREATE & SHARE。真正的不幸是,由于养分不良致使的教育问题。算法
因而在想明白了不少事的时候起,便有了Re-Practise这样的计划,而365天只是中间的一个产物。编程
虽然说算法很重要,可是编码才是基础能力。算法与编程在某种程度上是不一样的领域,算法编程是在编程上面的一级。算法写得再好,若是别人很难直接拿来复用,在别人眼里就是shit。想出能work的代码一件简单的事,学会对其重构,使之变得更易读就是一件有意义的事。markdown
因而,在某一时刻在Github上建立了一个组织,叫Artisan Stack。当时想的是在Github寻找一些JavaScript项目,对其代码进行重构。可是究竟是影响力不够哈,参与的人数比较少。架构
若是你懂得如何写出高可读的代码,那么我想你是不须要这个的,可是这意味着你花了更多的时候在思考上了。当谈论重构的时候,让我想起了TDD(测试驱动开发)。即便不是TDD,那么若是你写着测试,那也是能够重构的。(以前写过一些利用Intellij IDEA重构的文章:提炼函数、以查询取代临时变量、重构与Intellij Idea初探、内联函数)intellij-idea
在各类各样的文章里,咱们看到过一些相关的内容,最好的参考莫过于《重构》一书。最基础不过的原则即是函数名,取名字很难,取别人能读懂的名字更难。其余的便有诸如长函数、过大的类、重复代码等等。在我有限的面试别人的经历里,这些问题都是最多见的。
而若是没有测试,其余都是扯淡。写好测试很难,写个测试算是一件容易的事。只是有些容易咱们会为了测试而测试。
在我写EchoesWorks和Lan的过程当中,我尽可能去保证足够高的测试覆盖率。
从测试开始的TDD,会保证方法是可测的。从功能到测试则能够提供工做次效率,可是只会让测试成为测试,而不是代码的一部分。
测试是代码的最后一千米。因此,尽量的为你的Github上的项目添加测试。
初到TW时,Pair时候总会有人教我如何开始编码,这应该也是一项基础的能力。结合平常,从新演绎一下这个过程:
有一个可衡量、可实现、过程可测的目标
Tasking (即对要实现的目标过程进行分解)
一步步实现 (如TDD)
实现目标
放到当前的场景就是:
我想在Github上连击365天。对应于每个时候段的目标都应该是能够衡量、测试的——即天天都会有Contributions。
分解就是一个痛苦的过程。理想状况下,咱们应该会有天天提交,可是这取决于你的repo的数量,若是没有新的idea出现,那么这个就变成为了Contributions而Commit。
一步步实现
在咱们实际工做中也是如此,接到一个任务,而后分解,一步步完成。不过实现会稍微复杂一些,由于事务总会有抢占和优先级的。
在上上一篇博客中《After 500: 写了第500篇博客,而后呢?》也深入地讨论了下这个问题,技术向来都是后发者优点。对于技术人员来讲,也是如此,后发者占据很大的优点。
若是咱们只是单纯地把咱们的关注点仅仅放置于技术上,那么咱们就不具备任何的优点。而依赖于咱们的编程经验,咱们能够在特定的时候创造一些框架。而架构的设计自己就是一件有意思的事,大抵是由于程序员都喜欢创造。(ps:以前曾经写过这样一篇文章,《对不起,我并不热爱编程,我只喜欢创造》)
创造是一种知识的再掌握过程。
回顾一下写echoesworks的过程,一开始我须要的是一个网页版的PPT,固然这类的东西已经有不少了,如impress.js、bespoke.js等等。分析一下所须要的功能:markdown解析器、键盘事件处理、Ajax、进度条显示、图片处理、Slide。咱们能够在Github上找到各式各样的模块,咱们所要作的就是将之结合在同样。在那以前,我试着用相似的原理写(组合)了Lettuce。
组合相比于创造过程是一个更有挑战性的过程,咱们须要在这过程去设计胶水来粘合这些代码,并在最终可让他工做。这比如是咱们在平时接触到的任务划分,每一个人负责相应的模块,最后整合。
想似的我在写lan的时候,也是相似的,可是不一样的是我已经设计了一个清晰的架构图。
而在咱们实现的编码过程也是如此,使用不一样的框架,而且让他们能工做。如早期玩的moqi.mobi,基于Backbone、RequireJS、Underscore、Mustache、Pure CSS。在随后的时间里,用React替换了View层,就有了backbone-react的练习。
技术同人同样,须要不断地往高一级前进。咱们只须要不断地Re-Practise。
说业务好像不太适合程序员的口味,那就领域吧。不一样行业的人,如百度、阿里、腾讯,他们的领域核心是不同的。
而领域自己也是类似的,这能够解释为何互联网公司都喜欢互相挖人,而通常都不会去华为、中兴等非互联网领域挖人。出了这个领域,你可能连个毕业生都不如。领域、业务同技术同样是不断强化知识的一个过程。Ritchie先实现了BCPL语言,然后设计了C语言,而BCPL语言一开始是基于CPL语言。
领域自己也在不断进化。
这也是下一个值得提升的地方。
是时候写这个小结了。从不会写代码,到写代码是从0到1的过程,可是要从1到60都不是一件容易的事。不管是刷Github也好(不要是自动提交),或者是换工做也好,咱们都在不断地练习。
而练习是要分红不一样的几个步骤,不只仅局限于技术:
编码
架构
设计
。。。
原文: https://www.phodal.com/blog/github-365-days-review/
欢迎微博关注: @Phodal