Should I skip Rails and learn Elixir and Phoenix?

Hi,

I’m learning Ruby and really like programming and automation. I have used visual tools to build some bots in Windows and love it :slight_smile: I wish to become a web master who produce and manage websites. Hence, I have registered a course in computer science and also learning Ruby on Rails.

I wonder if I should learn Elixir and Phoenix instead of RoR? Given that time is limited, I won’t be able to learn both.

Plus, I don’t quire understand the selling point of Elixir. It is said to suit IoT but I don’t see Elixir anywhere other than web with Phoenix framework. Am I missing something?

Thanks,

Edit: How easy is it to learn web development with elixir courses and books? In RoR there are so many that go from zero. They also touch on multiple topics including networking, setting up servers, algorithm… Are these present in Elixir materials? Do I have to learn and connect the dots on my own?

Jobs/Libraries: RoR > Elixir/Phoenix
Everything else: RoR < Elixir/Phoenix

2 Likes

Looking at Elixir Phoenix documents and comments is scary. So many new words…
Maybe I should stick to RoR and move later?

Neither Rails nor Phoenix are particularly good at building simple, CMS-style web sites. Which is what I understand you want to get into. Building company’s web sites, blogs etc.

If you are into that sort of things, have a look at:
https://www.drupal.org/
and

The first one uses Python, second one is for .NET world. I think these tools are more suited to building “web sites”.

Phoenix and Rails are more suited to building “web apps”.

4 Likes

As @hubertlepicki said, for building websites, these frameworks may not be the best choice. But if you do want to get into building web applications, either framework is suitable. If you continue on with a career in web development you will likely use many different tools, so it’s useful to have a flexible mindset, even if you focus on one language to start with. These days you will need to know JavaScript to build the frontend as well. If you choose Ruby you can always go back and learn Elixir later and vice versa. You will always be learning since the web is always changing.

Whichever one you choose, make sure you learn good architectural practices (SOLID, REST, etc). These are transferrable between different languages and frameworks. If you’re working for someone else you often won’t get a choice regarding which tools you get to use. But you absolutely can reuse the principles and best practices you learn across different stacks.

Will your websites be database driven? If so I would 1000000% go with Rails over Drupal :lol:

If by websites you mean web apps (like social networks, photo upload apps etc) then Imo Rails if quick prototype/build is important and Phoenix if scalability is important.

1 Like

Thanks for detailed answers guys.

I mean to develop web app, not just Wordpress site, hence I’m looking into web development as a career. I have with me a very good RoR course that is recommended to teach A-Z web development including front-ends and testing, automation…

With regards to good architectural practices, are they taught in Elixir and Phoenix materials (books for example)? Is it possible to learn these in those books? Do I need to be a software engineer before to be able to utilise Eli on Phoenix?

If You want to make realtime web, choose Elixir/Phoenix.

But You need to

  • forget about objects, think in term of processes
  • forget about design patterns / replace by functions, high order functions…

You may look at this funny presentation about FP design here https://www.youtube.com/watch?v=E8I19uA-wGY

You need also to:

  • learn about functional programing (recursion, pattern matching, immutability)
  • learn about actor model (process, message passing)
  • learn about otp (ouch, that is a big task)

It is a different approach, but what You gain for free (if your time is free) is

  • scalability
  • concurrency
  • distribution

elixir/phoenix make it more accessible for rails developpers, syntax is similar, same kind of tools. IMHO

2 Likes

Chris McCord’s Programming Phoenix covers some of these, although you may need to do further reading for more in depth explanations of some concepts. I find that the best way to become a better developer is to start a real project: write code, experiment with different approaches, and refactor that code as you learn more and improve your craft. Architecture will become more relevant to your learning as you expand the project into one benefits from it.

When “Programming Phoenix” was in beta, I commented to the writers about the fact that the book sort of starts from an assumption that you are a web application developer, and to a lesser degree, a developer familiar with Rails. They were sympathetic but mentioned that they had to choose a starting point and began there.

I don’t think you will learn much about designing and developing web apps from books and videos dedicated to Phoenix or Elixir. You should seek out content dedicated to those topics. Still there is a LOT of open courseware on the web. Your more likely problem may be finding ones that present stuff in the style that matches your learning style.

I went through something similar. I learned Ruby on Rails first by finishing a free course online. I then started reading through Agile Web Development with Rails 5. I got about halfway through when I heard about Elixir/Phoenix on Hacker News. Usually I like to see things through to completion, but the responses in support of Elixir/Phoenix was so great that I took the risk and ordered the books by Dave Thomas and Chris McCord.

So far I am really happy with the switch. However, I do believe having some knowledge of a popular framework, like Rails, helped me in learning Elixir/Phoenix. The biggest reason being that it gave me a base to compare/contrast the different styles and I had the opportunity to grasp the fundamentals of web development. This way I could solely focus on learning Elixir/Phoenix as oppose to learning all the jargon and concepts at the same time.

I’m trying to wait patiently for Functional Web Development with Elixir, OTP, and Phoenix to really dive further :grin:

Thank you snake,

I guess I will have to go the long way then. It is also positive for job prospect. I will finish my rails training, then switch later.

Hi hubertlepicki. I think you got a typo. Drupal uses PHP.

1 Like

I knew Django before learning Rails, and well both Django and Rails before learning Phoenix. And I must say that prior knowledge of Django helped me really appreciate the good parts of Rails (and miss good parts of Django :wink: ). And the prior knowledge of those two, made me realize how good from architectural point of view is Phoenix, and especially how does the newest Phoenix 1.3 forces you to think in term of application and its web frontend, rather than a big web only monolith. This is my experience of course.

What I want to say, is that learning Ruby and Rails is not a bad choice. Rails forces you to do things rails way (and doing in other way is always a bit of a struggle, if not with the framework, then with coworkers, that’s how it is with rails), and it’s easier to learn Rials in my opinion than Phoenix, especially if you’re starting a web developer career. And there is virtually nothing stopping you from trying Elixir and Phoenix later on.

And by no means I say that Elixir and Phoenix is bad choice. Only that there is still a lot more learning materials for Rails. And when learning you will face some stupid problems, that may have obvious solution for some more seasoned programmers. With Ruby and Rails you will almost every time get solution from simple online search in no time. And Elixir and Phoenix are young enough for you to need more time to find solution to those problems.

PS. I earn my living by writing Ruby and Rails code, but If I was to write new, reasonably large web app from scratch I would use Phoenix. The above paragraphs is just simply me trying to be honest with myself.

1 Like

Yes, I agree with snake117 also and think it’s a good path you’re taking.

In my case, starting from zero having some knowledge of Ruby/Rails helped immensely with learning Elixir/Phoenix. Basically I went through Michael Hartl’s excellent Ruby on Rails tutorial (https://www.railstutorial.org/) . Then I read the Dave Thomas’ Elixir book followed by Chris McCord’s “Programming Phoenix”. Finally I re-read the Hartl tutorial from start to finish implementing solving everything with Elixir/Phoenix instead.

It was very helpful having the base knowledge first so I could focus on the new stuff that really is different when rewriting Rails Tutorial such as Ecto vs AR, using context modules (v1.3-style) instead of calling Repo in the controllers, the different hex packages for file upload/email/encryption/pagination/time-date handling, using distillery/edeliver to push releases to production instead of just pushing everything to heroku, etc.

Besides those things which were not too difficult to figure out the code was VERY straightforward to implement in Phoenix and at this point I will not be looking back at RoR. The site is orders of magnitude faster, the translated test suite is 10x faster, the functional and explicit code is a LOT easier to reason about with a lot less magic, and the code behind the magic that does exist (plug, etc) is easy to read and comprehend.

Good luck and keep pushing forward… it will all click!

1 Like

Thank you so much guys.

I will take what you suggest to build foundations skills first. Resource availability is definitely an issue here. I have also looked at other technology stack, yet, there is no course that go from A to Z. I will need my hands held, so the RoR bootcamp style may be suitable.

Will report back about my journey.

I’m going to take the contrarian view here. Coming from a PHP -> Rails -> Elixir -> Phoenix background I don’t have much use for PHP and Rails anymore. Sure, having the PHP and Rails background is nice since I still have a few legacy projects to maintain. But for anything new, I use Elixir and Phoenix.

Its very difficult for someone that has previous Rails knowledge to comment on the current state of learning Phoenix as your introduction to web programming. I feel you need to talk to someone who has tried this approach.

There are some good books and tutorials out there for Elixir and Phoenix that should get you started. I’s be very interested in your experience learning web app development with Elixir and Phoenix. I think an accounting of your progress and experience would be a great contribution to the community.

I think you will find the Elixir community VERY helpful in your journey. You may even find allies to contribute new tutorials that focus on the first time web developer.

4 Likes

If you see learning Elixir and Phoenix as the meta target for you, I would definitely skip learning Rails. Its time has passed and it would be wasteful for now to explore all the “magic” that Rails provides.

1 Like

Hi Pat,

I am new so I have no knowledge of how the web work. I haven’t made an working custom site other than Wordpress.

What other saids was that Elixir and Phoenix books are too advanced, and not teach basic things.

I would like to be instructed to be a well rounded web dev. I’m looking at a RoR bootcamp as they promise an A-Z education to get good at RoR. Then I may switch stack later with good understanding.

Is there a book out there that teach web development regardless of language?

Hi :slight_smile:

I don’t know any book that learn you how to create web apps / sites regardless of language, because this book have got to be only theorical, because - eventually - you have to write some source code in language you chose.

I read Programming Phoenix and for me it wasn’t that much advanced (I have RoR and Python background), but I’m pretty sure that this book is not harder to grasp than eg. Agile Web Development with Rails. Also there are really nice guides for Phoenix on the official site. The most important thing is to start coding :slight_smile:

In case of any issues, community gathered here is more than helpful. It means a lot, seriously :slight_smile:

If you really want to read something about web development (and actually beyond that) find some materials about MVC pattern, REST and websockets transport layer, but it’s better to understand these things while doing the app, because you don’t need to know or remember the definition, but understand how it works :slight_smile:

Good luck on your journey with Phoenix!