CS601 Object-Oriented Software Development Course Description ABSTRACT There is more to being a professional developer than learning the syntax and libraries of a programming language--that part is easy. You must learn how to use the myriad of programming tools, how to write robust code, how to produce a simple design, how to interact with team members, and how to cope with a constantly moving target. Furthermore, you must learn how the network, computer, operating system, and your software operate as a unit to provide a useful service. To do this, you must acquire skills traditionally associated with system hardware and software administration. This class provides a survey of real-world programming mechanics and introduces you to the latest object-oriented software development strategies. Goal is to teach them how to learn and not be lazy programmers. What and where are the resources? Ideas behind free software, licensing. TOPICS LABS Must find info on how to do stuff at jGuru or elsewhere. For example, give a lecture on database stuff and then cut them loose with a task in the lab. Let them figure out how to open / close db. Perhaps give them trivial example they can try and then the task that they must figure out on their own. UNIX tool usage Shells, awk, sed, grep, wc -l, pipes ... Revision control systems RCS, perforce, CVS IDEs Eclipse Threads Databases Schemas, SQL, MySQL Sockets Web concepts HTTP, cookies, stateless/stateful programming, SSL JSP/Servlets snooping/parsing other sites ANTLR POP/SMTP/IMAP/clients/relays/setup etc... ------- Security Logging Testing Adaptive Programming; Demeter Aspect Programmign by contract, eiffel ANTLR grammars as aspects or adaptive? Patterns Debuggin Stats, correlation vs cause and effect. Coincidence (tom and the port scan, our line drops). 280 million people in USA; every day 280 1-in-a million events happen. Stats are useful for summarizing data, extrapolating from subset, and finding correlations. Avoid superfluous confusing details. Use example of two twins killed within 2 hours on same highway in Finland on march 5th. both on bikes. Ask rather "how surprising is it?" Surprising that 2 men killed <2 hours on same day in same town? no. fact that they were twins makes no difference. Not unusual for two people to be killed in snowstorm on a busy highway on bikes. Blades of grass in a meadow. Pick any one of them and it's like 1ina billion, but it's still a certainty you will pick one. Talk about feyman's example of finding that exact plate on car in lot before talk. Find his example in the book. You cannot use post examination to evaluate probability...it already happened. "Six easy pieces". Never ever can verify an idea with data you used to get the idea. What's te chance I see that license plate! Einstein and the orbit of mercury then eclipse. We are hardwired to explain things and find patterns; leads to lots of false positives. Flexibility vs speed Optimization & performance Scaling and load-balancing Architecture Separation, encapsulation, simplicity, #components, automation Configuration XML, db vs files, config/script languages Robustness Threads, HTML validation, , autoreboot, reload, tolerance Reporting and sys status and control center Generating web pages Resin + apache User management Extreme Programming Project management Goals, making lists, pruning, optimizing, reaching goals, accepting imperfection, bug tracking Refactoring Open source software, patents, licenses, ... BOOKS Mythical Man Month [Required] jGuru [Required] Extreme programming explained [Recommended] Refactoring by Fowler [Recommended] Java book [Required] Java in a Nutshell [Recommended] Object-Oriented Software Development in Java: Principles, Patterns, and Frameworks by Jia [Recommended] or, Book you currently own Dilbert book [Recommended] INSTRUCTION FORMAT 30 class periods of 1:45 in 15 weeks. Class will often be broken down into lecture followed by lab with a break in between to service coffee and/or junk food requirements. Instructor-student interaction during lecture is encouraged and discussion groups will be formed to solve problems and debate programming philosophy. "Pop quizzes" may appear during any class. Each lecture period, a student at random will be chosen to record class notes. The student will type the notes up and submit them; they will be available on the class website. With the support of the USF A/V group, the class may be video taped and streamed from the class website. Misc: Anecdotes each class. Candy? PROJECTS All projects must be written in Java. Many releases Submission For each release, students must email professor a release tarball and a LOC computation plus provide a print out with tabs=4. EXAMS GRADING Projects Group demo, code walk-through and discussion. Further, you will submit a formal web-based self-evaluation of your individual contribution for each project. Your grade is informally computed as an aggregate of this data and the professor's in-person group interviews. Quizzes Class participation is not required, but students in between grades may be bumped up for excellent class participation. COMPUTING REQUIREMENTS