When I get together with my old college pals, we typically regress and
complain bitterly about the lack of women (this was back in the
eighties), the concrete surroundings and lousy weather, how we missed
out on the fun we're sure everyone else had at other colleges, and
finally how they didn't teach us really practical things. Mostly we
complain about the women. But as far as practical knowledge, looking
back, I can see there were plenty of unintentionally imparted lessons
about real life in the engineering world.
Work Alone
My software engineering course, 6.170 (MIT classes are known by number
rather than name), consisted of successively more complex projects,
starting with small modules with well-defined interfaces and
culminating in three-person projects where we would partition the
application into modules assigned among us and then put everything
together for a demo (and our final grade).
Our project that year was a Reversi game - my teammates worked on the
user interface display and keyboard input, while I worked on the
actual game engine. My teammates alternated between sending me
pointless talk messages in the lab (for you youngsters out there, the
forerunner of instant messaging), complaining about my absence when I
wasn't in the lab, and then covered their own asses when our program
displayed an obviously incorrect board in the demo ("See, the user
interface is working, his game engine must be the problem").
One could draw an important methodology lesson:
But I think there are some overriding lessons in this case:
-
Academics don't know anything about software engineering. Setting
aside the faith in the design-partition-integrate process (isn't that
cute!), using a research language only used at MIT on an obsolete
operating system (TOPS-20) on slow machines in an overcrowded lab
isn't a recipe for productive software engineering. Although that's
probably how we ended up with the current state of the air traffic
control system.
-
Don't work with anyone else if you don't need to. I could have done
the entire project myself in less time (and I did, for my bachelor's
thesis - a Reversi program running on an experimental multiprocessor
machine).
Keep it Simple
As the final project of my electronics lab course, 6.111, my partner (who went by the moniker Psi) and I
wanted to build a computer. My partner wanted to build a Lisp machine
- the Lisp machines of the time involved a lot of memory and software,
typically selling for $100,000, so I persuaded him to scale our
ambitions down to a Forth machine.
But then our teaching assistant looked at our design proposal and felt
it wasn't complex enough and required us to double our chip
count. After sleepless nights burning programmable logic arrays,
finding/returning/replacing faulty chips, we had a wiry mess of lights
that occasionally blinked out a correct computation.
The engineering lessons learned:
The real lessons:
-
Establish a good relationship with the suppliers. The old men staffing
the lab parts department would give the best, i.e. working, parts to
the pretty girls ("she has better parts", one of them replied when
asked why he gave atypically good service and components to one of the
female students), and recycle the burnt out chips among everyone else.
-
Keep the design as simple as possible. Adding complexity just for the
sake of it is just risk maximization - not something you want to do in
real world engineering projects, unless you're graded on complexity
and not a working result.
Keep It Working
I did build a functioning computer in the undergraduate computer
architecture course (possibly my favorite), 6.115. The course progressed
through the construction of a computer from scratch - and I mean
really from scratch, building the processor and clock, wiring the data
pathways, and writing microcode.
The end of the project featured optional entry in a performance
contest - if your computer is the fastest, you get to keep it (worth a
couple hundred bucks). The hardware guys could add optimizations like
caching - I restricted myself to the many obvious optimizations
available in the microcode. But even with software changes, there was
a long turnaround interval in getting them burned on the PAL's. In the
end, I was unable to enter because my changes were buggy and I didn't
have time to debug-fix-burn-test.
My hardware engineer friends might say I should have left the software
alone and worked with hardware, but the fact is, only a few people
entered the contest with working kits, and only the winner had achieved a
significant performance improvement. So the lesson learned is:
Steady Wins the Race
I was a crunch-time student (which, ironically, has prepared me for
common industry worst practices). It seems in hazy retrospect that I
stayed up every night cramming. The result was academic probation my
second year followed by mediocre grade points the rest of the way.
I
noticed the students who had perfect grade points weren't the
whiz-bang smartest - they were the ones who kept regular schedules and
maintained discipline, closing their dorm room doors to study, eating
regular meals and going to sleep at midnight.
Don't Work from Scratch
I tried to do all my homework ("problem sets", they're called at MIT)
by myself. Mistake. There's a time-honored tradition of, shall we say,
collaborative work among MIT undergrads, assisted by class "bibles"
containing assignments and exams material, meticulously assembled and
lovingly passed down over the years. When the professors, clued in or
not, see their students handling the class material easily, they
increase the workload (hence the on-campus popularity of the phrase, "drinking
from a fire hose") until the curve is back down to where they like it.
This isn't to say you shouldn't learn the material - if you're going
to apply the knowledge, you have to learn it. A fraternity member in
one of my classes turned in a photocopy for his homework. Now, that's
just too much.
Read the Documentation
My woeful track record on hardware projects over three years was
compounded by my inability to use the ultra-cool and completely
mystifying Tektronix oscilloscopes that populated the labs. I would
twiddle the knobs helplessly until a TA would come by and click-click
all of a sudden I had a nice waveform on the screen. When I wrapped up
the final project of my final lab in my final year, I happened to look
behind the instrument and realized each of them had a manual.
Remember Presentation
When I was there, the undergraduate MIT body boasted a three-to-one
male-female ratio, a marked improvement over previous years
(and vastly superior to Caltech's nine-to-one ratio, which scared me
away from that school). I could count on my male friends to ditch me
any minute they had a chance to talk to a female classmate. But on
Friday nights they gazed turned to the buses from area all-female
schools disgorging perfumed, coiffed high-heeled undergrads looking
for MIT frat parties, while MIT women in jeans and t-shirts looked on
in irritation.
Keep Your Standards High
MIT does try to attract a diverse student body - at a party hosted by
the chairman of MIT, a classmate of mine hailing from Michigan asked a
representative from the admissions office if MIT gave preference to
applicants from underrepresented regions. The rep explained that MIT
gave consideration to the educational obstacles Midwesterners might
encounter.
Notwithstanding that politically-correct response (or else the
admissions officer really thought I studied by candlelight after
putting the hogs back in the pen during my high school years in Iowa)
you can't get into MIT, and you definitely can't get
out, unless you can get through the math and science courses. And MIT
doesn't have catch-up courses for varsity athletes or "physics for
poets" that even the Ivy League schools have. You have to pass all the
core courses that everyone else has to, and that includes the swim
test. And you don't get in by being pretty - MIT doesn't require a
photo with your application, unlike Stanford (and, oddly enough,
CalTech - maybe it's a California thing).
Furthermore, as an MIT undergrad, you get very bright peers, famous
researchers as your instructors (and some of them are excellent
instructors, too), access to cutting-edge facilities, and
opportunities to participate in research. Besides the brand-name
degree, you come out of that institution with high standards.
I came to that realization soon after graduating and moving to
Texas. The sales guy who sold me my first car at Toyota of Irving
asked me if MIT was in Minnesota. Slightly more informed was my
coworker at Texas Instruments who stated upon meeting me that he
would have gone to MIT if he had known about it. (I thought that was
the dumbest thing I'd ever heard, but it was my first day) And a few
years later, I was astounded by the level of whining I enountered as
a teaching assistant at Johns Hopkins for Computer Literacy 101 (the
name says it all). At MIT I listened to bragadaccio about consecutive
all-nighters and a lot of persistent negotiation for grades, but the
elite students of JHU were upset at me for not announcing the exact
questions to expect on their exams.
Smart People Are a Dime a Dozen
At MIT, everyone is bright, and some are super-bright. Some
super-bright people are total jerks, and some are the nicest you'll
ever meet.
I had one famous computer scientist as an instructor who
bore down on a student for not knowing how to solve a digital signal
processing problem - after she protested that she didn't know the
complex algebra required, he said, "come to me after class, and I'll
teach you complex algebra." And then, after class, he told her, "I
don't have time."
In contrast, I had an equally famed materials science instructor who set aside
office hours to meet with any of his dozens of students who needed
help on their homework, even though he had plenty of teaching
assistants.
Theory and Practice
Despite boasting some of the brightest minds and a top-ranked business
school, MIT is hardly a flawlessly-run institution. How many other
industries can get away with increasing prices faster than the rate of
inflation? Any illusion I had that MIT was a smoothly-running machine
was shattered when, as a part-time system administrator, I had to run
a purchase order by four consecutive desks in the purchasing office,
where the form was literally rubber-stamped each time, only to return
across campus to my supervisor, who looked at it and said, "this isn't
right".
And like any other bureacracy, MIT seems to run
smoothly most of the time, but when something goes wrong, fixing it is
like arguing with a rock. I didn't get paid the
entire summer I worked at the MIT Microcomputer Center because my
manager repeatedly submitted my monthly timecard late (and lied about
it), and that gets you shrugs instead of
paychecks from the payroll office (I got paid after complaining to the
Information Services director that I had tuition to pay, and my boss
got a nice referral to a cushy job at another high-profile university)
When I later worked in one of the MIT labs, it was Fedex who had a similar problem - they refused to accept deliveries from
us for a while because MIT's account was in arrears.
My favorite encounter with mindless MIT bureacracy came after graduation.
The student
loan department sent me a letter saying they didn't have my
address. (I suppose I should have called them and complained I didn't have their phone number). The humor of the situation was diminished by the late fees they
charged me.
Don't Trust Politicians
Before graduation, some of my classmates in the student government
went around asking for donations to our class gift, a scholarship
fund. They neglected to mention that only members of the student
government or varsity sports were eligible. Members of the unique and
probably more useful organizations like the Lecture Series Committee
(they arranged popular weekly showings of modern and classic movies
and hosted such distinguished speakers as William Shatner), were left
out.