Hi!
I am currently a solid frontend developer (which is pretty laughable to say, because my experience is just about 3 years), I know (to some degree, of course) you can say almost everything "new and shiny" (for regular apps, without graphics and etc) – popular bundlers, up to stage 1 features, React/Vue/Angular/Cycle, all this state management systems, like Redux/Mobx/Rx and other, CSS with css-next, and so on. I also played with ClojureScript and Elm – and while it seems kind of cool, I don't really see it as a solid option to bet on.
The thing is that I feel stuck. The new frameworks come up every month, a lot of people in JS community have pretty low CS understanding, and therefore the level of discussion seems pretty miserable. Moreover, I don't really want to keep up with frontend, and want to learn something more solid. Not as solid as system programming, but I feel that back-end might be a good choice. But the availability of platforms is astonishing – and while I played some time with Elixir and Clojure, I feel that I should bet on Python and Go. I want to get a versatile language(s) (I know, it is not a good idea to stick with just one language, but I need to pick it up during the year; also I like to move between countries, so it should be in demand in general in Europe.
So, what can you recommend as a fast-picking language and what is the best to become familiar with the whole cycle – development, testing, deploy to the cloud, monitoring, etc (I only scratched the surface in all these topics, so I definitely need to solidify it). I am leaning towards Python/Go (I wrote a small API for my side project in Go).
What you probably want to focus on is the middle tier. In those three tier systems the backend is actually very low level (data processing, storage, replication, message brokering, etc) and is often handled by third-party products such as database engines.
Some (many) projects combine backend-and middle tier as if they are the same thing. And in some systems the middle-tier is very thin and just slightly abstracts the backend.
So definitions aside... if you want to transition to middle tier...
- Learn API development. Especially focus on REST and possibly GraphQL. Learn the difference between a 422 and a 401 error, GET/POST/PATCH/PUT etc, etc.
If you want to really get into backend...
- Learn hardware limitations
- Learn Linux very well
- Learn about job queues, Message busses, and interprocess communication
- Learn about service discovery and the differences between eventually consistent and strongly consistent
- Learn about containerization
- Learn about system operations
- Learn algorithms. Including graph algorithms and how to determine algorithmic complexity
Useful for both...
- Learn SQL
- Learn a few NoSQL systems... MongoDB, Elastic Search, Redis
- Learn about security
Don't worry about specific languages. The concepts carry over to any language. If you have to pick, Node.js, GoLang, Ruby, and Python are all acceptable choices for middle-tier.