13 — Developer Tooling and Productivity MOC
← Back to Software Engineering - Map of Content
The tools and workflows that multiply developer effectiveness. Mastering your tools is a career-long leverage multiplier.
Editors & IDEs
- VS Code — Extensions ecosystem, settings.json, tasks.json, launch.json (debugging), multi-root workspaces, remote development (SSH, containers, WSL), integrated terminal, Git integration
- JetBrains — IntelliJ IDEA (Java/Kotlin), PyCharm (Python), WebStorm (JavaScript/TypeScript), GoLand (Go); refactoring tools, database integration, run configurations, inspections
- Vim / Neovim — Modes (normal, insert, visual, command), motions (w, b, f, t, /, gg, G), text objects (iw, i”, a(), i{), registers, macros, plugins (lazy.nvim, telescope, nvim-lspconfig, treesitter), Neovim Lua config
- Emacs — Org mode, Elisp extensibility, Magit (Git porcelain), TRAMP (remote editing), Evil mode (Vim emulation)
- LSP (Language Server Protocol) — Editor-agnostic language intelligence, completions, diagnostics, go-to-definition, hover, rename; decouples language support from editors
- DAP (Debug Adapter Protocol) — Editor-agnostic debugging, breakpoints, stepping, variable inspection, watch expressions
Shell & Terminal
- Bash / Zsh — Shell scripting, parameter expansion, command substitution, pipelines, redirection, process substitution, job control
- Shell Scripting — Variables, conditionals (if/case), loops (for/while), functions, exit codes, trap, set -euo pipefail, shellcheck
- Aliases & Functions — Shorthand commands, dotfiles management (chezmoi, yadm, GNU Stow), shell profiles (.bashrc, .zshrc)
- Terminal Multiplexers — tmux (sessions, windows, panes, keybindings, plugins with tpm), screen (legacy), persistent sessions over SSH
- Terminal Emulators — iTerm2 (macOS, profiles, split panes), Warp (AI-assisted, blocks), Ghostty (GPU-accelerated, Zig), Alacritty (GPU-accelerated, minimal config), Kitty (GPU-accelerated, scripting)
- Modern CLI Tools — fzf (fuzzy finder), ripgrep (rg), fd (find alternative), bat (cat alternative), eza (ls alternative), zoxide (cd alternative), jq (JSON processing), yq (YAML processing)
Debugging
- Print Debugging — Strategic log statements, structured logging for debuggability, temporary vs permanent logging
- Interactive Debuggers — GDB (C/C++), LLDB (C/C++/Swift), browser DevTools (Sources panel, breakpoints, watch, call stack), Python debugger (pdb/ipdb), Node.js inspector
- Memory Debuggers — Valgrind (memory leaks, uninitialized reads), AddressSanitizer (ASan), MemorySanitizer (MSan), LeakSanitizer (LSan), ThreadSanitizer (TSan)
- Profilers — CPU profiling (flame graphs, sampling vs instrumentation), memory profiling (heap snapshots), I/O profiling (see Performance Engineering)
- Log-Based Debugging — Correlation IDs, structured log queries, log aggregation tools (see Observability)
- Rubber Duck Debugging — Explaining the problem to someone (or something) to clarify your thinking, often reveals the solution
- Advanced Techniques — Conditional breakpoints, tracepoints (log without stopping), time-travel debugging (rr), core dump analysis, strace/dtrace
Package Managers
- JavaScript — npm (default, package-lock.json), yarn (Plug’n’Play, zero-installs), pnpm (content-addressable storage, strict, fast, monorepo support)
- Python — pip (requirements.txt), uv (fast Rust-based resolver, pip-compatible), poetry (pyproject.toml, lock files, dependency groups), conda (scientific/data science)
- Rust — Cargo (Cargo.toml, Cargo.lock, crates.io, workspaces, features, build scripts)
- Go — Go modules (go.mod, go.sum, module proxy, minimum version selection)
- Java / JVM — Maven (pom.xml, Central Repository, convention over configuration), Gradle (Groovy/Kotlin DSL, incremental builds, build cache)
- System-Level — Homebrew (macOS/Linux), apt/dpkg (Debian/Ubuntu), nix (reproducible, declarative)
- Lock Files — Pinning exact versions, reproducible builds, lock file conflicts in merge
- Dependency Resolution — Version ranges (semver, ^, ~), dependency hell, diamond dependency problem, peer dependencies
Containers for Development
- Dev Containers — VS Code devcontainers, devcontainer.json, features, consistent environments across team, GitHub Codespaces
- Docker Compose for Local Services — Multi-container local environments, databases, message queues, service dependencies, volumes for persistence
- Testcontainers — Programmatic container management in tests, real databases/services in integration tests, language libraries (Java, Python, Go, Node.js)
- Local Development Patterns — Hot reload with mounted volumes, local vs containerized tradeoffs, hybrid approaches (app local, services in containers)
AI-Assisted Development
- Code Completion — GitHub Copilot (inline suggestions, chat), Claude Code (agentic CLI, tool use), Cursor (AI-first editor), Codeium, TabNine
- Chat-Based Coding — Conversational code generation, explaining code, debugging assistance, architecture discussion, rubber ducking with AI
- AI Code Review — Automated review comments, catching bugs and style issues, security scanning, PR summarization
- Prompt Engineering for Code — Providing context (file contents, error messages), specifying constraints, iterative refinement, few-shot examples for code patterns
- Limitations and Risks — Hallucinated APIs, outdated patterns, security vulnerabilities in generated code, over-reliance, license concerns, verifying correctness, understanding generated code before committing
developer-tools productivity editors shell debugging ai-assisted-development