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
- Very customizable
- Great tool support
- Lightweight, can run on most hardware
Cons
- Configuration can take for ever
- You can spend forever fixing small problems that you caused
- You are the support squad
MacOS
MacOS is the operating system that runs on Apple computers.
Pros
- Specifically designed for the hardware it is running on.
- Great tool support / supports most Linux tools
- Great support from Apple
Cons
- Pricey hardware! Planned obsolescence.
- Some services built for Linux only half run
- 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
- Runs on tons of hardware
- Microsoft is doubling down on developers lately!
- Can run a lot of software now with Windows Subsystem for Linux
Cons
- Buying a license can be costly
- Legacy of having bad tool support
- 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 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!
Top comments (2)
Hi Conlin!
is this still true? I remember it was for some time but macOS seems very well supported all around
Kind of yes, Windows 10 Home and Pro licenses are around 100/150€ lately, which is not zero but not insane either (considering that Microsoft doesn't usually charge you for the hardware as the gatekeeper).
Thanks for this new series!
One of the best things I learned about Linux:
Backup early and often, store personal files (the ~/ dir) on a seperate drive from the OS. I have messed up my Ubuntu instal more time than I can count. With the backup it is a matter of 15 minutes and the OS is back to
last known good
. Windows could learn a thing or two about separation-of-responsibility when it comes to user level data and OS level data.Loved the article @Conlin; keep it up.