Fall Courses
July 24, 2008 – 8:01 amI am teaching two courses this fall, and would like you to help me decide what my students should work on. The first course, “CSC301: Introduction to Software Engineering”, is aimed at third-year students (juniors in American parlance), and covers agile software development processes, design patterns, and other introductory material. Students work in four-person teams on a course-long project broken into four or five assignments; peer evaluation is part of their grade, and there’s a written exam at the end. This past winter, the project was a to-do list plugin for Facebook; thanks to some technical support from Refresh Partners, all of the teams managed to build something usable.
The second course is “CSC491: Computer Science Capstone”, which has taken the place of the CSC494/495 directed studies projects I used to run (although I still sometimes take students into CSC494/495 if they can’t fit CSC491 into their timetable). In the past, I’ve matched students up with clients—faculty in other departments, local non-profits, startups, open source organizations—who want something built. Over the course of the term, the students go through the entire development cycle: requirements gathering, design, construction, testing, deployment, and post-mortem evaluation. The range of projects last winter was pretty broad, but all the clients seemed happy with what they got.
So, what should I do with these courses this fall? Here’s just a few of my options:
- Get the Capstone students to move (most of) DrProject to Django. The aim would be to create the “Trac 2.0″ that DrProject was meant to be; I think it’s ambitious, but doable, and would be a great introduction to open source/agile development. The downside is that students wouldn’t be working directly with real clients, which they have enjoyed and valued in the past.
- Have the Capstone students do external consulting projects as before. Upside: making real people’s lives better, and strengthening ties between this department and the community. Downside: they don’t get the experience of working in a larger group on a larger code base, and it’s a lot more work for me :-).
- Have the CSC301 students build another Facebook app. Upside: Facebook is still hot (well, lukewarm), and I know how to avoid some of last term’s potholes. Downside: a lot of third-year students haven’t done web programming before, so it’s a far-from-level playing field.
- Have the CSC301 students build a desktop GUI application using Swing, wxPython, or something like that. Upside: level playing field. Downside: finding something that’s worth build.
There are lots of other possibilities; if you’d like to add one to the pile, or cast a vote for one of the ones above, I’m easy to reach.
22 Responses to “Fall Courses”
My vote is either doing what you did before with external consulting projects or a desktop GUI application. It sounds like something that they will enjoy and be able to use to advertise themselves once they finish their undergrads.
By Tony Yiu on Jul 25, 2008
I’d vote Facebook but I’m kinda biased.
I think a Firefox plugin or an OpenSocial app would also be good options. Both heavily use Javascript which becoming increasingly important…
By Colin Smillie on Jul 25, 2008
If is was legal, I’d suggest a section on iPhone development.
Stanford is offering this in the fall but it doesn’t exactly jive with Apple’s NDA… should be interesting.
By Jamie McQuay on Jul 25, 2008
The facebook idea is good and its always good to get some experience with web programming. My only with that is that it will be really hard to find something someone has not already done on facebook.
I also like the idea of consulting project though that does sound like a TON of extra work for everyone.
It would be interesting if you could get all the groups to work on a single project but just on different parts. ex: Have one group start on database, another on GUI, another on functionality. They design their part totally independent of the other groups for the first assignment. (wait a second this has design patterns and modular programming written all over it) Then for the second assignment the groups have to work together to figure out how to fit all the parts together. Then for the third they switch groups and have to work with other peoples codebase to fit something together. The point would not be to try and make a polished finished project but to see the whole design process in action. Well something like that.
By Matthew Basset on Jul 25, 2008
I’d suggest the possibility of focusing on app engine for the 301 course instead of the facebook app. Currently its python with a very light version of django - the playing field is likely to be much more level in this setting I would think.
By Haz on Jul 25, 2008
I think real-world-like projects are very useful, especially in upper years.
So, for 301 students, I think doing a Facebook (or OpenSocial) app. would be quite appropriate. As long as the application is fairly reasonable in scope, I wouldn’t worry too much about having a level playing field. Besides, you’re looking more for *how* they work, rather that what they produce.
For the capstone course, I think it would be best to let the students work on external consulting projects. Additionally, I think it would be useful if they worked in bigger groups (3-6?) on these projects. That way, they can get more done, learn how to work in larger teams, and it probably means less work for you.
By Robert on Jul 25, 2008
For the 49X courses, I really enjoyed working with real clients and real projects. The dynamics of working with a ‘real world’ project, meetings, etc was extremely rewarding and an experience I feel all undergrads should have before they graduate.
Though Dr.Project is obviously a ‘real’ project, Greg, you are the course supervisor and the project supervisor.. Force CS students to practise their communication skills and learn to talk to clients.
Re: iPhone for 301, it would be very interesting and very cool, but it requires OSX. I had to get a macbook just to poke around on my iphone, Objective C + Cocoa != fun
By Ian Chan on Jul 25, 2008
I think the facebook app sounds like a cool practical example. As well, perhaps it would be possible for students to do some consulting with regard to creating a facebook app for a company as a lot of companies these days want to have a presence on social networks.
Good luck
By Ron Ammar on Jul 25, 2008
We had some problems with communication and duplication of work with our client in our project last year. Our client would not use the project mailing list or repository. It would be helpful if you can make this a requirement for all clients to have to do so.
By TP on Jul 28, 2008
I’m rooting for option 1. Even though they won’t be working for a “real” client, most of graduating students will end up working on medium/large pre-existing projects instead of building their own from scratch. It could be a good preparation for digging into a lot of pre-existing code quickly.
By DV on Jul 28, 2008
#1 seems very risky. In order to rearchitect it properly, the students would need to have a solid understanding of DrProject’s architecture, data flow and synchronization models. They’d also need to know Django very well (otherwise, they might end up keeping the bits of DrProject for which Django already has a replacement; Django is very free form so it’s easy to end up rolling your own framework-related bits even though you don’t need to). And they’d have to be able to read Python very well. Only the top handful of students would be capable of such a project. An even smaller number would spend 8 months on something like that just to get a half credit.
#2 sounds good. If you’re able to offload any of the overhead to someone else, I’m only taking 2 courses in September
For #3 I could make the argument that many first years haven’t programmed anything major before, so CSC148/150 isn’t a level playing field either. I’m guessing that the strong programmers in first year are also the ones who who’ve done web programming before starting CSC301.
#4: How about building front ends to common command line tools? I’ve always wanted to see someone put a GUI on ImageMagick or ifconfig. Or how about a GUI for working with tickets in DrProject? I’ve always found web-based interfaces to be cumbersome when managing a large collection of small objects (e.g. email, pictures, patches, blog posts).
By JM on Jul 28, 2008
I’ll start with suggestions about CSC301:
I think you’re right in saying that a lot of students haven’t done web programming before, so the learning curve for them would be very steep. But if you don’t include a web interface, even a good system becomes “boring” (which sucks, because it’s like judging a book by it’s cover). So, some of the assignments (say 2 out of 5?) should be devoted to HTML + JS + Ajax.
To make the level out the differences in experience, I think you should insist that every team has at least one web-savvy person that can guide the team when it comes to the frontend and at least one person who has experience in writing significant backend code so she can help out the team when it comes to talking to a database / using threads and things like that. I’m not saying that these two people should be experts, just that they should have written this kind of code before, so they know what to do when the team gets stuck.
As far ideas for CSC301 projects are concerned, I think writing a FB app is very cool, but it should ideally be something that they would want to use. And I am not sure how much of a backend code would be required (it might end up being more of a web project, with a fancy UI that does not do many things). Nevertheless here are a couple of suggestions:
- Personally, I would love to have a FB app that allowed me to play Scavenger Hunt at UofT. Individuals or teams would have to sign up and the app would generate a new set of instructions/puzzles every month or so. You decide what to do with the winners.
- Back in the golden and care-free days of junior high, me and my classmates were trying to set up a school newspaper/magazine, but it never worked because we didn’t have a printer and the girl with the pretty handwriting who was responsible for rewriting our articles by hand took forever to decide the layout and general UI of the newspaper … it was a disaster of epic proportions
So, how about a FB app that would make writing a school newspaper easy? - So, all of your student will admit to this: ROSI sucks … ahem, allow me to rephrase that … ROSI could be improved. Is it possible to collaborate with the team that maintains it (assuming that it exists
to improve its speed and hours of availability?
- I guess this one is not that original, but would your students be interested in building a mini search engine? We sort of did it in CSC207 with Paul Gries (we read URLs from the web, indexed the words, and served queries) and in CSC209 with Karen Reid (we built a client-server architecture for answering the queries), but we never added a web interface to it, and we didn’t use a database, so this might be a good opportunity. This might also be a good idea if you want to talk and demonstrate agile processes and design patterns, because the backend code will be significant.
- In my years at UofT I have seen so many people who eat lunch alone that I cannot count them anymore. Would it be possible to have an app that you can send an SMS to and it could tell you which of your friends will be eating lunch right now?
This one is hard and vague, because it makes eating lunch more complicated than it is, but I thought I’d suggest it anyway.
Don’t forget that there are other platforms for cool apps, like the iPhone although it costs around $100 (damn!) to upload it on Apple’s servers, or even the OLPC although it is not as cool and almost nobody is talking about it here (contrary to the iPhone).
As far as the Capstone course is concerned, I think having the students do external consulting projects sounds best to me, because it will give them a lot of experience on how to interact with real clients instead of simply the specs of their assignment. I am afraid I don’t have any ideas for projects, though.
By FS on Jul 28, 2008
I like the idea of #3 for csc301h. In my opinion it makes the course much more interesting when you’re working on something real that could, potentially, be used by lots of people (millions in case of Facebook). It would be interesting to find an interesting App that the students themselves would want to use after creating it. (e.g. a Toronto centered Facebook app. that provides google map like directions using TTC routes…friend to friend…person to event..etc.)
For the capstone course I really liked the idea of having many different projects and choosing one that was of more interest to you. So I would go with option 2. Then again I’m not the one who has to go through all the trouble of finding clients and organizing them…=)
By LK on Jul 28, 2008
It’s nice to hear from you. You definitely have a point in the open source experience idea, open source experience is quite important nowadays. Although you ARE in a sense their client when it comes to Dr. Project, it’ll be quite difficult for them to think of you as a client as suppose to an instructor. That being said, I think the large group work experience is pretty interesting, as we don’t get that kind of chance in any other courses (when you say large group, you mean the whole class as a group, right??). I think it’ll be great if you could incorporate both open source (with large code base) and large group experience in one course, it’s gonna be an eye-catcher on a resume ; ) Your worry is that students won’t be able to work with real clients. Have you thought of working on other open source code base while keeping the real client aspect? The upside would be that you’re incorporating both of the advantages from 1 & 2 ( large group + open source + real clients). Downside would be pretty much the same as 2, but instead of negotiating with clients with small projects, you’ll probably find yourself negotiating with owner of larger open source projects. The details of the project could probably come from the students or from the owner’s wish list, whichever comes out to be more suitable for the course. However, submitting the code into the code base is a different story, there’ll probably be a lot of verification work afterward. I guess students who are interested could continue after the semester to work on the submission work, while others who aren’t so interested will just get the grade.
There are a few points that needs serious consideration:
1. How will you grade the students individually when they’re working as a “large” group? By large, I’m still assuming you mean “large = whole class”. That being said you could probably ask the students to figure that out themselves as you did last year. Good exercise, and you know you’ll be surprised ; )
2. Do you really need that many people for a project? It could be a good mix of expertise, but it could also be mess. How are they going to divide themselves?
3. Usually large code base needs a longer time to comprehend.
4. I’m not sure how many open source projects are owned in Toronto. If the client is not local to Toronto, chances are they won’t show up. Honestly, there weren’t too much client involvement in my Thunderbird project. Without face-to-face interaction, it’s very hard for us and the client to discuss anything extensively. It could have been the nature of our project as Thunderbird was already there, we were just enhancing an existing piece of software. In general, I prefer face-to-face interaction when it comes to consulting.
All in all, I enjoyed the capstone project last year. Although there weren’t too many interactions with the client, the open source experience was valuable and having Mozilla Thunderbird on my resume is definitely a plus. How did you manage to have so many connections with the non-academic software community? 20+ projects is impressive! ; )
By RF on Jul 28, 2008
I’m in favor of external consulting projects for the capstone course. Although Dr. Project is a worthy cause, it’s probably easier to build excitement around writing new code for an external consultant than a porting project.
I’m biased though. I’ve worked on large projects in the past. I’ve even done porting projects.
By MT on Jul 28, 2008
301: Desktop app A lot of people choose not to familiarize themselves with Facebook, plus it’s on it’s way down, and the last thing that Facebook needs is more apps. I also agree with what you said about web dev. Coming up with a desktop app worth building make a good task for the students. Every CS student should have some function that they wish were easier to perform on their computers; it shouldn’t be too hard to figure out a project.
Capstone: External consulting I really enjoyed the course and the ability to choose a project that I was interested in. I think that if people knew that they’d be working on DrProject, they would probably be less interest in the course. Because I wasn’t working in a large group, I learned to find help with my project in places other than asking friends and classmates. Another reason that you probably shouldn’t do the DrProject idea is because you already have a bit of a reputation for running a bit of a sweatshop.
By someone on Jul 28, 2008
I don’t really have much in the way of ideas about 301, but I’m happy with either option for 491 as long as I get to do security architecture stuff and break things
By Leigh Honeywell on Jul 28, 2008
Keep in mind that Facebook’s implementing it’s tiered system for application verification quite soon, last I heard. This may mean that new applications won’t have the same privileges, could limit what students are able to do.
Worth looking into at least, to see whether or not it’d actually be a barrier to what you’re trying to do.
By Blaise Alleyne on Jul 28, 2008
I like Option #1 because it sounds real-world.
My friends in IT tell me that being hired to maintain, refactor, or extend somebody else’s code happens all the time. The challenge of taking a huge chunk of developed code, digesting it, understanding it, and then running with it, sounds very appealing - and I think it’d be a valuable learning experience.
So that’s my vote - though they all sound great, and I’ll be happy however it turns out.
Cheers,
-Mike
By Mike Conley on Jul 28, 2008
I prefer doing external consulting — it would give me the opportunity to connect with a (hopefully) neat project outside of school with real business implications.
By Jennifer Ruttan on Jul 28, 2008
As the title of the course suggests, CSC301 should focus on teaching students software engineering, so doing either Facebook app or GUI is fine as long as students gets to understand the differences between programming and software engineering… From my experience, csc301 was bit biased toward just programming. Would having the students writing some Eclipse plugin be another alternative?
By Alvin on Jul 28, 2008
So I’ve noticed that you’ve been having some trouble coming up with ideas for 301/302… And since I have a bit of a vested interest, I thought I’d throw in my two cents.
First, I though the scrabble game last year seemed pretty fun. I liked the competition aspect (although some people weren’t a huge fan of it).
I’m also not a huge fan of writing web apps… Mainly because that’s what I’ve been doing for the last 12-odd months… So I like the sound of a desktop app. The best ideas I’ve got, though, involve hacking on existing open source apps… But I don’t expect that’s what the course is about.
Finally, I’ve always liked doing network stuff (that is, making my own calls to accept() and connect())… So I think getting to do some of that would be fun too (maybe write a web server?)
By David Wolever on Aug 4, 2008