I'm going to attempt to answer the number-one most common technology question on the web, and hopefully do it so I can just link people here. Wish me luck, I'll need it!
The answer is different for everyone!
For me, I learn for learning's sake. Literally, I have never encountered a language or computing technology that I did not want to learn. I just started with my first computer, a Commodore VIC-20 in my teens, and was thrilled to find that it had BASIC and a BASIC manual. That was day one. Since then I've just snarfed up whatever I could find. So far that's: C, C++, assembly, Lisp, Tcl/Tk, Bash, Awk, Python, Javascript, Actionscript, PHP, SQL, POVRay (used for rendering 3D graphics), and I'm losing track from there.
Being pro-learning is the only skill you really need!
That's the most important thing. Knowing one language just isn't any good. Knowing five is a little better. They get easier as you go along; I'm at a point where I can go from a cold start to coding a simple application in just one week on virtually any language. I just have a passion for technology and soak up everything I can get my hands on, and worry how to turn it into money later!
There's no such thing as "bad learning."
In 20 years watching the field, I've become convinced that every skill eventually becomes marketable. I never thought that somebody could make money being a Wordpress theme designer, a Twitter background theme artist, making ringtones for mobile phones, or setting up eBay storefronts, but there are all thriving cottage industries right now. Who knows what five years from now will bring? Professional Digg commenters? RSS publishing services? Mobile phone address book organizers? I've learned to never say never.
OK, but what do I learn for a job?
Well, I'll take a stab at it; here's the languages that currently seem to be going somewhere jobwise:
Javascript and AJAX: Big, big, big right now. I don't know if there's a new Web 2.0 bubble lurking or not, but it seems like there's jobs flying around for anybody who can build an AJAX site. It's made out of Javascript and XML, with a side helping of HTML and CSS. All you need is a text editor and a web browser.
PHP: Especially on the OS-Commerce backend. Shopping cart apps, game sites (the kind with subscribers), all kinds of web-based commerce. PHP is one cruddy language - it's ugly and clunky - and it's a smash hit. On Linux, I install PHP and run scripts right from the command line, saving the output as HTML. Or you can get a cheap web host and test server apps live. Job search keyword is LAMP, for "Linux Apache MySQL PHP"
C/C++: Still the application standard. It is simply never going away. On Linux, gcc comes with the distro, and on Windows there's a nice free IDE called Bloodshed Software Dev C++, if my memory serves.
Flash: Still big. Get a good Flash game online, and the world will drown you in ad revenue. Webmasters are always out to hire a Flash webmonkey. Requires some understanding of graphic design work as well. On my site, I stump a lot for SWFTools and the swfc compiler, with a lot of demos in the Flash category. I also hear good things about HaXe, but haven't tried it.
Python/ Ruby/ Lisp: Not much on the job front, but it's so fun to learn and use for yourself, that any work you get out of it is a bonus. The high-end Silicon Valley start-up type places will be more likely to hire in this category.
What about specific jobs?
Video games on the computer usually revolve around C, C++, and the whole C family. If not C, then assembly. Web server-side development is mostly PHP, some Perl. Web browser-side development is Javascript, AJAX, and Flash, with a lot of markup languages (HTML, XHTML, CSS, XML). Desktop applications are a crap-shoot; maybe Python, maybe Ruby, maybe Java, who knows? System administrators need shell scripting skills, in Bash and Perl. Big business mainframes are still crunching along with COBOL, God help us all.
Why should you learn multiple languages?
Here's what I mean about all learning is good learning: Flash's Actionscript is basically Ecmascript, which is also what Javascript comes from. Once you learn Javascript, you already know most of Actionscript. Javascript is related to Java, which is derived from C, so there's a link there. PHP has a very C-like syntax, so once you learn C or C++, PHP will be almost subconsciously easy to learn. Python and Ruby both are related, in a round-about way, to Lisp. When you come to Lisp from the C-side of programming, your mind will be blown. Get a free Emacs install and a manual and lose your head for a couple of weeks on the built-in ELisp interpreter inside Emacs. Now when you come to Python, Ruby, and other languages related to them, they'll make more sense.
A language can help you even if you don't get hired to program in it.
Now I, myself, make most of my freelance living from writing and graphics, so I'm really not the one to ask about making a living purely from writing code. The best work I've gotten in code is Flash stuff. If you're familiar with my Flash category on this blog, you know that I have a whole Flash toolchain built out of open source, with POVRay for 3D graphics, Bash scripting (Linux command line) to assemble animations, and SWFTools to compile the Flash. And now I'm writing my own POVRay frontend in Python out of frustration with the other POVRay frontends out there - this is an example of how knowing a language helps me.
I have yet to this day get paid one penny for Python code - directly! But my own tools tend to be either Bash or Python, which helps me do the other things I get paid money for. For another example, I have a lot of Bash scripts I've written over the years to convert or handle different document formats, so that saves me time on my writing work.
What is the easiest to learn?
This question is wrong. If you're asking it, I'm sorry, but my advice is to forget about programming. There is no "easy." You learn or you do not learn.
Well, which one is the most fun?
That's pretty subjective. Answers will vary, but if you just want a toy to play with for your own uses, Python and Ruby are both widely considered "fun". BASIC used to be, but it's outdated now.
You seem to lean heavy towards open source systems. What about Windows and Mac?
Sorry, check the site - it's "Penguin Pete's" as in "Tux, the Linux penguin, the mascot of Linux!" Call me biased, but for learning programming you can't beat Linux. The system's free, the tutorials are free, the documentation is free. Linux is built for learning.
I don't like your answer!
Remember, I said this is the number-one most common technology question on the web! Really, I swear on my grandmother's grave, you are not the very first person to have asked! Here are some search links for the other 348 million answers:
- What programming language should I learn?
- What programming language should I learn first?
- What programming languages are used in game programming?
- What programming languages are in demand?
- What programming languages should i know?
- Which programming language to learn?
- Which programming language is best?
- Which programming language to start with?
- How do I learn programming?
- How do I get into programming?
- Where can I find programming tutorials?

Comments:
Btw, I may be wrong, but hasn't the Tasmanian devil replaced the Penguin as the official Linux mascot?
"hasn't the Tasmanian devil replaced the Penguin as the official Linux mascot?"
Only for version 2.6.29. Tux is still the main mascot. To my relief, because "Tasmanian Devil Pete's" just wouldn't have the same ring to it. :)
"Diabolical Pete's". Yeah, that works. :-)
I think he meant to "steer" me up on the programmer road, he thinks
I'm too indecisive I guess.
I started learning one language but got interested in another so I
started learning that language primarily instead, that went on for
about 5 years.
(A bunch of examples: C/C++ Python Java Object-Pascal PHP Assembly)
My problem is that I always really have a hard
time starting and structuring up a new "from scratch" project, making it hard for me to gain programming experience.
about, I guess he might be correct at the point that me being indecisive makes it harder to structure up problems, but in what way would this blog help me then, making me choose a language so that it fits my interest?
My end destination is Common Lisp, this does not mean I won't continue
to learn even other languages later on since it has it's uses (and besides, the lisp
interpreter was written in C).
Ah, the beauty of treating code like data.
Oh, and I almost forgot to say what I wanted,
since I started using lisp as my programming tool, I've had an easier
time to structure up everything, simple projects, school and even my
daily life.
To be able to treat code like data, to give the compiler instructions how it should interpret the data, that's lisp.
I might have said something wrong and such, and I'm sorry. This post took me a while to write and I don't have an REPL to give me any feed back here ;-)
Well, actually, this post was only intended to answer the "which programming language" question. You seem to be asking how to get from novice to expert, once a language has been decided on. Don't worry, structuring up problems is something every aspiring programmer faces!
For starting "from scratch", try writing lots of little programs. For instance, some dull task like adding up your year's income from paystubs or setting an alarm to let you know when a file partition is full - automate these kinds of tasks with little programs to write, and then that will get you going from a blank file to a program in a shorter time.
Also try writing tutorial-type programs. Things like computing lottery odds, simulating a random dice roll, solving buzz-fizz and other simple little toys. Again, this will teach you simple pieces of the design puzzle, without overwhelming you with too much to do at first.
Now apply that method to writing bigger programs. For instance, for my poker game, I didn't set out to do the whole thing at once. I broke it down into (a) displaying the cards, (b) shuffling the deck, (c) dealing the deck, (d) handling the game's cycle of deal-hold-draw-result, (e) rewarding winnings. In this way, I took a big problem and broke it down into little problems and solved them one at a time.
For Lisp, I've got to recommend Lisp Quickstart and The Common Lisp Cookbook. Just in case you haven't seen these before.
Now, Lisp itself is kind of a cultish language! :) There's Paul Graham and Eric S Raymond out there raving about how magical it is, and then there's the fractured nature of the Lisp community - big handicap, because we have SBCL, Common Lisp, Emacs Lisp, and Scheme, with proponents for each saying their brew is the best...
So there's that extra bit to deal with. It's likely to always have a niche life on the fringe at best. But that shouldn't concern you, if you find it easier to work in Lisp, whther for work or play, then maybe you'll be the one who brings it back into the mainstream!
... it would have to be a Pile of Dirt made up of gold nuggets and flies that are of uranium.
You are so radioactive that people must be dumping GoLD in your backyard to keep it safe!
I am a fan! Please keep it real and keep on forever :-)
Frst, devcpp hasn't been maintained for a long time, that is, the past five years. I the C++ community, it wouldn't really be recommend. Code::Blocks and eclipse are popular these days, not to mention vim/emacs.
I agree with a previous comment that Python alone is not enough. And it is much the same with other dynamic languages. Lnguage per se doesn't really matter that much, especially for similar languages. Oe can get familiar with the syntax in a few days. You're really choosing between technology available on the language, or across the langueges, rather than the langueges themselves. The typical question is like `Django or RoR', not `Python or Ruby'.
Last but not least, ``A language that doesn't affect the way you think about programming, is not worth knowing.'' Being able to write `Hello World' in two dozen of langueges won't help, and isn't worthy the time.
Regards.
The biggest lesson which you maybe didn't emphasize enough, is that the ability to *combine* knowledge of multiple languages or technologies is perhaps more important than knowing any one of them deeply.