My Account
View Cart
Home
Community
Books & Videos
Safari Books Online
Conferences
Training
School of Technology
About
Complete List
Bestsellers
New Releases
Rough Cuts
Upcoming Titles
Ebooks
By Publisher
By Series
Out of Print
Order Info
Search
Search Tips
Tell a friend
Beautiful Code
Leading Programmers Explain How They Think
By
Andy Oram
,
Greg Wilson
Edited by
Andy Oram
,
Greg Wilson
June 2007
Pages: 618
|
Table of Contents
|
Index
|
Sample Chapter
Table of Contents
Chapter 1
A Regular Expression Matcher
The Practice of Programming
Implementation
Discussion
Alternatives
Building on It
Conclusion
Chapter 2
Subversion's Delta Editor: Interface As Ontology
Version Control and Tree Transformation
Expressing Tree Differences
The Delta Editor Interface
But Is It Art?
Abstraction As a Spectator Sport
Conclusions
Chapter 3
The Most Beautiful Code I Never Wrote
The Most Beautiful Code I Ever Wrote
More and More with Less and Less
Perspective
What Is Writing?
Conclusion
Acknowledgments
Chapter 4
Finding Things
On Time
Problem: Weblog Data
Problem: Who Fetched What, When?
Search in the Large
Conclusion
Chapter 5
Correct, Beautiful, Fast (in That Order): Lessons from Designing XML Verifiers
The Role of XML Validation
The Problem
Version 1: The Naïve Implementation
Version 2: Imitating the BNF Grammar O(N)
Version 3: First Optimization O(log N)
Version 4: Second Optimization: Don't Check Twice
Version 5: Third Optimization O(1)
Version 6: Fourth Optimization: Caching
The Moral of the Story
Chapter 6
Framework for Integrated Test: Beauty Through Fragility
An Acceptance Testing Framework in Three Classes
The Challenge of Framework Design
An Open Framework
How Simple Can an HTML Parser Be?
Conclusion
Chapter 7
Beautiful Tests
That Pesky Binary Search
Introducing JUnit
Nailing Binary Search
Conclusion
Chapter 8
On-the-Fly Code Generation for Image Processing
Chapter 9
Top Down Operator Precedence
JavaScript
Symbol Table
Tokens
Precedence
Expressions
Infix Operators
Prefix Operators
Assignment Operators
Constants
Scope
Statements
Functions
Array and Object Literals
Things to Do and Think About
Chapter 10
The Quest for an Accelerated Population Count
Basic Methods
Divide and Conquer
Other Methods
Sum and Difference of Population Counts of Two Words
Comparing the Population Counts of Two Words
Counting the 1-Bits in an Array
Applications
Chapter 11
Secure Communication: The Technology Of Freedom
The Heart of the Start
Untangling the Complexity of Secure Messaging
Usability Is the Key
The Foundation
The Test Suite
The Functioning Prototype
Clean Up, Plug In, Rock On…
Hacking in the Himalayas
The Invisible Hand Moves
Speed Does Matter
Communications Privacy for Individual Rights
Hacking the Civilization
Chapter 12
Growing Beautiful Code in BioPerl
BioPerl and the Bio::Graphics Module
The Bio::Graphics Design Process
Extending Bio::Graphics
Conclusions and Lessons Learned
Chapter 13
The Design of the Gene Sorte
The User Interface of the Gene Sorter
Maintaining a Dialog with the User over the Web
A Little Polymorphism Can Go a Long Way
Filtering Down to Just the Relevant Genes
Theory of Beautiful Code in the Large
Conclusion
Chapter 14
How Elegant Code Evolves with Hardware The Case of Gaussian Elimination
The Effects of Computer Architectures on Matrix Algorithms
A Decompositional Approach
A Simple Version
LINPACK's DGEFA Subroutine
LAPACK DGETRF
Recursive LU
ScaLAPACK PDGETRF
Multithreading for Multi-Core Systems
A Word About the Error Analysis and Operation Count
Future Directions for Research
Further Reading
Chapter 15
The Long-Term Benefits of Beautiful Design
My Idea of Beautiful Code
Introducing the CERN Library
Outer Beauty
Inner Beauty
Conclusion
Chapter 16
The Linux Kernel Driver Model: The Benefits of Working Together
Humble Beginnings
Reduced to Even Smaller Bits
Scaling Up to Thousands of Devices
Small Objects Loosely Joined
Chapter 17
Another Level of Indirection
From Code to Pointers
From Function Arguments to Argument Pointers
From Filesystems to Filesystem Layers
From Code to a Domain-Specific Language
Multiplexing and Demultiplexing
Layers Forever?
Chapter 18
Python's Dictionary Implementation: Being All Things to All People
Inside the Dictionary
Special Accommodations
Collisions
Resizing
Iterations and Dynamic Changes
Conclusion
Acknowledgments
Chapter 19
Multidimensional Iterators in NumPy
Key Challenges in N-Dimensional Array Operations
Memory Models for an N-Dimensional Array
NumPy Iterator Origins
Iterator Design
Iterator Interface
Iterator Use
Conclusion
Chapter 20
A Highly Reliable Enterprise System for NASA's Mars Rover Mission
The Mission and the Collaborative Information Portal
Mission Needs
System Architecture
Case Study: The Streamer Service
Reliability
Robustness
Conclusion
Chapter 21
ERP5: Designing for Maximum Adaptability
General Goals of ERP
ERP5
The Underlying Zope Platform
ERP5 Project Concepts
Coding the ERP5 Project
Conclusion
Chapter 22
A Spoonful of Sewage
Chapter 23
Distributed Programming with MapReduce
A Motivating Example
The MapReduce Programming Model
Other MapReduce Examples
A Distributed MapReduce Implementation
Extensions to the Model
Conclusion
Further Reading
Acknowledgments
Appendix: Word Count Solution
Chapter 24
Beautiful Concurrency
A Simple Example: Bank Accounts
Software Transactional Memory
The Santa Claus Problem
Reflections on Haskell
Conclusion
Acknowledgments
Chapter 25
Syntactic Abstraction: The syntax-case Expander
Brief Introduction to syntax-case
Expansion Algorithm
Example
Conclusion
Chapter 26
Labor-Saving Architecture: An Object-Oriented Framework for Networked Software
Sample Application: Logging Service
Object-Oriented Design of the Logging Server Framework
Implementing Sequential Logging Servers
Implementing Concurrent Logging Servers
Conclusion
Chapter 27
Integrating Business Partners the RESTful Way
Project Background
Exposing Services to External Clients
Routing the Service Using the Factory Pattern
Exchanging Data Using E-Business Protocols
Conclusion
Chapter 28
Beautiful Debugging
Debugging a Debugger
A Systematic Process
A Search Problem
Finding the Failure Cause Automatically
Delta Debugging
Minimizing Input
Hunting the Defect
A Prototype Problem
Conclusion
Acknowledgments
Further Reading
Chapter 29
Treating Code As an Essay
Chapter 30
When a Button Is All That Connects You to the World
Basic Design Model
Input Interface
Efficiency of the User Interface
Download
Future Directions
Chapter 31
Emacspeak: The Complete Audio Desktop
Producing Spoken Output
Speech-Enabling Emacs
Painless Access to Online Information
Summary
Acknowledgments
Chapter 32
Code in Motion
On Being "Bookish"
Alike Looking Alike
The Perils of Indentation
Navigating Code
The Tools We Use
DiffMerge's Checkered Past
Conclusion
Acknowledgments
Further Reading
Chapter 33
Writing Programs for "The Book"
The Nonroyal Road
Warning to Parenthophobes
Three in a Row
The Slippery Slope
The Triangle Inequality
Meandering On
"Duh!"—I Mean "Aha!"
Conclusion
Further Reading
Appendix
Afterword
Appendix
Contributors
Colophon
Return to
Beautiful Code