It's almost time to dive into learning Elixir, but first I'm going to cover the learning resources I'm using and the tools I'm using, including what you need to follow along.
Learning Resources
I'm using the following resources for teaching myself Elixir. I've read some other websites and articles to get an overview of Elixir, but these are the resources I'll be using regularly as I go along. Some may prove more useful to me than others.
Basic Information
These are the resources I'm using for teaching myself the basics of Elixir
- The Elixir documentation (simply great to read). The language features are described in the Getting Started guide and the standard library/Elixir API is described in the official set of documentation.
- Adopting Elixir, a book by Ben Marx, Bruce Tate, and Jose Valim
- Painlessly Functional and Concurrent: An Introduction to Elixir by Marc Sugiyama. This is a video of a talk given at OSCon in 2016, and can be found on Safari Books Online.
- A variety of helpful blog posts on culttt.com
- Learn Functional Programming with Elixir, a book by Ulisses Almeida
- Programming Elixir 1.6, a book by Dave Thomas
Advanced Information
When I eventually get there, I have identified some resources I'll be using to learn about the more advanced aspects of Elixir, and eventually the Phoenix framework
- Mastering Elixir, a book by Andre Albuquerque and Daniel Caixinha
- Advanced Elixir and OTP, a video by João Gonçalves, published by Packt Press and available on Safari Books Online
- Rapid, scalable websites with Elixir and Phoenix, a video of a conference talk by Marc Sugiyama. This was a talk given at OSCon in 2017, and can be found on Safari Books Online.
- Elixir in Action, a book by Saša Jurić
- Functional Web Development with Elixir, OTP, and Phoenix, a book by Lance Halvorsen
- Programming Phoenix 1.4, a book by Chris McCord, Bruce Tate, and Jose Valim
The Process of Learning and Writing
I truly intend to write these posts as I'm in the process of learning Elixir and explain as I go. That will certainly mean that my later posts will be better informed than the earlier ones.
My method of learning is to read the early topics from multiple sources (one source often contains interesting information that the other one doesn't), make an outline of possible topics, and then choose the next one to write about. As I write about each topic, I will tend to drill down deeply into them, research the answers to questions I have, and play around with the language to observe its behavior.
In my research so far, I've often encountered topics and interesting features I haven't investigated yet, so I'm often aware of features of Elixir that I haven't covered yet. Those get added to my outline and that outline section gets expanded as I learn more. I typically only have some superficial information about a feature until I start writing about it, and that's when I start researching it and looking into the details.
So if it sometimes seems like I know more than I've written about so far, that's probably true, but I probably also don't know a lot about those subjects at that point. Also, writing tends to be linear (unless you're James Joyce, I suppose), but learning not so much, especially when learning from a variety of sources. That means what I've written down at any particular point won't always cover all of what what I've learned so far, although I'll try to keep it as close as I can.
Tools
If you want to follow along, you may be interested in learning about the tools that I am using. I may end up using different tools later on, but this is what I'll be using in the near future.
I'm going to be using the following:
- The Elixir platform and associated tools: You can't run Elixir without them, and they're all included in one convenient package.
- Visual Studio Code: there's actually nothing that requires this particular text editor for Elixir development. I'm just using it because it's cross-platform, has some useful Elixir plugins for autocomplete and syntax highlighting, and has a healthy plugin ecosystem which can serve as a source of other useful plugins in the future.
- Command Line: Any command line environment should do. On Windows, I recommend Cmder, just because it's so much nicer than the default command line console. On a Mac, I use the standard Terminal app. On Linux, any Bash shell will do just fine.
That's it for now. At this point, that's pretty much all I need.
For the most part, other than the Elixir platform and associated tools, there actually aren't any specific tools you'll need. Your preferred text editor will be sufficient, although I recommend installing any plugins that will give you autocomplete or syntax highlighting.
Installing Elixir
Go to the Elixir website and click on the Install link. Follow the instructions to install on your platform of choice. They even have a package for Raspberry Pi and a Docker container you can run.