Terms and Conditions:
David Schmidt wrote:This material is intended for the use of the CIS students and staff at Kansas State University and should not be copied or distributed beyond KSU without my permission. (Please send me an email if you want to use these notes for personal study or for a course you are teaching---it won't cost you anything; I just want to know who is using the text.)
In an ever increasing fashion, amateur programmers use visual, drag-and-drop languages to program applications for home, school, and office use. This type of programming will play a crucial role in satisfying the exploding demand for software, but there will always be limits -- just as no hospital patient would submit to a surgery conducted by a someone who never went through a formal training, no customer of a complex or safety-critical system will settle for software written by anyone but a properly trained, professional programmer.
What makes professional programming
different from amateur programming
? The answer lies in use of structures
-- control structures (sequencing, conditionals, iteration, parallelism), data structures (arrays, stacks, trees), and component structures (modules, classes, objects, packages). Professional programmers understand how to employ properly all three forms of structure; amateurs do not. Further, patterns of structures-within-structures define architectures
that are learned and regularly imitated by professionals. As indicated by its title, this text presents standard architectures for component construction and patterns of control construction and data construction.
The text takes a 'modern' approach by emphasizing component structures over the other two forms. Computing has matured into a distributed, component-based activity, where both computer hardware and software are assembled from standardized components and connected together by means of standardized interfaces. By no means does this text ignore the classic developments of control and data structures -- they appear in due course at an appropriate level of detail. But component-level issues drive the software design process, and the text emphasizes this fact.
Java is used as the programming language in this text because it supplies solid support for component-structure-driven design; its control and data structuring mechanisms are adequate as well. Because Java and its support library are huge, only a carefully selected subset that promotes sound programming techniques is presented.
As the previous narrative indicates, learning to program requires more than merely learning to write in a particular computer language -- reader must understand the structures within programs and how these structures behave. To do this, reader must pore over the book's programming examples, copy them to the computer, test them, try to 'break' or 'trick' them, modify them in small ways, and try them again. In many ways, computer programs are like toys or appliances that can be examined, played with, disassembled, and reassembled in different ways. Experiences like these will help reader to develop programming intuitions.