ErlyBird-与dcaoyuan聊天
10月20日,有幸能和出差来北京的 dcaoyuan 见了一面,于是有了一次愉快而且让人获益良多的谈话,值得记录。
关于 dcaoyuan 先生
(是的,这里的 id dcaoyuan 就是他,他同时也是 netbeans 平台下的 erlang开发环境 — erlybird 的作者本人)
dcaoyuan 先生的年纪可能比我们这帮程序员都要大上好几岁,这在国内广泛持有“程序员吃青春饭”论调的中国程序员当中,是相当罕见的。实际上 dcaoyuan 先生在第一次互联网浪潮中就已经颇有建树,他于 2000 年左右出国,现居加拿大,平常“做做咨询”、“帮朋友管理一些项目”,或者干脆就“在家歇个一年半年的”,衣食无忧,随兴而为的过着传说中“功成名就归隐田园”的程序员版理想生活。他称自己是“真正对编程感兴趣的人”——确实如此。编程实非易事,若非兴趣所在,必将其视若苦旅,一有机会恐怕就会赶紧离开这个行业了,不会干到现在。而 dcaoyuan 先生时至今日都仍然活跃在编程的第一线,尤喜亲自操刀编码,闲暇之余,随手贡献了多个开源项目(股票分析软件AIOTrade, ErlangIDE开发环境Erlybird),确实是让人非常佩服。
下面是根据和 dcaoyuan 先生的交流整理出来的聊天记录。话题比较杂,分四个方面归纳。
语言
使用 Erlang 有多久?
至今已经有一年多时间,之前熟悉的编程语言是 Java, Ruby on Rails 等。
开发环境?
Mac Book Pro + ErlyBird/Emacs
语言特性?有何看法?
Record 语法难看,但有时又很方便。感觉比较复杂。
欠缺 Language/Encoding 支持,自己做了很多工作。
欠缺语言级的 Hash 支持,很多时候用 Prop List 来代替。
项目
项目大致是怎样的?
一个 LBS/Mobile 相关的 Web 2.0 项目,目前已经进入 alpha 。
系统架构?
从 ruby on rails 架构转过来,目前 web 层仍然是 ruby on rails 的,通过 web service 调用 erlang 实现的底层服务。
这个架构中 Erlang 主要解决什么问题?
应用本身有类似网关的特点,一个用户的 request 在后端可能需要服务器再发出 n 个 request 才能完成业务,在后端服务上利用 erlang 的高并发特性,优化整体性能。日后不排除也用 erlang 的方式来实现 web 层。
人员?
无 Erlang 经验的程序员(有其他语言编程经验),经培训(一个月左右),使用 erlang/otp 来独立完成系统构建。(dcaoyuan认为:在所有 FP 当中 erlang 的学习曲线算很平滑的了,在有经验的架构师指导之下,相对新手的程序员也能独立完成相应的模块)
Erlybird?
Why Erlybird?
因为项目组中的其他程序员还是难以适应 Emacs 之类的开发环境,而基于 Eclipse 平台的 ErlIDE 又有不稳定的问题,缺乏好用的开发工具。因而,用了一个多月的时间基于 netbeans 平台做了一个 ErlyBird ,目前渐渐完善,已经相当稳定。
What’s diffrent?
1. 基于 netbeans/swing (dcaoyuan认为:在跨平台下 Swing 有更加一致的外观,更易于定制的API,以及更小的 RunTime 系统,在编程良好的情况下,性能并不比 Eclipse/SWT 方案差(同样基于 netbeans 平台的AIOTrade 以 4M 多的 size 实现了实时的图形更新特性),而随着 JDK 的不断改进,性能还会进一步优化,因而是非常值得关注的 GUI 开发平台)
2. AST Inside。Erlybird 借鉴 netbeans ruby module 的做法,内置了 AST 分析。ErlIDE 对待相同问题的方式是用 Jinterface 在 Erlang Runtime 中通过 Meta 编程获取信息,检查方式为 Compile 查错。因为 Jinterface 层尚有 bug 没有解决好,常常会出现与 Erlang Node 连接不上的情况,因而导致崩溃。Erlybird 采用 netbeans 的语法分析机制,在 java 环境中实现了 erlang 代码的语法 AST 生成,因而可以进行 OnTheFly 的语法检查,无需 Compile 。
3. Index 问题?Erlybird 在第一次启动的时候需要对 Erlang/OTP 的源代码进行一遍扫描,建立 index ,这个过程很缓慢,通常需要 20分钟以上。这是因为,netbeans 内部使用 lucene 引擎对代码建立全文索引。这是 netbeans 平台的标准做法,但,这一部分的性能仍然有待提高。从柔韧性角度,对 otp 目录建立索引的方式更有灵活性,不会绑定 erlang 的版本。
What’s Next?
文档支持和Debug支持,工作量非常大,不会很快完成。
程序人生
有什么要对其他的程序员朋友说的么?
毛主席说过“凡事就怕认真二字”,对于程序员,亦是如此(国人要避免“不求甚解”的毛病)。
多与人交流(不耻下问,不怕犯错,实际上,只要是技术交流而不是人身攻击,就是论事,没有所谓的架子)。
多参与开源项目(深入研究其他人的项目,如非必要,别重新发明轮子)。


Comments
感谢jack.zhao分享。
错过与大牛见面,憾甚。
1. 在所有 FP 当中 erlang 的学习曲线算很平滑的了,在有经验的架构师指导之下,相对新手的程序员也能独立完成相应的模块。— 这是我看好Erlang的原因之一(参见“我为什么选择了Erlang”)。
2. 多参与开源项目(深入研究其他人的项目,如非必要,别重新发明轮子)。
Mac Book Pro , 口水ing
嗯,正在认真考虑 Mac Book Pro M895 16k,相比之下比同等硬件的 HP dv2624 贵了 5k 多,还是很需要思量一番的。
erlang学习曲线不是很高 看懂别人代码应该很容易,就是自己写的时候多参考 stdlib 和 kernel里面的 你用得到的招 人家早用了。
俺也赶时髦搞了个Mac G4 但是安装的是linux 不好意思。
专注 高性能 容错 分布服务器的实现(erlang)
兼营nginx lighty haproxy 高性能服务器模块编写
http://mryufeng.javaeye.com
认真而求甚解,
多与人交流,
多参与开源项目。
恩,程序员是坚韧而有创造力的一群人,好好努力中。
在Linux OS下,还是用Emacs和Make来开发Erlang系统为好,用熟了就好了,感觉和用图形界面的IDE是完全不一样的。
Write a Comment