Here Comes 222

In Fall 2010, my department is introducing a new course, CS222: Advanced Programming. The role of this course is to bridge the introductory programming sequence with development-heavy upper-level coursework. It is in the cards that I shall be teaching the inaugural offering of CS222. I’ve been keeping my eyes open for ideas to incorporate into this class.

I’m reading and thoroughly enjoying Ship It, from the Pragmatic Bookshelf. In fact, I’m contemplating using it, The Pragmatic Programmer, and Effective Java as textbooks for the course, though I need to spend more time planning out how that might work. Ship It spends a chapter on Tracer Bullet Development, and I have already shared an overview of this methodology on the CS345/545 course blog. In writing that post, I came across an interesting article on Tracer Bullet Development vs. Extreme Programming by Martin Ankerl. The two approaches are significantly different, with TBD encouraging some upfront design (though accepting the agile principle that interfaces will change) and XP encouraging evolutionary design (primarily user story and test-driven).

Either of these are good candidates for CS222, in my opinion. An advantage of TBD, pointed out by Ankerl, is that it facilitates parallelization. I certainly want CS222 students to learn how to work in teams, and so having a methodology that makes it easy to break pieces off for different developers is very important. However, TBD also requires some savvy with design, and the students will be coming fresh out of CS2. Software design—in the software engineering sense—is not a major topic of CS222. Learning-by-doing is important, but there is a simple elegance to scenario-driven design in XP. Unit testing and test-driven development are elements that I would like to explicitly include in 222, and so that makes me lean towards XP.

Fall 2010 looks like a lifetime away from here, but I have started keeping more notes on what I’d like to do with 222. These include: effective use of the IDE; interactive debugging; test-driven development; scenarios and user stories; how to read technical books; and the differences between CS1/2-style programming and writing real software. I had thought about trying to get a GA to make this a real qualitative research study, but I don’t think I’ll have the time to get that together.

I’m happy to hear your thoughts in the comments below, kind reader. For BSU-affiliated folks, I am planning on soliciting feedback from current students (e.g. ask current juniors and seniors what they wish they had learned in their sophomore year regarding advanced programming topics) as well as alumni. I’ll probably use our nifty new Facebook group for that.

Advertisements

Tags: , , ,

3 Responses to “Here Comes 222”

  1. Austin Toombs Says:

    I’m just happy that you get to teach more students anything at all about programming. I have learned so much from working on external projects with you. Every time I’m in a situation where I’m group programming, I find myself repeating a lot of what you’ve told me to my partner. “premature optimization is the root of all evil” “getters and setters are evil… unless you NEED them” etc…
    I’m almost positive that if I had had any other CS120 prof, I would have switched majors.

  2. Jim Griggs Says:

    I’m not a huge fan of ITIL, but it does have valid concepts. I’m not suggesting you teach ITIL as it has absolutly nothing to do with advanced programming. However, you may consider introducing the idea that applications are services and developers are service providers. In undergrad intro programming classes, you write small applications that are only meant to teach you programming concepts, development lifecycles, etc. I think that leads to students thinking they produce a product…not provide a service. You don’t think of things like users, feedback, maintanence, upgrades, outages, etc. I don’t know that most early programmers think of themselves as service providers in the same way as say a plumber, doctor, or physical therapist would. Developers aren’t mindless, heads down, widget makers. It’s not as simple as “go write a program that does X” any more. We need to provide dynamic solutions based on user need. Again, I don’t see this as being a major topic in an advanced programming class, but it might not be a bad idea to try to introduce the concept.

    This could be as small as requiring your students to write a brief document outlining what service their application will provide, who their target user is, and what type of support they might expect their application to need after deployment before they begin programming just to get them thinking about it.

    Just thinking out loud. :)

  3. Paul Gestwicki Says:

    Thanks for the ideas, Jim. You’re right that coming out of CS1 and CS2, they will almost certainly see themselves as producers of very small, insignificant projects. Getting them to think about services, or even to start to think about software maintenance, would be a big win for this course.

    I don’t remember if we had Org & Arch 2 together with Jin, but in my semester, he had us each write a different module for a pedagogic assembly interpreter. That’s the first time I remember writing code that someone else would use. I’ve been kicking around some ideas for the course that would enforce all of the concepts, and maybe something modular like that would help: each student or pair would provide a tested module for a larger thing, assembled with continuous integration on a svn server. I’m still not sure *what* that bigger thing would be, but I’m open to ideas. (There are curricular reasons that it would be nice for the larger system to also enforce ideas of data structures, FWIW).

    I’ve also toyed with the idea of changing requirements after the first milestone, to get students to realize why agility is important, and not just in response to professorial torture or whimsicality.

    We are using a light version of Microsoft Solutions Framework this semester, and I’ve used Scrum in the past. I am trying to determine what of these can be applied or modified for application to 222 as well. Still more questions than answers, but I enjoy this line of questions. Also, SIGCSE (the major CS education conference) is this week, so it’s a good time to bounce these ideas around.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: