Left, Down, Page Down Next slide
Right, Up, Page Up Previous slide
Space Forward
Book Reading Notes - The Pragmatic Programmer - From Journeyman to master
best viewing experience can be achieved via desktop browers
2018-12-01 / Johann Huang/ Shanghai, China
- Foreword
- Philosophies
- what distinguished Pragmatic Programmers?
- Guidelines - Philosophy
- Guidelines - Approach
- Guidelines - Tools
- Guidelines - Paranoia
- Guidelines - Bend or Break
- Guidelines - While You Are Coding
- Guidelines - Before the Project
- Guidelines - Projects
- One More Thing
## Foreword

I finished reading this book at the beginning of last month and abstracted a mindmap of all the important (in the sense, for me) contents from the book.

To let more people get benifit from this book, I think it is necessary to draft a even more compact version of important contents of that book in the means of slides.

And as no one can cross the same river for twice, each time of review of the book would result someting new, so this note may also contain something different.
## Philosophies

> We who cut mere stones must always be envisioning cathedrals. - Quarry worker's creed

> Pragmatic Programmers get the job done, and do it well.
## what distinguished Pragmatic Programmers?

- Beyond the immediate problem and trying to place in the larger context and aware of the bigger picture.
- Take responsibility for everything they do.
- Also spend a large amount of time interacting with others.
## Guidelines - Philosophy

- Don't live with Broken Windows
- Be a trigger and catalyst for continuing improvements
- Provide just good-enough release to interact with users earlier and iteract to better eventual solution
- Stay up to date and make continuing portfolio inverstment
- Be a good developer evangelist and be a listener
## Guidelines - Approach

- Do abstraction and DRY
- Split clear layers and write cohesive modules with stable API
- Construct flexible architecture with the possiblity to change horse in midstream
- Make proposed implements and do refinements
- Use prototypes to organize logics
- Program close the problem domain since computer language influence the way to think and solve problem
- Do estimate and schedule to avoid suprises
## Guidelines - Tools

- Plain Text is powerful and self-describing
- Shell is powerful, fast and flexible
  - Bash is magic
- Powerful editor upgrades productivity
  - such as Visual Studio Code, Atom
- Source code control help to return to thos halcyon days of past if disastor happens
  - such as Git
- Debugging with tools
  - logs and monitors
- Text Manipulation helps to reduce repetition and produce comforts
  - like code formating, doc generation
- Code Generators make programmer smarter
## Guidelines - Paranoia

- Design with contracts
- Crash early but not tolerent until larger disasters
- Assert to ensure it won't
- Use Exceptions for exceptional problems
- Balancing resources by doing both acquiring and returning, like for memory
## Guidelines - Bend or Break

- Decouping by fencing well
- Do metaprogramming with configurations but not hardcoding
- Pay attention to temporal couping (concurrency and ordering) and deal with it wisely
  - possibly combining queueing and dispatching
- Divide and Conquer with good design patterns such as Publish and Subsribe, MVC and so on
- Use blackboards to coordinate workflow
  - such as Redux
## Guidelines - While You Are Coding

- Programming deliberately but not by coincidence
  - think clear first
- Consider algorithm speed under situations
- Refactoring to upgrade code life cycle
- Write trust worthy code which is easy to test and accompanied with tests
- Use wizard you really understand
## Guidelines - Before the Project

- Be careful with Requirements Pit
  - Perfection is achiedved, not when there is nothing left to add but to take way
- Think out of box in a higher perspective
- Start only when you're clearly planed
- Wisely treat the specification with posibilities to iteratation
- Have the methodologies and practices circle of your own
## Guidelines - Projects

- Team of Pragmatic programmers
- Ubiquitous automation to avoid manual conflicts
- Ruthless Testing and test early, often and automatically
- Documents promote unity
  - The palest ink is better than the best memory.
- Managing expectations with a little bit extra
- Sign your work with pride and prejudice
  - This slides is composed by Johann Huang with acknoledgement to Book The Pragmatic Programmer which is written by ...
## One More Thing

Have your own library.
If any auestions? Visit My Home Page to Contact Me.
Thanks for Your Attention!

Johann Huang

## Other Slides by Johann Huang

- [开源程序化交易Python开发框架 - VNPY介绍, in Chinese](http://presentations.johannhuang.com/2018/05/vnpy-introduction/)
- [Data Collection with AJAX](http://presentations.johannhuang.com/2018/04/data-collection-with-ajax/)