Total Pageviews

Monday 20 June 2016

谈CirHub的开发过程及如何学习一门技术

CirHub是我从大学就开始开发的一个产品, 工作后下班业余时间一直在不断地完善。CirHub即Circle Hub,圈子、社区集合。我本人兴趣广泛,喜欢音乐,电影,动漫,文学,技术等,这是驱动我开发CirHub的首要原因,另一个原因则是为了学习技术。
  在开发这个产品之前,我的主要经验是JavaWeb及Linux C编程。在开发过程中,因为技术的成长,眼界的扩展,项目架构经历了多次重大变更,期间花费了很多时间来学习,调整。
  最初我选择了Java+Spring,不过没多久就放弃了,主要原因是对Java已经不太感兴趣,而且当时在学习TCP/IP,Linux C编程,已经有近一年多没有使用Java,语法都已经生疏了。之后我选择了Python+Tornado,没多久也放弃了,一个原因是动态语言,不好调 试,另一个原因则是找到了一门新的语言Go。最初看到Go的特性时,确实令我感到新奇,再加上语法简单,很快就上手了,之后的版本都是使用Go。
  在使用Go的过程中遇到了很多坑,主要是Web框架, ORM,模板,Web框架和ORM都没有找到合适的,最后自己造了两个轮子,边使用边完善。根据前后端分离的原则,模板最后使用Nodejs作为中间渲染 层解决了,同时架构也由传统的Web应用转变到前后端分离:Go提供REST API,Nodejs负责页面渲染。
  整个开发过程中,我了解了许多技 术:Tornado,Go,Nodejs,Express,REST,CORS,EJS,Nunjucks,Gulp,Redis,CSS/SCSS,Angular,Nginx......, 有些只是了解,有些比较熟练。也造了许多轮子:工具库,REST API框架, ORM,Ratelimit,配置解析,日志记录,API文档输出,JS模块化,JS异步流程控制,Nodejs/Ajax通用http请求库,科学上网 工具......。Just for fun!
  
  这是我从自己的学习过程中体会到的一些经验:
  1. 语言只是工具,各有优缺点,合适的场景选用合适的语言,多学几门不同类型的语言很有必要
  2. 学习一门技术最好的方式就是参与到实际项目开发,可以是开源项目或自己的独立作品
  3. 造轮子对于深入理解技术原理很有帮助,在对比,学习,改进的过程中技术会逐步提高
  4. 1万小时的锤炼是任何人从平凡变成超凡的必要条件
  虽然被别人称为大神,不过只有自己才知道自己仍然是一只菜鸟,在已涉及的领域谈不上精通,未涉及的领域一无所知。学习的过程没有尽头,耐住寂寞才能更好的前行。天行健,君子以自强不息.

from http://cirhub.com/article/28e2f70e82401