Code review Friday 1. Need a laptop at each table, with code on the laptop and ready to display. 2. Goals. Each of you should walk away with: -- Clear ideas on what parts of your code are are confusing, hard to extend, in need of improvement -- Concrete suggestions on how to change it to make it better Final project 1. Your choice of topic. Teams of size 1-3. 2. Scale similar to or bigger than web app. 3. Two choices of frameworks (a) A Java GUI application using a variety of Swing classes, including menus, windows, buttons/text fields/whatever as appropriate. -- or -- (b) A web application using Javascript, HTML, and CSS on the client side to implement the user interface, and Ajax-style communication with the server. 4. Focus: usability and extensible architecture (assuming the good coding practices we have talked about--good naming, consistent error handling, functional cohesion, robustness in the face of bad data, etc.) 5. Schedule: Monday, May 21: short project description with 3-5 key user stories. Bring paper copies to class for your table. Get feedback. Make modifications as appropriate. Wednesday, May 23: Mockups and class diagrams. That is, first draft layout of the user interface, and first draft structure of the underlying code (with essential instance variables and method signatures). Bring on paper, on thumb drive, or make available via the web. Get feedback. Friday, May 25: Submit to me as pdf in Hand-in -- Original description and user stories -- Modified description and user stories, with notes on whether/how the feedback adjusted your plan -- Mock-ups and class diagrams (Monday, May 28: this is now the due date for your revision of a previous project) Monday, June 4, 5:00PM: submit all code via Hand-in or cs-research1, as appropriate. 6. Project ideas -- A small social network. (Create account, search for friends, make friend connection, rudimentary wall.) -- Class structure (remind me to talk about this Monday) -- Think about data first Usability -- List of software that's a pleasure to use -- List of software that's frustrating to use -- Concise general principles that flow from those two lists The Design of Everyday Things, Donald Norman The Humane Interface, Jef Raskin About Face, Alan Cooper et al. General principles -- Navigability: make it easy (to learn and to use) -- Hierarchies of features can be good: Common operations, really easy to find Less common ops can be buried deeper -- Customizability: double-edged sword -- Learnability: easy is mostly good, but see audience -- Feature scope: know your audience -- Frustration is bad: poor performance, crashing, error messages Things to think about -- Intended audience: novices, intermediates, experts -- Posture: dominant, accessory,...