A friend recently said: "I want to learn how to code. How and where do I start?"
I want to learn how to code - Do I go to Ikea or grow my own tree?
It's like woodworking. You can START by growing a tree, then chopping it down and finishing it, sanding it, before you make a table. Or you can go to Ikea. More likely you'll try something in between.
Modifying a WordPress theme is going to Ikea. Writing you own web framework is growing a tree first because you don't like the existing trees. You have to decide where on the spectrum you want to be, from being a custom furniture maker from the Yankee Workshop or someone who assembles prefabricated pieces made by someone else.
Ok, where do I start?
Very cool. I'm always happy when folks want to learn to code. The Facebook thread continued with the usual suggestions:
- Codecadamy.com
- KhanAcademy.org/cs
- Code.org
- learncodethehardway.org
- Udacity
- CodeSchool
- Harvard's CS50x at edX
- CoderByte
Then the more interesting questions started to get to the root of the matter.
What's the difference between a Coder, a Hacker, a Programmer, a Developer, and a Computer Scientist?
These words might all mean the same thing to you. Perhaps you hear geek, nerd, and dweeb, but we all know these have very important differences. Knowing the differences also can give you a sense of how deep you want to go on your coding adventure.
- Coders - Can pretty much figure out it. It'll work, but it won't be pretty.
- Hackers - usually low level folks, skillful, with detailed understanding of some area deeply, often scarily deeply.
- Programmer - Write code and understand algorithms. Often work alone and well.
- Developer - Are the best generalists, can use lots of different systems and languages and get them to talk to each other. Are true and broad professionals, work with people, and communicate well.
- Computer Scientist - Need to be able to prove how computers work, at a theoretical level. Are usually math people also.
If you are closer to one of these already you can get an idea of which direction to head.
Are we assuming web programming?
Everyone on the thread assumed some kind of web programming, which makes sense, since nearly everyone's on the web in 2013. However, just a few years ago we might have sat our friend down and made a Hello World app at the console, or perhaps loaded up Visual Basic, dragged a button, and MessageBox'ed Hello World.
Is Markup Code? Lots of people said "learn HTML and CSS," but I don't think that's coding in the classical sense. As a gateway to JavaScript and Web Services, I think it's a good place to start. The thing is, though, that while not every app is a web application that makes HTML in a browser, most applications are connected applications in some way. Apps consume data from services, send notifications, texts, emails and tweets. Nearly every application is distributed in some way, even if it's just a simple app that calls a web server for some data.
If you want to be a coder today, or, let me go further and say if you want to be an effective coder, you will want understand the web and what really happens when you type twitter.com in your web server. Just like you should understand how trees grow if you want to be a carpenter, how engines work if you want to be a race car driver, or where the water comes from if you want to be a plumber. Heck, you should really understand all of these things if you want to be an effective human. ;)
What do we really mean by "I want to learn to code?"
What's the question under the question? Does she want to make websites? Design them? Does she want to make mobile applications and take them on the go? Does she want to create a gadget that will text her when she leaves the garage door open too long? These are all very different endpoints and there's lots of great ways to get started if we dig in a little.
- Interested in Web Development?
- Any of the many "Learn to Code" sites mentioned above will do fine.
- Interested in Hardware?
- Consider a Raspberry Pi or Arduino.
- Interested in the code and history under the code you use every day?
- Already a techie but want to learn the hard way?
- Check out http://learncodethehardway.org
- Interested in being a well-rounded developer?
You can totally jump in to the web, learn a little JavaScript and start making web apps, and you should. But as with all new topics, if you do a little research into the breadth of possibilities available to you, you might try a slightly different path.
Related Links
- Please Learn to Think about Abstractions
- Teaching Kids Electronics, Computers, and Programming Fundamentals with Snap Circuits
- Programming's not for you? How about thinking? Be empowered.
© 2013 Scott Hanselman. All rights reserved.