Giter Site home page Giter Site logo

thepragmaticprogrammer's Introduction

ThePragmaticProgrammer

Book following the book The Pragmatic Programmer by David Thomas and Andrew Hunt

What Makes a Pragmatic Programmer?

  • Early adopter/fast adapter
  • Inquisiive
  • Critical thinker
  • Realistic
  • Jack of all trades

Tips:

  • Care About Your Craft
  • Think! About Your Work

Individual Pragmatists, Large Teams

It's a Continuous Process

Chapter 1 - A Pragmatic Philosophy

  • It's Your Life
    Tip: You Have Agency

  • The Cat Ate My Source Code

    • Team Trust
    • Take Responsibility
      Tip: Provide Options, Don't Make Lame Excuses
  • Software Entropy
    Tip: Don't Live with Broken Windows

  • First, Do No Harm

  • Stone Soup and Boiled Frogs
    Tip: Be a Catalyst for a Change
    Tip: Remember the Big Picture

  • Good-Enough Software

    • Involve your users in the trade-off
      Tip: Make quality a requirement issue
    • Know when to stop
  • Your Knowledge Portfolio
    An investement in knowledge always pays the best interest. Benjamin Franklin

    1. Serious investors invest regularly - as a habit
    2. Diversification is the key to long-term success
    3. Smart investors balance their portfolios between conservatives and high-risk, high-reward investments
    4. Investors try to buy low and sell high for maximum return
    5. Portolios should be reviewed and rebalanced periodically
    • Building your portfolio
      • Invest regularly
      • Diversify
      • Manage risks
      • Buy low, sell high
      • Review and rebalance
        Tip: Invest Regularly in Your Portfolio
    • Opportunities for learning
    • Critical Thinking
      Tip: Critical Analyze What You Read and Hear
      • Who does this benefit?
      • What's the context?
      • When or Where would this work?
      • Why is this a problem?
  • Communicate
    Quote: I believe that it is better to be looked over than it is to be overlooked. - Mae West

    • Know your audience
    • Know what you want to say
    • Choose your moment
    • Choose a style
    • Make it look good
    • Involve the audience
    • Be a listener
    • Get back to people
      Tip: It's both what you say and the way you say it
    • Documentation
      Tip: Build documentation in, don't bold it on

    Book recommendations about communications within teams

Chapter 2 - A Pragmatic Approach

The Essence of Good Design

Tip: Good design is easier to change than bad design

  • ETC is a value, not a rule

DRY - The Evils of Duplication

Tip: DRY - Don't repeat yourself

DRY is More Than Code

Duplication in Code

  • Not all code duplication is knowledge duplication
  • Duplication in documentation
  • DRY violation in data
  • Representational duplication
  • Duplication across internal APIs
  • Duplication across external APIs
  • Duplication with data sources
  • Interdeveloper duplication
    Tip: Make it easy to reuse

Orthogonality

  • What is orthogonality?
  • A nonorthogonal system
  • Benefits of orthogonality
    Tip: Eliminate effects between unrelated things
    • Gain productivity
    • Reduce risk
  • Design
  • Toolkit and libraries
  • Coding
  • Testing
  • Documentation
  • Living with orthogonality

Reversibility

Quote: Nothing is more dangerous than an idea if it's the only one you have. - Emil-Auguste Chartier

  • Reversibility
    Tip: There are no final decisions
  • Flexible Architecture
    Tip: Forgo following Fads

Tracer Bullets

  • Code that glows in the dark
    Tip: Use tracer bullets to find the target
  • Tracer bullets don't always hit their target
  • Tracer code versus prototyping

Prototypes and Post-it Notes

  • Things to prototype
    • Architecture
    • New functionality in an existing system
    • Structure or content of external data
    • Third-party tools or components
    • Performance issues
    • User interface design
      Tip: Prototype to learn
  • How to use prototypes
    • Prototyping architecture
  • How not to use prototypes

Domain Languages

Tip: Program close to the problem domain

  • Some real-world domain languages
    • RSpec
    • Cucumber
    • Phoenix Routes
    • Ansible
  • Chracteristics of domain languages
  • Trade-offs between internal and external languages
  • An internal domain language on the cheap

Estimating

Tips: Estimate to avoid surprises

  • How acurate is acurate enough?
  • Where do esitmates come from?
    • Understand what is being asked
    • Build a model of the system
    • Break th model into components
    • Give each parameter a value
    • Calculate the answear
    • Keep track of your estimation process
  • Estimating project schedule
    • Painting the missile
    • Eating the elephant
      Tip: Iterate the schedule with the code
  • What to say when asked for an extimate - I'll get back to you.

Chapter 3 - The Basic Tools

The power of plain text

  • What is plain text?
    'Tip: Keep knowledge in plain text'
  • The power of text
    • Insurance against obsolence
    • Leverage
    • Easier testing
  • Lowest common denominator

Shell Games

Tip: Use the power of the command shell

  • A shell of your own

Power Editing

Tip: Achieve editor fluency

  • What does 'Fluent' mean?
  • Moving towards fluency
    • Growing your editor

Version Control

thepragmaticprogrammer's People

Contributors

michaelecrippa avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.