Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2012-05-13) JavaScript/NodeJs半月总结

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

刚看了一下群记录,从4月27日到今天,我转向Js已经有半个月了,特在此做一个小结。

有这么几点感触特别深:

  1. 就算像JavaScript这样一门有很多瑕疵的语言,只要有大批牛人进驻,照样可以光彩照人。虽然写Javascript代码本身让人感觉不太好,但是那些受好评的库用起来却舒服:API简洁易用、文档示例清晰易懂,值得称赞。
  2. 轻量级,让人很放松。在Js中时刻可以体会到轻量级。语言本身灵活简单、编辑器要求低、程序启动迅速、不需要编译部署,让人感觉可以随时随手写代码,无比轻松。与Java相比,差别实在太大了。
  3. 异步编程模型是一大难点,也是基于nodejs的程序的最常用风格。这让从Java转过来的我,十分不适应。这种由同步向异步的转变,难度不亚于从命令式向函数式风格的转变。之前的很多经验都用不了,以前写起来很清楚明了的代码,现在经常是一层套一层,让人无比郁闷。这是一个大门槛,看能不能跨过去。
  4. Js上有很多有创意的项目正在一一涌现。而且,Js现在已经慢慢成为一种新的开发平台,很多新语言都以它为目标平台。

总而言之,我走进了一个新的世界,以异步编程风格为主导、轻量级开发方式为特点的新世界。这是我没有料到的。我开始是因为angularjs框架、和json的原生支持这两个原因尝试JS的,但现在看来,要想学好Javascript,还有相当多的东西需要学习。

这段时间发现了一些比较喜欢的项目:

  1. 浏览器端mvc框架:angularjs
  2. 服务器端基础平台:nodejs
  3. 服务器端web框架:express
  4. 基于mongodb的orm:mongoose
  5. 单元测试框架:mocha
  6. 小巧好用的减少callback嵌套的模块:async

还有今天开始比较感兴趣的基于纤程、在异步模型上实现同步模型的一些项目,因为还没细看,不列出。

我认为js的开发应该是同步异步结合,因为两者都有比较明显的适用情况。有时候你会觉得异步用起来很方便很自然,有时候又觉得同步很自然,所以不要强迫自己去在任何情况下都去拥抱异步。如果能通过一些项目或其它手段支持同步,将代码写得更简洁易读,岂不是更好?

这段时间花在学习写单元测试的时间比较多(当然其中大部分时间是因为异步的原因,测试代码不好写,总算找个好点的解决方案),但是觉得很值得。自从在scala中使用了scalatest以后,我就明白了:人们是否喜欢写单元测试,在很大程度上是由“写测试的难度”和“写测试的舒适度”决定的。像我,在写java项目时,也不喜欢写测试,因为感觉很痛苦。但在scala项目中,不写测试自己都觉得缺少了乐趣。像Javascript这样的动态语言,如果没有单元测试作为保证,写出来的代码基本上没人敢用。同时,由于javascript的动态语言特性,只要有一个设计良好的测试框架,写测试也将会是一件容易且开心的事情。这些天终于写出了对mongoose的一些单元测试,总体感觉还不错,除了异步模型这块,代码嵌套得实在让人郁闷。

如果我当年在学ruby on rails的时候,就能体会到这一点,我想我就不会半途而废了。当时觉得自己写出来的代码特别不踏实,总有种悬在半空的感觉,就是因为没有写测试。最后还是因为受不了这种感受,而转向了scala。

另一件让我觉得欣喜的事情,就是Emacs。终于从笨重的eclipse中解脱出来,时刻能感受到emacs的轻盈与极好的扩展性。需要什么功能,只需要到网上一搜,把几行代码拷贝到.emacs文件中,一重启就有了。虽然快捷键很多,我还不怎么熟练,但我想它将会是一直陪伴我的好朋友,早在大学就应该学它了。

我发现自己渐渐喜欢上了动态语言,这种轻松的感觉是以前在写java/scala代码时,从未有过的。我想我会继续学习Javascript,以后有机会再重拾ruby on rails。

comments powered by Disqus