Advanced Programming 2; or, The Internship With A Lecture Section
The point of the course was to make or substantially enhance a nontrivial program for a real client who would, in theory, actually use the finished result. Therefore, of the three legs of the software creation stool (Quality, Features, and Release Date), Quality and Release Date were prioritized. Very reasonable, in theory.
In practice, it combined the worst elements of a class and a job:
Like a class, you had no fixed hours, because working on the software was homework. Endless amounts of homework, because there was always something you could be doing. You could be testing. You could be researching the underlying technology. You could be fixing bugs. You could be adding features. You could be writing documentation. Therefore, if you were doing anything else, you were doing that thing instead of working on the program. You weren’t working on your homework for another class, you were working on your homework for another class instead of working on the program. You weren’t relaxing, you were relaxing instead of working on the program. You weren’t sleeping, you were sleeping instead of working on the program. It really solidified my desire to take a job with fixed hours, let me tell you.
Like a job, there was no easy ramp-up to learn the requisite knowledge. Most of the team I was with (all classmates, of course) had relatively little knowledge of the language and framework required to meaningfully contribute. We had to learn quite a bit very quickly, knowing that others had to do more due to our ignorance. Yes, it was intellectually challenging, but that’s not what made it hard. What made it hard was knowing that our work wasn’t helping the rest of the team. The vast skill mismatch made it difficult to apportion tasks, as did the fact the teams in general had been chosen more to evenly divide the class than to ensure each project would have the right number of people working on it.
In the end, around the last couple weeks of the semester, the client decided not to use what we’d developed anyway, and instead went with a much simpler version one member of the team wrote entirely by himself over a weekend. I didn’t even care at that point, really. I even kept working on the useless codebase, simply to show good faith and to hone my skills in the technical aspects.
I got an A for the course, which was the only grade given in the entire course. I’m very glad I took the class, and I don’t regret one bit of it.
Oh yeah, I also took Calculus II from a man who’s no longer allowed to teach calculus at that university despite the fact his wife is the head of the calculus group there. I got a D, which meant I took it again and got a C the second time. I don’t have any interesting stories about that, though.