For each project at your table: Pitch the project. Basic idea, key user stories. Feedback -- Good idea? -- What features would be most important? -- What features would be coolest? -- Red flags, danger zones? -- Ideas about technical solutions to hard parts. -- Whatever else (constructive) comes to mind What could Jeff do in class to help? -- Sample programs? -- Lab exercises? -- Lectures on language features, tools,...? -- ?? ActionListener in Swing, Action vs. ActionListener Storing images in MySQL Lab session, work on the projects, ask each other questions Accounts/login/passwords, etc. Different pages per user Javascript intro Lab office hours Fred Brooks, "The Mythical Man-Month" Chapter 9, 1975 "Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious." Eric Raymond, "The Cathedral and the Bazaar" 1997: (Rephrasing Brooks) "Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious." Also Raymond, related: "Smart data structures and dumb code works a lot better than the other way around." Guy Steele, a web essay, 2002: "Show me your interfaces, the contracts for your methods, and I won't usually need your field declarations and class hierarchy; they'll be irrelevant." How to put these ideas to use when you start a project? Think about your abstract data types, and ask yourself some questions: -- What Things are at the heart of my project? -- What operations should those things support? -- In terms of those Things and their operations, what do I want my main program to look like? # Sort of like this options = getCommandLineOptions(sys.argv) itunesLibrary = ITunesLibrary(options['filename']) action = options['action'] if action == 'toprated': tracks = getTopRatedTracks(options, itunesLibrary) for track in tracks: print track.title, track.rating elif action == ...: ... # Which leads me to need class Track def __init__... self.title = '' self.rating = 0.0 etc. class ITunesLibrary: # These two methods support the "iteration protocol" # in Python, so I can do a for-loop over an ITunesLibrary def __iter__(...): ... def next(self): ... def getTopRatedTracks(options, itunesLibrary, n): topRatedTracks = [] for track in itunesLibrary: #**** I NEED ITERATION IN ITunesLibrary do something topRatedTracks.sort(trackRatingCmp) return topRatedTracks[0:n]