Previous page Next page Navigation bar

Calculator Programming Tutorial


This section does not attempt to list the “best” books in the field. Instead, it lists some of the more general items in a typical professional library — mine. Many of these works are out of print, but are still available through, for example,

I do not apologize for the age of some of these books. The mid- and late-1970s were a golden age of computer science: the fundamental concepts developed then are powerful, effective, and to a large extent have yet to penetrate to the practitioner level. This is unfortunate. The fields of computer science, software engineering, and programming have roughly the same relationships to one another as do physics, civil engineering, and construction. While the fields are vastly different in scope and purpose, each has gems to offer the others. Most of these books are gems; all are at least semi-precious stones.

Programmer’s References

Beizer, Boris. Software Testing Techniques, 2nd ed. New York: Van Nostrand Reinhold, 1990.

—. Software System Testing and Quality Assurance. New York: Van Nostrand Reinhold, 1984.

These books are absolutely invaluable explanations of the concepts and techniques of testing software. These works belong on every programmer’s book shelf.

Dijkstra, Edsger W. A Discipline of Programming. Englewood Cliffs, New Jersey: Prentice-Hall, 1976.

This is a classic work in computer science, and should be read by anyone aspiring to be a serious programmer. One of the reviews of this work on notes that it is not a book about programming. Instead, it is a book about reasoning about programs. The overall thrust of this book is to encourage the use of programs that are provably correct. Even if you are not interested in program correctness proofs, however, this book in invaluable. Applying the concepts of loop invariants, pre- and post-conditions, and so forth, will improve your programming tremendously — in both reliability and maintainability.

This book is heavy going. Reading, and understanding, a chapter a month is a substantial accomplishment. The investment in time and effort, however, is worth it.

Charette, Robert N. Software Engineering Risk Analysis and Management. New York: Intertext Publications, 1989.

This book is an excellent introduction to risk analysis and risk management in software development. Software development is inherently risky, both due to its immaturity as a field of endeavor (the species has only fifty years’ experience with software), and due to managers’ predisposition to disbelieve practitioners’ warnings and predictions. Risk analysis and management is a large part of the software development project leader’s job. This book belongs on every project leader’s book shelf.

Flanagan, David. JavaScript: The Definitive Guide, 4th ed. Sebastapol, California: O’Reilly & Associates, 2002.

JavaScript is a great deal more powerful than one would expect from the descriptions, examples, and tutorials one finds on the web. This book describes the features and power of the JavaScript language. Previous editions did not do more than touch upon the W3C DOM JavaScript bindings used in writing dynamic HTML. This was not an omission — previous editions predated the W3C standards. The fourth edition, however, treats the W3C DOM and its JavaScript binding at length.

I faced serious difficulty in deciding whether to include this book in this list of references. I did not want to list something as specialized as a language guide here. However, three factors forced a place for this book on this list. The factors are: the paucity of information available on JavaScript, the excellence of this work, and my use of JavaScript in this web course.

Peters, Lawrence J. Software Design: Methods and Techniques. New York: Yourdon Press, 1981.

Every few years, a new software design technique comes along that promises to revolutionize the software world. None have done so, primarily because none are actually used. Different design techniques of course have different attributes, and have differing levels of effectiveness in various problem domains. However, any design technique is substantially better than none. The differences among what the various techniques would do become irrelevant when compared to what is. In a world of panicked thoughtless reactive code slinging — now formalized as “iterative development” and “extreme programming” — even these stodgy old techniques — all of which boil down to “think first” — would be an improvement.

Wirth, Niklaus. Algorithms + Data Structures = Programs. Englewood Cliffs, New Jersey: Prentice-Hall, 1976.

If you had this book, you would not need this web course — except perhaps to give you enough background to appreciate the points this book makes. This classic of computer science simply and beautifully explains the complementary roles of algorithms and data structures, and also gave the world the dictum, “make your data structures do your work for you.” This is an invaluable work that belongs on every programmer’s bookshelf — where it should be placed only after having been read thoroughly.

Programming Manager’s References

Brooks, Frederick P. The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition. Reading, Massachusetts: Addison-Wesley, 1995.

Carnegie Mellon University Software Engineering Institute. The Capability Maturity Model: Guidelines for Improving the Software Process. Reading, Massachusetts: Addison-Wesley, 1994.

DeMarco, Tom. Controlling Software Projects: Management, Measurement & Estimation. New York: Yourdon Press, 1982.

A classic. If you are going to base a software development management career on reading only one book, this is the one.

Holdsworth, Jacqueline. Software Process Design: Out of the Tar Pit. London: McGraw-Hill Book Company, 1994.

[ Previous page | Top of page | Next page ]

Previous page Top of page Next page Navigation bar

Copyright © 2001 Brian Hetrick
Page last updated 30 December 2001.

Brian’s Casio Calculator Corner







Building Blocks I


Data Structures I


Program Attributes

Building Blocks II

Algorithm Analysis


Data Structures II

Abstract Types


Problem Analysis

Reference Card



Site Information

Your Privacy

Site Map


Site Technical Data