O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

The Productive Programmer

Book Description

Anyone who develops software for a living needs a proven way to produce it better, faster, and cheaper. The Productive Programmer offers critical timesaving and productivity tools that you can adopt right away, no matter what platform you use. Master developer Neal Ford not only offers advice on the mechanics of productivity-how to work smarter, spurn interruptions, get the most out your computer, and avoid repetition-he also details valuable practices that will help you elude common traps, improve your code, and become more valuable to your team. You'll learn to:

  • Write the test before you write the code
  • Manage the lifecycle of your objects fastidiously
  • Build only what you need now, not what you might need later
  • Apply ancient philosophies to software development
  • Question authority, rather than blindly adhere to standards
  • Make hard things easier and impossible things possible through meta-programming
  • Be sure all code within a method is at the same level of abstraction
  • Pick the right editor and assemble the best tools for the job

This isn't theory, but the fruits of Ford's real-world experience as an Application Architect at the global IT consultancy ThoughtWorks. Whether you're a beginner or a pro with years of experience, you'll improve your work and your career with the simple and straightforward principles in The Productive Programmer.

Table of Contents

  1. Foreword
  2. Preface
    1. Who This Book Is For
    2. Conventions Used in This Book
    3. Using Code Examples
    4. How to Contact Us
    5. Safari® Enabled
    6. Acknowledgments
  3. 1. Introduction
    1. Why a Book on Programmer Productivity?
      1. Address Completion in Browsers
        1. Internet Explorer
        2. Firefox
    2. What This Book Is About
      1. Part I: Mechanics (The Productivity Principles)
      2. Part II: Practice (Philosophy)
    3. Where to Go Now?
  4. I. Mechanics
    1. 2. Acceleration
      1. Launching Pad
        1. Launchers
        2. Creating a Windows Launching Pad
        3. Mac OS X
        4. Launching in Linux
      2. Accelerators
        1. Operating System Accelerators
          1. Windows address bar
          2. Mac OS X Finder
        2. Clipboard(s)
        3. Remember History
        4. There and Back
        5. Command Prompts at Your Fingertips
          1. Command Prompt Explorer Bar
          2. Here!
        6. Development Accelerators
        7. Search Trumps Navigation in Tools, Too
      3. Macros
        1. Macro Recorder
        2. Key Macro Tools
      4. Summary
    2. 3. Focus
      1. Kill Distractions
        1. Blocking Strategies
        2. Turn Off Needless Notifications
        3. Create Quiet Time
      2. Search Trumps Navigation
      3. Find Hard Targets
      4. Use Rooted Views
        1. Rooted Views in Windows
        2. Rooted Views in OS X
      5. Use Sticky Attributes
      6. Use Project-Based Shortcuts
      7. Multiply Your Monitors
      8. Segregate Your Workspace with Virtual Desktops
      9. Summary
    3. 4. Automation
      1. Don’t Reinvent Wheels
      2. Cache Stuff Locally
      3. Automate Your Interaction with Web Sites
      4. Interact with RSS Feeds
      5. Subvert Ant for Non-Build Tasks
      6. Subvert Rake for Common Tasks
      7. Subvert Selenium to Walk Web Pages
      8. Use Bash to Harvest Exception Counts
      9. Replace Batch Files with Windows Power Shell
      10. Use Mac OS X Automator to Delete Old Downloads
      11. Tame Command-Line Subversion
      12. Build a SQL Splitter in Ruby
      13. Justifying Automation
      14. Don’t Shave Yaks
      15. Summary
    4. 5. Canonicality
      1. DRY Version Control
      2. Use a Canonical Build Machine
      3. Indirection
        1. Taming Eclipse Plug-ins
        2. Syncing JEdit Macros
        3. TextMate Bundles
        4. Canonical Configuration
      4. Use Virtualization
      5. DRY Impedance Mismatches
        1. Data Mapping
        2. Migrations
          1. Rake migrations
          2. dbDeploy
      6. DRY Documentation
        1. SVN2Wiki
        2. Class Diagrams
        3. Database Schemas
      7. Summary
  5. II. Practice
    1. 6. Test-Driven Design
      1. Evolving Tests
        1. TDDing Unit Tests
        2. Measurements
        3. Design Impact
      2. Code Coverage
    2. 7. Static Analysis
      1. Byte Code Analysis
      2. Source Analysis
      3. Generate Metrics with Panopticode
      4. Analysis for Dynamic Languages
    3. 8. Good Citizenship
      1. Breaking Encapsulation
      2. Constructors
      3. Static Methods
      4. Criminal Behavior
    4. 9. YAGNI
    5. 10. Ancient Philosophers
      1. Aristotle’s Essential and Accidental Properties
      2. Occam’s Razor
      3. The Law of Demeter
      4. Software Lore
    6. 11. Question Authority
      1. Angry Monkeys
      2. Fluent Interfaces
      3. Anti-Objects
    7. 12. Meta-Programming
      1. Java and Reflection
      2. Testing Java with Groovy
      3. Writing Fluent Interfaces
      4. Whither Meta-Programming?
    8. 13. Composed Method and SLAP
      1. Composed Method in Action
      2. SLAP
    9. 14. Polyglot Programming
      1. How Did We Get Here? And Where Exactly Is Here?
        1. Java’s Birth and Upbringing
        2. The Dark Side of Java
          1. That happens when?
          2. Zero-based arrays make sense to…
      2. Where Are We Going? And How Do We Get There?
        1. Polyglot Programming Today
        2. Today’s Platform, Tomorrow’s Languages
        3. Using Jaskell
      3. Ola’s Pyramid
    10. 15. Find the Perfect Tools
      1. The Quest for the Perfect Editor
        1. Neal’s List of What Makes a Perfect Editor
          1. A macro recorder
          2. Launchable from the command line
          3. Regular expression search and replace
          4. Additive cut and copy commands
          5. Multiple registers
          6. Cross-platform
      2. The Candidates
      3. Choosing the Right Tool for the Job
        1. Refactoring SqlSplitter for Testablility
        2. Keeping Behavior in Code
      4. Un-Choosing the Wrong Tools
  6. 16. Conclusion: Carrying on the Conversation
  7. A. Building Blocks
    1. Cygwin
    2. The Command Line
      1. Getting Help When You Need It
  8. Index
  9. About the Author
  10. Colophon
  11. Copyright