如何在七天之内学会Erlang?

众所周知,上海的冬天实在是太冷了。

我穿棉袄开空调盖两层被子却依然每天都冻得瑟瑟发抖。

所以我决定学Erlang, 年后去温暖的广州做页游服务端。

那么,我应该如何在七天之内学会Erlang呢?

求教,真诚的。

我的回答

“学会”是个比较模糊的概念,有人把erlang/otp源码通读了一遍依然满脑子都是问题,有人只是随便百度百科了一下大致概念就觉得自己已经掌握了。不过看问题其实你是想速成然后去广州写页游服务器,这样就简单很多了,即便对于一个从来没有接触过函数式编程的人来说七天也完全足够了。下面是我建议的一条学习路线:

第一天和第二天:找一本基础的入门书籍通读,了解Erlang的基本语法和概念(诸如变量绑定、模式匹配、高阶函数、进程并发、消息队列、OTP架构、ETS表、Mnesia数据库、分布式节点等等等等)。内容看着很多,其实你真正着手看的话就会发现,一边看一边打开Erlang Shell实践,两天时间完完全全足够了。这里随便推荐两本:

第一本是Erlang之父Joe老爷子写的 Programming Erlang,这本书的地位就相当于C语言里面的 K&R;至于另一本则是 Learn You Some Erlang for Great Good,学过Haskell的朋友是不是对这个书名有种似曾相识的感觉?这本书的作者就是看了Haskell那本书后兴奋地难以入睡,觉得好的入门书就该当如此然后自己写了本Erlang的。

反正这两本书随便挑一本看看就可以了,没必要把它们(甚至其它更多的入门书)都看一遍。

第三天和第四天:好了,有了前两天的语言基础,你就可以尝试着自己写点儿东西练手了。因为Erlang本身就是为解决服务器并发编程设计的,而你正好要想用它去写游戏服务器。所以你不妨徒手撸一个类似QQ这样的聊天服务器试试,比如实现用户的注册登录好友群聊等功能。为什么不直接撸一个游戏服务器呢,因为没有客户端的话玩起来太无聊了,还不如聊天更直观。在这两天的练习之中,你一定会遇到很多比较棘手的点,随着它们的解决,你对之前书上的一些知识点会有了进一步的理解。

第五天和第六天:有了理论基础以及亲身实践,你还缺什么呢?缺真正的工程实践。公司里一个真正的Erlang项目(对你来说就是游戏公司)应该是什么样子的呢?它们的代码怎么组织、数据库怎么连、日志怎么打、配置怎么读……等等等等,这里推荐两本书:

Erlang and OTP in ActionErlang in Anger,前一本对Erlang的核心框架OTP讲解得比较深入,看了它你之前的不少疑问都会有醍醐灌顶的感觉,后一本的话则是实打实的实战经验了,可以说是老司机把他在项目中积累的一些非常有用的知识点手把手教会你。

当然只看这两本书是不够的,你可以配合这套远古级别的Erlang页游服务器框架源码(MGEE)一起看,然后和书本里的知识相互佐证。为什么说它远古,因为后面几年全国各地的Erlang游戏服务器源码基本上都是发源于这一套,虽然大家根据自己的业务情况做了不同的优化,基本上随便哪一套拿出来也许都能屌打庆亮他们这套。但是这套作为开山祖师的地位是不可动摇的,而且就我后面看过的四五套别的游戏源码,发现框架还是差不多的。

这两天的任务可能稍微比较重,所以你必须能够抓住重点,捡一些至关重要的看,否则是不太可能完成的。

第七天:最后一天,什么也别干了,放松一下紧绷了六天的神经,网上到处浏览浏览博客之类的吧。看看别人的一些经验之谈,来对自己之前建立的知识结构进行查漏补缺。这里我推荐两个人的博客:

坚强2002 坚强哥的博客对新手入门帮助很大,他以自己超强的毅力记录了自己从零开始学习使用Erlang的一点一滴,而且每一篇都不是生搬照抄,而是自己真真实实的思考和总结;

系统技术非业余研究 因为余锋本身就是阿里的大佬,其水平比一般人要高出很多,所以他的博客会相对艰深不少,但是如果能够看懂某些篇章,对你的帮助应该是挺大的。

第七天以后:七天的时间足够你了解Erlang并且用它在实际项目组写一些简单业务逻辑了,但是想在七天内精通Erlang应该还是很难办到。那么七天以后应该做什么呢,如果你以后还想继续学习,我的建议是多看一些开源的Erlang项目。比如 cowboy、lager、rabbitmq 之类的,看看别人是怎么用Erlang来做项目的,中间有不懂的问题,网上都无法解决的,不妨直接去扒erlang/otp源码,源码下面无秘密。顺便最近区块链炒的异常之火,这里安利一个用Erlang开发的区块链项目 aerernity/epoch,做这个项目的技术人员都是一群经验丰富的Erlang大佬,如果看好的话赶紧囤上一些AE币吧,长期持有别管短线,赚了不说,赔了就当是购买情怀吧