Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

收敛自己的技能树 #77

Open
chunpu opened this issue Feb 11, 2015 · 2 comments
Open

收敛自己的技能树 #77

chunpu opened this issue Feb 11, 2015 · 2 comments
Labels

Comments

@chunpu
Copy link
Owner

chunpu commented Feb 11, 2015

几个月前, 我做了一个自己觉得非常满意的库, 叫 mini-jquery, 这个库只有1000行, 却有着几乎全部的常用 jQuery api, 比如 jQuery arraylike object, jQuery ajax, jQuery event 等

这个 mini-jquery 也用在线上, 从 IE6 到 最新的 QQ 手机浏览器, 还算稳定, 毕竟有几十个测试, 上百个 assert, 放在 travis 里持续集成

这一切看起来非常美好, 但事实上是, 这个项目我维护不下去了, 我甚至没有把这个项目贴到微博给别人看, 在新增一个函数的时候, 我感觉到了吃力

当初在写这个项目的时候, 想着这是一个非常小的项目, 只是实现一下最常用的 jquery api 而已, 我也不是第一次手写 jquery 了, 为了尽可能的节省空间, 我决定一口气在一个文件里把这些都实现了, 可就是这个想法, 直接导致了 mini-jquery 无法维护, 至少是难以维护

回想过去的两年, 我似乎一直在犯类似的错误, 说的直白一点, 我一直在制造 shit. 我曾经做过类似 express 的 node web 框架, 也做过游戏引擎, 做过小型 mvvm, 博客系统, 论坛, 控制台. 我还用 python, perl, erlang, golang 也写过这种那种的库, 各种各样的东西都玩遍了, 回想起来却什么都不剩, 因为没有拿得出手的, 我甚至不确定之前写的东西从网上下载下来还能不能运行

也许现在醒悟还不算晚, fo 我的人可能会发现, 最近我不断在开发非常小的, 小到无法再分割的库, 也就是那一排 min 开头的库

min-is, 一个判断变量类型的库, min-parse, 一个前端解析 xml, html, json 的库, min-util 基本的工具库, min-find 一个查找节点的库

这些库大的也就 200 多行, 小的只有几十行, 但每个库都经过充分的测试, 借助 saucelabs, 连 IE6 也都是 all pass

我真是太喜欢这些库了, 他们是那么的小, 测试又是那么灵活, 那么全面, 我在没事的时候都会拿手机自己欣赏一下, 我希望一年后自己回顾这些项目的时候, 不会觉得他们是 shit, 而是自己的孩子

熟悉 jquery 的朋友一定能看出来, 这些库是为了组成另一个 jquery 而做的, 没错, 我确实是在准备下一次的手写 jquery, 这一次也将是我最后一次写这些基本库, 基本函数

No More Repeated Work!

如果说有什么是一劳永逸的话, 那就是你的测试, 怎么证明你的代码是可以用的, 是可靠的, 拿出你的测试!

我对自己最近写的两个库非常满意, 一个叫 min-debug, 这个库只有100行, 却可以满足基本的 IE6+, 手机浏览器, 普通浏览器的 debug 日志显示, 这比我之前写的大部分项目都小太多了, 但它非常的实用, 我自己做网页只要涉及 IE8-, 或者手机网页, 必然会用这个库

另一个叫 poor 这个库只有 50 多行, 却实用到爆表, 最近我所有的库都是用上了 poor, 就是它负责完成了各个浏览器的单元测试, 仅仅是一条命令, 一个 pipe, 却让人信心百倍

我经常想象自己未来的生活, 每天花一小时浏览 github timeline, 有一到两个还算有名的项目自己维护, 定期做 release, 同时遇到自己想做的 idea 也可以很快的实现, 呆在一个安静的咖啡馆, 也许就用 jQuery, Phonegap, Nginx, 放在云服务上就可以自动的 work 起来

我时常思考为什么做自己在 github 上的项目比做公司的项目有动力的多, 其实仔细一想原因很简单, 自己写的项目有 github, 有 travis 的持续集成, 有 saucelabs 的多平台测试, 有 pull reuqest 这么优美的 diff, 有 commit, 提交日志图表, 一切都像整齐又光滑齿轮那样运作规律, 仅仅有条

而公司的项目呢, 我们还在用着 bugzilla, reviewboard, svn, confluence, jenkins. 每做哪怕很小的一点改动, 都要经过很长的流程, 提 review, 修改, 提交代码, 提测, 再修改, 再 review, 再测, 申请上线, 梯度上线, 跟测, 上线记录. 这种事情做的久了, 会让人变的很没有成就感, 再加上那些丑陋的企业服务, 实在是提不起开发的欲望

回到正题, 为什么我想收敛自己的技能树呢, 那就是我之前太杂了, 以前我还觉得是优点, 觉得自己啥都懂, 特牛逼, 可一年多过去了, 我在圈子里依然是默默无闻, 没有牛逼的项目, 制作了大量垃圾项目, 连我自己都不想维护. 从现在开始, 制作精品, 如果没能力做精品, 就做自己有能力维护的小项目

那会抛弃那些技能树呢?

首先是大量不常用的语言: python, perl, as3, golang 这些语言实在是太小众了, 别跟我说 python 用的人多, 在 github 语言榜上, 怕是 javascript 的五分之一都不到, 其他语言就更别说了, golang 我经常吹捧, 但 golang 是可以被替代的, 要稳定的服务我还是想用 nginx. 小服务我情愿用 nodejs 写

然后是大量不必要的工具, 比如数据库, mysql, redis, mongodb, 各种数据库都非常好, 但毕竟不是 dba, 现在数据库都是使用云服务的, 即便是公司内部也有公司自己的数据库服务, 更何况, 需要配置调优的工具不是好工具. 同样的还有 jekyll, angular, react, koa, 这些都是很牛逼的库, 但也非常小众, 也许你会说看到不少使用 Angular 的网页了, 可是这和几乎每个网站都用的 jQuery 份额比呢, Angular 实在太偏门了, react 也是. koa 感觉连自己的 last generation 上一代 express 都没赶上

那最终会剩下哪些技能呢?

首先是 jQuery, 离开 jQuery, 我实在不敢说自己会前端 js

其次是 nginx, 从上一年我到新部门最大的收获就是知道了 openresty 这个伟大的项目, openresty 是 nginx 和 lua 的完美结合, 从我的 github 上也能看到一些基于 openresty 的 lua 库了, 如果现在还要我重新做一个10亿 PV 的服务, 我一定还会选择 openresty

最后是 shell, 你可能会失望, 这么弱, 大家都会啊, 确实如此, 但 shell 实在是太棒了, 回想起来, 帮我节省时间最多的就是 shell, 光是掌握 grep, awk, sed 就让我在日志查询中游走自如. 当我彻底熟练 js 的时候, 就准备重拾从零单排 C 语言, 把 core-util 的东西一个一个实现一遍, 然后开始手写 nginx

@yolio2003
Copy link

通神 大牛啊,赶紧去看看你的 poor
不太懂 travis saucelabs 有空写写教程不?

@yutingzhao1991
Copy link

说得好,学了太多东西之后是时候该收敛下弄写能够拿得出手的东西。不一定要大,但是一定要做到 100%!

@chunpu chunpu added the code label Feb 17, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants