Ultimate Basic Coder Reference (Bash, Git, VSCode, Nodejs, more)
Tags: node, git, bash, vscode
Published: 2020-09-05 17:01:35

## About

The goal of this guide is to have a lot of the stuff that coders may want to look up all the time with some of the most universally used tools.

## Community

One of the best ways to grow and learn as a developer is to be part of the grander developer community, there are endless slack and discord channels to join. devNursery.com is a website where I have many playlists of videos I've made on every topic you can imagine, we have two communities you can join to meet other developers and to seek or provide mentorship.

devNursery slack channel = https://join.slack.com/t/amwebdev/shared_invite/enQtNzc4NDA3MDU3MDE0LTZjNjIyZmQ3MzA5Y2Q3MWUwZjk3NTIyYjliOThlMWFjNTFkYWM1OGUxN2Y3NGExNGVhOGIzZTg0YTJjZTk5NDA

devNursery discord channel = https://discord.gg/hkdrPwX

devNursery spectrum chat = https://spectrum.chat/devnursery?tab=posts

## Bash

The Bash terminal comes out of the box in unix based systems like Macs and Linux. On windows to use bash you can either download git-bash or use Windows Subsystem for Linux (WSL) to have a Linux environment within your windows install. Having access to the bash shell is a must for any developers workflow.

### Basic Commands

`mkdir folderName` create a folder

`touch fileName` create a file

`rm -r folderName` remove folder

`rm fileName` remove file

`mv filename newFolder/filename` move a file

`cp filename filenamecopy` make a copy of the file

`cat filename` print file contents to terminal

`ssh-keygen` generate an SSH key (usually done in the ~/.ssh folder)

`>` take output of command on left and write to file on the right

`>>` take output of command on left and append to file on the right

`alias delfold="rm -r"` give a command an alias, only lasts for that terminal session, to make it permanent add command to ~/.bashrc, ~/.bash_profile or ~/.profile

### ~/.bashrc, ~/.bash_profile or ~/.profile

Depending on the particular setup for your bash one or more of these files are read whenever a terminal session begins. This is where updates to your path, aliases, functions and other things you want to always happen should be placed.

### nano, vi, vim

nano, vi and vim are text editors that accessible within the Bash terminal, they may come already installed or you may need to install them. To edit files with these the commands are pretty straightforward

`nano filename`
`vi filename`
`vim filename`

When connecting to a web server where there is no GUI these are usually your main option for editing files.

## VSCode

Visual Studio Code is the free text editor from Microsoft that is packed with great features and shortcuts to make development more pleasant. Here are some of the most popular command.

- `ctrl+/` comment or uncomment code
- hold `alt` and set multiple insertion points
- `ctrl+s` save

### Extensions

VSCode also has a huge library of extensions that make life better such as...

- live server: spin a static web server from any folder
- peacock: have different VSCode windows in different colors
- Rainbow Brackets: Color your curly and square brackets
- auto-rename: Auto rename closing tags when editing opening html tags
- auto-close: Auto generate the closing tag for html tags
- Prettier: Auto format your code
- Live-share: work on the same code at the same time
- Gitlens: supercharge the git features in VSCode
- SQLtools: Explore and manage databases from VSCode
- Remote - SSH: Work with files from a remote server as if they were on your pc
- Better Comments: More colorfule comments in your code
- Polacode: tool for better screenshots

## Git

Versioning software for keeping track of versions of your project. Most used for code but can keep track of versions of any files.

### Rules to Keep in Mind

- Don't make a git repository inside of another repository
- One code project, one repository
- the root of the repository should be the root of your project, which is where the main project files are located (package.json, Gemfile, manage.py, composer.json)

### Commands

`git init` initialize a new git repository

`git add .` add all files in the current folder and its subfolders to staging

`git commit -m "a message"` commit files currently in staging

`git status` red files are changed files not in staging, green are in staging

`git remote` list projects remote repositories (github, gitlab, bitbucket, heroku)

`git remote add remoteName remoteURL` add the url as a remote under the specified name

`git remote rm remoteName` remove the particular remote

`git push remoteName branchName` push code of a particular branch to the remote

`git pull remoteName branch` pull code of a particular branch from the remote

`git checkout -b branchName` create a new branch, starts as copy of current branch

`git branch` list all branches and mark current branch

`git checkout branchName` switch to specified branch

`git merge branchName` merge specified branch into current branch

## NodeJS

NodeJS allows you to run javascript files outside of the browser to create web servers, web scrapers, scripts, and anything else you can think of. Below are many of the nodeJS command you should know.

### commands

`node filename` run the specified javascript file

`npm init -y` start a new node project by create a package.json file

`npm install packageName` install the specified package to your project

`npm install -g packageName` install the specified package globally so all project can use it (use rarely)

`npm install --save-dev packageName` install the specified package as a development dependency (won't install in a production environment)

`npm install` install all dependencies listed in package.json

`npm run scriptName` run particular script specified in package.json

`npm start` will run start script, if there isn't one will default to "node server.js"

### The process object

Running a node script represents a single process on your computer, to give you access to information about your process a `process` object is available to all script run with node. You can see all its contents with `console.log(process)`

A couple of useful parts to know...

#### Environment Variables (process.env)

You can pass variable into the process.env object like so.

`MYVAR=5 node server.js`

you can access this variable in this script like this...

`console.log(process.env.MYVAR)`

*libraries like dotenv allow you to specify environment variables in a special .env file which will then add these variables to process.env when the script starts*

#### Argument Variables (process.argv)

You can pass arguments into your scripts like

`node server.js "my argument"`

All the arguments get passed into an array at process.argv. The first two element of array are file references so the first argument is at `process.argv[2]`.

### Packages worth installing globally

`npm install -g lite-server`
Allows you to generate a static web server in the current folder with the command `lite-server`

`npm install -g nodemon`
You can run a file but nodemon will watch for changes in any javascript or json files and auto re-run the file on changes (great for servers)
`nodemon server.js`

## Other

- Stackoverflow.com is great resources for any and all problems

- HackerRank.com and CodeWars.com are great places to practice code

- Generalassemb.ly is a great place to enroll in a coding bootcamp if switching careers, they also often schedule free workshops and social events.

- Repl.it is a great place to test out new languages before install on your machine

- Codepen.com another great site to test html/css/js ideas

- RunKit.com is a place to prototype NodeJS project

- For places to deploy your project checkout this blog post with a comprehensive list => https://tuts.alexmercedcoder.com/deploy/

- Find videos on the basics of git, vscode, bash and more at intro.alexmercedcoder.com

- Trello, Notion.so, Asana, Airtable, and Google Docs are great tools for project management and team coordination