What tools does a developer use?
Tags: beginners, career, tools
Published: 2019-02-25 14:22:25

---
title: What tools does a developer use?
published: true
description: Learning all the tools available as a developer is hard
cover_image: https://thepracticaldev.s3.amazonaws.com/i/6b50n5whypwviczdw9z0.png
series: Learning Developer Tools
tags: beginner, career, tools
---

As developers, we use many different tools - code editors, version control, terminal emulators, and more. As a new developer, finding the right tools can be difficult and there are often many different opinions. In this 7 part series, I will be covering the tools we use and what impact our tools have on how we do our jobs.

> Note: There are countless tools in the wild - the are as varied as the developers that use them. Nothing here should be taken as gospel truth or as more than one developer's opinion. My goal here is to provide an overview of the tool landscape and to give you an overview of evaluating tools and your workflow.

For this first section, let's go over a few of the more common tools developers use and what they are for.

---

# The Operating System (OS)

In some ways, your operating system is the most important tool in your tool chest. In fact, it _is_ your tool chest. There are many different operating systems out there and many people will try to tell you why their operating system is the **One True Operating System™️**. In reality, you should use the OS that fits best with your style and has the tools you need. I will list out the basic pros and cons of each OS below. Stay tuned for the Operating System article coming tomorrow for more!

## Linux

Many people have a love/hate relationship with Linux. There are hundreds of different distro's out there, each with its own ideas about what a Linux operating system should do and how it should work. I won't cover any specific repo's here, but that will be in the next article!

### Pros
1. Very customizable
2. Great tool support
3. Lightweight, can run on most hardware

### Cons
1. Configuration can take for ever
2. You can spend forever fixing small problems that you caused
3. You are the support squad

## MacOS

MacOS is the operating system that runs on Apple computers. 

### Pros
1. Specifically designed for the hardware it is running on.
2. Great tool support / supports most Linux tools
3. Great support from Apple

### Cons
1. Pricey hardware! Planned obsolescence.
2. Some services built for Linux only _half_ run
3. If you don't like the looks, there isn't much you can do

## Windows

Windows is a controversial choice for developer software, unless you are working on Windows servers running languages like C#. Lately, with the acquisition of Github and the introduction of the Windows Subsystem for Linux, the future looks bright for Windows.

### Pros
1. Runs on _tons_ of hardware
2. Microsoft is doubling down on developers lately!
3. Can run a lot of software now with Windows Subsystem for Linux

### Cons
1. Buying a license can be costly
2. Legacy of having bad tool support
3. Requires special software to run basic tools

---

# The Code Editor

The Code Editor is possibly the single most-interacted-with tool a developer has. This is the interface by which you take the thoughts in your head and turn them into code. There are tons of options - Vim, VS Code, Sublime Text, Emacs, and on and on. The important thing is learning one you like and getting good with it. Keyboard shortcuts will save your life - and your fingers.

---

# The Command Line / Terminal Emulators

The command line is your connection to low-level tools and a great way to speed up your development processes. Many developers get by with graphical tools, but having at least a bit of knowledge about the command line is a great addition to your tool chest. A few terms you will need to know:

**Command Line:** The command line is the place where you type in commands
**Terminal Emulator:** A terminal emulator is the program you use to access the command line
**Shell:** The shell is the program that handles the commands you enter into the command line

## Bash

Bash (Bourne Again SHell) is probably the most popular shell - its the default on most operating systems. 

## zsh, fish, and more

There are many other shell programs out there that all do different things. Find the one you like the best and learn to use it! They each have different features and tools preinstalled.

## Command Line Interface (CLI)

The CLI is a catch-all for any tool that is interacted with through a command line. Many tools that you encounter may have a graphical component and a CLI. For instance, many text editors have a way to open files from a file explorer (like Finder on Mac) or through the command line, with a command like `code` or `subl` (for VS Code and Sublime Text respectively).

---

# Version Control

Version control is how developers avoid [destroying all the work they did by accident](https://dev.to/wuz/making-mistakes-my-first-big-programming-blunder-48m2) and to collaborate well with other developers. There have been many iterations and changes to version control over the years. Depending on what company or team you work on, you may not have a choice in version control. I have worked at companies that used SVN, CVS, and git. They all exist in the wild.

## git

`git` is probably the most popular version control these days. It has many great features and fairly easy to understand syntax. It implements a few different concepts, but the big ones are repositories, pulls, clones, branches, and commits. We'll cover those in the version control article.

## svn, cvs, and more

As I mentioned there are tons of other tools out there for version control. They all have different concepts and verbiage that is used to interact with them, but for the most part they are all similar. Any tool you use will have some graphical tool and a command line interface. 

## Github and repository hosts

Many services exist to centralize your version control. The benefits of this are that you have a system for maintaining branches, receiving code from other people, and interacting with your repositories. Github is probably the most well known and operates through `git`.

---

# Debuggers

Debuggers are another major tool used in development. Many programming languages come bundled with a debugging platform. For server-side languages, tools like `gdb`, `pry` in Ruby and many more. The tool you need for debugging will depend on the language and environment you are debugging for. In the debugger article, we'll spend some time discussing debugging strategies and how to choose the right debugger for the job.

## Chrome DevTools

One of the most well-known debugging tools out there. It helps debug web sites - anything with HTML, Javascript, or CSS. There are breakpoints, watchers, and the ability to live change code on a site and see your changes.

## gdb, pry and more

These server side tools work well for debugging compiled languages and those run through the command line. `gdb` and `valgrind` allow you to access the memory of a compiled program and see what could be going wrong.

---

# The Integrated Development Environment (IDE)

Finally, the last major tool I'd like to discuss is the IDE. An IDE is software that combines many of the previously discussed tools into a single suite of tools. This has its pros and cons, but the major point is: by bundling all your tools together, you have a great cohesion between your tools but it can be hard to replace any single tool you don't like. Think of an IDE like buying a prefilled toolbox from the store - it will have everything you need for a while, but eventually, you might need something that doesn't fit in the box and that could be a pain.

I hope this introduction was helpful! Check back tomorrow for the post on operating systems! Comment with questions and comments and [come discuss with me on Twitter](https://twitter.com/CallMeWuz)!