This week we continue our series on the Pragmatic Programmer covering Chapter 6 (part 1) About coincidence, algorithms and testing your assumptions.
John: Welcome to Iteration: A weekly podcast about programming, development, and design through the lens of amazing books, chapter-by-chapter.
JP: Chapter 6 "While you are coding" Summary / Introduction - In this section, we will be discussing the things a programmer thinks about during the process of coding.
The section kicks off by talking about how coding is not a mechanical process. Adjustments must be made while we code. It's largely driving a car. Our brain goes into auto-pilot - however, an attentive driver is always assessing the current situation. Is someone about to cross the street? Etc.
Rely only on reliable things. Beware of accidental complexity, and don't confuse a happy coincidence with a purposeful plan
JP: really funny metaphor about a solider coming to a false conclusion in a minefield. "As developers, we also work in minefields."
You can't know why something is broken if you didn't know why it worked in the first place
John: It's easy to assume that X causes Y, but as we've said - don't assume it, prove it.
John: Be deliberate.
Get a feel for how long things are likely to take before you write code
JP: Basically, big O stuff: constant, logarithmic, linear, exponential. Use a greedy approach when you can. Try to think about how you can do something in a single pass. But always remember the context. Maybe your data isn't so large that an exponential algorithm is just fine for the sake of readability.
"Pragmatic programmers try to cover both the theoretical and practical bases. After all this estimating, the only timing that counts is the speed of your code, running in the prod env. with real data."
John: If I have a super slow method or view it’s usually because I need a new object or attribute.
Mathematical analysis of algorithms doesn't tell you everything. Try timing your code in its target environment
JP: "Be wary of premature optimization. It's always a good idea to make sure an alg really is a bottleneck before investing your precious time trying to improve it"
John: In general: Tests pass - I ship. I'd rather just throw more Dyno's at my methods than too much time optimizing.
John: Postman - specifcally SET UP ENVIROMENTS
John: Greedy Algorithms