+++ title = "productive_programmer" draft = false tags = [ "books", "productive_programmer" ] date = "2013-03-12" +++ # The Productive Programmer Author: Neal Ford

{{< lib "Productive programmer|Librarything Link" >}} Dit is een samenvatting van alle **notes** in essentie, opgedeeld per hoofdstuk. ## Part 1: Mechanics ### Acceleration * Concentrate on essence, not ceremony. * The usefulness of an application list is inversely proportional to its length. * Eye candy looks goot but isn't nutritious. * Typing is faster than navigation. * Prefer typing over mousing. * The address bar is the most efficient Windows interface. * Take the time to learn all the hidden keyboard shortcuts of your universe. * Context switching eats time. * Clipboarding to batches is faster than clipboarding serially. * Those who remember their history aren't doomed to type it again. * Embedded command prompts give you access to the best of both worlds. * Embed the command prompt to make it easier to switch contexts. * When coding, always prefer the keyboard to the mouse. * Learn the IDE keyboard shortcuts in context, not by reading long lists. * When you type a complicated construct for the second time, templatize it. * For any symmetric operation on multiple lines of text, find a pattern and record a macro. * The more times you perform a particular operation on a chunck of text, the greater the likehood you'll do it again. * Don't type the same command over and over again. * Spend a little time each day to make every day more productive. ### Focus * The higher the level of concentration, the denser the ideas. * THe bigger the haystack, the harder it is to find the needle. * Replace file hierarchies with search. * Try simpler searching before resorting to "hard target" searching. * Take advantage of built-in focus facilities like colors. * Use links to create virtual project management folders. * Virtual desktops unclutter your stacks of windows. ### Automation * Use tools out of their original context when appropriate. * Don't spend time doing by hand what you can automate. * Performing simple, repetitive tasks squanders your concentration. * Finding innovatige solutions to problems makes it easier to solve similar problems in the future. * Timebox speculative development. ### Canonicality * Keep a single copy of everything you don't build in version control. * Use indirection to create friendlier workspaces. * Use indirection to keep your life in sync (symlinks). * No matter what you are copying and pasting, reuse by copy and paste is evil. * Use virtualization to canonicalize dependencies for your projects. * Don't let object-relational mapping tools violate canonicality. * Add behavior to generated code via extention, open classes or partial classes. * Always keep code and schemas in sync. * Use migrations to create repeatable snapshots of schema changes. * Out-of-date documentation is worse than none because it is actively misleading. * For managers, documentation is about risk mitigation. * Always keep "living" documents. * Anything that takes real effort to create makes its creator irrationally attached to it. * Whiteboard + digital camera > CASE tools. * Generate all the technical documents you can. * Never keep two copies of the same thing. * Repetition is the single most diminishing force in software development. ## Part 2: Practice ### Statistic analysis * Statistic analysis tools represent cheap verification. ### Good citizenship * Don't create global variables, even the object kind. ### YAGNI * Don't pay complexity tax unless you absolutely must. * Software development is first and foremost a communication game. ### Ancient philosophers * Maximize work on essential complexity; kill accidental complexity. * Even general-purpose programming languages suffer from the "80-10-10" rule. * Pay attention to the lore of "ancient" technologies. (Smalltalk lol) ### Meta-programming * Meta-programming changes your syntactic vocabulary, giving you more ways to express yourself. ### Composed method and SLAP * Refactoring to composed method reveals hidden reusable code. * TDD predisposes composed method. * Encapuslate all implementation details away from public methods. ### Find the perfect Tools * Find your perfect editor and learn it inside and out. * Record macros for all symmetrical text manipulations. * Good knowledge of regexp can save orders of magnitude of effort. * Don't make round trips when you can batch. * Use a "real" scripting language for automation chores. * Keep behavior in (testable) code. * Pay attention to the evolution of your tools. * Pay as little complexitax as you can.