> For the complete documentation index, see [llms.txt](https://rizky-jayusman96.gitbook.io/book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rizky-jayusman96.gitbook.io/book/master.md).

# The Pragmatic Programmer

## Chapter I : Pragmatic Philosophy

### Characteristics

| An awesome guy should be      |                                                                |
| ----------------------------- | -------------------------------------------------------------- |
| Early Adopter or Fast Adapter | Instinct of the technologies and techniques                    |
|                               | Love try things out                                            |
|                               | Grasp quick                                                    |
|                               | Confidence with their experiences                              |
| Inquisitive                   | Ask a questions                                                |
| Critical Thinker              |                                                                |
| Realistic                     | Understand the nature problem                                  |
|                               | How difficult it is?                                           |
|                               | How long it will takes?                                        |
| Jack of All Trades            | Try to familiar with technology development, challenge or area |

### Be Responsible

*You should care about your craft and also your work maybe it will be takes a lot of time and also needs hard work but it will repaid in the future*

### Broken Windows

| Treat your projects when it be |                                                                                                                          |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| Good                           | Don't mess it up                                                                                                         |
| Bad                            | <p>Try to fix it up with provide an options;  </p><p>Ask question to yourself : is there anything else you can try? </p> |

### Stone Soup

| An awesome guy should be    |                                                                            |
| --------------------------- | -------------------------------------------------------------------------- |
| Be Catalyst                 | Be the first one that has initiative to build something or start something |
| Grow More                   |                                                                            |
| Be Notice with small things |                                                                            |
| Create Things into Smaller  |                                                                            |

### Boiled Frog

| An awesome guy should be |
| ------------------------ |
| Stay Notice              |
| Repeat - Review          |
| Ask For Help             |
| Don’t Afraid             |
| Don't Frustrating        |

*The painting become lost in the paint!*

### Critical Thinking&#x20;

*Good requirement means enough well for their users. the future maintenance, and also yourself*

### Portfolio&#x20;

| Things To Do         |                                     |
| -------------------- | ----------------------------------- |
| Regularly            |                                     |
| Buy Low – Sell High  |                                     |
| Review and Rebalance | Dynamic                             |
| Manage Risk          | Don’t invest all money in high risk |
| Diversify            | Variative                           |

### Goals

| Things To Do                   |                                      |
| ------------------------------ | ------------------------------------ |
| New language                   | Learn new language every years       |
| Stay current                   | It mean stay up to date              |
| Read books (non/it)            | Read book every quarter years        |
| Feel comfortable ? Learn other |                                      |
| Community                      | Actively participate                 |
|                                | Go to your doctor and ask your reads |
|                                | Don’t isolation                      |

### Communication&#x20;

| An awesome guy should     |                                                                       |
| ------------------------- | --------------------------------------------------------------------- |
| Know what you want to say | Plan what you want to say                                             |
|                           | Set an outline of what you want to say                                |
| Style                     |                                                                       |
| Make it looks goods       | You must know how to spelling with a style to interact your audiences |
| Feedback                  | Ask a feedback to your colleague                                      |
| Listen other              |                                                                       |
| Get back to people        | As soon as possible                                                   |
|                           | replay all email                                                      |
| Audience                  |                                                                       |

### Wisdom&#x20;

| Ask to yourself with these questions              |
| ------------------------------------------------- |
| What is their interest in what you've got to say? |
| What do you want to learn?                        |
| How sophisticated are they?                       |
| How much detail do they want?                     |
| Whom do you want to own the info?                 |
| How can you motivate them to listen to you?       |

## Chapter II : Pragmatic Approach

### Don’t Repeat Yourself&#x20;

*Make it reusable*&#x20;

| Types of Duplication |                               |
| -------------------- | ----------------------------- |
| Imposed              | Seems need to be duplications |
|                      | There should be documentation |
| Impatient            | Lazy and do duplicated        |
|                      | There is no shortcut          |
| inadvertent          | A bad design implemented      |
|                      | Did not realized              |
| Inter development    |                               |

**Tips:** Ask question to yourself, your code is it good for performance? \
**Example:** adding flag on setter to make it cacheable

### Orthogonality

| Specs                    |                                              |
| ------------------------ | -------------------------------------------- |
| Loose Coupling           |                                              |
| High Cohesion            |                                              |
| Isolated                 |                                              |
| Easy to Tested           | Include unit testing and integration testing |
| Be Independent Component | Only have single purpose                     |

### Tracer Bullets&#x20;

**Tips:** If Requirement made you in deadlock path use tracer bullets to find the target.

![Tracer Bullets make easier to find a target](https://firebasestorage.googleapis.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcAA8MtGv7Emh7IYc5%2Fuploads%2FsSUUQx8IATbdGBgfOrzX%2Ffile.png?alt=media)

### Prototypes&#x20;

*Make dummy for client*&#x20;

| What                      |
| ------------------------- |
| Architecture              |
| New Function              |
| Structure of example data |
| Third party               |
| Performance issue         |
| User interface design     |

| Question                          |
| --------------------------------- |
| Responsibility of major component |
| Collaboration?                    |
| Coupling minimum?                 |
| Potential duplication?            |
| Interface definition?             |
| Constraint acceptable?            |
| Module has a data?                |

![Other Notes from My Google Jamboard hehe](https://firebasestorage.googleapis.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcAA8MtGv7Emh7IYc5%2Fuploads%2FsWBsaNIt5IqLl1kMfEUK%2Ffile.png?alt=media)

## Chapter 3 : The Basic Tools

## Chapter 4 : Pragmatic Paranoia

## Chapter 5 : Bend or Break

## Chapter 6 : While You Are Coding

## Chapter 7 : Before the Project

## Chapter 8 : Pragmatic Projects
