As programmer I am always looking for improving myself. One
of the ways to improve is to study ‘the masters’. This is a norm for artists,
architects etc. A new painter studies how other past master painters done their
work. Initially they mimic their style and later develop their own. The
mathematical equations, science concepts, programming have their own beauty. For
a software developer, a really well written piece of software has its own ‘elegance’.
It is a ‘work of art’. It is ‘beautiful’. But it is hard to describe that
beauty to someone who is not a programmer. So this is book for software
developers to understand the beauty in software.
This book gives you examples from master programmers and
what they think about their work or about other master programmers work. It’s a
great way to gain insights on how master programmers think about a particular
problem. This book has articles written
by masters like Brian Kernighan (Inventor of C), Karl Fogel (lead developer of
Subversion), Tim Bray (inventor of Web), Charles Petzold (Famous Windows
programmer and book writer), Sanjay Ghemat (of Google), Yuihiro Matsumoto
(inventor of Ruby) etc. It also has articles from diverse domains regular
expressions, version control, language development (Ruby, Python), numerical programming, bioinformatics, Web
and search, etc.
One of most interesting article is by Arun Mehta on how he
developed the hardware and software so that Prof. Stephen Hawking can interact
with the world. The spec given was ‘Prof. Hawking can only press one button’.
This article explains in detail how they developed the actual specs from the
one liner. He explains basic design models, input interface, simple typing,
word prediction, scrolling/editing/searching/macros etc. This software was
developed in VB. Imagine you have given this ‘one line’ spec, what you will do?
How you will proceed? It’s fascinating to understand thoughts behind all these
ideas and design decisions.
First article is from Kernighan about ‘regular expression’ matcher
that Rob Pike wrote for book ‘Practice of Programming’. It is truly ‘Beautiful
code’. Small, powerful, elegant, does its job well. I am really tempted to show you the code.
/* match:
search for regexp anywhere in text */
int match(char *regexp, char *text)
{
if (regexp[0] == '^')
return matchhere(regexp+1, text);
do {
/* must look even if string is empty */
if (matchhere(regexp, text))
return 1;
} while (*text++ != '\0');
return 0;
}
/* matchhere: search for regexp at
beginning of text */
int matchhere(char *regexp, char *text)
{
if (regexp[0] == '\0')
return 1;
if (regexp[1] == '*')
return matchstar(regexp[0],
regexp+2, text);
if (regexp[0] == '$' &&
regexp[1] == '\0')
return *text == '\0';
if (*text!='\0' &&
(regexp[0]=='.' || regexp[0]==*text))
return matchhere(regexp+1, text+1);
return 0;
}
/* matchstar: search for c*regexp at
beginning of text */
int matchstar(int c, char *regexp, char
*text)
{
do {
/* a * matches zero or more instances */
if (matchhere(regexp, text))
return 1;
} while (*text != '\0' &&
(*text++ == c || c == '.'));
return 0;
}
Just three small functions handle following regular
expression constructs
c matches
any literal character c
. matches
any single character
^ matches
the beginning of the input string
$ matches
the end of the input string
* matches
zero or more occurrences of the previous character
Personally I also like following articles,
- Subversion’s delta editor By Karl Fogel.
It helped me in understanding how subversion
works behind scene. It also helped in developing versioning/delta storage
scheme for a project.
- Framework for integrated Test : Beauty through
Fragility by Michael Feathers
Here Feathers talks about design of FIT (Framework
for Integrated Test) framework by Ward Cunningham. (NOTE : Ward Cunningham is
inventor of Wiki). FIT framework is just 3 classes.
- Distributed Programming with MapReduce by
Jeffery Dean and Sanjay Ghemavat
This article explains the concepts and infrastructure ideas that drive the
Google search. Hadoop project implements these concepts and brings it to open source
world.
- Linux Kernel Driver Model : The benefits of
working together by Greg Kroah-Hartman
Linux operating systems runs on everything
from your mobile phone (Android OS is a derivative of Linux), to desktop, to
servers to supercomputers. The driver model has to support diverse hardware requirements
and various memory scales.
This is a book where you go back every few months, read different
articles again and gain new insights. Enjoy.
Here are some links about the book.