Full Stack Javascript Web Development Concept map
Tags: webdev, javascript, beginners, fullstack
Published: 2024-03-23 17:01:48

# Concept Map
The full stack web development world and javascript keep moving at a tremendous pace.  This is my attempt to capture some of the higher level concepts, languages and tools that a beginner and intermediate developer should be aware of.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rynddl9gxrrep65prxm8.png)

Note - I included some other technologies that are not in my primary stack, but these are the ones I am most familiar with:

- <u>Text editor</u> - VsCode
- <u>Source control</u> - Git
- <u>Package manager</u> - Npm
- <u>Javascript technology</u> - React
- <u>Server</u> - Node JS
- <u>Middleware</u> - Express
- <u>ORM</u> - Sequelize
- <u>Database</u> - Was SQL Server, now moving to Postgres

# Writing Code

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ywj3vwx7gt6t7fcvhur6.png)




**text editor** - a text editor is where you write your code.  These range from command line tools to fully featured tools
- <u>VsCode</u> - mainstream text editor.  Has lots of add-ons to enable additional capability
- <u>Sublime</u> - slightly more lightweight than vscode
- <u>Notepad++</u> - basic text editor with some neat addons.
- <u>vim</u> - command line text editor. More powerful than nano.  Two modes, edit, and command mode.
- <u>nano</u> - command line text editor.  simpler and less capable than vim. 

**source control** - this is of utmost importance in todays distributed development environment.  Even with a single developer, source control allows careful control over change and the ability to revert back to known working states when things go wrong.
- <u>git</u> - this is the mainstream development tool.  This runs on your own pc locally and connects to a cloud tool like github or gitlab.  
- <u>github</u> - cloud service that is the source for sharing code. 

# Setting up a project

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9sqjnvtk64sdoa5iavrt.png)


**command line** - a way to control the computer with out a graphical interface.  A number of tools must be manipulated with the command line.
- <u>bash</u> - created in 1989, unix shell and command language.
- <u>zshell</u> - or zsh, created in 1990  is a unix shell with improvements over bash including the ability to use shell scripts.  Comes as default language in macOS starting in Catalina.
- <u>command shell</u> - windows command line built to automate routine tasks
- <u>powershell </u> - windows command line built to extend command shell to run more sophisticated commands called cmdlets

**build tools and bundlers** - are tools to create your web application
-<u>webpack</u> - is a tool that takes your source code from your project and converts it to a bundle that can be loaded properly by your browser.
-<u>create react app</u> - (CRA) is a tool used to create a number of files as a starting point for the project and packages it for deployment.  CRA also uses a webpack under the hood, but the user doesn't have to understand these details.

# Using others code

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d3l5rtb848bhed2tth9p.png)


**package manager** - package managers exist to help distribute all the pieces of code people have published.  Using other peoples code makes writing code faster.
- <u>npm </u> - stands for Node Package Manager and is the default manager for NodeJS.  
- <u>yarn</u> - stands for Yet Another Resource Navigator. Yarn was developed to overcome some issues npm had at the time, but both have kept pace with each other and are very similar in capability.

# Running a server


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qgks7unanv0adfti2tc7.png)




**virtualization** - is done to make it easier to distribute an application to multiple hardware environments.
- <u>docker</u> - is an open platform for developing shipping and running applications.  Docker uses a client server model. [docs](https://docs.docker.com/get-started/overview/)
- <u>podman</u> - is a daemonless, open source linux native tool designed to deploy applications using containers and images. Podman was designed to be more secure than docker.[docs](https://docs.podman.io/en/latest/)

**environment variables** - are used primarily to store data the application needs but should not be stored in the source code like user name and password for user and database logins.

# Javascript Packages

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jsdf9lys0husfpdof89.png)




People write code to solve problems.  The common problems everyone solves over and over end up in packages that everyone ends up re-using.  Don't be afraid to use other peoples code.  This is just a small sampling of available packages.

**Front end only** - These packages are designed to run in your browser not on the backend server.
- <u>material UI</u> - open source library that implements google's styling for html components [docs](https://mui.com/material-ui/getting-started/)
- <u>redux</u> - Redux is a key tool used in managing state across an application.  This can be used with any web technology including React, Vue and Angular [docs](https://redux.js.org)
- <u>react tables</u> - react tables is a library that exists for react that make creating tables easier.  There are other competing libraries including one in material UI worth considering. [docs](https://react-tables.com)
- <u>bootstrap</u> - toolkit for styling websites.  Has lots of themes and capabilities.  [docs](https://getbootstrap.com)
- <u>d3</u> - very power visualization library enabling dynamic visualizations. [docs](https://d3js.org)

**For both front end and backend**
- <u>lodash</u> - utility library enabling things like deep object comparison that aren't easy to do with javascript out of the box. [docs](https://lodash.com)
- <u>package.json</u> - file used for a number of things including saving your dependencies for both front and backend, so that your package manager can easily install the packages you need on another machine.

**Backend only**
- <u>nodemon</u> - enables automatic reload of your server after code change [docs](https://nodemon.io) 
- <u>rimraf</u> - enables easy deleting of server files including npm packages and optimized build files[docs](https://github.com/isaacs/rimraf#readme)

# Front End

Also referred to as the client.  The front end is what runs in your browser and can be run on many different computers at the same time.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7fa2tigx1k5vu4cfzk1l.png)



**Document object model** - connects web pages to scripts by representing the structure of the page in memory. [docs] (https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model)

**Structure** - the structure of your webpage is important
<u>HTML</u> - (HyperText Markup Language)  is the code used to structure a web page and its content. [docs](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/HTML_basics)

**Styling** - The difference between a webpage that looks great and one that looks outdated is almost always the styling.
<u>CSS</u> - Cascading Style Sheet allows you to format your webpage with color, size, spacing.  [docs](https://developer.mozilla.org/en-US/docs/Learn/CSS)

**Images** - A picture is worth 1,000 words, using image on a webpage is key to rich content.
<u>SVG</u> - Uses geometric shapes to render graphics.  Resolution independent. [docs](https://developer.mozilla.org/en-US/docs/Web/SVG)
<u>XML</u> - stands for Extensible Markup Language and is similar to HTML but has no predefined tags to use.  SVG stores its data in XML. [docs](https://developer.mozilla.org/en-US/docs/Web/XML/XML_introduction)
<u>Canvas</u> - Canvas uses pixels.  Gets blurry when resized.  Can be more performant. [docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas)

**Javascript in the browser**
<u>React</u> - react is a library that gives developers an application programming interface (API) to manipulate the DOM (this is React's ReactDOM package).  React uses components and JSX to make building reusable code easier. [docs](https://react.dev)
<u>JSX</u> - is a syntax extension for React Javascript code that lets you write HTML-like markup in a javascript file.  This makes it easier to write reusable HTML. [docs](https://react.dev/learn/writing-markup-with-jsx)
<u>State</u> - a key react concept that guides setting and storage of data between renders. [docs](https://react.dev/learn/updating-objects-in-state)
<u>Hooks</u> - a key react concept for logic triggered by state change [docs](https://react.dev/reference/react-dom/hooks)
<u>Vue</u> - is a framework for building web interfaces.  Vue is lightweight and best for small projects prioritizing speed over functionality.  [doc](https://vuejs.org)
<u>Angular</u> - web development framework.  Angular is best for dynamic more feature rich sites. [docs](https://angular.io) 

Note: React vs Vue/Angular - The key difference between React and Vue/Angular is that react is a library not a framework and therefore requires you to do more work to build your project in library and tool selection.  Vue/Angular are frameworks with reduced choices for project setup.  Vue/Angular should generally be easier to learn but less flexible than React which is harder to learn but much more flexible.

# Networking


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6i6v6uc4jibt8v70uopt.png)

To connect the front end with the backend you have to have some understanding of networking.

**Ip addresses** - IP stands for internet protocol.  An ip address is a string of characters that identifies each computer on a network. 

**localhost** - is the ip address of the current system you are developing on.  This is the ip address used most commonly in development. The address 'localhost' and 127.0.0.1 are equivalent.  

**DNS** - stands for Domain Name System which is a lookup table between domains we know like google.com and IP addresses like 104.234.123.11.

**IPV4** - is the 4th generation of the internet protocol.  IPv4 is in the format X.X.X.X where each X can be any value between 0 and 255.  IPv4 has 4.29 billion possible combinations (which has now been reached)

**IPV6** - is the 6th generation of the internet protocol.  The key change is to create more available addresses.  Using 128-bit addresses vs IPv4s 32 bit addresses, IPv6 can support 2^128 internet addresses, which is a lot.  IPv6 format is xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx.

**port** - a port is the connection point of network connections.  Each port is associated with a specific process or service.  If you don't have the right ip addresses and ports, you will not be able to access your front end via the browser and your front end won't connect to the backend.

**Subnet mask** - a subnet mask is used to identify which network an IP address belongs to.  Subnet masks can be created to create subnetworks that can't see each other.  Often if networking issues happen, one needs to understand subnet masks to make sure two computers are on the same network.

**Networking tools**
- <u>ping</u> - the most basic tool, that answers the question, "can I see a computer through a network?"
- <u>browser network tab</u> - a more advanced tool that can be used inside the developer tools in a browser.  This will show data received and sent to the browser.
- <u>wireshark</u> - a very advanced network tool that allows you to see all the packet traffic in a network.


# Back End


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ilnarmpsgail8r8u992x.png)



**Server** - a computer that provides functionality for other programs and devices called clients.
- <u>nodeJS</u> - the mainstream javascript server choice. [docs](https://nodejs.org/en)

**Middleware** - middleware is the layer between the response and the request.
- <u>express</u> - one of the most popular middleware tools, lightweight and easy to learn. [docs](https://expressjs.com)
- <u>NestJS</u> - opinionated more scalable, but harder to learn [docs](https://nestjs.com)

**ORM** - stands for object relational mapping.  This enables you to write less SQL and makes Create, Read, Update, Delete (CRUD) operations much faster for a developer to implement.
- <u>Sequelize</u> - modern Typescript and NodeJS ORM for Oracle, Postgres, MySQL, MariaDB, SQLite, SQL Server+[docs](https://sequelize.org)

# Typescript
Typescript can be used in both the front end and the back end and gives strong typing to javascript for easier error prevention.  The learning curve can be difficult at times but the benefits are worth it! [docs](https://www.typescriptlang.org)


# Summary
This took me a while to build these concepts and relationships in my head.  Hopefully they are helpful for some of you still trying to understand the fundamentals of full stack web development.

Let me know if there are more concepts you think I should include.  Obviously at some point this becomes more advanced.  I did introduce some advanced concepts, but I think you have to hear about things several times before you make the effort to learn them.