DEV Community

Cover image for The Pragmatic Programmer – Chapter 6 Notes and Questions
christine
christine

Posted on • Originally published at christine-seeman.com on

2

The Pragmatic Programmer – Chapter 6 Notes and Questions

So my engineering bookclub is continuing on with Chapter 6 in The Pragmatic Programmer. We have had some stops and starts along the way. For chapters 4 and 5 we ended up combing the weeks because none of us were really feeling discussing chapter 4 (Pragmatic Paranoia). We did have to move Chapter 6 from last week, because it was towards the end of the sprint and a lot of our members wanted to try and push through on some sprint commitments and get more work time on their stories.

That’s probably one of the hardest things about doing a work book-club, how easy it is to push back chapters. We have probably done that 3 or so times, which really does increase the amount of time it takes to finish a book, and seems to bring down momentum.

As always, I used questions from the awesome Dev Empathy Bookclub. If you are interested, they are diving into Rocket Surgery Made Easy right now.

Notes on Chapter 6, While You are Coding

  • Programming by coincidence, don’t just rely on code that just works but you don’t understand why it works, program deliberately
  • Program deliberately by being aware of what you are doing, THINK, rely only on reliable things and document your assumptions.
    • Test your code and your assumptions
    • Don’t be a slave to history, existing code should dictate future code.
  • Algorithm speed, Big O notation
    • Just another kind of estimating, estimating with algorithms
    • Ex. Sorting with strings (n), decrypting a message, the size of these input will affect the algorithm.
    • The larger the input, the longer the running time or memory
    • Linear – O(n) time increased in direct proportion to the value of n, sequential search, simple loops
    • Constant – O(1), access element in array, simple statements
    • O(lg(n)) Logorithmic, binary search, binary chop
    • O(n lg(n)) Worse then linear, but not a ton worse, quicksort, heap sort, divide and conquer
    • O(n²) Square law, selections and insertion sorts
    • O(n³) Cubic, multiplications of 2 n x n matrices
    • O(cᴺ) Exponential, traveling salesman, set partitioning
    • Test your estimates, and best isn’t always best, choose the algorithms that works with your data
  • Refactoring, refactor code when you see duplication, nonorthogonal design, outdated knowledge, and performance issues.
  • Make code easy to test, unit test is a test that tests a module and test against a contract
  • Don’t use wizard code that you don’t understand

Questions for Chapter 6

  • In the section about optimization (Algorithm Speed), the authors warn against premature optimization, because often a less performant implementation “will take you less time to write and debug” and you don’t want to invest your time unless it’s necessary. We might say that rather than optimizing for CPU cycles, we’re optimizing for programmer cycles. What are the things you think are most important to optimize for in software development?
  • Testing is more cultural than technical; we can instill this testing culture in a project regardless of the language being used. How does one go about instilling a strong culture of testing, or any coding practice, in a team that doesn’t have that as part of its routine, and maybe doesn’t even believe in it? Does it matter whether you’re a manager, a tech lead, or a developer?
  • The authors aren’t against frameworks, but rather oppose using auto-generated code you didn’t write and don’t understand. What are the dangers of having code you don’t understand? Is there some amount that’s OK? How much is too much?

Heroku

Built for developers, by developers.

Whether you're building a simple prototype or a business-critical product, Heroku's fully-managed platform gives you the simplest path to delivering apps quickly — using the tools and languages you already love!

Learn More

Top comments (0)

Image of Quadratic

Free AI chart generator

Upload data, describe your vision, and get Python-powered, AI-generated charts instantly.

Try Quadratic free

👋 Kindness is contagious

Dive into this thoughtful article, cherished within the supportive DEV Community. Coders of every background are encouraged to share and grow our collective expertise.

A genuine "thank you" can brighten someone’s day—drop your appreciation in the comments below!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found value here? A quick thank you to the author makes a big difference.

Okay