Developer Tools
Vocabulary for the tools developers use daily: IDEs, debuggers, profilers, linters, version management, package managers, and productivity tools.
- IDE (Integrated Development Environment) /aɪ diː iː/
A software application combining a code editor, debugger, build tools, and language intelligence into a single environment. Examples: VS Code, IntelliJ IDEA, PyCharm, Xcode, Android Studio. Distinguished from plain text editors by features like IntelliSense, integrated terminals, and project-aware navigation.
"The IDE catches type errors as I type — IntelliJ highlights the incompatible return type in red before I even try to run the code. This tight feedback loop saves time compared to discovering type errors at runtime."
- Debugger /dɪˈbʌɡər/
A tool that lets you pause program execution, inspect variables, and step through code line by line to diagnose bugs. Key concepts: breakpoint (pause here), step over (execute line, don't enter function), step into (enter the function call), step out (finish current function), watch (monitor a variable's value).
"I set a breakpoint on line 247 and used the debugger to watch the cart total variable — it was returning NaN because one product had a malformed price string. Without the debugger, this would have taken hours to find in a 3,000-line codebase."
- Linter /ˈlɪntər/
A static analysis tool that checks source code for errors, style violations, and potential bugs without running it. Common linters: ESLint (JavaScript/TypeScript), Pylint/Ruff (Python), golangci-lint (Go), Rubocop (Ruby). Linter rules are configurable and enforced in CI pipelines.
"ESLint caught a potential null reference — we're accessing user.profile.name without checking if profile exists. The linter rule requires optional chaining: user.profile?.name. We would have hit this in production with some user accounts."
- Formatter /ˈfɔːmætər/
A tool that automatically reformats code to a consistent style — indentation, spacing, line length, quote style. Unlike linters, formatters change code automatically. Examples: Prettier (JS/TS/CSS), Black (Python), gofmt (Go), rustfmt (Rust). Eliminates style debates in code reviews.
"We run Prettier as a pre-commit hook — code is automatically formatted before every commit. Code reviews no longer include comments about indentation or trailing spaces; reviewers focus on logic, not style."
- Package Manager /ˈpækɪdʒ ˈmænɪdʒər/
A tool that automates installing, updating, configuring, and removing software dependencies. Language-specific examples: npm/Yarn/pnpm (JavaScript), pip/Poetry/uv (Python), Maven/Gradle (Java), Cargo (Rust), go modules (Go). The package manifest (package.json, requirements.txt, Cargo.toml) lists all dependencies.
"Never install packages globally for project dependencies — use your package manager to add them to the manifest. 'yarn add lodash --save' updates package.json so everyone on the team uses the same version when they run 'yarn install'."
- Version Manager /ˈvɜːʃən ˈmænɪdʒər/
A tool that allows multiple versions of a language runtime to coexist on the same machine and switch between them per project. Examples: nvm (Node.js), pyenv (Python), rbenv (Ruby), asdf (multi-language). Solves the "works on my machine" problem from runtime version mismatches.
"We use pyenv so each project uses its own Python version — the ML repo uses Python 3.11, the legacy API still runs on 3.8. Without pyenv, installing a library for one project would break the other."
- Profiler /ˈprəʊfaɪlər/
A tool that measures where a program spends its time and memory, identifying performance bottlenecks. CPU profilers show which functions take the most time; memory profilers show what is consuming memory. Profile-guided optimisation avoids improving the wrong code.
"Before optimising the slow endpoint, I ran the Python profiler — it showed that 94% of the time was in a single regex match called 10,000 times per request. Pre-compiling the regex reduced the endpoint from 1.2s to 80ms."
- REPL (Read-Eval-Print Loop) /rep(ə)l/
An interactive programming environment that reads a command, evaluates it immediately, prints the result, and waits for the next input. Used for exploration and quick testing. Examples: Python interactive shell, Node.js REPL, browser DevTools console, Clojure REPL.
"When I'm unsure how a library function behaves with edge inputs, I test it immediately in the Python REPL — much faster than writing a test file, running it, and reading the output."
- Breakpoint /ˈbreɪkpɔɪnt/
A marker in source code that tells the debugger to pause execution at that line. When execution pauses, you can inspect variable values, examine the call stack, and decide what to do next. Conditional breakpoints only pause when a specified condition is true.
"I set a conditional breakpoint on the payment processing function: it only pauses when amount > 10000. This lets me catch the specific case that was failing without manually stepping through thousands of normal transactions."
- Git Hooks /ɡɪt hʊks/
Scripts that run automatically at specific Git events: pre-commit (before committing), pre-push (before pushing), commit-msg (after writing commit message). Used to enforce code quality gates locally. Managed by tools like Husky (JavaScript) or pre-commit (Python).
"Our pre-commit hook runs linting and type checking before every commit — if ESLint or TypeScript reports errors, the commit is blocked. This catches issues locally before they reach the PR and waste CI minutes."
- Docker Desktop /ˈdɒkər ˈdesktɒp/
A GUI application for managing Docker containers and images on developer machines. Includes Docker Engine, Docker CLI, Docker Compose, and Docker Extensions. Simplifies container management on macOS and Windows where Linux containers run in a VM.
"Docker Desktop makes it simple to run our local dev environment — one command spins up the API, database, Redis, and message queue without installing anything globally on the developer's machine."
- DevTools (Browser) /devtuːlz/
Built-in browser developer tools for debugging web applications. Key panels: Elements (inspect HTML/CSS), Console (JavaScript execution and logs), Network (HTTP request inspection), Performance (profiling), Sources (JS debugging with breakpoints), Application (cookies, localStorage, service workers).
"I used the Network tab in DevTools to find the slow request — a single API call was taking 4.2 seconds. The timing breakdown showed 3.8s was server processing time, not network transfer. That pointed directly to the backend."
- Task Runner /tɑːsk ˈrʌnər/
A tool that automates repetitive development tasks: compiling, bundling, running tests, watching for file changes, code generation. Examples: npm scripts (package.json scripts), Make (Makefile), Gradle tasks, Rake (Ruby). The most basic form of CI/CD automation.
"All common tasks are in the Makefile: 'make test' runs the full test suite, 'make build' compiles and bundles, 'make dev' starts the local dev server. New team members just need to know 'make help' to see all available commands."
- Hot Reload / HMR /hɒt rɪˈləʊd / eɪtʃ em ɑː/
A development feature that instantly reflects code changes in the running application without a full page reload. HMR (Hot Module Replacement) in webpack/Vite replaces only the changed module, preserving application state. Dramatically speeds up the UI development feedback loop.
"With Vite's HMR, I can change a CSS property and see it reflected in the browser within 50ms — without losing the current application state. Before HMR, every style change required a full rebuild and page reload."
- Code Generation /kəʊd ˌdʒenəˈreɪʃən/
Automatically generating source code from a schema, specification, or template, rather than writing it manually. Examples: generating TypeScript types from an OpenAPI spec, generating GraphQL client code from a schema, scaffolding a new component or module from a template.
"We generate the TypeScript API client from our OpenAPI spec — whenever the backend changes the API, we run 'npm run generate-client' and the frontend types update automatically. No more manually synchronising API types between frontend and backend."
- dotfiles /ˈdɒtfaɪlz/
Configuration files in Unix-based systems whose names begin with a dot (e.g., .bashrc, .zshrc, .vimrc, .gitconfig). The leading dot makes them hidden by default in file listings. Developers often version-control their dotfiles in a public repository to replicate their environment on a new machine.
"My dotfiles repository contains my .zshrc, .gitconfig, VS Code settings, and Homebrew package list — setting up a new Mac takes 20 minutes instead of two days. I pushed a change to my .gitconfig aliases and all my machines sync it automatically."
Quick Quiz — Developer Tools
Test yourself on these 16 terms. You'll answer 10 multiple-choice questions — each shows a term, you pick the correct definition.
What does this term mean?