CS 50: Programming Project
Instructor
Professor Peter Cappello - cappello at cs.ucsb.edu - Office Hours
Instruction Schedule
Lecture: Tuesday and Thursday: 12:30 - 1:45 in Psychology 1902.
Discussion: Instead of a customary discussion section, each team meets with the instructor/client once a week for 30 minutes at a mutually agreed upon scheduled time. All team members are expected to be present - individual absences are noted. Meetings begin on the second week, but you may wish to interact with the instructor/client during the first week.
Description
CMPSC 50 is about "programming in the large" - how to design, implement, and test large programs. You learn primarily by doing, spending most of your time contributing to your team project (as opposed to traditional homework assignments). Along the way, this course introduces:
- the phases of a software project, and provides software team working experience
- the basics of object-oriented analysis and design, including design patterns
- some user interface principles and some tips for satisfying clients
- automated system build and testing strategies and techniques, UML, version control and more ...
Prerequisites
CMPSCS 20 is the pre-requisite: You are expected to begin the quarter with a level of competency in Java programming equal to that of students who have passed CMPSC 20 at UCSB. CMPSC 50 is intended for Computer Science pre-majors. Other students may enroll, only as space permits.
Why have a lower division course on programming projects?
- To prepare computer science students for the programming projects required by many upper division courses, such as the courses on algorithms, operating systems, and compilers.
- To create a substantial project that you can add proudly to your portfolio, which is handy in a job interview.
Course Outcomes
You should:
- Learn how to create object designs by applying a set of principles and heuristics.
In particular, you have an opportunity to learn about:
- object-oriented analysis, design, and programming
- design patterns
- testing
- Experience team programming on a project that is large enough to warrant a team. Being part of a team requires communication skills that are not required of solo programming. It is challenging to construct and maintain a harmonious team where each member is fully productive.
- Present your software system to prospective clients or investors.
As an instructor, my goals for you are to:
- stimulate you to undertake a project that is both challenging and fun
- foster an environment where students help each other learn
- introduce you to topics in Java beyond those that you use in your project
- encourage you to become a more self-directed learner
I believe that the future belongs to those who enjoy learning/researching things for themselves. I consequently hope that you personally explore additional topics. Self-directed learning/research, like any skill, takes practice. Persevere. Self-directed learning/research does not mean that you cannot talk to people. It means that you take personal responsibility for adaptively organizing and executing—directing—your own learning/research plan.
Topics
- Software development
- a project directory structure
- version control system - Subversion
- build tool - Ant
- api documentation - javadoc
- archiving - Jar
- unit testing - JUnit
- Agile software development
- The principles of agile development
- The practices of extreme programming
- Object-oriented analysis and design
- concept identification
- UML basics
- class modeling - the class diagram
- state modeling - the state diagram
- interaction modeling - the sequence diagram
- design responsible objects
- minimize accessibility & mutability
- design patterns - selected patterns
- model-view-controller
- remote proxy
- singleton
- observer
- facade
- command
- adaptor
- factory
- User interface design
- Java topics
- the classpath
- the javac command
- the jar command - Java archiving
- the javadoc command - Java API documentation generation
- packages and the package statement
- the assert statement
- coding conventions
- introduction to the Swing graphics library and layout managers
- the Collection and Map libraries and generic programming
- logging library
- threads
- Properties
- debugging
Textbook
Reference books
If you want only 2 books on Java programming, Effective Java, by Joshua Bloch, should be one of them.
If you want only 2 books on object-oriented programming, Design Patterns, by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides, should be one of them.
Workload
This is a 4-credit course at UCSB. You are expected to finish this course in 10 weeks, working intelligently for an average of 10 hours/week.
Discussions & Lectures
Please email the instructor regarding what you would like to see in future lectures, so he can better accommodate your wishes.