A Coder, a Programmer, a Hacker, a Developer, and a Computer Scientist walk into a Venn Diagram
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 Woodright's Shop 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:
- Harvard's CS50x at edX
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.
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 browser. 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?
- 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?
- 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.