Thursday, April 12, 2018

The Heuristics of Computer Science

In my last post, I took a dive into my cooking history from the teen years to present.  In this post, I'll visit my passionate relationship with programming and computer science.  Eventually, I'll get to the motivations for why I'm writing a recipe website, but probably not here.  Again this is a rehash of old content but fleshes out some of the details to make me look more human.

I wasn't always a fan of programming and its academic discipline, computer science.  When I was younger I knew my way around a DOS prompt and played the occasional computer game, but never really got into programming BASIC.  At the time, I don't think I was necessarily intimidated by programming, I just didn't understand what it had to offer.

By the time I got to college, I'd decided on mechanical engineering as a major and, as a result, needed to take a few rudimentary programming courses because even in ME, Software was the Wave of the Future ©.  I was actually pretty excited. I'd come to understand that programming allowed me to build tools from scratch and it could be used to augment analysis I'd do as a future ME.  Having these skills would make me a highly sought after recruit.  While those two previous sentences are true, my introduction to computer science (CS101) didn't help close the gap between my talent and my expectations and make those sentences a reality for me.

Though I knew my way around computers, I certainly didn't know my way around programming languages.  I was also thrown into a weed out class filled with a bunch of kids who'd been programming since they were 12 and a bunch who were ready to drop engineering for a different major in the next week.  I was eager to learn right up until I hit my first compiler error.  Though compiler message syntax is pretty straightforward once you know what you're looking at, it's not a stretch to say it comes close to looking like Greek to someone who's never met a compiler (or, if you're Greek it looks like Aramaic).  I would spend hours in the lab poring over what would later become obvious to me as simple compiler errors with absolutely no context of what I was exploring.  It's as though I was required to learn Chinese simply by staring at the characters.  When I asked a TA for help, the TA would simply circle the compiler output on the screen with his finger and state, "it's somewhere right...there," without explaining the output to me.  This is similar to asking someone what this character means and being told, "the clues are in the context of the characters you're staring at."

Another great point of confusion around CS101 was the fact that we were learning CS basics in a language called Mathematica.  The language itself wasn't the problem.  The problem for me was that we were constantly told, "it's not a programming language."  Since at this stage I understood learning a programming language as something similar to learning a second speaking language rather than a subset of pidgin English, I freaked:  "If I have to relearn everything when I learn a programming language, why am I even learning this stuff!"  Turns out, Mathematica had plenty of the control mechanisms and data structures "real" programming languages have, so I was actually learning to program, I just didn't know it.

Needless to say, the rest of my CS career in undergrad didn't pan out to be as illustrious as I'd hoped.  I slogged through a few more fearful moments before getting my degree and heading out to be a mechanical engineer.  I followed this path for a few years until the company I was at decided it wanted to rebrand itself as an internet company (similar to how everyone now is looking to score off the blockchain fad.  Or was).  As such, they started offering online tutorial classes for programming, and because I was now safely separated from threatening TAs with their Fingers of Doom, I decided to look into the tutorials.

Turns out I liked them.  I even had dreams of teaching myself programming and somehow sneaking into the industry as an autodidact.  Then I worried that no one would hire me if I didn't have proper credentials.  Then I realized I could go back to school for a CS degree.  I started taking a few classes at night, and when my company told me they wouldn't reimburse my tuition because the new degree wasn't relevant to my job, I decided to quit and go back to school full time.  Right at the end of the Dot-com boom.  My first fulltime day at school was September 10th, 2001.  Tim - OH MY GOD, WHAT THE HELL DID I JUST GET MYSELF INTO! - ing.

Well, as we all know, the software engineering market seems to have recovered (just a bit).  It also turns out that my second round with CS was much better than my first.  I wrote a thesis on cellular automata and graduated with honors.  I even got a job before finishing school (turns out it was the worst job of my career and I was fired six months later, but that's probably a different blog post).  And, it was during my computer science renaissance that I wrote my first incarnation of a recipe website.  But that's definitely a different blog post.  Probably even the next one.

No comments:

Post a Comment