Every now and again, someone asks me how I got started in web development.  They want to know what classes I took in college.  What my degree is in.  Who I studied under.

It's not a big secret, so I'll tell you.

Once Upon a Time

Originally, I wanted to be a marketer.  Having moved away from my dream of being a research scientist[ref]My first bachelor's degree was a dual major in physics and math.  I was focusing on quantum mechanics and, though I was doing fine, a public fight with a tenured professor led to a retaliatory D on my transcript and automatic rejection from every Ph.D program to which I applied.[/ref] and being disillusioned by the world of politics,[ref]My second bachelor's was in political science.  I love the field and the lofty goals espoused by everyone involved. I just don't like the people actually involved.  Too much lying and scare mongering for votes.[/ref] I went to business school.[ref]My final degree is a masters in international management with an emphasis on global marketing.[/ref]  My business degree promised to open many doors ... unfortunately I earned it the same time the economy started to stumble.

As it turns out, no one wants to hire a 23-year old with a masters degree and little full-time job experience when a poor economy means hundreds of similarly trained professionals with 23-years of experience are available for the same price.

I jumped around, doing a few odd jobs here and there, until I finally landed a paid internship with a brand strategy agency in Seattle.  I loved it!  Branding just happens to be the facet of marketing I resonate with most.  I worked with small non-profits, large multinational technology firms, you name it.

After my internship, I moved back to Portland and took a risk with a startup trying to innovate in the world of podcasting.  If you've never heard of Zubeo, think of Stitcher, except with an emphasis on teaching, preaching, and educational content.[ref]Actually, Zubeo was in the market before Stitcher. Some investment and management issues related to advertising and partnerships held Zubeo back in the early days where Stitcher was more agile and innovative.[/ref]

I was the Director of Customer Development at Zubeo before we had any customers,[ref]Or management approval for advertising beyond word-of-mouth[/ref] and it was a great position.  At a startup, though, things change rapidly.

One day my boss explained we didn't have the money to pay for positions that focused solely on marketing.  He asked if I could build and maintain the company website instead.


Out of the Frying Pan

At the time, I had next to zero experience building websites.  A close friend of mine introduced me to PHP.  That was too hard, so I'd swapped my PHP site out for a WordPress one, using a stock theme.  Removing a "powered by" notice in the footer was the closest I'd come to managing a website.

I stopped by Powell's on the way home and bought a book - How to Build Your First Website.[ref]The book is sitting in the garage right now. It's so crappy I won't even bother to link to it on Amazon.  Really, I'm doing you a favor here.[/ref]

Our first company site was a custom WordPress theme, built just in time for the National Religious Broadcasters' convention in Nashville.  It worked well and explained our mission - but the WordPress code wasn't readily interoperable with our .Net desktop application or the web services it powered.

Round 2

The second generation of the site needed to run on .Net - specifically so it could pull data from the same sources as our desktop application and present things like "our top shows" on the home page.  Another trip to Powell's earned me an intro-level Visual Basic guide.

In the mean time, I'd continued to learn WordPress and had started freelancing for plugin development and customizations.  My newfound experience with WordPress and open source resulted in me building a Visual Basic CMS that heavily resembled the WordPress workflow.  Actions and filters were replaced by .Net events, but the core ideas were still there.

This was also the time the WordPress world was beginning to embrace JavaScript and AJAX, so I pulled much of those new techniques into the site as well.  Thanks to JavaScript and Ajax for the Web: Visual QuickStart Guide, I was able to pick up basic JavaScript in a weekend.  I built out a custom slider for the site and, to make sure it was heavily tested, built it out into a WordPress plugin as well.

Portfolio Building

The website I built for Zubeo helped me to secure my next job in web development - this time for a medical software company (and transitioning from Visual Basic to C#).  This next job helped fill my resume and prepare me for a position at an insurance software company (again working with C#, but focusing more on web services and integrating distributed systems).

All of these positions, paired with the continued freelancing work I was doing around WordPress, strengthened my skills for my current job at 10up.

I now work exclusively with WordPress.  More often than not, my job involves the things I love most - integrating distributed environments, working with intense JavaScript, and learning new skills and technologies.  I don't freelance any more, but the work I do keeps me fresh and helps me continue to refine my skills.

In Summary

So what classes did I take?  Where did I learn what I know?  For the most part, I'm self-taught.  I bought books, hacked code on nights and weekends, and put myself in stressful situations that depended on my ability to learn quickly and produce.

But that's not a path for everyone.

If you're trying to get your start in web development, I won't recommend you go out and find a dev job just yet.  The stress involved with a requirement to perform in a field you're just learning is intense.  Instead, I recommend you read.

Read books on development.  Read blogs.  Read Twitter conversations between devs.  Most of all, read code.

Find a project you like - WordPress, perhaps? - and take time to read through the code.  Learn what it's doing.  Learn the approaches taking by the dev team to solve specific problems.  Learn about the popular patterns used in the project.

Then, write some code of your own.  Publish it.  And read/learn from any responses it gains.