It's hard to teach yourself something. Regardless of your motivation, without outside influence/direction/advice learning a new subject is like attempting to build a building when you've never seen one before. I've found this to be particularly true in the world of programming, specifically web programming. Looking back over the last 4 years of self-training it stood out to me that I learned the most when I had a need to meet or a problem to solve. This is nothing new or revolutionary but, during my self-studies, I'd never come across anything similar.
I went to school not knowing what I wanted to do with my life. It's an expensive way to find yourself let me tell you and as such, I don't recommend going that route. It wasn't until I was finishing up year 4 (out of 5) of my college experience that I finally got a glimpse of what I actually wanted to do with my life. Having failed at being an Electrical Engineer and a Marketing major, I discovered that I fit in quite well with the radio station geeks in the Communication Department. I co-hosted a radio show with a friend of mine and we recorded a bunch of comedy sketches...they were hilarious, I promise. We'd recorded over 30 sketches and I thought it would be nice to create a website to host them all. That way people could appreciate our genius whenever they wanted.
This was my first need. Now, to this point in my life I'd written a total of 0 lines of code and made a total of 0 websites. Luckily for me my dad, a network administrator at the time, had recently tinkered with Joomla! out where he worked. So when I told him about my need, he gave me a very basic rundown on the Joomla! Content Management System. This was my gateway drug, this was the moment when I would start my path to my current career. However, I had so many things to figure out.
- How do I embed audio?
- How do I style the pages?
- How do menus work?
- What about videos?
- Why do the URLs look so ugly?
It was an overwhelming amount of unknowns, but I found myself determined and fascinated at how all the pieces worked together. I searched for Joomla! extensions, dug into the program files, wept at the bizarre nature of PHP embedded in HTML, read forum posts, tweaked CSS, and performed more Google Searches than my last 4 years of school had warranted. I then discovered that simply hosting a website involved servers, domain registrations, and paying for server space. I spent a few hard-earned dollars and voila, we had a website. It was the most rewarding thing I'd ever done. It wasn't perfect (what was cross-browser?) but it did the job. I was very proud and the experience helped me discover that I had a passion for this line of work. Fast-forward 4 years later and I'm working for a major company maintaining a code base of over 100,000 lines of code.
It all started with a need, and tackling that need step-by-step. For those of you late-bloomers who are just now discovering a love of programming, I want to encourage you.
Don't get hung up on how much you have to learn.
Find. A. Need. Find something in your life that you want to accomplish. A To-Do list, something to keep track of money you spend, even an invite page for your son's birthday party. Anything that can be useful, and go for it. Start hacking away. Pull up Google and start looking. Don't worry about doing it the right way just yet (if you can get it to work at all, then it's right), focus on solving problems in any way that makes sense. I promise, you'll learn quickly.
Now before you think I sat by myself and magically became a competent programmer, let me say that, aside from copious Google searching (blogs, forums, documentation, etc), I found Lynda.com to be immensely helpful in learning some of the nuts and bolts of what I was learning so definitely check it out and never be afraid to ask questions.