A free and open source online Elixir and Phoenix bootcamp


#1

I’ve been tossing an idea for a free and open-source platform to learn Elixir and Phoenix. Something like freecodecamp. I’ve been through codeschool and a couple of other material, but none of them turns out to be open-source. And none of them provide a full insight into all the features and benefits nor step-by-step learning for the complete beginner. Some people have a problem with reading the docs and getting started, so I was thinking of a project-based approach. We could have the people build projects, you know after completing the lessons.

Please let me know what you think of this. A few pointers n getting started might also help.


#2

Can you provide more details about what you mean please? There’s very little info at freecodecamp without signing up an account.

We already have some great free resources too - and so you might find it would be easier to help out with those projects than having to create a whole new resource from scratch. Take a look:

You could for instance, suggest/work on a codeschool type interface for elixirschool :slight_smile:


#3

Freecodecamp uses the MERN stack to turn a complete beginner to programming into a full stack developer. A series of challenges in an interactive code editor with projects along the way, FCC starts off with the basics of front-end development and slowly progressing to libraries and frameworks like jQuery, React and Redux. There’s a front-end cert- free of cost, followed by data manipulation and visualization. In the end comes back-end development - Node and Express. The wrap-up is a set of interview prep material and extra projects to build a vast portfolio.

I wanted to build something on the same lines using Vue as a front-end course and E/P for backend cert. Another similar project is theOdinProject - uses rails.The difference is TOP provides only links to the resources and not the content itself.

In comparison, FCC has a million learners while TOP has 50K, reason being people want to be spoon-fed.

Elixirs’ the new thing- now is the time we build something like this- more people will benifit from it now.


#4

@AstonJ I checked out Elixir School. It just looks like a guide. I want to build a thing that has challenges and really gets the concept rooted in in the learner’s mind and make them industry-ready.


#5

At the moment, I haven’t seen a freeCodeCamp like website for learning Elixir. Maybe someone will make one in the future.


#6

This thread is to get everyone interested in developing such a platform. I’m looking for feedback on what people think of it.


#7

@anandpotukuchi You have a good idea!

One way I have imagined people learning Elixir, Phoenix, and the OTP is to have a version of Phoenix that allows devs to see:

  1. All routes, modules, functions/actions, etc from the default mix phx.new as well as any that they create or modify thereafter - within the app eg phoenix app they are running.

  2. A visual ‘nodal’ representation of code - similar to a visual sql editor - where a dev can see how modules are linked and even functions, and even layout architectures this way.

  3. Exercises based on 1 (and perhaps 2) - eg how to transform data from module to another. The simplest approach would be for this to be multiple choice - with answers provided and results depending on successful choice, and the more complex, allowing devs to write code within the browser to see how it changes the codebase or app.

Perhaps they’re fanciful ideas, but I often feel it’s great to have the IEx on the command line, but this appears to feel to isolated to someone starting in Phoenix or with a mix app that’s focused on a web app, and I can see this approach working for accessing IEx via the browser too.

Some of the tools/packages exist to cobble the above ideas together, for example, there’s a debug bar somewhere and I’ve also seen reference in these forums to a package that allows a dev to see all controllers etc in an existing app.

I guess, if I had to sum up the idea, it would be a meta/learning version of phoenix/mix that allows exercises to be added to it, completed in a visual way, that teach basic functional and elixir concepts to, as you write, developing basic apps.


#8

@BarelyFunctional Yeah, sounds cool. Yeah, we could integrate them into one idea. Thanks for your feedback. Will keep in mind when designing the curricukum.


#9

Thanks @AstonJ for linking to Joy of a Elixir :slight_smile:

Hi @anandpotukuchi. Joy of Elixir, while not yet finished, sounds a lot like your idea. The plan is to take people through Elixir from scratch (no programming experience) and end with them completing a test-driven-design project compiled with Mix.

If you at all had a chance to read through the book and to provide feedback on it that would be most welcome :slight_smile: it seems like you already have a lot of good ideas.


#10

I like the idea - I’ve meant to start writing about Elixir/Phoenix & Vue together as I feel they make an excellent package but in the meanwhile I’m focused on first finishing the game I’m developing with them and once that is done creating a series of articles going through creating a similar thing.

I could contribute code related to that. I think a game is excellent because it touches many of the relevant points, in this case:

  • assets organization & compilation, specially now that Phoenix ships with Webpack support out of the box it’s a great way to show how easy it is to set it up for Vue (or others)
  • Templating, Views, Controllers - Sessions (Phoenix Tokens), Registrations (Ecto)
  • Some of Erlangs powerful abstractions, GenServers & ETS along with Elixir’s Ecto (to serve games, allow easy fetching of game information/matching of players/queues & to persist them in case of failure)
  • Channels as ways of connecting users to these resources and transporting information from the back-end to the front-end in a seamless manner
  • Elixir’s basic modules (enum, list, etc) to manipulate data structures and pattern matching in order to create a small game engine
  • Vue as a modern front-end tool to generate and organise code, specially using Vuex as a central “brain”
  • Release and Deployment

There’s plenty of other important things that I have no experience in like distribution, and others like tests where my experience is minimal - but this would already be some interesting content.


#11

@nsuchy That’s what I meant. Why don’t we as a community build something for beginners?


#12

@radar Thanks for sharing that - I’ve been there. what I believe ( and experienced) is that people learn more from interactive code challenges than a book. That’s why people find codecademy simpler than reading some book or the official docs. I personally prefer the docs but the latter is much more effective than reading or watching videos.


#13

Learning code by challenges works very well for lots of Developers that do not like to read books or documentation, thus I agree that would be nice to have some interactive way of learning Elixir to make this language more popular and easy to adopt :slight_smile:

For DevOps I love this https://www.katacoda.com that really makes easy to grasp what we want to learn while having fun by doing it.

Why Vue and not Elm for the front-end?


#14

Nice. Elm, huh? Cool idea. Wondering why it didn’t strike me.


#15

We’ve been playing with the idea of more interactive examples on Elixir School for a long time now but safely (and affordably) sandboxing Elixir is no easy task. It can be done with some Docker hackery but then you’ve got the expense of spinning up N containers to run sandboxed code. Out of curiosity @anandpotukuchi how much experience do you have with Elixir, Erlang, and the BEAM runtime?

As @AstonJ mentioned @anandpotukuchi there are a number of established projects around the community that would welcome your involvement, Elixir School being just one of them. We always welcome suggestions. You could get started by adding examples and code challenges to existing lessons. With thousands of weekly visitors around the world you’d certainly help a lot of people.

There’s been a handful of attempts at interactive Elixir environments online, it would benefit everyone if we could all collaborate collectively on a solution :+1:


#16

Cool. Good to hear that ElixirSchool"s trying that out. Will definitely look up other projects. As far as my experience goes, I’ve been using it for like 3 months now.

Yeah. That’s the purpose of this thread - getting people involved, getting feedback.

Well you didn’t seem to get the Idea - sandboxing elixir is just a part of this. I was speaking of a free and open source full stack developer bootcamp, To make a candidate job ready isthe end goal of this program.


#17

Apologizes @anandpotukuchi but I don’t think I missed the idea. In addition to writing Elixir School I’ve partnered up with a few other sites to write the Elixir side of their full stack lessons. You may want to take a peek at https://www.learnphoenix.io. While paid they do provide free courses on Phoenix + React.

I’d encourage you to reach out to Sam @ learnphoenix.io. I helped write a number of their Elixir lessons, he’s a super nice guy, and I’m sure he’d be happy to share some of the insights he’s learned in the last two years running Learn Phoenix :grin:

If you want true interactivity then you may be underestimating the role sandboxing would play in this. There’s good reason why there aren’t existing solutions whereas there are numerous ones for Node, Ruby, and even Java. The nature of the runtime presents some unique challenges due to some super cool features like hot code reloading.

You can demonstrate the need for a sandbox pretty easily with a simple Plug.Router example. We’ll accept a POST and evaluate a string in the JSON payload:

defmodule SandboxEx do
  use Plug.Router

  plug :match
  plug Plug.Parsers, parsers: [:urlencoded, :json], pass:  ["text/*"], json_decoder: Poison
  plug :dispatch

  post "/result" do
    result =
      conn.params
      |> Map.get("code")
      |> Code.eval_string()

    send_resp(conn, 200, inspect(result))
  end

  match _ do
    send_resp(conn, 404, "Not Found")
  end
end

Submit a request that creates a new module like this:

{"code": "defmodule NoSandbox do
  def hello, do: \"Hello World!\"
end"
}

Now from a second computer, browser, or device fire off a new request but this time let’s try to use the module from the last request:

{"code": "NoSandbox.hello()"}

Our HTTP response: {"Hello World!", []}

The code from our first request was evaluated and is now part of the runtime, available to all subsequent requests. Without sandboxing you run into the potential for redefinition of user submitted code or worse a malicious user has a field day. That’s a pretty simple example but it highlights why this is so difficult.

Over at Elixir School we’re rolling out a blog in the next week or two and with it a series that’ll cover planning, designing, and building full fledged applications in Elixir albeit it without the frontend components and requiring the user compile code locally. Feel free to jump into any of the existing conversations taking place over there, we always welcome new thoughts :grin:


#18

This is not expensive at all from the a wall clock time point of view, may be time £$€ consuming if you have thousands of users trying to run them at same time :wink: