Has some funny stuff and seems to hits the mark pretty well. There is something that I feel is worth elaborating on:
“Your software sucks. So what. Everyone elses does also, and re-architecting is the kiss of death for a startup.”
This is a hard transition to make for students because the structuring of programming projects in school is so linear: you have a strict set of requirements that do not change from the beginning, and they must be implemented in the best way possible.
Real life is not like that. In real life, you start out with an idea and wind up with something completely different. Your product spec will change more times than you can imagine, and you will have to constantly adapt to the demands and requirements of users, partners, employees, VCs, and so on. Learning this early and accepting it is very valuable, because when someone says “we need to change this core component” you will be ok saying “do it however you can” as opposed to “well, I guess we better write up a new DB spec, rebuild our architecture, and create a migration plan to our new setup”. It is true that “re-architecting is the kiss of death for a startup”, especially for web based startups, where one day can mean the difference between being first to market and being out of business. You also need to be able to work with and modify existing code better than writing new code, because you only write new code for a project once, and the rest of your time working on it is spent changing code. This is far more difficult than writing new code, especially if you didn’t write the code you are modifying.
If I had complete liberty to create a truly useful course for a university, it would be a software engineer simulator. I would give students a program that was moderately well written, and every few days throw a new curve ball at them. The DB they’ve never had to touch will crash, one of their partners who they have integrated into the site will go out of business, they will have to upgrade all of their deprecated code to comply with some new standard, they will be asked by a major client to find a way to generate 2,000,000 images of charts in under two hours, etc, etc. I would spare them has-to-be-done-now deadlines and blackberries that ring at 3am, but it would still be one hell of a course. And the ones who finish it and say “well that was fun”, those are the ones truly ready for the world of software development, whether or not in the form of a startup. The rest will have to sit down with a bunch of lawyers, who will then inform them, in extremely monotonous voices, of every little thing they’ve done in the last few months that could result in a massive lawsuit.
Note: Every one of these stories is based off of something that happened in my department in the last month, many of which landed on my plate. I’ve come to expect it, and it sure was fun.