It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
Edsger W. Dijkstra
I don't clearly remember when or how I was introduced to BASIC. If I had to guess, I would put the year at 1990. I lived in Lincoln, Nebraska. I was about six years old. I hadn't yet learned multiplication tables, but I could tell a computer what to do. I was a wizard.
Our family had owned a Commodore PC for a couple of years. My twin brother Kyle and I learned at a young age how to boot it, navigate MS-DOS, and load a game on the 5ÂĽ-inch floppy disk drive. We played The Ancient Art of War, Prince of Persia, Impossible Mission II. We immersed ourselves in those worlds, and then imagined new ones. We wanted to make games. We examined the disks' files, hoping to find some secret knowledge, but found only mysterious binary formats.
I had some vague understanding of programming at the time. I knew that there were Computer Wizards who could write in this arcane, unreadable machine language. I opened an executable file in WordPerfect, poked at its leading bytes, and then was disappointed when it no longer ran. I would never become a Computer Wizard this way!
The seminal moment is lost to time, but somehow, somewhere, I learned about BASIC. I vaguely recall my father showing us how to launch GW-BASIC (the version of the language and IDE bundled with early versions of MS-DOS), but it was meaningless to me without an understanding of the language.
We didn't watch a lot of television growing up, but we sometimes watched reruns of a 1980s PBS science program called 3-2-1 Contact. My favorite episodesâ€”or the only ones I remember anymoreâ€” were a few that dealt at least superficially with computer programming and computer-generated imagery. I vividly recall an animated CGI sequence of a cyber-ant crawling across a cyber-world. It looked like nothing I had ever seen on our computer's CGA monitor. I wanted to learn how to make images like that.
We spent a lot of time at the library in those days, reading and borrowing children's books. Whether by intent or serendipity, I can't recall, but we found issues of 3-2-1 Contact magazine, a children-oriented companion to the TV show. And in those worn pages, we found BASIC program listings. I remember taking the magazines down to the library's basement, where its photocopier stood, and making copies of the code for whichever game or demo sounded most exciting.
You know that ozone smell of a page fresh off the copier? It's a nostalgic trigger for me. That's what GW-BASIC smells like.
Learning to program by reading undocumented code is not an easy task, especially for a six-year-old, but I gradually learned to modify programs, then to develop my own. I wrote interactive fiction. I built mazes. I drewÂ terrifying magenta box worlds. I was a budding Computer Wizard. I wasn't learning good programming practices, but programming was not the goal in and of itself. I wanted to make games, and programming was the way to do that.
A few years passed. Our family moved to Great Falls, Montana and bought a new computer. I migrated to QBasic.Â (I was initially reluctant to try it, perceiving the more sophisticated IDE to reflect a language aimed at grown ups for making grown up programs.) I was a little older. I had a more developed understanding of mathematics. My programs became bigger, more complex, more structured. I dabbled in C++ around this time, buying into the popular notion that it was a more "real" programming language, but I would always come back to QBasic. It was comfortable, powerful enough, and not burdened with obtuse compile and link steps. I felt competent in QBasic.
In our teenage years, Kyle and I purchased Visual Basic and ordered the DirectX SDK on CD-ROM (to circumvent a 100+ MB download in the age of 56K modems). I developed my most advanced games to date, but I also found myself feeling less competent and increasingly frustrated by the limits of my programming knowledge. I had been making gamesâ€”or at least small game demosâ€”for close to 10 years, yet I had never learned such important concepts as containers, recursion, or pointers.
I set aside programming for a while. I dabbled in modeling and animation. I learned to play the guitar and taught myself music theory. I played Thief, System Shock 2, Deus Ex. I wondered if game development as a career was beyond my reach.
Finally, I went to college, studied computer science, and filled in the gaps in my programming education. I wrote programs in C, C++, Java, Lisp, and more. I graduated and moved to Plano, Texas to attend the Guildhall at SMU. I graduated again and moved to San Rafael, California to work in games. Years later, I quit my job and started up Minor Key Games with Kyle.
I never came back to BASIC. There's no reason I would; the world had moved on from BASIC, and I with it. I wield more sophisticated tools and languages now. I am more competent in C++ than I ever was in QBasic. But I still think about BASIC once in a while, with more than just wistful nostalgia.
The confluence of events in my own life that led me to programming is fun to talk about, but it is only half of the picture. BASIC was designed to be accessible to everyone. It was easy to read. It was bundled with MS-DOS. Incredibly, there may have been fewer barriers to entry to learn to program in 1990 than today. Without the Dartmouth wizards who pioneered an approachable language, I would likely not have found programming at such a young age. The whole shape of my career may owe a debt to them.
That's what I think about now when I think about BASIC. I think about my own son, now almost two years old, and how he will learn to interact with computers. I think about other children growing up without the privilege of a programming-inclined parent or teacher, and I wonder about the barriers to entry today. Despite the near ubiquity of computing devices that we own, carry, and wear, we must actively seek out development tools and resources. What if learning to program could be as quick, as easy, as basic as learning to operate a smartphone?