Skip to content
Happy Programming Guide
Start learning
Developer Setup

How to Set Up a Development Environment (Windows and Mac)

A development environment is the set of tools your code needs to run. Here is what to install, in what order, on Windows and macOS, and the choices that save trouble later.

An office workspace with a computer

A development environment is everything on your machine that turns source code into running software: a package manager, an editor, version control, a terminal you like, and the language runtimes for what you build. Setting it up takes an hour if you do it in the right order. This is that order, for Windows and macOS, with the choices that avoid the classic problems.

What you are building#

Layer Purpose Windows macOS
Package manager Install and update everything else winget Homebrew
Terminal Where you run commands Windows Terminal, PowerShell Terminal or iTerm2, zsh
Version control Track changes, share code Git Git (with Xcode tools)
Editor Write code VS Code, or an IDE for your language
Runtimes Run your language Python, Node, .NET, Java, as needed
Isolation Keep projects separate venv, nvm, Docker

Install in that order. The package manager goes first because it installs everything below it and keeps it updated.

Windows#

1. winget and Windows Terminal#

Both ship with current Windows 11. Open Windows Terminal, which gives you tabs and a proper PowerShell, and check:

POWERSHELL
winget --version

If winget is missing, install App Installer from the Microsoft Store.

2. Git#

POWERSHELL
winget install --id Git.Git -e
git --version          # in a new terminal window
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global core.autocrlf true

That last line handles Windows line endings sensibly when sharing code with Mac and Linux users.

3. Editor#

POWERSHELL
winget install --id Microsoft.VisualStudioCode -e

During install, keep the option to add Open with Code to the context menu and to add it to the PATH; the code . command is worth having.

4. Runtimes#

POWERSHELL
winget install --id Python.Python.3.13 -e
winget install --id OpenJS.NodeJS.LTS -e
winget install --id Microsoft.DotNet.SDK.10 -e
winget install --id EclipseAdoptium.Temurin.25.JDK -e

Install only what you need. After each, open a new terminal and confirm with python --version, node --version, and so on. If a command is not recognised, the installer did not add it to the PATH; the Python one in particular has a checkbox for it.

5. Decide about WSL#

Windows Subsystem for Linux gives you a real Ubuntu inside Windows. If you will deploy to Linux servers, work with Docker, or follow tutorials written for Linux, it is worth using from the start:

POWERSHELL
wsl --install

Then open the Ubuntu app, and install runtimes inside it with apt. VS Code’s WSL extension opens folders inside Linux directly. Keep project files on the Linux side, under your Linux home directory, rather than on the Windows drive; the file system is much faster there.

If you write .NET, PowerShell scripts, or Windows applications, skip WSL and work natively.

macOS#

1. Command line tools#

Terminal
xcode-select --install

This installs Git, a C compiler and the other tools that everything else depends on. It is a few hundred megabytes rather than the full Xcode, which you only need for iOS development.

2. Homebrew#

Terminal
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

At the end, the installer prints two lines to add to your shell profile. Do that, or nothing installed with Homebrew will be found:

Terminal
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
brew --version

3. Editor and runtimes#

Terminal
brew install --cask visual-studio-code
brew install python@3.13 node
brew install --cask temurin@25          # Java, if you need it
brew install --cask dotnet-sdk          # .NET, if you need it
Terminal
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

4. The shell profile#

macOS uses zsh, and zsh reads ~/.zshrc for each terminal window. Anything that needs to be on the PATH, and any aliases, go there. When a tool “works in one terminal and not another”, it is always this file.

Terminal
echo $SHELL            # /bin/zsh
code ~/.zshrc          # open it in VS Code

Both platforms: isolation per project#

The single most valuable habit is never installing project dependencies globally. One project needing an old library and another needing a new one is the classic way environments rot.

Terminal
# Python: one virtual environment per project
python -m venv .venv
source .venv/bin/activate        # .venv\Scripts\activate on Windows
pip install -r requirements.txt

# Node: dependencies are per project by default; versions via nvm or fnm
fnm use 22

# Anything with services: Docker Compose
docker compose up

Docker Desktop is the last piece for anyone who works with databases or several services. Install it once you have a project that needs it, not before; it is a large install and needs WSL on Windows.

Editor setup that pays off#

  • Install the extension for each language you use, not every language.
  • Turn on format-on-save with a formatter for your language.
  • Learn three shortcuts: command palette, quick open file, and toggle terminal.
  • Turn on Settings Sync so a new machine takes minutes rather than an afternoon.

Questions people ask#

Do I need an IDE or is VS Code enough?

VS Code covers most languages well. Java and C# developers often prefer IntelliJ or Visual Studio for their deeper project tooling; try VS Code first and move if you hit its limits.

Should I use WSL for everything on Windows?

For web, Python and anything destined for Linux servers, it is a good default. For .NET and Windows-native work, stay native. Many people run both.

What about Linux?

The macOS section mostly applies: your distribution’s package manager instead of Homebrew, and a bash or zsh profile file. Linux is the easiest platform to set up for development.

How often should I update everything?

Editor and package manager: whenever prompted. Runtimes: when a project needs a newer version, not just because one exists. Updating a runtime under a working project is how things break on a Friday.

Where to go next#

VS Code setup for beginners: the settings worth changing firstRead next

Keep reading

Keep going — pick your next guide

The fastest way to improve is to read one guide, then build the thing it describes. Start with the basics, or jump straight to a project.

Ask a question or share what worked

Your email address will not be published. Required fields are marked *