Monday, July 19, 2010

The Productive Programmer

Presenter: Neal Ford (ThoughtWorks)

The Productive Programmer session was based on the book The Productive Programmer, presented by the author. Below is a quick outline of the session. I'll be honest, this session was kind of long and I may have nodded off in a couple of places.

The slides have not been posted yet; I'll try to remember to update this post when they become available.
  • Mechanics

    • accelerators

      • typing is faster than navigating

        • use gui tricks to minimize mousing

      • multiple clipboards

      • pushd/popd

      • command line/file explorer integration

      • use shortcuts instead of menu entries

      • templates/macros

    • focus

      • ergonomics

        • get a comfortable chair

        • dual monitors

        • good keyboard/mouse

      • developers should have root

      • war rooms instead of cubicle farms

      • locus of attention: The Humane Interface by Jef Raskin

        • pop-ups/distracting dialogs

          • screen dimmers

        • internet/games

        • instant messaging/email/twitter

      • maintain concentration

        • turn off notifications

        • don't keep email open

        • turn off instant messaging

        • put on headphones

        • create office “quiet time”

      • the higher the level of concentration, the denser the ideas

      • focus techniques

        • search > navigation

          • replace file hierarchy navigation with search

        • rooted views

        • use virtual desktops (virtuawin)

    • Canonicality

      • define things once

    • Automation

      • obvious

        • one-command build

        • continuous integration

        • version control

        • documentation

      • tools

        • automated interaction

      • to automate or not

        • set a time box

        • analyze the ROI

          • time_for_task * times_repeated > time_to_automate

        • don't shave yaks

  • Practice

    • composed method

      • divide your program into methods that perform one (and only one) identifiable task

      • strip generic code out to new methods

    • test driven development/design

      • creates consumption awareness

      • forces mocking of dependent code

    • static analysis

      • cpd – copy/paste detector

    • citizenship

      • bunch of java stuff (ZZzzZzzzzZzZzz.....)

    • yagni (you ain't gonna need it)

      • build what you need now, don't indulge in speculative development

      • increases software entropy

      • don't need frameworks for everything

        • Avalon is a framework for building frameworks

    • question authority

      • that's the way it's always been done

      • know when to break the rules

      • non-intuitivity

        • pair programming

          • produces code 15% less efficiently than two programmers working independently, but with 15% fewer defects

    • single level of abstraction principle

      • keep all code of a method at the same level of abstraction

    • polyglot programming

      • leverage existing platforms with languages targeted at specific problems

      • many different languages that compile down to JVM byte-code

      • not “resume driven development”; the right tool for the job

    • every nuance

      • learn all the “back alleys” of your chosen language

      • $1000 plumber: $1 dollar for closing a valve, $999 for knowing which valve to close

    • anti-object

      • ?? (ZzzZZzzzZZZzzzzz....)

No comments:

Post a Comment