Appendix A

Resources

The only reason we were able to cover so much ground in this book is that we viewed many of our subjects from a high altitude. If we'd given them the in-depth coverage they deserved, the book would have been ten times longer.

We started the book with the suggestion that Pragmatic Programmers should always be learning. In this appendix we've listed resources that may help you with this process.

In the section Professional Societies, we give details of the IEEE and the ACM. We recommend that Pragmatic Programmers join one (or both) of these societies. Then, in Building a Library, we highlight periodicals, books, and Web sites that we feel contain high-quality and pertinent information (or that are just plain fun).

Throughout the book we referenced many software resources accessible via the Internet. In the Internet Resources section, we list the URLs of these resources, along with a short description of each. However, the nature of the Web means that many of these links may well be stale by the time you read this book. You could try one of the many search engines for a more up-to-date link, or visit our Web site at www.pragmaticprogrammer.com and check our links section.

Finally, this appendix contains the book's bibliography.

Professional Societies

There are two world-class professional societies for programmers: the Association for Computing Machinery (ACM)[1] and the IEEE Computer Society.[2] We recommend that all programmers belong to one (or both) of these societies. In addition, developers outside the United States may want to join their national societies, such as the BCS in the United Kingdom.

[1] ACM Member Services, PO Box 11414, New York, NY 10286, USA.

www.acm.org

[2] 1730 Massachusetts Avenue NW, Washington, DC 20036-1992, USA.

www.computer.org

Membership in a professional society has many benefits. The conferences and local meetings give you great opportunities to meet people with similar interests, and the special interest groups and technical committees give you the opportunity to participate in setting standards and guidelines used around the world. You'll also get a lot out of their publications, from high-level discussions of industry practice to low-level computing theory.

Building a Library

We're big on reading. As we noted in Your Knowledge Portfolio, page 12, a good programmer is always learning. Keeping current with books and periodicals can help. Here are some that we like.

Periodicals

If you're like us, you'll save old magazines and periodicals until they're piled high enough to turn the bottom ones to flat sheets of diamond. This means it's worth being fairly selective. Here are a few periodicals we read.

  • IEEE Computer. Sent to members of the IEEE Computer Society, Computer has a practical focus but is not afraid of theory. Some issues are oriented around a theme, while others are simply collections of interesting articles. This magazine has a good signal-to-noise ratio.
  • IEEE Software. This is another great bimonthly publication of the IEEE Computer Society aimed at software practitioners.
  • Communications of the ACM. The basic magazine received by all members of the ACM, CACM has been a standard in the industry for decades, and has probably published more seminal articles than any other source.
  • SIGPLAN. Produced by the ACM Special Interest Group on Programming Languages, SIGPLAN is an optional addition to your ACM membership. It is often used for publishing language specifications, along with articles of interest to everyone who likes looking deeply into programming.
  • Dr. Dobbs Journal. A monthly magazine, available by subscription and on newsstands, Dr. Dobbs is quirky, but has articles ranging from bit-level practice to heavy theory.
  • The Perl Journal. If you like Perl, you should probably subscribe to The Perl Journal (www.tpj.com).
  • Software Development Magazine. A monthly magazine focusing on general issues of project management and software development.

Weekly Trade Papers

There are several weekly newspapers published for developers and their managers. These papers are largely a collection of company press releases, redressed as articles. However, the content is still valuable—it lets you track what is going on, keep abreast of new product announcements, and follow industry alliances as they are forged and broken. Don't expect a lot of in-depth technical coverage, though.

Books

Computing books can be expensive, but choose carefully and they're a worthwhile investment. You may want to check out our Pragmatic Bookshelf titles at http://pragmaticprogrammer.com. Additionally, here are a handful of the many other books we like.

Analysis and Design

  • Object-Oriented Software Construction, 2nd Edition. Bertrand Meyer's epic book on the fundamentals of object-oriented development, all in about 1,300 pages [Mey97b].
  • Design Patterns. A design pattern describes a way to solve a particular class of problems at a higher level than a programming language idiom. This now-classic book [GHJV95] by the Gang of Four describes 23 basic design patterns, including Proxy, Visitor, and Singleton.
  • Analysis Patterns. A treasure trove of high-level, architectural patterns taken from a wide variety of real-world projects and distilled in book form. A relatively quick way to gain the insight of many years of modeling experience [Fow96].

Teams and Projects

  • The Mythical Man Month. Fred Brooks' classic on the perils of organizing project teams, recently updated [Bro95].
  • Dynamics of Software Development. A series of short essays on building software in large teams, focusing on the dynamics between team members, and between the team and the rest of the world [McC95].
  • Surviving Object-Oriented Projects: A Manager's Guide. Alistair Cockburn's "reports from the trenches" illustrate many of the perils and pitfalls of managing an OO project—especially your first one. Mr. Cockburn provides tips and techniques to get you through the most common problems [Coc97b].

Specific Environments

  • Unix. W. Richard Stevens has several excellent books including Advanced Programming in the Unix Environment and the Unix Network Programming books [Ste92, Ste98, Ste99].
  • Windows. Marshall Brain's Win32 System Services [Bra95] is a concise reference to the low-level APIs. Charles Petzold's Programming Windows [Pet98] is the bible of Windows GUI development.
  • C++. As soon as you find yourself on a C++ project, run, don't walk, to the bookstore and get Scott Meyer's Effective C++, and possibly More Effective C++ [Mey97a, Mey96]. For building systems of any appreciable size, you need John Lakos' Large-Scale C++ Software Design [Lak96]. For advanced techniques, turn to Jim Coplien's Advanced C++ Programming Styles and Idioms [Cop92].

In addition, the O'Reilly Nutshell series (www.ora.com) gives quick, comprehensive treatments of miscellaneous topics and languages such as perl, yacc, sendmail, Windows internals, and regular expressions.

The Web

Finding good content on the Web is hard. Here are several links that we check at least once a week.

  • Slashdot. Billed as "News for nerds. Stuff that matters," Slashdot is one of the net homes of the Linux community. As well as regular updates on Linux news, the site offers information on technologies that are cool and issues that affect developers.
    www.slashdot.org
  • Cetus Links. Thousands of links on object-oriented topics.
    www.cetus-links.org
  • WikiWikiWeb. The Portland Pattern Repository and patterns discussion. Not just a great resource, the WikiWikiWeb site is an interesting experiment in collective editing of ideas.
    www.c2.com

Internet Resources

The links below are to resources available on the Internet. They were valid at the time of writing, but (the Net being what it is) they may well be out of date by the time you read this. If so, you could try a general search for the filenames, or come to the Pragmatic Programmer Web site (www.pragmaticprogrammer.com) and follow our links.

Editors

Emacs and vi are not the only cross-platform editors, but they are freely available and widely used. A quick scan through a magazine such as Dr. Dobbs will turn up several commercial alternatives.

Emacs

Both Emacs and XEmacs are available on Unix and Windows platforms.

[URL 1] The Emacs Editor

www.gnu.org
The ultimate in big editors, containing every feature that any editor has ever had, Emacs has a near-vertical learning curve, but repays handsomely once you've mastered it. It also makes a great mail and news reader, address book, calendar and diary, adventure game, ....

[URL 2] The XEmacs Editor

www.xemacs.org
Spawned from the original Emacs some years ago, XEmacs is reputed to have cleaner internals and a better-looking interface.

vi

There are at least 15 different vi clones available. Of these, vim is probably ported to the most platforms, and so would be a good choice of editor if you find yourself working in many different environments.

[URL 3] The Vim Editor

ftp://ftp.fu-berlin.de/misc/editors/vim
From the documentation: "There are a lot of enhancements above vi: multi level undo, multi windows and buffers, syntax highlighting, command line editing, filename completion, on-line help, visual selection, etc...."

[URL 4] The elvis Editor

elvis.the-little-red-haired-girl.org
An enhanced vi clone with support for X.

[URL 5] Emacs Viper Mode

http://www.cs.sunysb.edu/~kifer/emacs.html
Viper is a set of macros that make Emacs look like vi. Some may doubt the wisdom of taking the world's largest editor and extending it to emulate an editor whose strength is its compactness. Others claim it combines the best of both worlds.

Compilers, Languages, and Development Tools

[URL 6] The GNU C/C++ Compiler

www.fsf.org/software/gcc/gcc.html
One of the most popular C and C++ compilers on the planet. It also does Objective-C. (At the time of writing, the egcs project, which previously splintered from gcc, is in the process of merging back into the fold.)

[URL 7] The Java Language from Sun

java.sun.com
Home of Java, including downloadable SDKs, documentation, tutorials, news, and more.

[URL 8] Perl Language Home Page

www.perl.com
O'Reilly hosts this set of Perl-related resources.

[URL 9] The Python Language

www.python.org
The Python object-oriented programming language is interpreted and interactive, with a slightly quirky syntax and a wide and loyal following.

[URL 10] SmallEiffel

SmallEiffel.loria.fr
The GNU Eiffel compiler runs on any machine that has an ANSI C compiler and a Posix runtime environment.

[URL 11] ISE Eiffel

www.eiffel.com
Interactive Software Engineering is the originator of Design by Contract, and sells a commercial Eiffel compiler and related tools.

[URL 12] Sather

www.icsi.berkeley.edu/~sather
Sather is an experimental language that grew out of Eiffel. It aims to support higher-order functions and iteration abstraction as well as Common Lisp, CLU, or Scheme, and to be as efficient as C, C++, or Fortran.

[URL 13] VisualWorks

www.cincom.com
Home of the VisualWorks Smalltalk environment. Noncommercial versions for Windows and Linux are available for free.

[URL 14] The Squeak Language Environment

squeak.cs.uiuc.edu
Squeak is a freely available, portable implementation of Smalltalk-80 written in itself; it can produce C code output for higher performance.

[URL 15] The TOM Programming Language

www.gerbil.org/tom
A very dynamic language with roots in Objective-C.

[URL 16] The Beowulf Project

www.beowulf.org
A project that builds high-performance computers out of networked clusters of inexpensive Linux boxes.

[URL 17] iContract—Design by Contract Tool for Java

www.reliable-systems.com
Design by Contract formalism of preconditions, postconditions, and invariants, implemented as a preprocessor for Java. Honors inheritance, implements existential quantifiers, and more.

[URL 18] Nana—Logging and Assertions for C and C++

www.gnu.org/software/nana/nana.html
Improved support for assertion checking and logging in C and C++. It also provides some support for Design by Contract.

[URL 19] DDD—Data Display Debugger

http://www.gnu.org/software/ddd/
A free graphical front end for Unix debuggers.

[URL 20] John Brant's Refactoring Browser

st-www.cs.uiuc.edu/users/brant/Refactory
A popular refactoring browser for Smalltalk.

[URL 21] DOC++ Documentation Generator

www.zib.de/Visual/software/doc++/index.html
DOC++ is a documentation system for C/C++ and Java that generates both image and HTML output for sophisticated online browsing of your documentation directly from the C++ header or Java class files.

[URL 22] xUnit—Unit Testing Framework

www.XProgramming.com
A simple but powerful concept, the xUnit unit testing framework provides a consistent platform for testing software written in a variety of languages.

[URL 23] The Tcl Language

www.scriptics.com
Tcl ("Tool Command Language") is a scripting language designed to be easy to embed into an application.

[URL 24] Expect—Automate Interaction with Programs

expect.nist.gov
An extension built on Tcl [URL 23], expect allows you to script interaction with programs. As well as helping you write command files that (for example) fetch files from remote servers or extend the power of your shell, expect can be useful when performing regression testing. A graphical version, expectk, lets you wrap non-GUI applications with a windowing front end.

[URL 25] T Spaces

www.almaden.ibm.com/cs/TSpaces
From their Web page: "T Spaces is a network communication buffer with database capabilities. It enables communication between applications and devices in a network of heterogeneous computers and operating systems. T Spaces provides group communication services, database services, URL-based file transfer services, and event notification services."

[URL 26] javaCC—Java Compiler-Compiler

www.webgain.com/products/java_cc
A parser generator that is tightly coupled to the Java language.

[URL 27] The bison Parser Generator

www.gnu.org/software/bison/bison.html
bison takes an input grammar specification and generates from it the C source code of a suitable parser.

[URL 28] SWIG—Simplified Wrapper and Interface Generator

www.swig.org
SWIG is a software development tool that connects programs written in C, C++, and Objective-C with a variety of high-level programming languages such as Perl, Python, and Tcl/Tk, as well as Java, Eiffel, and Guile.

[URL 29] The Object Management Group, Inc.

www.omg.org
The OMG is the steward of various specifications for producing distributed object-based systems. Their work includes the Common Object Request Broker Architecture (CORBA) and the Internet Inter-ORB Protocol (IIOP). Combined, these specifications make it possible for objects to communicate with each other, even if they are written in different languages and run on different types of computers.

Unix Tools Under DOS

[URL 30] The UWIN Development Tools

www.gtlinc.com/uwin.html
Global Technologies, Inc., Old Bridge, NJ
The UWIN package provides Windows Dynamic Link Libraries (DLLs) that emulate a large portion of the Unix C level library interface. Using this interface, GTL has ported a large number of Unix command-line tools to Windows. See also [URL 31].

[URL 31] The Cygnus Cygwin Tools

sourceware.cygnus.com/cygwin/
Cygnus Solutions, Sunnyvale, CA
The Cygnus package also emulates the the Unix C library interface, and provides a large array of Unix command-line tools under the Windows operating system.

[URL 32] Perl Power Tools

www.perl.com/pub/language/ppt/
A project to reimplement the classic Unix command set in Perl, making the commands available on all platforms that support Perl (and that's a lot of platforms).

Source Code Control Tools

[URL 33] RCS—Revision Control System

www.cs.purdue.edu/homes/trinkle/RCS/
GNU source code control system for Unix and Windows NT.

[URL 34] CVS—Concurrent Version System

www.cvshome.com
Freely available source code control system for Unix and Windows NT. Extends RCS by supporting a client-server model and concurrent access to files.

[URL 35] Aegis Transaction-Based Configuration Management

http://www.canb.auug.org.au/~millerp/aegis.html
A process-oriented revision control tool that imposes project standards (such as verifying that checked-in code passes tests).

[URL 36] ClearCase

www.rational.com
Version control, workspace and build management, process control.

[URL 37] MKS Source Integrity

www.mks.com
Version control and configuration management. Some versions incorporate features allowing remote developers to work on the same files simultaneously (much like CVS).

[URL 38] PVCS Configuration Management

www.merant.com
A source code control system, very popular for Windows systems.

[URL 39] Visual SourceSafe

www.microsoft.com
A version control system that integrates with Microsoft's visual development tools.

[URL 40] Perforce

www.perforce.com
A client-server software configuration management system.

Other Tools

[URL 41] WinZip—Archive Utility for Windows

www.winzip.com
Nico Mak Computing, Inc., Mansfield, CT
A Windows-based file archive utility. Supports both zip and tar formats.

[URL 42] The Z Shell

sunsite.auc.dk/zsh
A shell designed for interactive use, although it is also a powerful scripting language. Many of the useful features of bash, ksh, and tcsh were incorporated into zsh; many original features were added.

[URL 43] A Free SMB Client for Unix Systems

samba.anu.edu.au/pub/samba/
Samba lets you share files and other resources between Unix and Windows systems. Samba includes:

  • An SMB server, to provide Windows NT and LAN Manager-style file and print services to SMB clients such as Windows 95, Warp Server, smbfs, and others.
  • A Netbios nameserver, which among other things gives browsing support. Samba can be the master browser on your LAN if you wish.
  • An ftp-like SMB client that allows you to access PC resources (disks and printers) from Unix, Netware, and other operating systems.

Papers and Publications

[URL 44] The comp.object FAQ

www.cyberdyne-object-sys.com/oofaq2
A substantial and well-organized FAQ for the comp.object newsgroup.

[URL 45] eXtreme Programming

www.XProgramming.com
From the Web site: "In XP, we use a very lightweight combination of practices to create a team that can rapidly produce extremely reliable, efficient, well-factored software. Many of the XP practices were created and tested as part of the Chrysler C3 project, which is a very successful payroll system implemented in Smalltalk."

[URL 46] Alistair Cockburn's Home Page

members.aol.com/acockburn
Look for "Structuring Use Cases with Goals" and use case templates.

[URL 47] Martin Fowler's Home Page

ourworld.compuserve.com/homepages/martin_fowler
Author of Analysis Patterns and co-author of UML Distilled and Refactoring: Improving the Design of Existing Code. Martin Fowler's home page discusses his books and his work with the UML.

[URL 48] Robert C. Martin's Home Page

www.objectmentor.com
Good introductory papers on object-oriented techniques, including dependency analysis and metrics.

[URL 49] Aspect-Oriented Programming

www.parc.xerox.com/csl/projects/aop/
An approach to adding functionality to code, both orthogonally and declaratively.

[URL 50] JavaSpaces Specification

java.sun.com/products/javaspaces
A Linda-like system for Java that supports distributed persistence and distributed algorithms.

[URL 51] Netscape Source Code

www.mozilla.org
The development source of the Netscape browser.

[URL 52] The Jargon File

www.jargon.org
Eric S. Raymond
Definitions for many common (and not so common) computer industry terms, along with a good dose of folklore.

[URL 53] Eric S. Raymond's Papers

www.tuxedo.org/~esr
Eric's papers on The Cathedral and the Bazaar and Homesteading the Noo-sphere describing the psychosocietal basis for and implications of the Open Source movement.

[URL 54] The K Desktop Environment

www.kde.org
From their Web page: "KDE is a powerful graphical desktop environment for Unix workstations. KDE is an Internet project and truly open in every sense."

[URL 55] The GNU Image Manipulation Program

www.gimp.org
Gimp is a freely distributed program used for image creation, composition, and retouching.

[URL 56] The Demeter Project

www.ccs.neu.edu/research/demeter
Research focused on making software easier to maintain and evolve using Adaptive Programming.

Miscellaneous

[URL 57] The GNU Project

www.gnu.org
Free Software Foundation, Boston, MA
The Free Software Foundation is a tax-exempt charity that raises funds for the GNU project. The GNU project's goal is to produce a complete, free, Unix-like system. Many of the tools they've developed along the way have become industry standards.

[URL 58] Web Server Information

www.netcraft.com/survey/servers.html
Links to the home pages of over 50 different web servers. Some are commercial products, while others are freely available.

Bibliography

[Bak72] F. T. Baker. Chief programmer team management of production programming. IBM Systems Journal, 11(1):56–73, 1972.

[BBM96] V. Basili, L. Briand, and W. L. Melo. A validation of object-oriented design metrics as quality indicators. IEEE Transactions on Software Engineering, 22(10):751–761, October 1996.

[Ber96] Albert J. Bernstein. Dinosaur Brains: Dealing with All Those Impossible People at Work. Ballantine Books, New York, NY, 1996.

[Bra95] Marshall Brain. Win32 System Services. Prentice Hall, Englewood Cliffs, NJ, 1995.

[Bro95] Frederick P. Brooks, Jr. The Mythical Man Month: Essays on Software Engineering. Addison-Wesley, Reading, MA, anniversary edition, 1995.

[CG90] N. Carriero and D. Gelenter. How to Write Parallel Programs: A First Course. MIT Press, Cambridge, MA, 1990.

[Cla04] Mike Clark. Pragmatic Project Automation. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2004.

[CN91] Brad J. Cox and Andrex J. Novobilski. Object-Oriented Programming, An Evolutionary Approach. Addison-Wesley, Reading, MA, 1991.

[Coc97a] Alistair Cockburn. Goals and use cases. Journal of Object Oriented Programming, 9(7):35–40, September 1997.

[Coc97b] Alistair Cockburn. Surviving Object-Oriented Projects: A Manager's Guide. Addison Wesley Longman, Reading, MA, 1997.

[Cop92] James O. Coplien. Advanced C++ Programming Styles and Idioms. Addison-Wesley, Reading, MA, 1992.

[DL99] Tom Demarco and Timothy Lister. Peopleware: Productive Projects and Teams. Dorset House, New York, NY, second edition, 1999.

[FBB+99] Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts. Refactoring: Improving the Design of Existing Code. Addison Wesley Longman, Reading, MA, 1999.

[Fow96] Martin Fowler. Analysis Patterns: Reusable Object Models. Addison Wesley Longman, Reading, MA, 1996.

[FS99] Martin Fowler and Kendall Scott. UML Distilled: Applying the Standard Object Modeling Language. Addison Wesley Longman, Reading, MA, second edition, 1999.

[GHJV95] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading, MA, 1995.

[Gla99a] Robert L. Glass. Inspections—Some surprising findings. Communications of the ACM, 42(4): 17–19, April 1999.

[Gla99b] Robert L. Glass. The realities of software technology payoffs. Communications of the ACM, 42(2):74–79, February 1999.

[Hol78] Michael Holt. Math Puzzles and Games. Dorset Press, New York, NY, 1978.

[HT03] Andy Hunt and Dave Thomas. Pragmatic Unit Testing In Java with JUnit. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2003.

[Jac94] Ivar Jacobson. Object-Oriented Software Engineering: A Use-Case Driven Approach. Addison-Wesley, Reading, MA, 1994.

[KLM+97] Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, and John Irwin. Aspect-oriented programming. In European Conference on Object-Oriented Programming (ECOOP), volume LNCS 1241. Springer-Verlag, June 1997.

[Knu97a] Donald Ervin Knuth. The Art of Computer Programming: Fundamental Algorithms, volume 1. Addison Wesley Longman, Reading, MA, third edition, 1997.

[Knu97b] Donald Ervin Knuth. The Art of Computer Programming: Seminumerical Algorithms, volume 2. Addison Wesley Longman, Reading, MA, third edition, 1997.

[Knu98] Donald Ervin Knuth. The Art of Computer Programming: Sorting and Searching, volume 3. Addison Wesley Longman, Reading, MA, second edition, 1998.

[KP99] Brian W. Kernighan and Rob Pike. The Practice of Programming. Addison Wesley Longman, Reading, MA, 1999.

[Kru98] Philippe Kruchten. The Rational Unified Process: An Introduction. Addison Wesley Longman, Reading, MA, 1998.

[Lak96] John Lakos. Large-Scale C++ Software Design. Addison Wesley Longman, Reading, MA, 1996.

[LH89] Karl J. Lieberherr and Ian Holland. Assuring good style for object-oriented programs. IEEE Software, pages 38–48, September 1989.

[Lis88] Barbara Liskov. Data abstraction and hierarchy. SIGPLAN Notices, 23(5), May 1988.

[LMB92] John R. Levine, Tony Mason, and Doug Brown. Lex and Yacc. O'Reilly & Associates, Inc., Sebastopol, CA, second edition, 1992.

[McC95] Jim McCarthy. Dynamics of Software Development. Microsoft Press, Redmond, WA, 1995.

[Mey96] Scott Meyers. More Effective C++: 35 New Ways to Improve Your Programs and Designs. Addison-Wesley, Reading, MA, 1996.

[Mey97a] Scott Meyers. Effective C++: 50 Specific Ways to Improve Your Programs and Designs. Addison Wesley Longman, Reading, MA, second edition, 1997.

[Mey97b] Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall, Englewood Cliffs, NJ, second edition, 1997.

[Pet98] Charles Petzold. Programming Windows, The Definitive Guide to the Win32 API. Microsoft Press, Redmond, WA, fifth edition, 1998.

[Sch95] Bruce Schneier. Applied Cryptography: Protocols, Algorithms, and Source Code in C. John Wiley & Sons, New York, NY, second edition, 1995.

[Sed83] Robert Sedgewick. Algorithms. Addison-Wesley, Reading, MA, 1983.

[Sed92] Robert Sedgewick. Algorithms in C++. Addison-Wesley, Reading, MA, 1992.

[SF96] Robert Sedgewick and Phillipe Flajolet. An Introduction to the Analysis of Algorithms. Addison-Wesley, Reading, MA, 1996.

[Ste92] W. Richard Stevens. Advanced Programming in the Unix Environment. Addison-Wesley, Reading, MA, 1992.

[Ste98] W. Richard Stevens. Unix Network Programming, Volume 1: Networking APIs: Sockets and Xti. Prentice Hall, Englewood Cliffs, NJ, second edition, 1998.

[Ste99] W. Richard Stevens. Unix Network Programming, Volume 2: Interprocess Communications. Prentice Hall, Englewood Cliffs, NJ, second edition, 1999.

[Str35] James Ridley Stroop. Studies of interference in serial verbal reactions. Journal of Experimental Psychology, 18:643–662, 1935.

[TFH04] Dave Thomas, Chad Fowler, and Andy Hunt. Programming Ruby, The Pragmatic Programmers' Guide. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2004.

[TH03] Dave Thomas and Andy Hunt. Pragmatic Version Control Using CVS. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2003.

[WK82] James Q. Wilson and George Kelling. The police and neighborhood safety. The Atlantic Monthly, 249(3):29–38, March 1982.

[YC86] Edward Yourdon and Larry L. Constantine. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Prentice Hall, Englewood Cliffs, NJ, second edition, 1986.

[You95] Edward Yourdon. When good-enough software is best. IEEE Software, May 1995.