Those are many topics, and you could spend years digging into them, you’ll need to find a balance between going too deep and knowning enough to keep moving.
I totally understand your inquietude. When I started doing web in 2000 the company I was working for used the Java abstraction for web development. Since everything was accessible as abstraccions, (GET/POST, sessions, etc.), I had the feeling of not understanding what was going on. In my case, the solution was to study CGI with Perl. There, you are naked, you are forced to get familiar with the basics.
TCP is the more low level of the set. When a user connects to your service a ton of things happen in between. One possible resource there is “Computer Networds and Internets”, by Douglas E. Comer. Spend a couple of months reading that book from cover to cover, and you’ll be a different developer.
The next level is HTTP, that is text that travels in the communication channel established with TCP, and that both parts speak to understand each other. A protocol. Version 2 of HTTP is not plain text, but I recommend you to understand 1.1 first. For that, and to understand REST too, “RESTful Web Services”, by Leonard Richardson & Sam Ruby, is an excellent resource.
AJAX allows JavaScript in the browser to do HTTP calls to the server the same way you can do HTTP calls with Elixir or any other programming language (or curl
, wget
, etc., any client). I read some books on AJAX in the past, but this is not a huge topic, any book or online tutorial will do.
MVC is a design pattern. For that one I recommend getting just the idea, and to be exposed to some concrete implementations. Because you can be lost in theoretical design discussions that will have little practical interest for what you are looking for now.
Basically, it means that you think about your application as a software system where things fall very broadly into one of three categories: C is a layer that acts as a broker so to speak, it connects the external world with the M and V layers. The M layer is the one who knows what to do (create a user, retrieve the movies of category “Comedy”, etc., which is called in jargon the business logic), and encapsulates that, so the C layer is able to execute it without knowing too much. The V layer knows how to present the information in the response back to the client. So, the request arrives to C, which invokes some API from M, and then prepares information for V. Done.
Having that idea in mind, and learning Phoenix, is enough. You’ll recognize the parts. The rules are soft, guidelines that help you organize mentally the code, and that normally also translate to the actual directory structure or file names.
Regarding the workflow, basically when a request arrives, eventually the router decides which function of which controller should be invoked to handle it. The function gets invoked, its implementation talks to the model layer, sets up info for the view, the view is rendered.
If you read “Programming Phoenix” you’ll understand how these pieces connect.
As I said at the beginning, you could spend years getting deep into these topics. Books are the best resource, but don’t get paralized if you don’t know everything. You won’t, you’ll need to find a sweet spot in which you keep going while in parallel studying. That’s a feeling and attitude that never ends, it’s for a lifetime :).