The self-learning path is the different from what most of us are used to, and perhaps a few tips from my journey (learned how to program 18 months ago without formal curriculum) may help you. These bits of wisdom were gained from hard-fought battles, but they were personal battles. A lot of these things will seem like basic common sense, some may seem over the top. If something doesn’t resonate, that’s fine—take away what fits you. That is the big break into becoming an autodidact (another way of saying self-learner): Don’t let anybody tell you what you need to know, instead try to think critically and find out what works for you. It may seem like a bit more effort to “create your own syllabus”, but over time it will come organically.
A small case for self learning
We take comfort in having an authority figure mandate our learning path, but at what expense? They don’t know you; you know you, and you are your best teacher. It may seem difficult to teach ourselves at first, but that’s because classroom learning has been culturally ingrained into us and not all of us have had a chance to evaluate alternative methods. We all know change is never easy, but change is evident in sites such as Khan Academy, Udacity, EdX, Coursera, and more. These are sites catering towards self-learners and I highlight suggest you check them out. Once you do, you’ll see that technology has exposed a better way to learn, and it isn’t in a classroom.
Tip #1: Skip around, stay stimulated
Many of these tips are specific to programming computers, but most of it can be applied to any subject. Skip around, stay stimulated. Let’s talk a bit about getting started with an introductory book/course/screencast/interpretive dance. There is no need to feel obligated to read it or experience it in a linear fashion. Authors may disdain this advice, taking offense at the notion that they didn’t structure their work properly, but that’s not the point. It just wasn’t structured for you. If you are reading the chapter on for statements and think it’s boring or frustrating, consider skipping it. Pushing through as your interest is waning will set you up for future difficulties and if it’s truly necessary you will come back later. Sometimes we forget that some concepts are tough for us and easy for others. Skip around, stay confident. Don’t take it personally, find what comes naturally and master that. When you come back to the difficult parts later you may find that a magical thing has happened—it isn’t difficult anymore. That’s how one utilizes the processing power of their sub-conscious. Ever had a time where you couldn’t remember something and then a few hours later it magically comes to you while you’re doing something else? That’s not magic, you were still thinking on the problem without consciously engaging it. Use your noodle, it’s a powerful tool.
Tip #2: True failure is the greatest success
Wait, didn’t we just say that failure isn’t really failure? Well… it isn’t. If someone really fails and fails hard, it’s great success. Embrace that failure, become inundated with the subject—jump into the deep end and drown. Tread lightly with this, sometimes it can damage confidence and failure may hurt for while because it isn’t encouraged in the classroom setting. But we can find comfort in the fact that nobody is grading us anymore and Mr. Overachiever isn’t going to wave his A+ in our face. We can fail and not be ashamed of it. Actually, we should be proud and wear our scars like the autodidactic warriors we are.
Tip #3: We all learn the hard way
Those wizards at insert tech company. They never struggled along the way, they were always good with computers and picking up programming came easily. That’s not really the case, we all learned the hard way. Ask any one of us, and we can tell you about a time we failed. It was probably within the past few days (or hours, in my case). That’s how it is, computers don’t think like us. As friendly as our programming languages have become, they still have virtually zero flexibility. It either works or it doesn’t. We are illogical creatures; there is a fundamental divide between us and computers that will always be there. Don’t let it get you down! If you hit a roadblock, drop the book, take what you know, and make something cool.
Tip #4: Scratch an itch and scratch it early
Speaking of making something cool, what got you interested in this subject? It may have been an itch. Even if it wasn’t an itch, it isn’t hard to find one. We are very fortunate to be alive in this time period. Computer science is still immature and there is a lot of low hanging fruit. Even though it won’t seem like it, you’ll know enough to begin scratching an (small) itch after you’ve gotten through the first few chapters of your first programming book. Seriously, don’t be intimidated and get started. Think about something that bothers you, and ponder how a computer could assist you. Think big and start small. Maybe you want a way to accumulate feedback on your website without having to rely on a third party service. If it’s a large task, take a bite size chunk and solve it. Make a simple application where someone can enter feedback into a console and when you type in a special code it spits it all back to you. Boom, you’re halfway there (now it’s a matter of translating the syntax to a more complex framework). Curious about a real example? My personal itch was calculating GPA at a pass/fail university. I was currently attending a pass/fail university and it bothered me that I didn’t have a GPA. So I made a program that calculates it and it was simple, it was ugly, it barely worked. But that’s okay, I learned a lot and I had my GPA in front of me. And guess what? As ugly and buggy as the program was, it was created by my hands and completing it was incredibly gratifying.
Tip #5: If the book/course isn’t working, it’s not your fault
Seriously, it isn’t. The learning resource isn’t suited to you. It isn’t that you’re dumb or the author is dumb, it’s just that we all learn differently. Some of us learn well from books like the Head First series, with a flippant and light tone. Some of us learn by reading language specifications (looking at you, Jon Skeet). The rest of us are somewhere in the middle. You have a tone, pacing, and learning style that is your own. It’ll help immensely if you find your sweet spot. This can be done pretty easily with all the freely available material on the internet (browse through various tones here or here [warning, curse words]).
Tip #6: Take breaks, find your pace
Going heads down on a difficult problem without rest is a terrible idea. This isn’t a marathon where someone either finishes quickly or not at all. Having difficulties? Take a walk, play a quick video game, shoot some hoops… get your mind off it somehow. Those background threads in your brain (err… I mean your subconscious abilities) have access to different parts of your knowledge. Banging your head against a wall may burn calories, but it probably isn’t going to get you to the other side. As you become accustomed to learning on your own, you’ll get an idea of your pace. Get into a solid rhythm, and pick up the pace naturally. Don’t rush it out of the gate; learning isn’t about having an iron will and getting as much done as possible right away. This mindset (I must know it all and I must know it now!) all but guarantees a failure to learn things deeply (remember the details of that exam you crammed all night for a few years ago? thought not). Sometimes you need to sleep on things, try a different approach, or let it simmer for a while. A decent strategy to try is forcing yourself to do less than you initially feel like doing. If executed right (and you don’t use it as an excuse for laziness, either plan it ahead or don’t bother), you will be hungry for more and picking it up next time won’t be so hard.
Tip #7: No matter who you are, learning comes in (a minimum of) threes
Tip #8: Train your skills away from the computer
Every field has one or more skills at the foundation. Logic is the foundational skill of programming. You’re going to develop a good sense of it as you travel along this path. However, staring at the computer isn’t the only way to do it. Think outside the box a bit and do something fun. There are video games that directly transfer to programming skill. Check out SpaceChem. Board games, too. Check out RoboRally. Feeling a bit more hipster? Chess or Go are two classic games that will directly transfer skills to the programming mindset. Like football? Create a play and envision how it would play out against multiple defenses. The point here is to think outside the box and add a little variety, so don’t be limited by these examples and figure out what works for you.
Tip #9: Programming isn’t the hard part
Sometimes it seems like a well-kept secret because programming classes and books rarely mention this, but the act of writing code isn’t the hardest part—knowing what to write is. Programming languages all have collections of code that provide re-usable functionality. These libraries are kinda like Legos, and modern programming often consists of fitting together the right pieces. Knowing what those pieces are and how they work is one of the most non-trivial parts of programming. If you are trying to jump into a project and feel overwhelmed, take heart. It wasn’t made by you, so it certainly has some new patterns and magic that aren’t familiar to you. It’s not that they are doing things the right way and you just can’t get it—there are a million ways to skin a sheep in this field. Take the time to find that magic glue and investigate how it works. Read documentation on the libraries being used, ask around. The investment upfront will slow you down, but it will enable a velocity later on that more than makes up for it.
Tip #10: Find an elephant
Wild elephants are often trained by being tied to a tame elephant. Find a wild elephant out there that doesn’t have any knowledge in programming and bring it along. Teach her about if statements while you are learning about for loops. Teaching someone else is an extremely effective way to learn. In fact, simply talking about programming helps bolster your knowledge.
Tip #11: Talk to a rubber duck
This is magical. If you have been a programmer for a while, you probably know exactly what this means. Talking about a difficult problem to anyone (even your rubber ducky) usually flushes out what you were missing. Then you have an Aha! moment, thank the duck, and invent the world’s first smell-based programming language. You can talk to anything or anybody. Sometimes it helps if they have programming knowledge, as they may see what you are missing, however, it isn’t a deal breaker because you have the most comprehensive understanding of the problem and talking about it will force you to make a cohesive argument that usually illuminates the gaps. Our thoughts are disjointed, the structure of speech works wonders.
Tip #12: Embrace discomfort
This has been said a few different ways, but I think it is really important to hit it again. Discomfort is usually seen as a bad thing in a classroom setting but it isn’t so bad when you are on your own. Eventually you’ll recognize that uncomfortable feeling and smile. It means you’re learning and it isn’t a bad thing. Try to embrace it and seek it out.
Tip #13: Ask the dumb questions
We all have a bunch when we start something new. Not that the questions are actually dumb, but there will be questions that seem dumb and cause us to wonder how much people will laugh when asked them. You may be surprised when asking them stumps an expert. Some of them will truly be basic and that’s okay. We all have our strengths and weaknesses. If they aren’t asked right away they will become a ninja time bomb in the brain. When they have to be asked later on it’ll be a bit embarrassing because they are questions of a person less experienced than your current self. Get them out of the way and enjoy the relief.
Tip #14: Get involved
You can do it
Programming is a struggle for even the most brilliant minds. There will be times when you get stuck, there will be times when you don’t get it, and there will be times when you want to give up. Don’t fool yourself and become convinced that it just isn’t for you. It’s all about tenacity. Hudl developers feel stupid everyday when they get stuck on a problem. We all do. But, when you stick with it, finding the answer is a great joy and it definitely outweighs the pain. Be patient, there is no fast or slow way to becoming a skilled developer and everyone puts in their 10,000 hours before they become truly exceptional at it. If you get frustrated, sleep on it or move on to another topic. Don’t be afraid to skip around and try new things (if one book isn’t working, it’s not your problem, the book just isn’t suited to your learning style—find another one). Eventually, you’ll get through any problem and look back and say, hey, this wasn’t half as tough as I thought it was going to be.