为什么80%的码农都做不了架构师?>>>
——Chris Bell Learning Elixir at Made by Many
在今年奥兰多的Elixir大会上演讲之后,就经常有人问我:你们团队是如何学习Elixir和OTP的?
和学习其他语言一样,学习Elixir也需要付出时间,需要耐心。以我们的经验来看,对Ruby和JavaScript很熟练的工程师,能够很好地适应Elixir。不过,我们发现,总体来说有三个难点:
- 语法和函数式的思维方式。
- Phoenix和Ecto。
- OTP和进程的概念。
语法&函数式思维方式
Programming Elixir, Dave Thomas (Pragmatic Programmers)
不要光看,要做练习。这样你才能了解这门语言的方方面面。说实话,我没有做完全部的练习,但是我做完了OTP章节,然后自己开始了这方面的试验。
Exercism.io Exercises
我很喜欢这里面的练习,类型很多。有些需要你花上一些时间来解决。我很享受这种简短的编程练习。
Cameron Price’s talk on Micropatterns from Empex 2016
一篇关于模式的有趣演讲,适合刚开始学习Elixir的人。
Phoenix 和 Ecto
Programming Phoenix: Chris McCord, Jose Valim and Bruce Tate (Pragmatic Programmers)
参考书中的圣经。我们用它来搞清楚构建Phoenix应用的正确方法,它也是一个很好的Phoenix和Ecto入门书。
Writing a Blog Engine in Phoenix, Brandon Richie
教你从零开始构建Phoenix应用。
A Deep Dive into Ecto, Lew Parker
很详细,有些内容有点过时。
Working with Ecto Associations and Embeds, Jose Valim
当我要处理Ecto中的Changeset和嵌套关系时,常常就会想到这篇文章。
OTP和进程的概念
这里就开始深入了。OTP并不是一个巨大的库,但是学会如何使用进程来构建软件,确实是一道需要跨越的障碍。你还需要对BEAM有所了解。
Mix and OTP Guide, Elixir Lang
这对你熟悉一些基本概念很有帮助。尽管看完了你可能还有些迷惑,但没关系。
The Zen Of Erlang, Fred T-H
我找不到比这篇文章更好的对Erlang的概括了。我数不清有多少次打开它。这是一篇长文,你需要准备好书签。
Intro to OTP, Jesse J Anderson
从零开始构建一个GenServer,能帮助你理解它们是如何工作的。
The Most Basic Erlang Service -> Worker Pattern
一篇Supervisor的例子。没有什么特别的地方,但是一篇很好的介绍,关于以Erlang的方式构建软件。
Designing for Scalability with Erlang/OTP, Francesco Cesarini, Steve Vinoski (O’Reilly Media)
大量优秀的设计模式和技巧。我刚开始读,不过已经被人推荐过很多次了。
用OTP做个游戏
一位我们的工程师,Eli,设计了一个小游戏。你可以通过它来学习。
这里还有一些其它的游戏,能帮助你开始学习:
- Building Battleship in Phoenix
- Playing Poker with Elixir
- Tic-Tac-Toe in Elixir
我们可以用所学到的OTP知识来扩展它们,比如用Ecto来保存数据,用web sockets (Phoenix Channel) 来实时交流,甚至是分布式和碎片化。