Java Reference
In-Depth Information
vides pointers to many implementations for data structures and algorithms that are
available on the Web.
The claim that all modern programming languages can implement the same
algorithms (stated more precisely, any function that is computable by one program-
ming language is computable by any programming language with certain standard
capabilities) is a key result from computability theory. For an easy introduction to
this field see James L. Hein, Discrete Structures, Logic, and Computability [Hei09].
Much of computer science is devoted to problem solving. Indeed, this is what
attracts many people to the field. How to Solve It by George Polya [P ol57] is con-
sidered to be the classic work on how to improve your problem-solving abilities. If
you want to be a better student (as well as a better problem solver in general), see
Strategies for Creative Problem Solving by Folger and LeBlanc [FL95], Effective
Problem Solving by Marvin Levine [Lev94], and Problem Solving & Comprehen-
sion by Arthur Whimbey and Jack Lochhead [WL99], and Puzzle-Based Learning
by Zbigniew and Matthew Michaelewicz [MM08].
See The Origin of Consciousness in the Breakdown of the Bicameral Mind by
Julian Jaynes [Jay90] for a good discussion on how humans use the concept of
metaphor to handle complexity. More directly related to computer science educa-
tion and programming, see “Cogito, Ergo Sum! Cognitive Processes of Students
Dealing with Data Structures” by Dan Aharoni [Aha00] for a discussion on mov-
ing from programming-context thinking to higher-level (and more design-oriented)
programming-free thinking.
On a more pragmatic level, most people study data structures to write better
programs. If you expect your program to work correctly and efficiently, it must
first be understandable to yourself and your co-workers. Kernighan and Pike's The
Practice of Programming [KP99] discusses a number of practical issues related to
programming, including good coding and documentation style. For an excellent
(and entertaining!) introduction to the difficulties involved with writing large pro-
grams, read the classic The Mythical Man-Month: Essays on Software Engineering
by Frederick P. Brooks [Bro95].
If you want to be a successful Java programmer, you need good reference man-
uals close at hand. David Flanagan's Java in a Nutshell [Fla05] provides a good
reference for those familiar with the basics of the language.
After gaining proficiency in the mechanics of program writing, the next step
is to become proficient in program design. Good design is difficult to learn in any
discipline, and good design for object-oriented software is one of the most difficult
of arts. The novice designer can jump-start the learning process by studying well-
known and well-used design patterns. The classic reference on design patterns
is Design Patterns: Elements of Reusable Object-Oriented Software by Gamma,
Helm, Johnson, and Vlissides [GHJV95] (this is commonly referred to as the “gang
of four” book). Unfortunately, this is an extremely difficult topic to understand,
Search WWH ::




Custom Search