There is an abundance of information and tutorials out there to help any aspiring developer/designer learn from scratch how to do the things they want to learn to do. Heck, here’s a lot of information out there to help you discover WHAT it is you want to learn to do 🙂 . And the best things about it is that most of it is free and easily accessible to anyone with an internet connection. What this means is that it is easy to assume that all one needs to embark on learning enough to build a career as a developer/designer/programmer is three things:
- Internet access
- The ability to use Google
- Time
- The will and discipline to learn
Gone are the days when you couldn’t really learn much of substance without going to school for a couple of years at least, paying tuition, buying huge volumes of books, and paying for expensive tools and software. Today, you almost never even need to buy a book, or so it seems. With numerous blogs and tutorial sites (written and video) out there, it seems like a simple matter to pick up all the skills you need, use free tools, and build yourself a career. In addition, most of the tools you will ever need to get started are free/open source, whether it’s compilers, IDE’s, etc.
As with everything else though, we need to put on our thinking hats and critically consider the pros and cons of this amazing accessibility that we have to knowledge.
The Pros:
- Free Knowledge – This is the biggie. You can’t beat getting something for free.
- Abundance of Information/Knowledge – Many websites, including some of my favorites – http://www.killerphp.com, http://www.killersites.com, http://www.phpvideotutorials.com, http://www.zendcasts.com, http://net.tutsplus.com (and the whole envato network), http://css-tricks.com, just to list a few, provide an astounding amount of free quality information for all and sundry, and in most cases, you don’t have to pay a penny for it.
- Easy accessibility – most of the tutorials online can be printed or downloaded, and most writers will give you the source code to download and use. This means that even if the websites were to go down, you possibly have your own archive to refer to. One of my favorite things to do on long train trips is to pull out my laptop and watch screencasts that I’ve downloaded to my hard drive.
The Cons:
With these strong positives, what possible negatives could there be? Well, I’ve thought of a few, and these are mostly centered, as I stated in my title, on the beginning programmer, designer, developer, etc.
- Risk of developing bad habits – As you learn from tutorials from different websites and blogs, it’s inevitable that you will pick up bad habits – bad coding habits, bad documentation habits, etc. Remember that not everyone developing/writing/recording these free tutorials is an expert, myself included. We teach what we know, and the reality is that you alone are responsible for what you’re learning and for the code you’ll go on to write. No one is grading you, no one is checking your work, you’re responsible to make sure that you’re learning quality stuff.
- Fragmented knowledge – With so much information out there, it’s easy to learn a little about everything but never really learn enough about anything to actually be useful. This is especially true if you haven’t really thought through what it is you want to learn and where it is you want to concentrate your efforts and energy. If you’re not discriminating enough, you’ll end up following the newest fads and tricks and never actually developing any useful skills. As an example, if you look through the tutorials on nettuts for example, you’ll find that they span a wonderful array of lots of different topics… jQuery, PHP, HTML, CodeIgnitor, Ruby on Rails, etc. It’s easy to get lost trying everything and never really develop any useful skills. Ofcourse if you’re not a beginner this may not apply to you, but for beginners especially it’s important to focus yourself and plan your learning so that you don’t develop fragmentitis 🙂
- Misinformation – Again, remember that not everyone writing or recording a tutorial is an expert. Some are, but not all. As a beginner, you need to beware of taking everything you learn at face value. You need to develop, again, a sense to check and double check the information you’re getting to ensure that what you’re learning is accurate, valid, current, and in conformity with the standards and will hold you in good stead.
- Lack of a proper foundation – this basically encompasses all the other points above to some extent. One of the reasons that we’re at risk for learning bad habits, getting misinformed, or developing fragmentitis, is simply that we never take the time to attend to the fundamentals, the basics, the concepts. We get so caught up in the mechanics, the how to’s, that we never take the time to learn the foundational principles, the whys and hows. This is not trivial. Let’s use the example of programming. To become a programmer, you must program, this is true. But it’s also true that you need to learn and absorb the fundamentals of programming that are independent of any language. You can learn the syntax of any one language and never really learn the fundamentals of programming. But if you learn the fundamentals, the underlying concepts, structures, and whys of programming, then no matter what language you’re coding in you will be able to apply your fundamental knowledge to address any problems you must solve with your code. You’ll be able to analyze the problem, break it down, draft out your pseudo code, and then code it in the language of your choice. In fact, you’ll be able to discriminate between languages to pick the best one for the problem at hand.
What does all this mean for you as a beginner?
So am I saying you need to go to college and learn fundamentals? No, not necessarily. For most of us this is out of reach, or it’s just not something we’re interested in doing.
What I AM saying is that you need to find a way to attend to the fundamentals if you want to go beyond the basic “doing” of tasks. Anyone can string bits of code together, but to really design and write good programs, you need to develop a clear plan of learning that involves grappling with and understanding the fundamentals. This will prepare you to know a good tutorials when you see one, and to be able to discriminately pick and choose those that will teach you what you need to know. Moreover, even in a tutorial strewn with errors and bad advice, you’ll be able to sift and pick out the good parts that are of use to you.
So how do you get down with the fundamentals? Several options. You could
- Take a fundamentals of programming class – not an option for most of us
- Invest in one or two good books that deal with concepts of programming, such as the classic three volume The Art of Computer Programming by Donald E. Knuth. This is definitely not light reading. For a lighter but solid read, you may want to look at Think Python: An Introduction to Software Design: How To Think Like A Computer Scientist. Others that I think might be interesting and useful (but also pretty intense) include Programming Language Pragmatics, and The Deductive Foundations of Computer Programming. There’s a myriad of them out there and some older but still valuable texts may be available as ebooks for free online. Google is your friend 🙂
- Go through some free online classes that will pretty much get you through the basics. My favorite so far is Stanford University’s School of Engineering classes… you can watch the lectures, download the notes and assignments and all that. Really fantastic resource if you’re serious about this stuff – http://see.stanford.edu/see/courses.aspx. I recommend that you follow the order they have them in – first go through the Programming Methodology Class, and then Programming Abstractions one, and finally the Programming Paradigms one. You may not work through all of them but even completing the first one will leave you better off. And it’s all free!
Finally, if all of this is too much for you and you just don’t want to be bothered, then I recommend that you at the very least:
- Develop a clear path of what you want to learn, and then deliberately seek out tutorials that will get you to your goal;
- Resist the urge to try to learn and do everything – I have this problem so I completely identify; and
- Double check everything you learn and develop a sense of what’s accurate and what works for you. And never be afraid to ask.
This post has come out of a lot of thinking and musing about my own learning experiences and I definitely haven’t covered all possible aspects of this. I welcome any more thoughts and ideas, corrections, suggestions, etc.
Suggested Reading:
Teach yourself programming in ten years – Highly recommended
This is fantastic advice. My knowledge has become terribly fragmented, so I’m going to use some of your tips to get a handle on it. Thank you!
No problem. Glad you found the post useful! While it helps to have more than one skill, it’s important to make sure your knowledge is not so fragmented that it eventually does you more harm than good!
🙂
I would add build, build, build. Even if you don’t have a customer, a developer must build. I don’t believe there is any substitute for good old trial and error.
Greg
I completely agree. You have to keep building as this is the only way to develop and hone your skills. Use it or lose it is very true in this instance.
Thanks! 🙂
Great post…I agree with Greg, get your hands dirty as much as possible…but this is true for anything in life 🙂
This was a great read. Thanks for the links to Stanford.
I find I am really good at reading programing how-to books but then when I try and do something I don’t remember any of it.
Ian,
I know exactly what you mean. That’s why I prefer books and resources that have lots of examples and projects. My strategy is to start out with an idea project, or develop one as I read, and then try to code it as I go or when I’m done. Knowledge sticks better when you actually use it, much like Shane and Greg said. 🙂
The trick, and the point of my post, is to not forget the fundamentals, and to develop a learning plan that is well thought out and that makes sure you learn the fundamentals and the rules.
Good luck!
I agree with you very much! These days I’m learning programming on websites, because they’re free and contain so many enormous information!