How did I end up here?

Challenge 0: have a computer around as a kid

I've been programming computers since I was 10 years old. That's 31 years and counting. I had my first paid programming job at age 15, when I created a program for my mother's private school to display a salary grid based on numbers they entered via the program itself, written in Apple basic. Sadly, there was no testing framework available to me.

When I went to community college, it was before the Rise Of The Internet. I had net access and an email account, but there was no graphical web browser I had access to. I remember seeing something called "Mosaic" on the desktops in the computer labs, but I did not have access to it. So I surfed, hard core style, using Lynx. Yes, I am that old.

Challenge 1: get an IT job

Once I was done with school, I landed a job working for a company that produced fully-licensed CD compilations for professional DJ's. I was their "IT guy" but ended up building my first web app: an online searchable catalog that used MySQL. I wrote code that imported a CSV export from Microsoft Access and then built a form to let people search for stuff. It sort of worked. I didn't know about wild card searches or Soundex but I was pretty proud of myself.

  • learned PHP
  • learned some MySQL
  • discovered I still liked programming

Challenge 2: get a programming-only job

When that job ended, I found a job with a company that was using some programming language I had never seen before, and haven't seen since. I also got to use PHP to build an online shopping store for a specialty retailer.

Everything went well...until it didn't, and people who weren't stock holders (it was a publically-traded company) got the boot.

  • learned more PHP
  • learned to work as part of small team
  • failed the political office game

Challenge 3: Get a job on a bigger team

After that job, I got to sit on my couch with my infant daughter and watch 9/11 happen in real time on my TV. A few months later I got a job working for a company that dealt with online adult content and wanted to build a dating site. The company still is around, and it's not hard to google around to figure out who it is. It is a different place now, but when I worked there I committed the first line of code for the project into a CVS repository.

It was a great education in what it takes to build a scalable PHP application, but my attitude was terrible while I worked there. I was argumentative, belligerent, and basically acted like everything that was done that I disagreed with was the worst decision ever. I learned what it was like to work on a large team, and I learned again that getting along with your co-workers mattered when it was time to do things you really wanted to do.

I lost the political game, and lost it hard. My own damn fault, to be sure.

  • learned even more PHP
  • used my first MVC-style framework (Mojavi!)
  • first exposed to unit testing
  • first exposed to virtual envrionments for dev work (BSD jails!)
  • learned that I needed to pay attention to the political game

Challenge 4: Go someplace you feel you're wanted

After leaving that job, I took a job working for a company that owned a network of online forums for sports and auto enthusiasts, along with publishing several auto magazines. Terrible fit, never got to do anything except play with CakePHP and start really blogging more. My blogging while working there led to me getting my next job...and every job since.

  • learned how to do technical blogging
  • learned how to contribute to an open source project (CakePHP)
  • learned epic trolling skills on a mailing list

Challenge 5: Work from home

After leaving the forum job, I bounced through two jobs (left one cuz funding was pulled, left the other due to severe personality conflict with boss) and landed my first serious telecommuting gig working for a sports data integration company. I was sick of the long commute (90 minutes in the morning, two hours home) and held out for a job where I could work from home.

Loved the job. Lots of freedom to build things the way I saw fit, with a few constraints of language and associated tools (had to be ones we where using already). I also started ramping up the blogging, and grew my reputation through speaking at conferences and trying to find people I could always learn things from.

I also learned that when you build things for customers, you really should try to talk to those customers as much as you can to understand how to build what they want.

  • learned some Python
  • learned how to work remotely without someone needing to check up on you
  • learned how to explain technical things to non-techincal people given a proper context
  • learned how to self-promote on Twitter and build your "brand"
  • learned how to get accepted at conferences
  • learned how to get mad about getting rejected to speak at conferences
  • developed ridonkulous levels of confidence in both my own skills and my abilities to find jobs I want to do
  • started co-organizing a PHP user's group in Toronto

Challenge 6: Find a job doing what you want to do

Potential NFL and NBA strikes had me nervous about my awesome-to-work-for employer going under, so I jumped ship and joined a start-up that was focussing on ecommerce within social media tools and networks. I liked the guys I worked with, but felt out of place: the things I was passionate about (best practices and testing) weren't a good fit for the place they were in (OMG WE HAVE TO BUILD THIS THING AND GET IT LAUNCHED) so after a personally-frustrating year I left to join a place doing the types of things I wanted to do.

  • learned how to wrap tests around reluctant code bases
  • learned how to write an ebook
  • learned how to do a podcast about programming issues
  • started organzing a PHP conference in Toronto

Challenge 7: Keep finding challenges

Which of course leads me to the present. I'm now doing the type of coding work I want to do: focusing on testing practices, researching tools to improve our developer work flow, and also branching out in the outside world to helping more developers be aware of just how valuable adding good testing practices to your skill set could be.

You can see all the challenges I put in front of myself, and how things didn't always end up the way I had hoped. If I can overcome all this stuff, imagine what you can get done! There will never be a better time to get involved in building stuff for the web. You are spoiled for choice on tools, languages and opportunities.

Don't be scared. Be excited. It only gets crazier from here on out!