How to become a Backend developer
My new job at Shape as a Backend Student Developer starts in August, so I decided to refresh and widen my knowledge in this field in advance. Instead of jumping right into a given language, I wanted to learn about the overall infrastructure as much as possible, so I have listed a few things I want to go through before I dive into any specific stack.
This post was written based on the following video which is highly recommended to watch: 2016/2017 MUST-KNOW WEB DEVELOPMENT TECH - Watch this if you want to be a web developer by LearnCode.academy. Also, the mindmap in the video can be found here.
So let’s cover the following topics:
- General theory and techniques
The video starts off with listing the most popular languages and splitting them into three major categories. The guy in the video tells us that the easiest way is to choose a scripting language first, because their learning curve is relatively shallow and they are the most popular ones when it comes to jobs.
- Node.js (with express or hapi)
- Python (django, flask)
- Ruby (Ruby on Rails)
- PHP (Laravel, Symfony)
High performance / Compiled languages
Obviously, to cover as much as possible it is recommended to learn at least one language from each category, but probably not at the same time. As far as I am concerned, I have some experience with Node.js, PHP, Java and C#. Therefore, picking a functional language seems to be a good move, however as I said earlier, my main focus now is to learn about the infrastructure first (+ a little bit about DevOps), therefore for me Node.js takes this round due to its simplicity and popularity. After I have obtained the necessary environmental and theoritical knowledge and I feel confident enough to jump into something new, my next pick will be probably either Elixir or Scala.
2. General theory and techniques
- Unit / Functional testing
- API’s / RESTful services
- Security (e.g.: SSL)
- Authorization / Authentication
- JSON Web Token
- SOA (Service Oriented Architecture) / Microservices
- Deployment and continuous integration
- ORM (Object-relational mapping) / DataStructure / DAO (Data Access Object)
I feel the same as probably every programmer when they start-off; that coding is sexy, exciting and spectacular. However, setting up development environments and learning about the background theory is slow, dry and boring.
However, no matter which language we choose, a backend developer has to be familiar with these terms. We can say that learning these is somewhat unavoidable, so this is where I will start as well.
- Relational: mySQL, PostgreSQL
- Redis / Sessions / Caching
- Document (NoSQL): MongoDB, Couchbase, RethinkDB
- Search Engine: ElasticSearch, Solr
- Nginx (Server)
- Apache (Server)
- Database (Redis)
The path of the developer
So what’s the strategy here? There’s much to learn, but as we know organization is the key to success. As far as I am concerned, I have created a Droplet at DigitalOcean using the GitHub Student Developer Pack, which provides us a $50 coupon. I have set up this droplet WITHOUT any preconfiguration so all I had was a bare Ubuntu 16.04. And now, I take it from here, step by step. Here is a rough sketch for what I imagine as a possible path:
- Set up SSL connection (probably with [Let’s Encrypt](https://letsencrypt.org/))
- Deploy a simple Node.js application with Git
- Run Node.js as a background service (using PM2)
- Set up Nginx as a reverse proxy server
- Set up a complex continuous integration deployment
- Set up a unit / functional testing environment
- Set up a databse (preferably something we are not experienced with - in my case it’s Redis)
- Implement ORM / DAO structure
- Create an API with RESTful services
- Create authentication
Huh, now this seems quite robust. Of course this list may change on the fly as currently I am not entirely clear with what WebSockets and SOA are good for. But it as for a starting point, it does the job perfectly.
Bonus: some articles and questions to start with
Finally, I will put here some links and questions, which I found to be interesting and which I think will do good for future reference:
- What is the difference between a process and a thread?
- What is the difference between ORM and DAO?
- What is a Service Worker?
- Tutorial: How to Deploy a Node.js App to DigitalOcean with SSL
- Single-Thread vs. Multi-Thread
- Service Workers: an Introduction
- The Basics of Web Workers
- How To Set Up a Node.js Application for Production on Ubuntu 16.04