Last updated: January 21, 2009
Spring 2009
Tues/Thur: 3:30-5:15pm HRN 235
Instructor: Terence Parr
Office hours: Any time door is open or by appointment
TA: Shaoting Cai, caishaoting at gmail
hours: Monday from 1pm to 5pm and Friday 10am to 4pm.
Midterm exam: March 19, 2009
Last day of class: Thursday, May 14, 2009
Exam 1: Mar 19
Exam 2: May 7
This course is cross-listed as both CS601 and CS342; undergraduates and graduate students will be evaluated and graded on different scales.
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.
My primary goal is to prepare you for a productive programming and research life while in graduate school at USF. Furthermore, I intend to give you a taste of the technologies, strategies, and problems you will encounter as a professional programmer. Most importantly, I want to teach you to how to learn new concepts and technologies, solve your own problems, and do your own research. As a programmer, you must constantly struggle to keep up with the latest advances or you and your skills will become obsolete in a few years.
At the end of this course, the student will
Lab topicsOO principles worksheetUNIX Perforce unit testing with jUnit Sockets Threads Data structures Recursion worksheet Databases Web servers HTML page generation Servlets cookies sessions POP / SMTP Parsing Build / deployment / test box |
Lecture/Discussion topicsTechnologyOptional: crash course on Java Optional: Java I/O, collections Open-source, patents, licensing; copyrights/patents Top-down design Object-oriented design Threads Logging and its role in producing maintainable software Security, encryption (basic ideas, what not to do, typical attacks) System architecture and design issues How DNS works and how email is shuffled around How to be a better programmer Mythical man-month Programming "by contract" Aspect-oriented programming Extreme programming Refactoring Testing, robustness Design patterns jGuru case study Dealing with the complexities of team interactions |
|
There are no late projects.
I will deduct 10% if your program is not executable exactly in the fashion mentioned in the project; that is, class name and jar must be exactly right. For you PC folks, note that case is significant for class names and file names on linux! All projects will be graded and must run under linux.
5% | Labs/Quizzes/Class participation |
2.5% | Dictionary project |
5% | Expression evaluator project |
2.5% | Unit testing project |
5% | Modifying existing code project |
10% | HTTP project |
40% | Webmail project |
15% | Exam 1 (Mar 3) |
15% | Exam 2 (May 1) |
For the semester project, you must complete the required level to pass the class!
Please note that class participation is part of your grade. You must
learn to interact with other developers and come up with solutions.
In general, I will read all papers, projects, quizzes
etc... two times. Once to evaluate the average and a second time to
assign scores. In the first pass, I also come up with a scoring
strategy for each question.
I consider an "A" grade to be above and beyond what most
students have achieved. A "B" grade is an average grade or what you
could call "competence" in a business setting. A "C" grade means that
you either did not or could not put forth the effort to achieve
competence. An "F" grade implies you did very little work or had
great difficulty with the class compared to other students.
I will be very strict and set a high standard in my grading,
but I will work hard to help you if you are having trouble. You some
of you may not get the grade you were hoping for in this class, but I
will do everything I can to make sure you learn a lot and have a
satisfying educational experience!
Unless you are sick or have a family emergency, I will not change
deadlines for projects nor exam times. For example, I will not give
you a special final exam just because you want to fly home early.
Consult the university academic calendar before making travel plans.
http://cs.usfca.edu/mailman/listinfo/cs601.
To post, email cs601@cs.usfca.edu.
There are general definitions of C and B level work that must be completed to achieve those grades on the semester project. To get an A, you must impress me with your ability to code and do significant work beyond the B work in comparison to other projects.
The authors of the two best projects in the class will be excused from exam II. :)
Submission
The big project will be graded while you demonstrate your software in
front of the instructor.
By definition, there is no late project--your last working release
will be considered in lieu of any unfinished project. Missing a
release in order to achieve a better result at the next release is
acceptable once or twice, but remember missing all releases to turn in
a finished project in December will yield a poor score.