Backend developer roadmap, skills, resources
Tags: career, javascript, beginners, codenewbie
Published: 2020-07-25 08:49:53


Backend developers mostly deal with data, business logic, and the efficient retrieval of data from variety of sources. The list doesn't end here. There are a number of things that a good backend developer is expected to be adept at. This <a href="https://roadmap.sh/backend" target="_blank">roadmap</a> tried to cover some of them. This post will try to list down the resources instead.

## Internet and basic frontend knowledge
Mozilla Developer Network(MDN) docs is a great start, if you are trying to start taking the web development path. I've given some important links below but you can explore the entirety, there is a ton of information that is up to the point and well explained.

[How the web works](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works)
[HTTP protocol](https://developer.mozilla.org/en-US/docs/Web/HTTP)
[Speaking the browser language(HTML-CSS-Javascript)](https://developer.mozilla.org/en-US/docs/Web/Tutorials)
[Javascript, everything](https://javascript.info/)

Although the below resources are not for backend developers, some of you might be interested in some frontend frameworks that guys in your company are using.

[Bootstrap](https://www.w3schools.com/bootstrap/)
[React documentation](https://reactjs.org/)

## OS and basic machine usage skills 
[How OS works in general](https://medium.com/cracking-the-data-science-interview/how-operating-systems-work-10-concepts-you-should-know-as-a-developer-8d63bb38331f)
[Threads and concurrency](https://applied-programming.github.io/Operating-Systems-Notes/3-Threads-and-Concurrency/)
[List of linux commands](https://www.geeksforgeeks.org/linux-commands/)
[Inter-process communication](https://www.geeksforgeeks.org/inter-process-communication-ipc/)

## Programming languages and frameworks
Although it is not necessary that you learn every language in the world, it is good to have skills in at least one compiled, scripting language and choose one for a paradigm. Languages are essential tools for programmers and they deserve a section in backend developer roadmap and resources list.

[Ruby](https://launchschool.com/books/ruby/read/introduction)
[Java](https://docs.oracle.com/en/java/)
[Python](https://docs.python.org/3/)
[Javascript](https://javascript.info/)

[Ruby on Rails](https://guides.rubyonrails.org/)
[Node.js](https://nodejs.org/en/docs/)
[Django](https://www.djangoproject.com/)
[React - optional](https://reactjs.org/)

## Version control
You won't write clean code on your first iteration most of the time. Also, if you happen to be in a situation where you lost your code due to variety of reasons, then version control systems got you covered. 
[Git](https://github.com/) and [Mercurial](https://www.mercurial-scm.org/) are among the most popular version control systems out there. You should definitely learn Git. Below are some resources where you can start.

[Git basics](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/)
[Git documentation](https://git-scm.com/docs/gittutorial)

## Databases(relational) and ORM
As we discussed already, backend developers mostly deal with data. Hence, it is essential that you learn several ways to work with the same. Relational databases were the goto for every use case. But, that has changed over the years, and several purpose built databases took its place. Initially you should be able to interact with the relational databases using SQL, or an ORM. But, as you get more comfortable, you should explore the database internals like how indexes work, how joins will effect performance, transactions, isolation levels, and designing for availability and consistency etc.

[SQL tutorial](https://www.w3schools.com/sql/)
[n+1 select](https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-orm-object-relational-mapping)
[MySQL architecture and History](https://www.oreilly.com/library/view/high-performance-mysql/9781449332471/ch01.html)
[Aurora Deep Dive](https://www.youtube.com/watch?v=U42mC_iKSBg&t=4s)
[Rick Houlihan's talk on matching the workload to DB](https://www.youtube.com/watch?v=hwnNbLXN4vA)
[Rails ActiveRecord - ORM](https://guides.rubyonrails.org/active_record_basics.html)
[Django Queryset - ORM](https://docs.djangoproject.com/en/3.0/ref/models/querysets/)

## Databases(NoSQL)
NoSQL databases came into picture to solve several problems of relational databases like schema rigidity, extensibility, scalability etc. There are several databases in this space. I will list down some of them and resources to learn about them.

[MongoDB from it's CTO](https://www.youtube.com/watch?v=EE8ZTQxa0AM)
[Advanced design patterns for DynamoDB(or any NoSQL in general)](https://www.youtube.com/watch?v=HaEPXoXVf2k)
[Single table design - DynamoDB](https://www.alexdebrie.com/posts/dynamodb-single-table/)
[Why Dynamo scales where relational databases don't](https://www.alexdebrie.com/posts/dynamodb-no-bad-queries/)
[Different take on NoSQL vs SQL](https://www.memsql.com/blog/why-nosql-databases-wrong-tool-for-modern-application/)

## Databases(Graph)
There is another class of purpose built databases which puts relations in the data, forefront. These databases exploit the related nature of the data and help answer complex queries easily. These databases are the goto when you want to answer queries like friends of friends, what do my friends like, efficiently. Below are some resources where you can learn about these.

[Graph databases for beginners series](https://neo4j.com/blog/graph-databases-for-beginners-wait-what-do-you-mean-by-graph)
[Amazon Neptune](https://aws.amazon.com/neptune/)
[Introduction to cypher](https://www.youtube.com/watch?v=pMjwgKqMzi8)
[Cypher reference card](https://neo4j.com/docs/cypher-refcard/current/)

## Big data(optional)
[Everything you need to know about Big Data](https://www.youtube.com/watch?v=MotN5f6_xl8)
[Analytics at Netflix](https://www.youtube.com/watch?v=nMyuCdqzpZc)
[Netflix Metacat](https://netflixtechblog.com/metacat-making-big-data-discoverable-and-meaningful-at-netflix-56fb36a53520)

## APIs and authentication
[REST cookbook](http://restcookbook.com/)
[REST wiki](https://en.wikipedia.org/wiki/Representational_state_transfer)
[Roy fielding's](https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm)
[RPC vs REST](https://stackoverflow.com/questions/26830431/web-service-differences-between-rest-and-rpc)
[REST over RPC](https://apihandyman.io/do-you-really-know-why-you-prefer-rest-over-rpc/)
[gRPC talks](https://grpc.io/docs/talks/)

More and more companies are finding value in GraphQL recently. You can learn about the same below.
[GraphQL](https://www.apollographql.com/blog/graphql-vs-rest-5d425123e34b/)
[GraphQL vs REST](https://www.apollographql.com/blog/graphql-vs-rest-5d425123e34b/)


## Web security fundamentals
Web application security should not be an after thought. Many developers focus much on the application logic, since the code is generally audited by a security researcher for an initial release. But, developers should write code keeping security in perspective always. The first link below is more relevant to the Rails ecosystem, but it will cover some general security best practices. Be sure to check it out.

[Securing Rails applications](https://guides.rubyonrails.org/security.html)
[SSL and TLS](https://www.cloudflare.com/learning/ssl/how-does-ssl-work/)
[Discussion on SSL and TLS](https://security.stackexchange.com/questions/20803/how-does-ssl-tls-work)
[Virtual private clouds explained](https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html)
[Cross site request forgery](https://owasp.org/www-community/attacks/csrf)
[Django, CSRF](https://docs.djangoproject.com/en/3.0/ref/csrf/)
[OWASP attacks list](https://owasp.org/www-community/attacks/)
[Cross Origin Resource Sharing(CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)
[Content security policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)
[HTTP Basic Auth](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication)
[Cookies and security](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)
[DOS attack](https://en.wikipedia.org/wiki/Denial-of-service_attack)

If you are working with `node.js`, you can take advantage of `npm audit` to find out and fix known vulnerabilities in npm modules. 

If you like the blog, follow me at [@distributedmonk](https://twitter.com/distributedmonk) for more backend tech content and do checkout the [blog](https://www.distributedstack.dev/backend-developer-skills-roadmap-and-resources/).