To be a Full Stack Engineer in 2020
Tags: react, node, graphql, javascript
Published: 2020-07-19 14:47:15

---
title: To be a Full Stack Engineer in 2020
published: true
description: Things to learn to be a full stack engineer in 2020
tags: react, node, graphql, javascript
//cover_image: https://direct_url_to_image.jpg
---

This is in follow up to the blog post I have written last year about being a Full Stack Engineer in [2019]([https://dev.to/freakomonk/to-be-a-full-stack-engineer-in-2019-97m](https://dev.to/freakomonk/to-be-a-full-stack-engineer-in-2019-97m)).

I have since joined an amazing [company](www.fanatics.com) and picked up a few more skills on being a full stack engineer. I have tried to be as concise as possible, yet exhaustive is the skills to be learnt. 

Starting from the front-end. 

HTML, CSS 
--------------
Well, nothing can be done on web without a basic understanding of HTML and CSS. Developers have long moved on from writing actual HTML, CSS with advent of UI libraries but still one should learn the basic building blocks of web. 

1. Mozilla Developer Network is the best resource out there for anything related to web (mostly!). [https://developer.mozilla.org/en-US/docs/Web/HTML](https://developer.mozilla.org/en-US/docs/Web/HTML)
2. [https://www.w3schools.com/html/](https://www.w3schools.com/html/)
3. Freecodecamp offers might be the best learning roadmap for HTML, CSS out there is: [https://www.freecodecamp.org/learn/](https://www.freecodecamp.org/learn/)

Javascript
-------------
Javascript is probably the most important skill a web developer or a full stack engineer can have just because of the varied applications of the language. It can be used on the browser and also server-side. 

Freecodecamp [track](https://www.freecodecamp.org/learn/) also covers Javascript, but my favorite way of learning JS would be to read @getify 's "You don't know JS" [series](https://github.com/getify/You-Dont-Know-JS). He even recently launches "You don't know JS yet" [series](https://github.com/getify/You-Dont-Know-JS).

React
-------------

Next we dive into the UI libraries that one must learn. There is a still debate on which is more popular React or Angular,  but since more and more companies are adopting React, let's go with it. 

Kent C Dodds has an excellent [video tutorial](https://egghead.io/courses/the-beginner-s-guide-to-react) for React Beginners on egghead.io

Also, its recommended to go through the [Official docs](https://reactjs.org) for more advanced topics.

Redux/Mobx/Context/Recoil
-----------------------------

State management is a major problem when designing component based web applications. Each one of Redux/Mobx/Context/Recoil solves the problem in their own  way and having an idea on atleast one of them is imperative. 

**Redux** : [Getting Started with Redux](https://redux.js.org/tutorials/essentials/part-1-overview-concepts)
**Mobx**: [Intro to Mobx](https://mobx.js.org/getting-started)
**Context**: This is natively supported state management in React - [What is React Context](https://reactjs.org/docs/context.html)
**Recoil**: [What is Recoil](https://recoiljs.org/)

REST
----------------
We make tons of API calls daily and a majority of them are powered by REST. It only makes sense to understand the basic principles behind REST and the corresponding HTTP error codes. 
[Introduction to RESTful APIs](https://dzone.com/articles/introduction-to-rest-api-restful-web-services)

GraphQL
----------------
GraphQL is a latest contender for REST but has its own applications. Knowing when to use REST vs GraphQL is important for optimising the application performance. 
[Learn GraphQL](https://graphql.org/learn/)
[How to GraphQL](https://www.howtographql.com/)

Node.js
--------------
Node.js is the server side runtime for JS which enables you to build APIs and host them using servers. Having to code in same language on both browser and server speeds up the developer velocity. 
[Intro to Node.js](https://nodejs.org/en/docs/guides/)

Golang/Java
----------------
There are certain limitations to what a Nodejs application can achieve and so for such use-cases we use another OO language like Golang or Java. Java is the most popular one but Golang is fast rising

**Java**: [Java Intro](https://www.w3schools.com/java/java_intro.asp)
**Golang**: [A Tour of Go](https://tour.golang.org/welcome/1)

Databases
----------------
There are two types of Databases, SQL and NoSQL. The differences between them both should be learnt and only then we can decide when to use which type of Database. 

**SQL**: There are several popular SQL databases. We have Oracle, MySQL etc, but I will go with [Postgres](https://www.postgresql.org/docs/online-resources/) simply because of its rise and performance.
**NoSQL**: NoSQL databases are used when there is not many inter dependencies among your tables ( putting it very very simply, you should go read the differences ). Both [MongoDB](https://university.mongodb.com/) and [Cassandra](https://cassandra.apache.org/doc/latest/getting_started/index.html) are good candidates.

Cache
-----------

More often that not, you end up using Cache to store data that is needed frequently from the database. 

Again, noting down the popular ones: [Redis](https://university.redislabs.com/) & [Memcached](https://memcached.org/)

----------------------------------------------------------------------------

Apart from this, a Full stack engineer should know the basics of Cloud ( Azure, AWS or Google Cloud) and [Web design](https://web.dev/learn/)

There are a few options I deliberately skipped from this list such as Typescript and Deno etc to not confuse new engineers entering into the realm.

Let me know if you see anything amiss or you want to know about any particular tech.