If a friend of yours wanted to get into development and didn't have any experience, what would you suggest? What language/resources would you suggest to break into programming? With all of the technologies out right now and buzz words where should one even start explaining this stuff to people?

+5  A: 

Get Learn to Program, and Why's free Poignant Guide to Ruby. Download Ruby. Start coding. See if you like it at all.

Also see this question.

David Nehme
I agree with everything--except Why's Poignant Guide. I found that worthless and grating in its presentation. The alternative is to pick a starting project and learn what you need to know.
The Wicked Flea
I actually read whys poignant guide and liked it. As for the starting project idea, I totally agree with you flea.
+2  A: 

I started programming in basic. Then switched to Turbo Pascal (good cos near to pseudo code).

Anything is good if it's easy to learn. I would suggest NOT to start with code completion.

+2  A: 

Personally I would suggest SmallTalk. Using it you can learn the basic concepts of object-oriented programming and write pretty cool programs without dealing with unnecessary stuff like headers/libraries etc. From here you will be able to continue to C++/Java/C#/you name it.

Dmitry Khalatov
+10  A: 

I would suggest Python. Easy to learn, great tutorials, OO up front.

+1 Visit for a nice start.
I agree, I found python to be a pretty easy language to learn as well

Code early (start at 13.6 years of age, for instance), code often.

David Hicks
This has nothing to do with the question... that won't help someone telling the age you start...
Mister Dev
No offense, but this is totally useless.
+6  A: 

The obvious best way to learn programming is to just do it. Having said this, I learned a lot by being able to look at working code and asking questions of the people who wrote it. Therefore the best language to learn to program in would be a language with a lot of code that can be looked at.

There's also Project Euler which is like homework that any person who likes programming will probably like to do.


I'm not sure that learning programming using BASIC is such a good idea.

“It is practically impossible to teach good programming style to students that have had prior exposure to BASIC. As potential programmers, they are mentally mutilated beyond hope of regeneration.” (E. W. Dijkstra)

YMMV! (-:

Actually, you could try learning python using Mark Pilgrim's excellent book "Dive Into Python" (book website) available both as a dead tree version or online.

Thanks Mark!



Rob Wells
+8  A: 

No book or documentation can replace a buddy. If you really want to help your friend to learn to program, make sure to make yourself available to explain some non-obvious and non-intuitive aspects of programming to him.

A little friendly competition can certainly help, too. For example, you could each work a Project Euler solution and look at each others' code to try and learn from it.

This is a really good idea. I'm going to check out that Project Euler site. It sounds pretty cool.
I feel the project Euler's challenges are too tough for true new comers. I'd only recommend it to novice programmers, not apprentices. Simply because an apprentice might feel overwhelmed and give up
Robert Gould

If time, money and personal interest permits, then consider a B.S. in Computer Science.

Steve Kuo
HAHA if it were only this easy.
+2  A: 

You might want to check It's pretty good at teaching programming constructs and they have some good intro videos explaining it. I especially like the second video (the first is more marketing).

Not exactly programming the way we traditionally view it (write code - execute code), but it's a really good and easy way to start.

To quote the website:

In Alice's interactive interface, students drag and drop graphic tiles to create a program, where the instructions correspond to standard statements in a production oriented programming language, such as Java, C++, and C#. Alice allows students to immediately see how their animation programs run, enabling them to easily understand the relationship between the programming statements and the behavior of objects in their animation. By manipulating the objects in their virtual world, students gain experience with all the programming constructs typically taught in an introductory programming course.

Stephane Grenier
+3  A: 

I hate to add yet another "start with python" answer, but...

The truth is, when learning to program, it's best to learn programming concepts that are transferable to many languages. With that in mind, I believe it's necessary to choose a language that "doesn't get in the way."

Python, regardless of its pros and cons for experienced developers, is a great learning language for that very reason. The language gets out of the way. For what it's worth, most people I've helped were up and running within a day or two, and writing simple programs on their own.

This allows you to spend your time learning to program instead of learning the language.

This makes a lot of sense. You would suggest learning a dynamic language over a strongly typed language for your first?
I Would. Learning to program is about programming concepts (recursion, flow control, functions, objects, etc), not about learning the language. Once the basics are down, moving on to a static typed language (my favorite language is still C) is fine

One of my friends was a mechanical engineering major until his 3rd year of college, then he switched to CS. He had no programming experience that I'm aware of, except for hanging around with me and my friends (all of us at least dabbled in it). That means he had a good idea of all the pieces of a programming language that he'd picked up by osmosis (classes, variables, etc). IIRC, he started by reading some online java tutorial and writing a trivial Zork-style adventure game in Java. As he tried to implement new features in this game, my friends and I generally made him figure it out himself. We of course answered questions. We'd also suggest refactorings after every iteration and explain why they were "better". Of course, he grew tired of this game quickly and started learning Ruby is a similar fashion. Within a couple of months he had a job as a Ruby developer on campus. He's had a summer internship at a well respected company where he did Ruby programming, and now a co-op at another well respected company (don't remember what language). He also owns a bunch of design pattern books, refactoring books, etc. I'm currently reading Code Complete which I borrowed from him :) I'd say we managed to turn him into a pretty solid junior programmer (with such ideas as good design far advanced beyond most new prorgammers) in about a year and a half...

When I started, I learned batch, QBasic, C++, Perl, Java in that order. I think BASIC dialects are actually not a bad way to start as long as you use them enough to get really upset at the bad design they force you into and thus want to get away from it :) Thinking that BASIC is a good thing will ruin your career. Also, don't expect to learn C++ as quickly as the others... I've been at it ~13 years and I'm only advanced, not expert (I'd say the number of people who rank expert is probably less than 100 in the world). "Teach Yourself C++ in 10 Years" isn't a joke. At every stage, you'll think you're good at it. Hence why I'm unwilling to call myself an expert, and probably never will.


It seems that most people would suggest learning a dynamic scripting language (like ruby or python) as a first. I started out by learning HTML (I know its not a language) and JavaScript. After that I moved onto ColdFusion, then later to ASP.NET C#.

+1  A: 

One helpful thing to remember is that as a beginner, there are no stupid questions (Unless they involve clowns... I hate clowns). Asking any question which will get you a better understanding will improve your ability.

And learning fundamentals is better than learning specifics. For example, learning how a regular expression works rather than learning a regular expression to match an email address.

Give a man a fish and he can eat for one day. Teach a man to fish and he will have a useful skill to get away from the wife for days on end... at least I think that is it.

Good luck

+1  A: 

Program. Try and get an entry level programming position and buy some Murach books.

If you do it on a daily basis, you'll learn it a trillion times faster.

I agree about learning it by doing it on a daily basis, but its not exactly the easiest thing in the word to get a job when you know nothing about the subject.

O'reilly series... anything you want. O'reilly is simple and practical.

+1  A: 

I say learn JavaScript, its the most immediately useful thing to learn, and it will give you a good background in what I'll dare call the "common" program language syntax (as more languages are similar to C, than to Ruby or Python for example).

Robert Gould

First off, I'd ask some questions to narrow down what they want to learn as there are more than a few areas one could specialize in and there isn't any point in getting someone to learn JavaScript if they want to build games using WPF. Additionally, these questions also come to mind:

  • Do they know how they learn? Is an abstract plan enough or do they need specific examples to understand the concept? Do they learn best visually or orally? Would showing them a simple program be very effective? Would trying to create a simple program be effective? This is where the ability as well as whether or not there will be trial and error to try to figure this out, answering the big question of "How could they do this?"

  • Do they know what strengthens them? Or put another way, what are the situations where they thrive and feel great, awesome and special? This is the motivation factor in them getting into development, or "Why would they do this?"

  • Do they want to learn WinForms, web, console or Windows application?

  • How much do they know about operating systems and how a program fits into things?
  • What kinds of time commitments will they make on this, e.g. are they going to do an hour a week or 4 hours a day?
  • Do they want to learn about scripts to perform various tasks or do they want the heavy machinery to do fancy-shmancy stuff?
  • What hardware should they be understand as well as places to keep track of it, e.g. should they lots of details about CPUs, GPUs, or some other part of a computer?
  • Which software pieces should I be prepared to introduce initially, e.g. if someone wants to learn more about Web Services then getting to know how a web server works may be useful or learning more about how an operating system works and why there are various locks in programs sometimes?

Once we have what the friend wants to do, the experiments begin. :) "Hello world!" is probably the first program I'd show and then progress into more complex problems and how to solve them and how to rate the complexity of various solutions, e.g. some problems may take up a lot of space to solve in a particular way. I say experiments because initially that is what we'd do, try out this or that to focus even more on an area, e.g. databases, web server, networking, applications(GUI or console).

The buzz words may be a guide on where to begin, but there can be more than one way to use some technologies. For example, in trying to be a developer someone may find they want to be a DBA more or go into security. Some of the buzz words may be a red herring, e.g. is there a concrete defitions of terms like "Web 2.0," "SOA," or SaaS?

Simple here being small programs like those that convert measurements, print something to the screen, illustrate the ideas of loops and conditions. Sorting would not be a simple example.

For those that have read this far, thank you.

JB King
+3  A: 

I may get a little kiddish here, but that's ok. Since your friend is a beginner to programming the steps outlined below should be fine.

Language could be any thing. It doesn't matter as far as I think. It could be python, c#, ruby whatever. But take one that is prevalent and would be beneficial to him once he is out in the market (if he is interested to work) and wanted to compete for some hot positions out there.

  • Make him appreciate what programming is all about i.e. make him appreciate the importance of breaking down a task to smaller unit and then solve individual unit.
  • Maintain his interest over a period of time. This could be done by doing interesting assignments for mastering core programming concepts like creating small games (NOT 3D like) and appreciate the values of variables, scope, loops, objects, functions, timings etc.
  • Incrementally build skill over previous exercises.
  • Make him think in terms of his area of interest (maybe his domain)
  • Show him what he can achieve by doing programming (by writing a small blog for himself,
    create a website etc). This will keep the momentum going on. The application shouldn't be enterprise one. Small enough to make him understand the application of programming and put his skill immediately to use.
  • Finally put all these thing into practice.

Some resources are outlines below

NOTE: All the above things are easily said than done :)

rajesh pillai
+1  A: 

Ars Technica just released an article about Google's new App Engine, which will allow yup to host Python apps up on Google's cloud. Ars's has also posted some good resources on how to think like a computer programmer and where to familiarize yourself with the Python language.

Ars Technica - Getting a grip on Python: Six Ways to Learn Online


Just make it fun !

Amazingly Scala might be the easiest if you try Kojo

Łukasz Lew

Read this free e-book: Learn Python the Hard Way

The book is a very beginner book for people who want to learn to code. It's intended for people who have no coding chops to build up their skills before starting a more detailed book.

It's a concise, blunt, no-nonsense way to start programming. Give it a try.

Bill Paetzke

I would go with python as its OOP. Search you tube for how to program and look for the MIT free open course. It's cool.


Tell your friend to harness his/her logic first. Because you may know the languages available but you will fail if your logic is not that strong. Learning different programming languages is easy if you have a solid and good logic to things.