Article | Talk | Edit | History  

My life as a geek

From the World Wide Wiki

Support the troops: decrease your oil consumption.

Jump to: navigation, search

This page is a bit of an autobiography, but focusing primarily on the "geekier" aspects of my life.

The first computer I remember using was at my grandfather's house: I have no idea what kind of computer it was, but it used an old black and white TV for a monitor, and the entire system (except the sweet joystick and the monitor) was in one case complete with keyboard. Program were loaded from cartridges that were even bigger than the old NES cartridges, which were jammed (usually) into a slot next to the keyboard. We used to play games like Hunt the Wumpus and something about spiders. This was back in the late 80's, possibly into the early 90's.

At home, my dad has a slightly more modern system: a Tandy microcomputer complete with 3.5" floppy drive. It still had everything all in one box and used a TV for a monitor, but this was the first computer I used for something other than games. It used DOS as the "operating system", but we used the DeskMate operating environment (loaded from floppy) for things like making sweet pictures and awesome banners. In later years, we used DeskMate's word-processor (really, a plain-text editor) to write reports for school, which were printed on a dot matrix printer complete with side-hole-punched accordion-folded paper.

We had a handful of games for the Tandy. The only ones I can remember now are Dangerous Dave (a side scrolling platform game with real graphics and animation), and some ASCII-drawing based castle adventure game. All of our games were loaded from floppy. Looking back, there must have been some kind of hard-disk in that system, because it booted without a floppy. But all of the programs we ran after DOS came up were loaded from floppy disks, and all of our files were saved to floppy.

We had this system all the way up through my junior high years. We're talking 1997, and even at that time, our Tandy was long out of date. In fourth grade, our teacher got us a state of the art system for our classroom. I don't even know if it was a Mac or a PC, but it had a legitimate graphical interface and a microphone. We used to type papers on it, but I don't remember doing much else with it.

Then in 7th grade, the beginning of junior high, this new kid, Ryan Menzer, showed up at my bus stop. Some how or other, we became friends and he introduced me to the concept of programming, by way of BASIC. There were several attempts made, both on my own and with Ryan, to write various adventure games in BASIC, none of which were ever completed (at least not on my part). I distinctly remember being at his house one day and he was showing my something new he was working on: Visual basic. I could not wrap my head around the idea of programming without line numbers.

BASIC was the extent of my programming for many many years, but in the mean time, we inherited a couple of more modern computers from my dad's boss. The first was a 386 running Windows 3.1, which was later replaced with a 486, also running Windows 3.1. Neither had a CD-ROM, and we didn't have internet, but I remember spending a lot of time doing god knows what on it. For a little while, I was able to get some sweet programs from Fay's Drug store on double-density floppy disks. One was a really awesome game that I can't remember the name of, but it was some sort of little wizard that shot lightning bolts. I remember being very preoccupied with this game.

One Christmas I got a couple of games on CD-ROM: a pinball game and a flight simulator. We still didn't have a CD-ROM, but my grandmother, who lived just a few minutes away, was nice enough to let me install and play them on her new computer which had a CD-ROM and internet!

Eventually we got another new system (also inherited from a boss, I believe) which had a CD-ROM, and was running Window 95. This was also our first internet connection, and a rocking 28.8kbps dial up connection. This was probably around the time I started creating really crappy websites with services like Angelfire and Geocities (years before I set up this really crappy website).

Eventually, my dad bought an actual new system, and I got this old one for myself. This was back when Napster was first out and no-one had figured out how to sue you over what you download (or charge you for it!), so I downloaded a reasonable ton of music, which I played on Sonique. I think Napster and AIM were probably how I spent most of my computer time those days.

I was fairly proficient with computers at the time, but severely lacking in terms of actual knowledge. At some point, I downloaded a copy of Macromedia Flash studio, and I started creating Flash animations. They were never very good, but it was my next step in programming, using Flash's ActionScript language. The language has a syntax familiar to anyone whose written Java, C, JavaScript or countless others (it's actually another dialect from the same family as JavaScript). I don't know how powerful it actually is, but all of my code was limited to acting on the flash movies themselves (as opposed to, say, working with files or anything). I have very little idea what I actually did with action script, but I know I spent a lot of time doing it, and I think now that it probably helped me a lot with learning other languages later.

ActionScript and BASIC were the only programming I did all the way through high school. I used a little bit of Javascript over the years on some of those early websites, but it was only ever clipped from other resources, I never bothered trying to understand what was actually going on.

In the fall of 2002, I started college at Northeastern University in Boston, under the Computer Engineering program. Actually, I think initially it was just the engineering school in general, and we declared our majors at the end of the year or something. But I already new I was going for Computers. For that first year, the school was on a trimester schedule. For the fall, we didn't have any computer classes, but I continued "programming" stuff in Flash and ActionScript. At that point, I was really into fractals and spent a lot of time making flash movies that created various fractal renderings. In the winter trimester, the engineering freshmen took our first computer class: "learning" MS Excel in the first half of the trimester, and then getting introduced to MATLAB. This was the third language I learned (M, the MATLAB programming language), though not very well at first. I did, however, manage to create some very rough plots of the Mandelbrot fractal set using MATLAB.

Finally, in the spring trimester, we took a class to introduce C++. And I do mean introduce. It was all very very basic stuff, more of an intro to programming than anything else. We did everything in Visual Studio, which I think was a big mistake as none of us learned how to compile things from the command line. I believe the extent of what we learned (besides how to fight with Visual Studio) only included variables, functions, arrays, and pass by reference. I suppose it was an important step for anybody who hadn't done any programming before, but for the rest of us, it was a real waste. Not to mention that from that point on, the school assumed we knew C++, when in fact, we did not (at least not because of this class).

First semester sophomore year (the school had by then switched to semesters), I took "Algorithms and Data Structures", a brand new class that the school had dreamed up over the summer and conned a CS professor into teaching to engineers. It was very poorly organized due to the short notice, and the work load was pretty intense. However, this class is where I learned Java, and learned it well, not like how I "learned" C++ in the previous class. We learned Java, and, in fact, learned to do it from the command line, which was nice, and we learned a decent amount of Object oriented concepts. The textbook we had for that class, Headfirst Java (ISBN:0596004656), was really good, and I recommend it for anybody who wants to learn Java and/or Object Oriented programming.

So this was when I really started programming in depth. I adopted Java as my preferred language (since it was the only one I really new well), and started applying it to all sorts of stuff, from games and (more) fractals, to ID3 tag editing, network stuff and countless other things that I never did complete but sure had fun with.

I took another Java class in my fourth year, which was focused entirely on Object Oriented and specifically Abstraction Oriented, which may or may not be a real thing, but it's basically just an extension of Object Oriented which focuses on interfaces and keeping everything encapsulated. This was another good class that gave me a chance to hone my skills in Java, as well as learn a bunch of new design patterns and pick up some good techniques.

Another really significant class I took at Northeastern was Intro to Computer Architecture. This introduced me to assembly programming and really walked us through a basic but very informative processor architecture. This was basically the first time in my life I really had an understanding of what actually goes on inside a computer. Obviously, this is a necessary part of computer engineering, but it's also a huge boon to programmers in general. Writing code is easy. Writing good code is a lot harder. Writing great code is damn near impossible and requires a pretty intimate knowledge of how that code is actually going to make it's way through the system and do what it needs to do.

Northeastern is very proud of their co-op program which, for those who've never heard that term before, is basically an internship program. I don't mean to belittle it, it's actually a really good program (at least it was for me, some people didn't luck out to well). I did the recommended/required three 6-month co-ops during my second, third, and fourth years.

My first two terms were at The Mathworks, the company that produces MATLAB. This was a really great experience for a number of reasons. The Mathworks is a pretty cool company with modern facilities and fairly progressive attitudes towards their employees (lots of nice free-flowing workspaces, home-made cookies every Friday, and, not infrequently, beer at afternoon meetings). As my first experience in the professional world, it was very educational, but also kind of a gentle introduction to working full time (because we did a fair amount of playing there, too). I learned a lot technically as well, though more just from my association with other engineers than directly through the work I was doing.

For my final term, my advisor and I agreed that I had pretty much gotten everything I wanted out of The Mathworks, and would benefit from a more hard-ware oriented experience. I ended up at American Power Conversion (APC), doing a mix of different types of work on Uninterruptible Power Supplies. This was even more educational than my 12 months at The Mathworks, mostly just because I had a wider range of jobs. This was the first time I was introduced to embedded processors, I did some circuit design, even some hands-on circuit construction. I also worked with FPGAs and did a lot of firmware development. Much like at the Mathworks, I was just exposed to a lot of stuff I didn't know anything about, the kind of stuff they just don't teach in school. Anyway, I stayed at APC part time when classes started again, full time again over the summer, and back and forth like that until I finally finished grad school, at which point I came on as a full time permanent employee, working as a Firmware Engineer, which I'm still doing today.

I graduated from Northeastern in May 2007, with a BS in Computer Eng'g, exactly as I had intended. The following fall, I started my first semester of grad school at Boston University. I was going for Comp-Eng'g again, working towards my MS with a concentration in systems and architecture. Grad school was very educational, and I'm glad I did it, even though it did require a somewhat ridiculous amount of work which I don't think was really necessary. My first semester, I took a class on Verilog. I knew a bit of VHDL prior to that, but this class really filled in the gaps and laid a solid foundation for me to build off of. I followed this up the next semester (or maybe the next year, I can't remember) with an Asynchronous design class, which was really cool. This was one of the things I liked best about grad school, it really did cover some pretty advanced topics, which I guess is the whole point.

The other series of classes I really enjoyed at BU were my information theory classes. It started in my first semester with Error Correcting Codes. I really stumbled into this class, signing up for it just to fill some free time in my schedule. I'm so glad I did. It introduced me to the whole field of Information Theory, in which I've spent a lot of time since. I followed it up the next semester with Intro to Information Theory, which was a more formal introduction to IT in general covering things like entropy and compression, and fundamentals like that. Finally, I took Advanced Information Theory which, to be frank, was mostly just a rehash of the other two classes, though with a bit more detail and at a much quicker pace.



This article is a stub.