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:
- Codecademy.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 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?
- 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 everything, if you've got deeper interest, there are a few different paths to going further. Do a little research into the breadth of possibilities available to you, and you just 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.
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
Some alternative : Netduino and Gadgeteer.
Microsoft did a great job on the "internet of device", but don't seem to value it too much yet. But its micro framework community is present, connected and happy.
Pedants r us: Euler is pronounced "oiler" and you should perhaps say "An Euler Diagram"
Just saying
I recommended Notepad++ and the bare python environment, The book Dive into Python and a tutorial by Google.
At first I thought about Eclipse based pydev or Visual Studio. Considered these overkill fir the basics.
Also made a little assignment involving koch fractals.
So to add a resource to this list, you can attend a program like the Software Craftsmanship Guild and learn in a small group from a skilled mentor. The master/apprentice model has been the most effective training model for thousands of years, and our placement rates suggest that it is still the most effective training model.
The problem with the self learn resources is that they only explain things one way, so when inevitably you get stuck, what do you do? Read the same passage 10 more times? Human interaction is required for fast, effective learning.
In reality, almost nobody actually employs separate systems analysts, business analysts, software architects, designers, etc (or at any rate these positions all overlap a great deal). A good developer has to be a generalist and be able to competently handle all these things.
The thing that sets great developers apart is the ability to speak to people and elicit requirements for a system that solves the underlying issues at hand. Obviously, you then need to be able to go implement that system competently as well, but by and large nobody cares if you know every potential feature of the language you're using or if you can write Assembly while blindfolded.
http://en.wikipedia.org/wiki/Code_Complete
http://en.wikipedia.org/wiki/Code_Complete#Reception
Sorry, normally I hate these kinds of correction comments, but I was just excited that I knew that reference :)
Along the same lines, I would recommend the book Hacking: The Art of Exploitation. Like Code, this starts at the very beginning so a beginner can follow along, but interesting enough that a pro could get something out of it.
On a side note, as you touched on writing HTML being or not being programming, I wanted to share a cool link. I've never been a proponent of either camp, until I read simple explaination. HTML is not turing complete. Now I've ran across someone who challenges that claim :)
By the way, I'm curios where you would place software engineer in the diagram.
Also a well rounded jedi needs proof of their midochlorians both for themselves and for others. This is through github, blogs (jedi mind tricks) and certifications.
May the source be with you and happy new year.
Overall I think this article is a really good guide for people getting started. Nice work Scott!
This confuses many people. Professionals in other fields (history, law, whatever) assume that "low-level" means ditch-digger, floor-sweeper, et cetera. I've had to explain that low-level means high-tech. Then they get it. Now I say "Closer to the hardware", coding to "bare metal", and so on.
So how is a software engineer différent from coder, hacker, développer and computer scientist?
I believe the Software Engineer is the same as the (Software) Developer.
I've noticed that this title changes based on Geography. In the East Coast of the US, I've seen Job descriptions that say "Wanted: Software Developer" and in the West Coast, Silicon Valley and San Francisco, I've seen similar Job descriptions that say "Wanted: Software Engineer".
Good that you listed this. I wish I had read it years ago.
Could I translate this article to Traditional Chinese and post it on my lab's blog?
http://wp.mlab.tw
Thanks!
It's unlikely that you'll be able to get through your computing career without bumping into some corner of HTTP methods or status codes, so you may as well learn it early! Whatever field you choose to go into after that, you'll be better for it.
Today, one of the biggest problem about coding is the "copy and paste" syndrome.
If a developer are faced an issue he needs to solve, he knows that he can easily find answers on websites like StackOverflow.
Therefore he often omits to LEARN.
One debate I have been consistently facing as a SoftFluent employee is “Do code generation tools help or prevent developers from learning effectively?” In my view, it can be helpful when done the smart way (see http://blog.softfluent.com/2013/03/07/code-generation-good-or-evil/) but I also understand the developer skepticism. I am curious of the opinion of the readers of this blog. Any thoughts?
In any case, learning programming never really ends and that's why it is so exciting!
I recently lead my daughter's STEM class (24 6th graders, ages 11-12, all girls) through the Technovation "Hack Day", and I am pleased to report that AppInventor for Android (now in v2) is quite stable and really empowers beginners. Every single member of the class remained engaged and excited about the sample apps and how they could be modified and extended.
The integration with Android devices via USB or Wifi is the icing on the cake. The kids were able to get a working app running on their phone making sounds, displaying images, taking photos, and responding to the accelerometer in little over an hour from a dead start.
It's a great tool for teaching kids (or other beginners) coding concepts such as objects, events, and procedures - and it doesn't penalize them for typos or syntax. I would highly recommend you add it to your short list of resources.
My advice to them is always the same. Jump online and start going through some computer programming tutorials, there are plenty of free ones out there. Then, when you find something you like, go for it. Otherwise you can spend years stumbling down the wrong path.
Thanks for the great post Scott. Engaging as always!
I can't access http://learncodethehardway.org/ - probably having issues handling the traffic from this post. ;-)
Unfortunately, journalists in newspapers equates hacker with cracker, so anyone programming telling they are hacking, are almost always getting a phone from police or personal visit to check computers evt. confiscate them as if you are a burglar.
Perhaps an explanation comparing hackers with locksmiths.
Equating hackers with crackers and IT info burglars are equal to accusing all locksmiths being burglars.
Burglars may have learned some locksmith tricks to open the locked doors like crackers are using hacker knowledge to break into programs/computers etc.
Perhaps we all should teach journalists to learn the differences and morality and what people to trust etc. etc.
Any developers interested in helping out please check out their websites!
This was awesome. I shared it earlier in January when you published it and people really responded positively. Anyway, I wanted to let you know that I included your post in my roundup of the month's best web development/design, security, and CMS content. http://www.wiredtree.com/blog/januarys-best-web-designdevelopment-cms-security-content/
You could have just as easily said, hand them a stack of cards and a hole punch and tell them to start punching. If it clicks with them, they'll be able to figure out the rest. If not, well...
I think that no path into software is properly started without a clear understanding of where you want to go and what you want to do with it. While this may apply to all fields and all disciplines, I think that -with development in particular- since there is such a broad spectrum of approaches and opportunities, it's invaluable to find a mentor that does what you want to be doing and ask them how they got there.
Otherwise, they're just planting random seeds in the ground on the off chance that a Cocobolo tree will magically grow out of the ground in Ohio.
http://londonnewbgirl.blogspot.co.uk/
Comments are closed.