December 3, 2005

Bulk view

Teaching software engineering

Mario Carreon writes:

Gosh though, one of the things i lack as a teacher is how software
is developed in the “real world.” It would be great if i could give
a glimpse of what happens outside in my classes.

As much as students and professionals complain that teachers don’t
have enough industry experience, the reality is that most people with
industry experience don’t teach, and many teachers find themselves
forced to teach pretty much anything the school needs them to do.

I taught software engineering before. We had no choice because the regular
teacher was on sabbatical. I had to co-teach it with another, more
experienced teacher. I handled C++ and design patterns, and he handled
the management side.

I was _way_ out of my depth. It was a disservice to my students
because I didn’t have the war stories that an experienced teacher
would have, but at the same time it was better than not offering the
course at all. That was the semester I learned to make these
compromises. That was also the semester I learned to make the most of
my friends’ stories about their lives outside the ivory tower.

It was the same in my decision support systems course. I’ve never
built one, but by happy coincidence a new friend of mine had been the
database administrator for a large bank that used data mining and
expert systems with terabytes of data. I told his stories to my class,
and I hope that gave them a little appreciation for the real-life
applications for these things.

That’s the only thing we teachers can do, I guess. It would be nice if
we could work in the industry for a decade or two in order to gain
experience, but even if we did that, we’d never get enough experience
to teach all the things our schools ask us to do. We have to learn how
to borrow bits and pieces of other people’s lives, to collect insights
from other people and to bring those insights into the classrooms. We
are how people in the industry can teach hundreds and hundreds of
people throughout the years.

So fellow teachers: reach out to the people in the industry. We need
their stories. We need their experiences.

And for those of you in the industry: adopt teachers. Tell them your
stories. Share your experiences. Tell them about the mistakes you’ve
made, because they can help other people learn how to avoid repeating
those mistakes.

Computer science: universities and technical/vocational schools

One of the things that always gets me on my soapbox is the complaint
that universities’ computer science curricula don’t meet the needs of
the real world because they don’t teach the most popular language of
the day or because they have classes on artificial intelligence rather
than building e-commerce sites.

This frustrates me because people expect universities to be more like
technical/vocational schools. They’re different. They _should_ be.

Vocational schools are where you learn the skills you need for a job.
They should be strongly industry-oriented. They should teach the most
popular languages of the day. They should be specialized. People who
are interested in web development should take a whole bunch of courses
related to web development, while people interested in database
management should take a whole bunch of courses related to database
management. Vocational education should be short programs so that
people can take them, learn new skills, and get into the workplace.

Universities are where you learn the skills you need for _life._
Universities should _not_ be too pressured by industry to teach the
most popular languages or tools. Universities should be general,
helping students develop skills that can be applied to any field—even
fields outside computer science and information technology. Not
everyone who takes computer science will go on to be a computer
scientist, but the logic and pattern-recognition they learned in their
computer science education should help them elsewhere.

Computer science should not be the only thing students learn in
university. Students should learn mathematics, technical writing,
business, and all of those other courses that don’t seem to have any
immediate use for a programmer. Why? Because each computer science
graduate must have an appreciation for other fields. Computer science
itself is a science that serves other fields, and university provides
students with an excellent opportunity to take up electives in other

Most computer science graduates might never write their own sorting
routines out in the real world. Programming libraries have efficient
implementations. Computer scientists should apply that knowledge to
real life instead—for example, by teaching other people how to
quick-sort by hand. That’s what computer science teaches us: not how
to program a computer, but rather how to program a _system_—and that
system could involve both people and computers.

We bet that this education will pay off years and years down the road.
Computer scientists should ask questions and dare to try the unknown.
They should wonder if there are better ways of doing things, instead
of just following the status quo. They are our ambassadors to new
fields, using creativity and critical thinking to find ways to apply
computers to new problems.

Vocational schools must prepare its students for work. Universities
must prepare its students for the unknown.

Why hire a computer science graduate, then? If I’m just looking for
programming experience, then most technical school graduates would
probably be better than most computer science graduates, all other
things being equal. But if I want someone who can wear many hats, I’d
bet on computer science graduates. I’d take the chance that something
in their education might give them insights into my business. I’d
invest time in training them because technical knowledge can be
taught. It’s easy to cost-justify a short course on Java programming.
It’s harder to cost-justify a course on philosophy, which is really
more about critical thinking and writing than it is about particular

This is one of my causes. I want to do something about this confusion.
I want to speak at high schools and help the students learn the
difference between vocational schools and universities. I want to
speak to vocational schools and universities to help them rethink or
reposition themselves when they recruit students.

One of the reasons why it’s so hard to differentiate vocational
schools and universities is that quality is just _so_ variable. There
are a few vocational schools that are pretty good and that even
include a number of liberal subjects. There are many colleges and
universities whose computer science curricula are almost the same as
those of vocational schools. I hope better positioning clears this up,
because as it stands, the confusion doesn’t help anyone.