When I was 10, I loved playing video games so much that I wanted to learn how to make my own. I marched to the library and checked out their only book on programming--a manual mostly about wiring circuit boards. I had no circuit boards to wire, and I could not understand any portion of the book. I did not learn to program anything that day.
(And if you just want to know what books I recommend, feel free to skip ahead.)
Yes, you can (learn to program)!
There are many different ways to go about learning. Some people just need a github account and some free time and they “get it.” I would argue that they have “got nothing.” Like a tourist who thinks they’re a translator after memorizing their phrasebook, they have no grasp of the grammar, best practices, history, or culture they’ve “picked up.” And if they do not invest in their continuing education, they can only embarrass themselves and their associates and have all sorts of misadventures for it.
When I was a little girl, I had a friend who could read to me from our favorite storybook. I went to my mother in tears because I still hadn’t learned to read. Next year, when school started, my friend had to take remedial reading lessons while I performed very well. It turns out she had only memorized the stories in the book, and the trick had hindered her learning to read. So don’t be ashamed if you haven’t “got it” like someone else seems to have. They may be worse off than you are!
Programmers are no different from you or the next person. They don’t have to ace calculus. They don’t have to be “gifted.” There are plenty of “normal” (and abnormal) people in the industry who did not pop out of their mothers’ wombs slinging code.
So how can they do all this seemingly magical stuff with a text editor? How can a seamstress make a gorgeous reproduction 18th century French courtesan’s silk jacquard ball gown with embroidery and panniers? Or how can a world-class chef make a meal so delicious you will remember it even on your deathbed? Simple: education and practice, practice, practice. The seamstress first had to learn to sew, and it was a grueling process. The chef had to work his way up from kitchen hand, also a grueling process. None of these “talented” people miraculously woke up being great at what we admire them for. Even that programmer had to start with a simple, stupid “Hello, world!” program.
The best part is that when you have truly mastered one language, you can pick up others with ease. All languages share the same principles, so after nailing the basics, you only have to learn their differences.
Opportunity, evaluation, and repetition
What separates the good, the bad, and the great programmers? Three things:
You need the opportunity to use code. If you learn a foreign language just for the sake of learning a language but you have no intention of ever traveling or being around people who speak the language, you’ll forget it. So if you want to retain what you’ve learned, make sure you’re going to use it at work or in your daily life.
Once you start coding, you need some way to evaluate what you’re producing. If you work with other developers, you can ask them to help you evaluate your work in code reviews. If you’re working on your own, there are sites like Stack Overflow where you can post code that’s not working and get responses from people who can tell you what you’re missing. Even better, if there’s an opensource project you use, love, and/or believe in, you can contribute to it on github by submitting pull requests. You’ll get plenty of feedback from community authors. Don’t feel foolish about your naivete. Every programmer everywhere has gone through what you are going through, just as all adults have been children. If anyone should be silly enough to give you grief, razz ‘em for it! Razz ‘em good!
Tip: Evaluations are only as good as the people giving them. Weigh evaluations on the expertise and reputation of the people delivering them to avoid being lead astray by know-it-all novices.
To retain everything you’re learning, to truly master it, you have to do it over and over. The basics, the for loops, the array literals, the evaluations, these will become second nature to you, like riding a bicycle. If you went through a midlife crisis and ran off to raise parrots on an island for years then had a change of heart and wanted to return to programming, you’d open that text editor and your skills will still be there, waiting for you to put them to use.
Find your learning style(s)
Some people, like myself, learn best from reading. We can imagine most things in our mind’s eye, and we don’t need a human being nearby, answering questions. Others learn best by doing, by handling examples and tweaking code to see what breaks and what works. Yet others learn best by modeling their behavior on a mentor’s. They learn best from teachers and mentorship programs. Somewhere between reading and modeling lies watching, where the student models their behavior via a one-way communication with a teacher, like in a video.
Most of us use some combination of these to learn something new. A good course of study should incorporate equal parts of all of these. You can adapt your approach as you move forward to work with your strengths. But do not ignore any of these learning methods at the start. You may discover you are more adaptable than you thought and that one of them works for you even better than you imagined!
I learn by reading, so my advice is largely skewed in that direction. Others will have techniques that worked better for them. Which is why, if you’ve mastered programming from a code-free background, I heartily encourage you to share your learning techniques and resources in the comments.
Have a pet project
I once worked at an agency with an eager, young front-end developer. This guy had so much energy, he was bursting at the seams! He had all these projects that I, older and “wiser,” knew would never go anywhere. He was most passionate and excited about working on a Pokémon simulator. I shook my head. “One, it’s been done before. Two, you can’t monetize it. Three, it would be illegal unless you arranged (expensive) licensing with Nintendo.” It was a pipedream project to be sure, but he was so excited about it that he wanted to use every new thing he learned to further the project, like generating background tiles with canvas and serving content from a Node server. If he’d just stuck to the projects coming in from our agency, he may never have started learning these techniques, and if he’d tried to learn them outside the context of an exciting project, the ideas might not have stuck.
So come up with something exciting you want to make, even if you (or someone else!) thinks it’s a stupid idea that won’t go anywhere. Don't expect it to! Very few hit a homerun on the first swing! But you’ll have so much more fun and so much more will stick inside your head if you think of it all within the context of something you really want to do. Every other thought as you learn will be, “How can I apply this to my big idea?”
Grab a study buddy
Have people to look up to
The easiest way to keep up to date on a technology is to follow people whose lives revolve around it. Here are some of the people I keep tabs on who help inspire me to try harder:
- Rebecca Murphey @rmurphey
- Dave Herman @littlecalculist
- Garann Means @garannm
- Adam J. Sontag @ajpiano
- Cody Lindley @codylindley
I also recommend following @horse_js. You know you're making progress when these tweets start making you laugh!
(Psst, I also made a much larger list of front-enders to follow.)
Skip “The Good Parts,” anything on jQuery, and big books
Don’t limit yourself to jQuery.
Don’t buy big books.
Building your programming foundation
Getting Started with Arduino is written for people of all ages. I wish this had been around when I was a kid! It works best when you pair it with the kit (also from Maker). I picked these up at OSCON in 2012 because Arduino looked fun--and it is! That’s the important part here. It’s fun. You won’t be building your own sentinel robot just yet, but the programming language is simple, the book introduces you to some very easy programming concepts, and you get real-world feedback as you learn: the LED blinks, or it doesn’t blink.
As a fun bonus, try out The Manga Guide to Databases, which may be one of the best introductions to databases out there. In front-end development, you’re not likely to build a database, but you’ll probably have to interface with one one day. Taking the time to understand someone else’s craft can help you better appreciate their craft--and your own.
Supplementary Education Options
If you prefer teacher-student modeling, I recommend Bocoup Training in Boston. They often send their trainers to events and conferences outside of Boston, so keep an eye out. It costs money, but the value is excellent. (They also provide some screencasts for free!)
Go at your own pace
Don’t try to plow your way through all these resources. Take everything in doses you can swallow. Ruminate on what you just learned. Go to codepen or JSFiddle and play with implementing the principles you’ve discovered. If something is exciting you, that’s when you want to run forward with it. If you’re uninspired, try something else, a different learning style or a different topic.
Do not make the mistake of beating your head against a wall until you “get it!” I've made that mistake before. It doesn’t work. Switch gears, take a different route.
Share what works for you