You’re starting a new school year, and you need to get up to scratch. You’re wondering what tools are out there or what you’re missing. There are thousands, but if you’re new to the subject, it’s not spelled out in black and white. Here are eight types of tools I know you will need.

8Notebooks: Baby Steps for Programmers

Notebooks provide an interactive environment for writing and executing code. In a notebook, each line of code can be run separately, building upon previous lines. They’re often used for quickly prototyping, experimenting with ideas, and viewing results in a clear, nicely formatted way.

Notebooks are a popular choice in data science and are commonly used when working with complex data such as DataFrames (tabular data) or running database queries (for example, with QueryBook).

Web browser showing Jupyter with a code cell list; several lines of code are visible in the notebook interface.

Jupyter is the king of notebooks, but it’s not only limited to Python. There is along list of Jupyter kernels, which allow it to run many programming languages. With Jupyter, you can run and visualize your code easily.

7Code Formatters, for the Lazy Coder

If you find yourself manually formatting your code to make it look nice, you probably want a code formatter. A code formatter reads your code and applies a consistent style across it. It doesn’t sound like much, but fewer distractions mean more focus.

Often used formatters are:

6Linters

A linter is a tool that looks for questionable code. You scan your source code, it consults its internal rules, and it displays warnings whenever you’re doing something that you shouldn’t. Linters are configurable and sometimes pluggable (meaning it accepts plugins). You can define rules that relate to style or to more serious security issues.

Linters are common and the often used tools are:

ESLint report in a terminal showing 10 problems, grouped by file path. Each entry lists a line number, error or warning, and rule name.

5Containerization: Run Any Service, Any Place, Any Time

Today’s development landscape isn’t just about packages, and if you rely on any services at all (e.g., databases like Postgres, MySQL, etc.), you probably want to avoid installing and configuring them manually. The most common approach is to use pre-configured containers, which are small, isolated environments into which you may install software (such as services).

Tools like Docker and Podman allow you to download and run preconfigured recipes (aka Dockerfiles). These Dockerfiles describe how to set up the containers and configure the desired services for you. That moves the burden of boring details onto the experts: the Dockerfile maintainers.

A terminal showing a git diff with the commit author and hash, and added lines highlighted in green.

4Version Control: Savepoints That Save Your Ass

A Version Control System (VCS) is a tool that manages and tracks revisions to your software. When you make changes to your source code, the VCS records them in a way that allows you to go back in time. Think of it as a checkpoint system for your code—it gives you the freedom to make drastic changes without irreversible damage.

There is really only one king in the VCS world: Git. I would like to say that Git is a simple tool, but it’s not. However, you may go far with simple commands, so the learning curve isn’t very steep at all.

VS Code open with default layout: editor with colored code in the center, file explorer on the left, terminal panel at the bottom, and a Copilot pane on the right with an input box.

If you’re submitting code assignments for your class, you will almost certainly do it via a service like GitHub, a place that hosts Git software repositories.

3Package Managers: The First Tool You Will Truly Need

You won’t get very far writing code without installing third-party libraries (aka dependencies, or packages). We install packages with a package manager. Every language has their go-to package manager and method for installing packages.

Package managers differ in ways that are not obvious. In Python, each package manager stores downloaded packages in different locations, some global and some local to your project. For JavaScript, some package managers use up lots of space; others were designed to avoid that specifically.

Below are some common package managers for common languages:

Package managers are as crucial as the wheels on a car.

Testing is a crucial component when developing software. A test runner is a language-specific testing framework. You use such a framework to run portions of your code under controlled conditions, then ensure that it matches expectations.

Tests serve two purposes:

When you change something, how do you know that something else hasn’t broken? Consequently, when your code starts to become complex, testing frameworks are an absolute must. Software without tests is like hiring doctors without credentials; it’s absolute lunacy.

A testing framework is language-dependent, and the most common ones that you’re likely to need are:

1IDEs: The Centerpiece of Your Toolset

An IDE, or integrated development environment, is a software application that brings together the essential tools often needed to develop software. Many IDEs are available—some are designed for specific programming languages, while others support a wide range of languages.

Without an IDE, you will miss out on several crucial features, such as

The above list is just scratching the surface of what an IDE can do. Almost everyone who writes software uses an IDE or a similar tool—for example, Vim, Emacs, or Neovim. I’ve previously given a list ofreasons why I use Neovim, which may interest you.

You can find acomparison list of IDEson Wikipedia, but the most popular choice is often VSCode. VSCode supports many languages, and it’s extensible. There are thousands of extensions in the VS Code marketplace that solve a great many problems. In fact, we’ve covereda list of essential VS Code extensionsbefore. Some even claim thatVS Code makes them a better programmer.

IDEs, VCS, notebooks, and code formatters all make your life easier by taking some of the laborious elements out of writing software.

Linters and test runners are essential for catching bugs and ensuring an acceptable standard of quality for your code.

Package managers and containerization let you use other people’s code, but containers also allow you to wrap up your code in a way that’s guaranteed to work on every machine.

Since you’re new to programming, you may also be interested inhabits to grow to become a better programmer.