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.
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.
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.