# Pragmatic Programmer

> Software craftsmanship principles from The Pragmatic Programmer. Use this skill when discussing best practices, debugging strategies, career development, or pragmatic approaches to software development. Auto-activates for DRY violations, debugging sessions, and development workflow improvements. Use when this capability is needed.

- Skill: `tomevault-io/pragmatic-programmer` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/pragmatic-programmer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/pragmatic-programmer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/pragmatic-programmer

---


# The Pragmatic Programmer Reference

A comprehensive reference for pragmatic software development principles based on "The Pragmatic Programmer" by David Thomas and Andrew Hunt. This skill provides timeless advice for becoming a better developer.

## When This Skill Activates

This skill automatically activates when you:
- Discuss software development best practices
- Need debugging strategies
- Consider code duplication (DRY)
- Think about tooling and automation
- Discuss project estimation or planning
- Review development workflows

## Core Philosophy

> "Care about your craft."
> "Think about your work."

Pragmatic programmers:
- Take responsibility for their career and work
- Don't make excuses—provide options
- Are agents of change, not victims of circumstance
- Continuously learn and adapt

## Quick Reference

### Foundational Principles
| Principle | Summary |
|-----------|---------|
| [DRY - Don't Repeat Yourself](principles/dry.md) | Every piece of knowledge has a single representation |
| [Orthogonality](principles/orthogonality.md) | Keep things independent and decoupled |
| [Reversibility](principles/reversibility.md) | Make decisions reversible; avoid lock-in |
| [Tracer Bullets](principles/tracer-bullets.md) | Get feedback fast with end-to-end skeleton |
| [Prototypes](principles/prototypes.md) | Learn before committing; throw away prototypes |
| [Domain Languages](principles/domain-languages.md) | Program close to the problem domain |
| [Estimating](principles/estimating.md) | Learn to give accurate estimates |

### Practical Techniques
| Practice | Summary |
|----------|---------|
| [The Power of Plain Text](practices/plain-text.md) | Keep knowledge in accessible format |
| [Shell Games](practices/shell-games.md) | Master the command line |
| [Debugging](practices/debugging.md) | Fix the problem, not the blame |
| [Text Manipulation](practices/text-manipulation.md) | Learn text processing tools |
| [Code Generators](practices/code-generators.md) | Write code that writes code |
| [Design by Contract](practices/design-by-contract.md) | Define rights and responsibilities |
| [Assertive Programming](practices/assertive-programming.md) | If it can't happen, use assertions |
| [Decoupling](practices/decoupling.md) | Minimize dependencies between modules |
| [Refactoring](practices/refactoring.md) | Improve code continuously |
| [Testing](practices/testing.md) | Test early, test often, test automatically |
| [Automation](practices/automation.md) | Don't use manual procedures |

## The Pragmatic Tips

Key tips from the book:

1. **Care About Your Craft** - Why spend your life developing software unless you care?
2. **Think! About Your Work** - Turn off autopilot and take control
3. **Provide Options, Don't Make Excuses** - Don't say it can't be done; explain what can be done
4. **Don't Live with Broken Windows** - Fix bad designs and wrong decisions when you see them
5. **Be a Catalyst for Change** - Show people the future and help them participate
6. **Remember the Big Picture** - Don't get so focused you forget what you're doing
7. **Make Quality a Requirements Issue** - Get users involved in determining quality
8. **Invest Regularly in Your Knowledge Portfolio** - Make learning a habit
9. **Critically Analyze What You Read and Hear** - Don't be swayed by vendors or media hype
10. **It's Both What You Say and How You Say It** - Communication matters

## The Knowledge Portfolio

Treat your knowledge like a financial portfolio:

- **Invest regularly** - Learn something new routinely
- **Diversify** - Know many different technologies
- **Manage risk** - Balance safe tech with high-risk/high-reward
- **Buy low, sell high** - Learn emerging tech before it becomes mainstream
- **Review and rebalance** - Reassess periodically

### Suggestions:
- Learn a new language every year
- Read a technical book each month
- Read non-technical books too
- Take classes
- Participate in local user groups
- Experiment with different environments
- Stay current (newsletters, blogs, conferences)

## Communication

- Know what you want to say
- Know your audience
- Choose the right moment
- Choose a style
- Make it look good
- Involve your audience
- Be a listener
- Get back to people
- Documentation is part of the project, not after

## Language Translation Notes

Examples use generic pseudocode. Adapt to your language:
- **PHP**: `class`, `function`, `->`, type hints
- **JavaScript/TypeScript**: `class`, arrow functions, `.`
- **Python**: `class`, `def`, `.`, type hints
- **Java/C#**: Direct mapping with access modifiers

---

*Based on concepts from "The Pragmatic Programmer: Your Journey to Mastery" by David Thomas and Andrew Hunt.*

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/grndlvl) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-11 -->

