How I got started in programming

How I Got Started Programming

My good friend Amy Hoy has pinged me in the latest geek-cum-chain-letter-sucker meme. Since I am enamored with myself, I figured I should let the world know my answers to these.

How old were you when you started programming?

The answer to this depends on how you define “programming.” Not to mention how you define “started.”

It could be when I was around 7 or 8 with our Apple IIc.

It could be when I was 10 making pictures out of ascii.

Maybe it was when I was 15 making doors for BBSs.

Maybe it didn’t happen until I was 17 and scrambling for a class.

How did you get started in programming?

Again, this depends on a few things. However here are a couple of possibilities:

  • Sitting in my living room in front of our Apple IIc, a friend (George?) showing me the classic 10 print, 20 goto 10. I tweaked it to make different patterns in the offsets
  • The computer lab in 5th grade (I went to a private school for one and only one year… it’s a long story) making teletype ascii art (on real PCs, not on dumb terminals). They gave us instructions like “line 5: 25 spaces, 5 stars, 1 vertical bar, 5 stars”. When you were all done, you’d see the picture. The one I remember very vividly is a Space Shuttle with “USA” on the booster rockets. I would spend *hours* after-school making and tweaking these things. It’s fair to say that the teacher was programming us, and WE were the “computers”
  • Spending hours making frames for my Etch-a-sketch Animator 2000 Etch-a-sketch animator 2000 - image from Wikipedia

What was your first language?

BASIC was the first language I had any exposure to, but the first language I achieved any proficiency with was Pascal (Turbo Pascal 6.0). I still have a soft-spot in my heart for Pascal, it was my gateway to the beauty and elegance of Computer Science.

What was the first real program you wrote?

Then, as well as now, I didn’t finish many projects. Getting (or not getting, as the case may be) to the “crux” of the problem was my main goal. One project I did finish was in my senior year of high school. I wanted to understand Object Oriented Programming, and started poking around with C++ (I had learned a bit of C before-hand with a friend in school – Jason Kochel). What I ended up making was a program that took two lines of text, put them on the screen, then made them shrink and expand opposite each other. The lines I used were “I love” and some girls name (for a friend of mine – his girlfriend at the time).

What languages have you used since you started programming?

This question should really say something along the lines of “… more than once,” or “… for any period of time.” Here’s a short list of things I’ve messed with:

ASM, C, C++, BASIC, Pascal, JavaScript, Bash scripting, Java, processing, ASP, Visual Basic, POVRay, Ruby, Python, Perl, Objective C, PHP….

What was your first professional programming gig?

I think I made a few bucks from some BBS Doors, but the first real paycheck had to be from Pacific Bell Internet in 1997. I was working tech support for the ISP when I got bored and attempted to make a demo version of our customer management system (Vantive) in JavaScript. That got the attention of some people higher-up, and I was brought into a skunkworks project to implement our side of a web-based CRM we had just purchased (Silkenet eService). This was my first exposure to server-side programming, and taught me many lessons that I’m still trying to digest. From there, I moved around in the company a few times, picking up VIM, Perl, VB and a few other things along the way.

If there is one thing you learned along the way that you would tell new developers, what would it be?

  1. Don’t be afraid to break things
  2. Once you get past fear, find your joy and follow it completely
  3. NEVER STOP LEARNING OR CREATING.

I’ve made many, many, many mistakes while programming (Hey John, remember the 2 gig file I wrote out to your 200meg hard drive?) Having a group of awesome friends kept catastrophic computer failures to a minimum. And then having a supportive mother for when I did really mess things up let me explore.

The bigger advice is mostly don’t ask for permission. If you need to jailbreak your phone to explore your passion – do it. If you need to tear apart your Furby and solder his guts together to learn how he works – do it. If you need to stay awake 2 days straight just so you can impress someone – do it.

What’s the most fun you’ve ever had… programming?

There are far too many to name. Every time I stay up all night trying to get something out into the world, it is, to me, the most fun possible. Here are a few instances of pure joy from programming/learning:

  • When I was sans-home, I would hang out at friend’s houses A LOT. At a few of them, they had old computers. I’d load up BASIC, and make it draw circles and spirals. It was nearly an obsession. It’s hard to explain, my technical chops were far beyond sine, cosine and drawing dots. However – it was the first time I can remember that I coded 100% on my own. No books, no articles on line and no source code to crib from. It was truly liberating. To this day, opening up a blank editor and creating something without reference is a beautiful thing.
  • The night before my senior year of high school started…
    I was signed up for Advanced Placement Computer Science (the only honors level class I took in HS), a pre-requisite was the Pascal class the school offered as part of the Math Department. Due to circumstances outside my control, I wasn’t able to take that class before senior year. I lied and said I knew Pascal enough to do just fine in the class. I spent hours looking at all the source examples I could find and retyping them into a stolen version of Turbo Pascal at home. By the time I went to sleep, I knew as much as anyone else in the class (except for Jason.) I ended up getting a 5 (the highest possible grade) on the AP test, and finishing the class with a grade in the high 90s (which was totally unheard of for me.)
  • I recently made an application that I didn’t announce on here. It’s just for me, but complete and not missing any corners. I stayed up until the sun came up writing Ruby (with Sinatra), HTML, JS and CSS. It explores a few interesting concepts and scratches an itch I’ve had for years. If you can’t make yourself happy (and maybe a few geeky friends), then why bother fighting with these wretched machines?
  • “Hello World” on the iPhone.

Bonus Question: How do you get into “The Zone” for programming:

I added this question because I’m a tinkerer and couldn’t leave well-enough alone.

For me, it’s always been music. Not just music, but music on repeat. It filters out noise, and is repetitive enough to sooth the doubting part of my mind. Two times:

  • I had an old, beat up cd player that didn’t have repeat. It didn’t even start the disc over when it ended. I got up to hit play to re-start Jagged Little Pill a thousand times if I did it once.
  • During Rails Day 2006, I played “Unfaithful” non-stop for the entire time I programmed (I think it was 18 hours total.)

Tagged:

Without passing these things on, they’d die. Cold. Alone. Help stave off meme-death. Ping these people and let them know the fate of this meme is in their hands:

(wow, I could keep adding people forever. I need to know everyone’s story…)

For anyone who needs the list of questions, here it is in one easy to copy and paste block:

Project #3 – Fluid CSS TextMate Bundle

2008-08-12 update:I’ve renamed the repository on GitHub to be fluid-css.tmbundle to conform to the naming suggested by Allan on the TextMate Blog.

So my last project ended up being a much bigger deal/effort/undertaking than I expected. I’m just now starting to get back in the swing of small releases. Still shooting for 10 projects this year though!

Not counting the super secret project, this is my 3rd release and it’s a huge departure from my normal stuff.

Fluid CSS TextMate Bundle

This will appeal to maybe 10 people in the world, but for them it could be a huge time-saver (it already is for me.)

Fluid (elastic, em-based, etc) layouts are ones that specify all sizes in relative units (usually ems – a typographic term). Here’s a great introduction to making one of these layouts: The Incredible Em & Elastic Layouts with CSS. The advantage to having everything set in a relative unit is that it allows the site to scale (like “Full page zoom” on IE7 and Firefox 3). It’s also a great way to know exactly what’s going on with your layout.

Since you’re working in relative units, you always need to be aware of your current font-size, and use that to calculate the size you’re setting.

In the past, that meant a lot of asking google (did you know it’s a calculator?) or spotlight (did you know it’s a calculator?)

Well, NO MORE!

Here’s a video showing you what it does:

How to use my textmate bundle for em-based designs from kastner on Vimeo.

Grab it on GitHub.

Or – get the tarball