The Pragmatic Programmer highlighted points: Ch 1, A Pragmatic Philosophy
Tags: books, productivity, programming, writing
Published: 2020-11-08 15:47:05

# Disclaimer

This article is just highlighting the tip of the iceberg from the original book. Please [read the book](https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/) for better detail and examples given by the author.

## 1. It's Your Life

Software development appears close to the top list of careers where you have control. If you're frustrated with your current environment, try to fix it.

This industry gives you a remarkable set of opportunities. Be proactive, and take them.

## 2. The Cat Ate My Source Code

Pragmatic Programmers take charge of their own careers and aren't afraid to admit ignorance or error. We can be proud of our abilities, but we must own up to our shortcomings as well.

### Team Trust

Trust in a team is absolutely essential for creativity and collaboration.

### Take Responsibility

When you accept the responsibility for an outcome, expect to be held accountable for it. When you make a mistake, admit it honestly. Provide options, instead of blaming or making excuses.

## 3. Software Entropy

Entropy is a term from physics that refers to the amount of "disorder" in a system. Disorder in software is usually caused by "technical debt". Don't leave them unrepaired.

If you find yourself on a project where the code is cleanly written and well-designed, you'll likely take extra care to not mess it up.

## 4. Stone Soup and Boiled Frogs

If you are in a situation where you know what needs to be done and how to do it, you may get "start-up fatigue" when you need to wait for permission, budget, or resources to do it.

Instead, start with what you can already do and develop it. Once you've got it, show it to others and let them be excited and foster the idea further.

On the other side, keep an eye on the big picture. Constantly review what's happening around you, not just what you personally are doing.

## 5. Good Enough Software

As Ed Yourdon described in an article in IEEE Software, "When good enough software is the best, you can discipline yourself to write software that's good enough. Good enough for your users, future maintainers, and your own peace of mind".

### Involve Your Users in the Trade-Off

Understand the requirement from different constraints. Marketing deadlines, delivery schedule, key features should be discussed as part of the development process, among the software quality to ensure everyone's expectations are met.

Often times, trade-offs are involved. Focus on the minimum deliverables that your user can play with to get their early feedback.

### Know When To Stop

Don't spoil your good program by overengineering and overrefinement. 

## 6. Your Knowledge Portofolio

Investment in knowledge always pays the best interest, but they're expiring assets, as it may be out of date.

Build your portfolio by these guidelines:

- **Invest Regularly**: You must invest your knowledge portfolio regularly, even if it's just a small amount.
- **Diversify**: The more different things you know, the more valuable you are.
- **Manage Risk**: Don't put all your technical eggs in one basket.
- **Buy Low, Sell High**: Learn an emerging technology before it becomes popular.
- **Review and Rebalance**: You may revisit the technology you investigated before.

Here is the suggestion for you to build your portfolio:

- Read a technical book each month
- Read non-technical books, too
- Take classes
- Participate in the community around you
- Experiment with different environment
- Stay up to date with the current trend

### Opportunities for Learning

If you're asked a question that you don't know the answer to, don't stop there. Take it as a personal challenge to find the answer. Search the answer, or ask someone who can help you.

### Critical Thinking

The last important point is to think critically about what you read and hear. Few question you can ask and think about:

- Why, why, why, why, and why? (The Five Whys)
- Who does this benefit?
- What's the context?
- When or Where would this work?
- Why is this a problem?

## 7. Communicate!

As a developer, we have to communicate on many levels. Here is a list of ideas for useful communication:

- **Know Your Audience**: Understand the needs, interests, and capabilities of your audience. Gather their feedback as well.
- **Know What You Want To Say**: Plan what you want to say. Plan an outline, review it yourself, and refine it until you believe it fits your audience.
- **Choose Your Moment**: Sometimes all it takes is the simple question, "Is this a good time to talk about ...?"
- **Choose A Style**: Adjust your style to suit your audience, be it formal, just the facts, or long discussion.
- **Make It Look Good**: Use styles, visual, and spelling-check to convey your audience better.
- **Involve Your Audience**: If possible, give your drafts to your audience and get their feedback. Build a relationship with them.
- **Be a Listener**: If you want people to listen to you, *listen to them*.
- **Get Back to People**: Keep your audience informed makes them feel that you haven't forgotten them.
- **Documentation**: Pragmatic Programmers embrace documentation as an integral part of the overall development process.

---

Do you find this article helpful for you? Any feedback to make it better? Please leave a comment and I'll be happy to respond. Thank you!