I remember quite vividly the first time I opened Notepad and typed out some HTML to create my first website. I was 16 and our local ISP was giving away free "webspaces", so I figured why not. A few years later I had put those same skills to use as a front-end developer, but I was never able to wrap my head around back-end code. Something about it seemed so out of reach. The characters just seemed like Japanese, and the experience was always so daunting that I never really took the next step forward in my education as a web developer.
Thankfully today there are literally hundreds of ways you can learn to be a web developer online, in much easier ways than we had back then (eg. reading a physical book... The Humanity!).
But here's the deal... Most of those websites, in their attempts to circumvent that god damned reading I didn't want to do, ultimately just falsely rewarded me for not doing the real work that my brain needed to truly think like a programmer. Enter lesson 1.
1. If A Site Makes It Look Easy... Run Away
Once you actually have to apply these skills, you feel paralyzed and don't know where to start, because you've been given everything on a silver spoon. When you should probably have just been thrown into the deep end.
2. It's Faster To Do Things The Hard Way
I've done all three of these, and I learned more about programming in just a few weeks, than I did from years of playing around with sites like CodeCademy and Code School. Why? Because he forces you to use your brain. To look things up on your own, and to exercise that muscle that helps you look for solutions on your own, rather than have the answers hand fed to you.
3. You Need to Be Willing To Break Stuff
I remember when I was about 12, I randomly typed a command into the DOS prompt of our family computer, and reformatted everything. We lost everything. That was ok though, my parents were more impressed by the fact that I was playing around with shell commands, than the fact that they lost some personal information (this was the 90's, we basically just played solitaire and surfed AOL, no financial information was lost).
Learning how to reinstall a computer was a huge life lesson for me then, and today, it's learning how to fix a broken shell script or figuring out why my Python install is throwing off 25 different errors.
Today, I keep everything important backed up on Dropbox. In a worst case scenario that I do something really bad, I can always reformat. Solitaire is easy to reinstall. Ultimately you learn to use Google to ask better questions, and get comfortable with being uncomfortable.
4. It's Important To Have Problems To Solve
Learning to code for the sake of learning is pretty useless. Computers were created to automate difficult tasks. Not to prove that we can decipher languages that seem like Japanese.
Ultimately, any language you learn is going to plateau at a certain point unless you have a clear vision of what you want to create. For example, if you want to build a mobile app that sends messages to your friends, you can focus on learning how mobile apps need to be structured, and then learning about messaging protocols. Just learning C# (what most iPhone apps are written in) will leave you feeling aimless.
Having a goal in mind allows you to do proper research into which areas you want to learn, and gives you a sense of purpose... Which leads into number 5.
5. It's Important To Have Solvable Problems
I love shows like Halt & Catch Fire and Silicon Valley. There's something about the idea of staying up all night to solve a massive problem that gives me the warm and fuzzies, BUT, I wasn't ready for that. At least not the epic problem solving we see happen on TV. When you're getting started, it's the things that seem really small, that become huge wins early on.
Now that I've gone through those challenges, the true difficulty is simply in figuring out what all those little solvable problems are that lead up to that bigger project.