与Nenad大神面对面
@2014-01-13 这次会面是蔡学镛介绍,我盟堃神组织的。
- 全名 Nenad Rakocevic
- Red语言作者 http://www.red-lang.org/
- linkedin:http://www.linkedin.com/in/dockimbel
- github:https://github.com/dockimbel
首先说说这哥的一些个人情况。他是法国人,但是塞尔维亚裔(我理解的意思就是他爸妈是塞尔维亚人,但是在法国把他生下来了)。可是他在github写的是居住在黑山共和国(Montenegro)。我查了一下,原来塞尔维亚和黑山原来是一体的,简称塞黑,但是之后解体了。交流最后我也了解到他现在和他父母居住在一起,所以我猜想准确得信息是,他父母都是塞黑人,解体之后居住在黑山共和国。
然后说说这哥的年龄。蔡学镛在交流之前先让我们猜猜他的年龄,并且给我们一个提示他已经编程27年了。看看这哥们的样子,你觉得他会是多大呢?(42岁)
之后他介绍了一下Red的发展情况以及他的规划。说实话整个规划是非常富有野心的,他希望Red能够通吃从最底层Hardware编程到DSL编程甚至Meta DSL编程的所有方面,同时在语言上具有很强的表达性。从他现在给我们演示的demo来看,我觉得技术上已经完全可以做到了这一点。
要让语言能够被所有的人接受并且广泛使用起来,商业化是非常重要的一步。所以在交流的时候我也特意问了他多次几个技术是否都已经商业化了,或者是是否有其他商业公司在使用。他现在知道有一些公司在用Red做Windows上面的驱动开发了,甚至他还提到有个美国公司在Raspberry Pi上面配置survelliance camera然后使用Red编写驱动来做emotion detection.
这些商业化仅仅是其他公司里面几个比较重要的人选择了这个技术,并不是真正意义上的商业化,所以我也问他是否考虑过专门成立一个公司来商业化这个语言,以及如何来做这件事情。因为我之前也考虑过这件事情,这些语言的作者如何盈利,如何更好地做推广。他的想法是使用Red开发一些比较killer级别的应用或者是框架,然后推广这些killer app/framework给公司使用,通过support来盈利,然后使用这些资金以及影响力反过来用来推广和发展Red语言。这点上我觉得和Scala是非常类似的,就像typesafe一样。这也是他来中国的目的,欧洲和美国的市场竞争太激烈同时经济衰退,而亚洲发展比较迅速同时IT发展水平还不是特别高,所以以亚洲作为切入点会是比较合适的。
最后一个问题我是非常想了解的,就是作为一个open sourcer,他是怎么谋生的。从他的linkedin上来看,在做Red之前他在Pairs生活,赚的钱应该也比较多。离职之后他专门从事Red的开发,搞了一段时间之后发现钱不够用了,所以他开始考虑接受捐款,但是实际上上捐款非常少,所以就开始做一些咨询师的活,说白了就是做part-time job. 同时为了缩减开支,搬到了黑山那边生活,据他说那边的生活费用是paris的1/5. 并且期间他的演讲住宿旅行费用都是承办方包了(不过我猜想现在应该也是)。之后因为他忙于做part-time job, 所以很长时间没有开发red。之后有人问他怎么回事,了解情况之后决定每个月支付他10k欧元,让他专门从事Red的开发。之后他问我中国开源开发者是怎么样谋生的,大家只能呵呵了。
update @ 201509
最近看了一篇关于他的访谈 Interview with Nenad Rakocevic about Red, a Rebol inspired programming language. 里面有许多关于Red/Rebol的看法, 因为对这门语言不太熟悉, 所以也就不说啥了. 对文章最后有一些语言之外的看法有些兴趣
What are the most important lessons learned from the development of Red?
- Open-source is a superior way to build quality software (just confirmed that fact with Red project).
- Working “in the open” is not always a good thing, sometimes you need to isolate yourself from the outside “noise” to execute complex tasks (mostly design tasks). Being able to do so is increasingly difficult as the project growths up. 需要察觉到哪些是社区噪音, 并且懂得远离它们.
- Having to deal with a growing community of users consumes a lot of time. Finding people to deal with the community for you is critical. 管理社区是一件非常耗时耗神的事情
- Designing good syntactic rules is way more difficult than designing good semantics. That’s a part overlooked by many language designers, which end up with great semantics but terrible syntaxes. 设计好的语法远比设计好的语义要难.
- Writing a native code compiler for a statically typed language is really not difficult, most programmers with a minimal CS background could do it, they’re just not aware they can.
- Premature optimization can (often) bite you in the back. Knowing when you’re optimizing prematurely is a bit of a black art. 了解什么时候是过早优化是一门黑魔法
- Every big software project should be started by a team of at least 2 highly tuned, equally skilled developers. Working alone on big projects is insane, and not a guarantee of best results. 每个大型项目初始团队必须要两人以上, 并且都要非常有经验. 一个人是搞不定的.
- If you work on an open-source project that is attractive enough and gather enough followers, you can live from user’s donations (I did so for 2 years, covering all my basic life expenses). I never thought that would be possible when I started, nor did I counted on it. I guess I’m just lucky that Red has an amazing community.
What reading material do you recommend for implementing your first programming language?
You can have a good overview of all the required parts in a book like this Modern Programming Languages: A Practical Introduction. If you want to go in-depth and dive into more abstract concerns, the “Dragon book” is still the reference.
But the most useful way is to study several small languages implementation, that will give you the best insights about how to achieve it yourself. For example, Red 0.1.0 release is just a 24KB zip archive, but features already a working compiler/linker for Red/System with many features already (including FFI). Get it from here: https://github.com/red/red/releases/tag/v0.1.0
What other languages or technologies are you keeping an eye?
- Go: it’s the language with the fastest growth in the last years, understanding why, could be a key to help Red growing faster too. Go’s concurrency model also seems attractive to users, so worth studying.
- Lua: trying to understand where it’s heading and how it grows.
- Python3.x: trying to understand where it’s heading, not sure I understand its strategy though.
- Webassembly: the foundation for the future of web programming.
- MagicLeap: the future of HCI!