Scott Hanselman

A Coder, a Programmer, a Hacker, a Developer, and a Computer Scientist walk into a Venn Diagram

January 5, '14 Comments [56] Posted in Musings
Sponsored By
Scanned out of an IKEA Catalog - Learning to code and shopping at Ikea

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:

Then the more interesting questions started to get to the root of the matter.

Coder Developer Hacker Programmer Venn

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.

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

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.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web
Sunday, January 05, 2014 9:03:00 AM UTC
Of course, you can't write such an article without having a pointer to this: http://norvig.com/21-days.html ;-)
Sunday, January 05, 2014 9:25:47 AM UTC
Thank you for pointing me to "Code" by Petzold. I don't know how I missed it all these years, but I'm sure glad to have discovered it now. Buying right now !
Sunday, January 05, 2014 9:38:17 AM UTC
yes,you are right. before doing any think, make strategy, plan etc for success.
Sunday, January 05, 2014 9:54:57 AM UTC
For those folks who are really far from IT and want to hop into this world, I would suggest to spend several months for reading. I was a geologist before I became a programmer myself. So now I can suggest to read 4-5 books about programming first to figure out what is that - writing the code. I would avoid writing code before that. You should feel a huge desire to write after that. Or (if not) coding might be not yours.
Sunday, January 05, 2014 9:56:10 AM UTC
So how is a software engineer différent from coder, hacker, développer and computer scientist?
Baron
Sunday, January 05, 2014 11:50:31 AM UTC
Interested in hardware ?
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.
Sunday, January 05, 2014 12:12:07 PM UTC
I'm almost done with Code by Charles Petzold! Found it by accident at Barnes & Noble in Nov. Bought ebook last month, and a 1st edition hardcover last week. Timeless book. Used copy of Turing's Cathedral by George Dyson on way.
Donald Parish
Sunday, January 05, 2014 2:13:38 PM UTC
Hi Scott,

Pedants r us: Euler is pronounced "oiler" and you should perhaps say "An Euler Diagram"

Just saying
Sunday, January 05, 2014 2:25:42 PM UTC
What would you guys recommend for a Graphics student who needs/wants to know Python for use within Maya? He works on windows.

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.



Sunday, January 05, 2014 2:36:30 PM UTC
That's not a Venn diagram. That's an Euler diagram.
Sunday, January 05, 2014 2:59:14 PM UTC
Please educate me, pedants: why is this Euler and not Venn? I can't see where it violates the definition of Venn.
Tom McKearney
Sunday, January 05, 2014 3:26:27 PM UTC
Becoming a developer has more in common with a skilled trade than it does with an academic pursuit which is why the employers we work with are often very frustrated with computer science grads because while they have technical foundations they often find they can not do useful things for the business out of the gate.

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.
Sunday, January 05, 2014 3:27:03 PM UTC
Wonderful article, quick notice, it's e^i(pi) +1=0 e^ix is sin(x)+i*cos(x).
Seth
Sunday, January 05, 2014 3:51:53 PM UTC
I've always been rubbed the wrong way by the term "coder," and it's widespread acceptance is frustrating. I feel that it feeds into the generally-held misconception that software development is essentially data entry performed by morlocks who know the right secret keywords.

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.
Sunday, January 05, 2014 3:54:27 PM UTC
When someone asks me how to start I say two words... learn JavaScript. It's by far the most frequent today based on LOC but also has basic language features that will be found in later learning. It's also a skill that framework people often lack and gladly offload to an apprentice. Btw, every senior technologist should have an apprentice.
Aaron
Sunday, January 05, 2014 3:56:21 PM UTC
Great post. I think out of all of those I'd like to be a developer. I hadn't even realized that before reading this. You may have just altered my career path :)
Sunday, January 05, 2014 3:56:21 PM UTC
Great post. I think out of all of those I'd like to be a developer. I hadn't even realized that before reading this. You may have just altered my career path :)
Sunday, January 05, 2014 4:09:58 PM UTC
Great list of learning resources! Definitely think that resources like khanacademy and codeacademy are absolutely phenomenal tools that are great for having a wee play around with any new languages and for most newbie coders.

Sunday, January 05, 2014 4:13:11 PM UTC
I had to look it up, but it seems it isn't a Venn diagram because Venn diagrams have to have a section for every possible interaction. The diagram above doesn't have a section where, for example, only "Roots Phones" and "Talks to Humans" overlap and therefore isn't a Venn diagram.
Manny
Sunday, January 05, 2014 4:18:07 PM UTC
"Code" is such a great book, read it well over 10 years ago (still have my copy) and it really got me interested in computer science and EE.
Sunday, January 05, 2014 4:31:09 PM UTC
No time to learn. Looking for the nerd to build Hardware-stuffs. First a netmonitor. You go partner with me or just get payed. The rest of the story message me pclw221 at h..m..l dot com.
raj
Sunday, January 05, 2014 4:36:47 PM UTC
And, I'd suggest, after reading some of those basic books or reading through those beginners' web sites like Codecademy, et al (and practicing programming, of course), buy and read Steve McConnell's book Code Complete, if you want to become a *good* coder / developer / programmer. And then practice what he teaches in that book :)

http://en.wikipedia.org/wiki/Code_Complete

http://en.wikipedia.org/wiki/Code_Complete#Reception
Sunday, January 05, 2014 5:00:47 PM UTC
I've been coding for around 10 years professionally and this wouldn't be a source to mention to anyone trying to start programming. Just a collection of stereotypes.
Rodrigo Valin
Sunday, January 05, 2014 5:57:40 PM UTC
I was just learning about Euler's identity the other day, otherwise I wouldn't have known this... but, did you wan't e^i pi + 1 = 0 (instead of e^ix + 1 = 0)?

Sorry, normally I hate these kinds of correction comments, but I was just excited that I knew that reference :)
Herbrandson
Sunday, January 05, 2014 5:59:57 PM UTC
Great article Scott. But if you are going to throw woodworking terms around, you need to get it right. The correct name is The New Yankee Workshop. Also, Norm doesn't cut down tree to start his projects. If you want that, you need to look to Roy Underhill at the WoodWright's Shop. http://www.pbs.org/woodwrightsshop/home/
Bill Mason
Sunday, January 05, 2014 6:18:20 PM UTC
Thanks for the fixes, guys! Fixed!
Sunday, January 05, 2014 7:07:59 PM UTC
Looking at the diagram and your descriptions of the different types, I am pretty sure you mixed up Hacker and Programmer in the diagram.
Hans Torm
Sunday, January 05, 2014 8:40:58 PM UTC
Think you have "Coder" and "IT" mixed up in the diagram. In the race not to talk to people, at least in my 20 year experience, coders are more likely to be isolationists.
SlobbyCoder
Sunday, January 05, 2014 8:41:29 PM UTC
Code was a great book, just finished it. My computer engineering background was glad to see a computer being built from the ground up from logic gates to a complete processor. It was written so well that it presented it clearly, my friend who just learned how to write software read it and could follow along.

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.
Monday, January 06, 2014 12:35:10 AM UTC
Term programmer was broadest classification in my view, and depending on person I talk to it's either close to computer scientist (from your categorization) or closest to coder. When talking to someone about being a coder or a programmer I don't find it's constructive to go into discussion about differences between different types of people who create code. It's more useful to narrow down the field person wishes to learn about.

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.
Monday, January 06, 2014 4:23:04 AM UTC
I love this post. It seems that learning programming never really ends for a lot of us. :)
Dimitar Dimitrov
Monday, January 06, 2014 5:18:33 AM UTC
Wow, I never expected to read "build your own light saber" from a guy who joined a jedi open force project and uses their light saber (I know you contribute heavily to to it). To quote Obi wan Atwood who was quoting someone else, "use the open force" (never invent what you can steal).
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.
Monday, January 06, 2014 6:52:11 AM UTC
After reading this, I'm glad I call myself a "developer" because it really describes what I do according to this article. Though I do write code and understand algorithms, I'm generally paid to make sure everything meshes together.

Overall I think this article is a really good guide for people getting started. Nice work Scott!

Monday, January 06, 2014 4:05:57 PM UTC
"Hackers - usually low level folks"

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.
ricky
Monday, January 06, 2014 8:09:15 PM UTC
Hi, For any wannabe programmers, developers or coders, but don't know where to start - why not pop over to http://www.visualbasictutorial.net. It starts with Visual Basic, a Form and a Messagebox walking into a wordpress site...
Chris
Monday, January 06, 2014 10:56:14 PM UTC
@Baron

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".
Tuesday, January 07, 2014 6:49:46 AM UTC
For even faster start I would recommend start doing it all on linux. Linux is friendly for programming, hacking etc. It is open soure itself and you usually start using some shell scripts - those are good for this path as well!
Ugis
Tuesday, January 07, 2014 9:07:59 AM UTC
I was really cool, thanks scott
Ehsan Arasteh
Tuesday, January 07, 2014 5:17:06 PM UTC
Nice Article..!! now that taught me the path I should be choosing..Am glad it turned out well..
Wednesday, January 08, 2014 5:28:11 AM UTC
I'm also passionate about helping more people (espeically women) pick up coding skills. I curate a list of ways to learn here, with free, paid, online, and on-site learning included: http://bit.ly/15MS0Em
Wednesday, January 08, 2014 8:19:30 AM UTC
Interested in hardware: Here are two devices that still use higher level programming(one that uses object oriented c and another that has a full Linux os). If you really want to learn about hardware, don't work with the internet at first, do some embedded programming with memory mapped I/o, and learn how computers work from the ground up.
vijay
Wednesday, January 08, 2014 8:10:25 PM UTC
I read 'code' a few months back and it's a must read!
Good that you listed this. I wish I had read it years ago.
David De Sloovere
Thursday, January 09, 2014 6:13:17 AM UTC
Hi Scott,
Could I translate this article to Traditional Chinese and post it on my lab's blog?
http://wp.mlab.tw
Thanks!
Thursday, January 09, 2014 7:41:34 PM UTC
I totally agree where you are coming from in understanding how your shiny new creation connects to the world. Many years ago (and since) I read through HTTP Pocket Reference, and in my opinion it should be mandatory reading for any developer/coder/hacker/whatever.

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.
Friday, January 10, 2014 10:36:02 AM UTC
I learned how to code about 7 years ago. Basically I think that you need to be facing real problems in order to LEARN.
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!
Friday, January 10, 2014 8:03:08 PM UTC
Great subject, and I enjoyed your writing / presentation (as always). Who doesn't love a good Vin Diagram?

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.
Tuesday, January 14, 2014 2:59:21 PM UTC
I agree that there are a lot of different paths for budding software developers or "coders" to take. As a former Computer Science professor (adjunct) I find that most students haven't really given it enough thought to know exactly what they want to do.

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!
Wednesday, January 15, 2014 12:45:26 PM UTC
People really want to learn stuff the hard way, it seems.
I can't access http://learncodethehardway.org/ - probably having issues handling the traffic from this post. ;-)
Wednesday, January 15, 2014 7:17:23 PM UTC
Very interesting article which I think to share with friends.

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.

Alf Christophersen
Wednesday, January 22, 2014 3:58:12 AM UTC
There's also a some great initiatives out there to help get kids coding. I volunteer at Code Club (http://www.codeclub.org.uk or http://codeclubworld.org) which is a great way for 9-11 year olds to start. The first 2 terms use Scratch which is a fantastic product and deserves a mention here (introduces loops, variables, messaging, procedures, operators etc).

Any developers interested in helping out please check out their websites!
Paul Finn
Thursday, February 06, 2014 8:18:02 PM UTC
Hey Scott,
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/

Thursday, February 06, 2014 11:42:27 PM UTC
I think you could skip most of this and just send anyone who's interested to codecademy.org. If it clicks with them, they'll be able to figure out the rest. If not, well, not everyone is cut out for software development :)
Saturday, February 15, 2014 11:03:58 AM UTC
Matt, you could just as easily have said: sit them down in front of xterm with xemacs and tell them to start typing. If it clicks with them, they'll be able to figure out the rest. If not, well...

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.
K. Alan Bates
Tuesday, February 25, 2014 9:03:58 PM UTC
It seems lines are becoming blurred between the professions!
Tuesday, March 25, 2014 2:04:54 AM UTC
The Nice Article.
Monday, March 31, 2014 8:48:25 PM UTC
Hi, i've recently started a blog about learning coding and doing a career change into programming! I currently work in finance, am a total newb to computer science. Check out my blog and would love to hear your comments and feedback. Its early days but I will be posting more about my journey, what courses i've done etc! Thanks for reading!

http://londonnewbgirl.blogspot.co.uk/
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.