Chapter #14: Development Environment Setup on Ubuntu
In this chapter, you'll learn how to set up a complete development environment on Ubuntu, including programming languages, IDEs, version control, databases, containerization tools, and best practices for an efficient development workflow.
So far, weโve learned the basics of Ubuntu, security tips, and how to customize your desktop environment to turn your system into a full-blown development powerhouse.
Ubuntu is a favorite among developers because itโs easy to install tools, has a strong command-line system, and most servers run it, so what you build locally will work online.
Whether youโre into web development, data science, mobile apps, or just learning to code, Ubuntu has got you covered, and most of the tools weโll use are free and open-source.
In this chapter, we'll set up a comprehensive development environment covering the most popular languages and tools.
Here's what we'll cover:
- Essential development tools (compilers, utilities, build tools).
- Programming languages (Python, Node.js, Java, C/C++, Go, Rust, PHP).
- IDEs and text editors (VS Code, JetBrains IDEs, Vim).
- Version Control (Git setup and workflows).
- Databases (MySQL, PostgreSQL, MongoDB, Redis).
- Containerization (Docker).
- Best practices (virtual environments, project structure, and more).
By the end of this chapter, you'll have a fully equipped development environment ready for professional work.
Essential Development Tools
Before installing language-specific tools, let's set up essential development utilities that almost every developer needs, regardless of their programming language.
Build Essential Package
The build-essential package is a meta-package, which means it doesn't contain software itself but tells Ubuntu to install a collection of related packages.
sudo apt update
sudo apt install build-essential
What this installs and why you need it:
- GCC (GNU Compiler Collection) - The standard C compiler that turns your C code into executable programs. Many other tools depend on this being installed.
- G++ - The C++ compiler, essential if you're writing or compiling C++ programs. Even if you're not writing C++, many tools you'll use are written in C++ and need this to install properly.
- make - A build automation tool that follows instructions in Makefiles to compile complex projects. Instead of manually compiling each file, make does it automatically in the right order.
- libc-dev - Development libraries for the C standard library. These provide the basic functions every program needs, like printing to the screen or working with files.
Without build-essential, you'll encounter errors when trying to install many packages, especially those that need to compile native code.
Additional Development Tools
Once you have the build essentials, you need to install a few extra utilities that handle downloading files, managing software sources, and version control:
sudo apt install git curl wget software-properties-common apt-transport-https

Breaking down each tool:
- git - A Version control system that tracks changes in your code. It's like having unlimited "undo" for your entire project, plus the ability to collaborate with others without overwriting each other's work.
- curl - Command-line tool for transferring data with URLs. You'll use this constantly to download installation scripts, test APIs, and fetch remote content. It's more flexible than wget and supports more protocols.
- wget - Another download tool, simpler than curl but excellent for downloading files. Think of curl as a Swiss Army knife and wget as a dedicated knife - wget is perfect when you just need to download something.
- software-properties-common - Provides scripts to manage software repositories. This is what lets you easily add new software sources (PPAs) to Ubuntu without manually editing configuration files.
- apt-transport-https - Allows Ubuntu's package manager to retrieve packages over HTTPS (secure connections). Many modern repositories require this for security.
These tools are small but essential, as they make installing and managing software much easier and are used constantly in professional environments.
Terminal Enhancements
A good terminal can make a huge difference in productivity, and Ubuntuโs default terminal works fine, but you can upgrade to something more powerful:
Terminator - Multiple Terminals
Terminator lets you split your terminal window into multiple sections. Imagine being able to run your development server in one pane, edit code in another, and monitor logs in a third - all in the same window. Right-click to split horizontally or vertically.
sudo apt install terminator
Tilix - Modern Tiling Terminal
Tilix is similar to Terminator but with a more modern interface and additional features like custom themes, session saving, and better keyboard shortcuts.
sudo apt install tilix
Oh My Zsh - Shell Enhancements
Zsh (Z Shell) is an alternative to bash with better features, and Oh My Zsh is a framework that makes Zsh even better with plugins and themes: