Home
Home

Learning to Program

Sep 21 09

Learning to Program

Paul Weinstein

In high school I took my first formal
course in programming, an introduction to Computer Science with BASIC
and the good-old Apple //e. My friends and I drove our teacher, Mrs.
McBride, a bit batty. She knew we knew our stuff, but so did we. As a
result a few of us would do anything but work. I hardly documented my
code and when I did I’d write all kinds of nonsense to see if she was
actually checking. I was sloppy with my variables, created them
whenever and wherever. Same with my logic, the code jumped around
from one GOTO to the next as it occurred to me. Spaghetti code it its truest form, writing on the fly with no consideration of design.

Yet I aced the course. I had so many
points that I could have skipped the final and still have easily passed.

How?

Well an interesting dynamic developed,
I and a couple of my classmates comprehended enough that, even with
our lack of application our B and C work ended up as A++ because the
rest of the class was struggling. Struggling so much so that even on
a curve set by us, others would have failed. So the next highest
grouping of grades defined the grading curve, resulting in extra
credit points for my friends and I.

Introduction to Compute Science I in
college was more of the same, minus the sliding scale. This despite
the fact that the computers had changed along with the programming
language, C and IBM clones. I aced my tests and programming exercises
and wondered how others failed to see that the Professor had
basically written the answer on the blackboard, short a line or two
of code, while explaining the concept at hand.


Distribution of Grades

Apparently, this type of grouping,
between those who start to develop a clear understand of the concepts and
those who don’t isn’t that uncommon. You either pass, grasping all
that has been covered or you fail to grasp even the most fundamental
aspect of the theory and get left behind.

So I’m just lucky, right? I just got
it. After all I remember going to a campus preview and being told by
the head of the Computer Science department that. “No, we don’t
expect incoming students to have had classes in programming prior to
entering our program.”1

Well Michael Kölling a Professor at
the University of Kent notes in a recent posting, Quality-oriented
teaching of programming
, that while this type of division has been
common for decades, it may be more about how the concepts are
taught, one building on the other, than about any natural ability to
“just get it.”

That is, if you don’t understand a
fundamental concept, however are you expecting to understand a more
advanced one? Yet that’s exactly how Computer Science has been taught
for years.

I say he’s right.

Consider my own subjective experience;
I struggled with the transition from BASIC to Pascal in high school.
All those bad programming habits caught up to me. The light bulb
didn’t go off until I revisited structured programming with C in
college. Same happen when the college adopted object-oriented programming and C++. I, along with a few others, basically had to
retake CS I, with all the same algorithms and data structures but now
with these odd concepts of “objects” with their “methods”. I
never felt comfortable with OO until I came back to it a few years
into my career as a web developer with Perl.

It’s a shame really. All those people
out there now, thinking that they just don’t “get it” when it
comes to computers, that they’re not technologically savvy enough.
Just like all those people who throw up their arms in frustration the
moment you mention algebra or statistics. “I just don’t get this
stuff.”

But of course the failing isn’t
necessarily that they lack some left-brain analytical function, but
that they never got the time/chance/break to develop that
understanding in the first place.


1 Keep
in mind this wasn’t MIT and my senior year in high school was 1992. So while I had a
computer at home, was enrolled in computer programming classes and
getting ready for the Advanced Placement test in Computer Science,
the personal computer revolution had only just reached it’s zenith before the 1991 rescission. In other words, the
department chair wasn’t assuming that any incoming student had been
greatly exposed to a computer – other than video games and word
processing – let along programming.