Previous classes such as CS152 and CS251 have introduced you to the basic syntax and semantics of the Java programming language, as well as elements of program design. The purpose of CS351 is to attain mastery of both the Java language and design and engineering of large programs from an object oriented perspective. Although we will develop programs exclusively in the Java language, we will discuss and examine deeper design issues that span all programming languages. Mastery is a difficult thing, and comes only with time and real, hands-on experience. This class will give you some of that experience by giving you the opportunity to design and build a few programs of nontrivial scope. This class really represents a beginning on a lifelong road to the kind of true mastery that comes only by grappling with many real-world design issues, solving them yourself, and seeing how other (more experienced) programmers have solved them.
Along the way, we'll examine issues like robustness, security, identifying goals and requirements, project scope, testing methodology, proper use of object orientation, and support tools. And, just in case you think that this is a class purely about ``hacking'', let me assure you that your theory classes should not be forgotten when you enter this class -- a significant part of good design is understanding your tools, including your algorithms. We'll spend some effort analyzing the algorithms at the heart of the code you'll be building here.
Terran Lane 2005-01-19