How I Learned How to Program

Nethy left a comment the other day on my From Idea to Reality post where he asked how I got my start in programming. I thought about it, and figured it was worthy of a post because I don’t think I took a very typical path to being a web developer.  Most of the other web developers I know got a start at a real early age because they just had an innate love for the creativity of programming and immediately were drawn to it the first time they used a computer.  I was most definitely not like that.

In high school I excelled in math and science, which led to me being placed in a then experimental (and now very big) high school engineering program called Project Lead the Way, where I was one of the first group of five students in the country to complete the program.   Naturally this led to me seeking out engineering as a career and I ended up at RPI majoring in Industrial Engineering.  I chose industrial over civil or mechanical or electrical because I knew that the idea of building an efficient system could be applied to anything:  a financial banking system, an assembly line, software, or just about any other industry.  There’s always a need for industrial engineers because there’s always a need for things to be more effective and more efficient.  My dream job at the time was to work for Disney or Six Flags on engineering the flow of people throughout the park…and yea, those jobs exist, they pay really well, and they’re really cool.

By chance, the head of our department ran a software company and saw the value in having us take programming classes in addition to more traditional things like quality control, statistics, dynamics, statics, and the like.  So as a sophomore I struggled through my first programming class, Computer Science I where we programmed in C++.  From there, I learned a decent amount of to build software for an embedded control project I took on as an intern.  But still no web stuff, and I honestly didn’t have any interest in it.

Until my senior year when we had to take a course called Information Systems.  Industrial engineering students were paired with web programming students to essentially create a web start-up.  The first half of the class covered large scale systems design (like how Amazon developed their product database, or FedEx uses operations management principles to route their trucks), and the second half of the class we spent presenting our projects.  It was a rather large class (there were maybe 15 teams of 4 people), and right away I saw that if I could learn to program I could have a huge advantage.  The programmers had all the power – we could design all of the systems we wanted, but at the end of the day were clueless as to how to build them.  Our teacher showed us how to set up Apache and install MySQL and PHP.  A few of the presentations led to people starting their own businesses, which led me to think “if I knew how to program, I could do that too”.

After having no luck in a few business plan competitions, I came up with the idea for SportsLizard.  The original idea was to become the “Amazon of sports cards” where you could find any card or collectible on the web.  I wanted a buy/sell system similar to eBay’s but not in an auction format.  At that time (2004), I couldn’t find any off the shelf software that did what I wanted, so I picked up a few books on programming and got started myself.  I only chose PHP/MySQL over ASP or Cold Fusion because I was slightly familiar with it.  At that time, PHP hadn’t established itself the way it has now.

That original SportsLizard launched over the summer of 2004 (screenshot here) and over time I’ve just slowly but surely gotten better at web programming.   There really wasn’t any magic to it.  My engineering background gave me a slight advantage, but I firmly believe that it’s something anyone can learn if they want to…probably in less time than they think.

If you’re looking to get started with web programming today, here’s what I would recommend:

  • Start with just learning HTML and CSS. This can be done with an online tutorial like the free ones on W3Schools.  Then buy a domain on GoDaddy for $10 and put up a simple site.
  • Get an introduction to HTML, CSS, XML, PHP, MySQL, and Javascript by learning WordPress. The great thing about WordPress is that you can have a blog/site up and running with almost no knowledge in less than a day, and then slowly but surely add to it.  Once you’ve got the basics down, customize your own theme.  Then master installing plugins.  Then learn how to customize and modify plugins.  It’s a great way to learn while doing.
  • Learn PHP as your server side language. It has it’s faults, but it’s become the standard.  Most open source projects are done using it in conjunction with MySQL, and the communities for support are massive.
  • Learn advanced stuff with books. The reason I prefer books over the web is that they generally guide you through real projects.  The web ( in particular) is great for finding quick answers to small problems, but not so good for teaching you how to put together a large web project.  Books are written by some of the best programmers in the world.  If you can learn how to develop a project the way that they do, you’ll become better than most rather quickly.  You also can get some great re-usable code from books, that I personally trust more than a piece of code I picked up from a Google search.  My favorites are the Head First books by O’Reilly for getting started and the Wrox books for more advanced stuff.
  • Shop for books based on what major projects they cover. Almost all programming books have a few major projects that tie things together at the end, like building a blog or forum or e-commerce site from scratch using what you’ve learned throughout the book.  I always make sure that I find books that cover an end project that’s similar to mine.
  • Buy a lot of books. I check the programming section at Barnes & Noble and Borders every single time I go there.  I skim the table of contents and if I see something that interests me, I buy it.  To me, $30 – $60 to learn one programming skill that I didn’t already have is totally worth it.  Generally I also at least skim the book and learn some other things.  When I can’t figure out how to do something, I walk over to my library of programming books (probably around 20 now) and flip through the index and almost always find a solution somewhere.   I have books on PHP/MySQL, Javascript, CSS, basic HTML, AJAX, SEO, and more.  In total, I’ve probably spent less than $1,000 over five years to acquire them.  I’d say $1k to learn a powerful skillset like programming is a steal.  A much better investment than the $30k/year my college education cost!

I hope this helps some people and also clears up any questions about my programming background.  If you’re serious about web business and just getting started, I think you absolutely need to seriously take up programming for a while.  You’ll have a much better understanding of your business if you have a hand in creating the software that runs it.

9 comments on How I Learned How to Program

  1. Dan says:

    This was an amazingly informative link. Coincidentally I was looking for information just like this. Thanks!

  2. Dale says:

    As a Chem E, we called you IE’s “Imaginary Engineers.” 🙂

    I can’t stand programming, but you’re right it really does help to at least have a background in programming. When I was in 1st grade I learned BASIC on my Apple II e.

    After failing to find a partner who was good at programming to help me, I finally bit the bullet and learned some basic PHP. I was really close to giving up until a friend of mine gave me three lines of PHP code and that got me over the hump to launch

    I still can’t stand programming, so I’ve hired someone to help me out. But it was only after my initial programming attempts proved out the concept, and now I can at least converse intelligently with the programmer I hired.

  3. Adam McFarland says:

    @Dan – glad it helped 🙂

    @Dale – haha I almost put a sentence in the post about how people commonly referred to us as “imaginary engineers”. You’re a perfect example of why everyone should learn at least some programming – understanding what can and can’t be done and how difficult it is will save you a ton of money in the long run when working with a programmer. You’ll be able to sense BS a lot quicker and hire better, plus you’ll be a lot more realistic in your proposals.

  4. nethy says:

    Thanks Adam. Interesting post.

  5. Great stuff. WordPress definitely helped me learn. Its great to not start from scratch and have the chance to see how little things change other things.

    I also had a lot of success playing around with joomla. Again for the basic html and css it was very easy to learn through trial and error.

  6. nethy says:

    Adam, One more quick word.

    I think your experience here is a great example of an abstract principle: “Learn by doing.”

  7. Benjamin Lee says:

    I think PHP with some knowledge on HTML/CSS is important.

    But nothing beats learning by doing.

  8. Adam McFarland says:

    Nethy/Benjamin – you guys are totally right. “Learning by doing” is the best way. I find that I read books with a lot more enthusiasm if I’m using the knowledge immediately to try to improve our business. Then when you actually release something and over time see the errors exposed, you learn a whole bunch of things to look out for in the future. And you just repeat over and over. After time it adds up.

  9. Benjamin Lee says:

    Once before, my younger brother mentioned that books are useless until you internalize them.

    How true.

Leave a Reply

Your email address will not be published. Required fields are marked *

Commenting Rules

I'm honored that you found this post interesting enough to leave a comment. Before posting, I have a few ground rules:

  • Please keep your comments as relevant to the post as possible.
  • No personal attacks or any other nastiness.
  • Your first comment is subject to my approval.