Some people might try to tell you that HTML or one of the many markup languages would be the best. Still others might suggest one from the BASIC Family (QBasic, QuickBasic, Basic, Visual Basic). Some more might reccomend Java. It really depends upon what kind of programming you want to do and what kind of experiences you have. Basic is good for learning to understand Logic (computer logic, not like mental logic). Java is ok if you want to go to a GUI and learn some of the modern concepts of Object Oriented Design, the one problem is Java takes more time to master because of the GUI. I would advise C++. It allows you to practice Object Oriented Design as well as the C/C++ Language, which Java is built on as well.

I've got to recommend C to start with. You'll have to program in it someday, and most modern languages are based at least roughly on its syntax. Once you're comfortable with the concepts of programming, what language you use is a much smaller issue and picking up new languages will be easy. C is the ideal jumping off point IMO. Almost every real application is written in C/C++. Almost all the rest are written in a language that gets interpreted by an interpreter written in C/C++.

HTML isn't exactly a programming language but is good to know and is related. Perl and Python are really common in the Linux world and being familiar with them is helpful. I haven't played around with Ruby much, but it looks interesting. Knowing SQL and how to design sensible database schemas is a Good Thing and is very much unlike other programming languages you'll encounter. Also, even if you don't want to program in Perl (there seems to be some campaign to incite hate against it right now for some reasons), you'll want to know how to write regular expressions, and the Perl-esque style is the most common (and most copied, though it is also the probably most malinged part of the language).

Languages to avoid: IMNSHO Java is virtually useless except for very special purpose things. Don't bother learning BASIC, it's outdated and won't teach you any modern positive programming ideas. If you get it in your head that you want to learn Cobol, quickly find yourself a blunt instrument to kill yourself with. I don't have a very high opinion of Fortran (it was great back in, um, a long time ago). Maybe its still being used on big mathy supercomputers._________________"An empty head is not really empty; it is stuffed with rubbish. Hence the difficulty of forcing anything into an empty head."
-- Eric Hoffer

Oh, you'll probably also want to learn some sort of assembly language once you feel comfortable programming. I don't actually recommend writing anything real in assembler (unless you're doing something freaky), because unless you're a real wiz, a compiler will probably do a better job, but it is good thing to know because you'll better understand how the computer works and will make you write better code in whatever other language you use._________________"An empty head is not really empty; it is stuffed with rubbish. Hence the difficulty of forcing anything into an empty head."
-- Eric Hoffer

Oh, and the defacto C reference is of course, K&R, which should reside on every hacker's bookshelf.

Now that I think about it, programming is a bizzare thing to learn. Usually when people ask what programming language they should learn, they should really be asking "What language should I use while I'm trying to learn how to program?" Python, Perl or Ruby might be easier. You really want to learn how to program, not learn a specific language. But to learn how to program, you need to learn a language, and to learn a language, you need to learn how to program. It's a non-trivial activity. Usually, you don't just learn to program, you make a siginificant lifestyle change.

I may want to take back the C suggestion, or I may not, I'm not sure. It is true that every programmer worth anything must know C/C++, at least a little. But it's really hard in some ways. Pointer aritmetic, seg faults, string/character array manipulation, etc. is daunting and frustrating for a n00b and may drive them away in frustration. Newer interpreted languages like Python or Perl do those hard bits for you, which makes it easer to transform your idea into an executable. On the other hand, you'll have to know C eventually, so why hide the dirty bits just to be frustrated by them later on. Everybody has to know it, so you might as well rip of the bandage quickly and get it over with. But, maybe not.

It seems to me that the world of programming languages is just a huge mess right now. The most interesting and useful languages that exist now (php, perl, python, ruby, etc.) are interpreted which is too slow sometimes. Nothing compiled and fast has come along and proven viable enough to replace C/C++, which is full of problems (mostly because of its age). I'd like to invent my own language to solve that, but the last thing we need is another stupid language - there are too many already! It wasn't that long ago that Lisp was the wave of the future and was going to take over everything, and all the programmers would have to learn to think recursively all the time. Probably, in a few years OO will be passe and we'll be on to some new kick, but we'll still be writing everything in C.

It's almost enough to make a programmer quit programming... Nahhh..._________________"An empty head is not really empty; it is stuffed with rubbish. Hence the difficulty of forcing anything into an empty head."
-- Eric Hoffer

This will allow you to learn some of the basic concepts of programming without being held back by really frustrating syntatical elements of programming. The next thing you'll want to do is learn how to progam in C because it's a core part of programming. Another core part of programming is the vi editor, but that's another sorty. _________________if i never try anything, i never learn anything..
if i never take a risk, i stay where i am..

I would have thought that the best thing to do is start in the deep end. That way it would be easier learning other languages. I think I will still start to learn C first because it is a language that I will have to learn anyway._________________Postcount ++

I would suggest starting with perl because it is just soooo easy, after only 20 minutes you can do some pretty nifty things (compared to what you could do after 20 min in C). It is important that its easy to comprehend in the beginning so one does not lose intrest. After you understand functions and other standard things, move on to python and try to understand Obejct Oriented programming (you can do OO in perl but its counter intuitve)

Well, I don't want to get into a python vs. perl argument here, but let me just say that the fact that there's very little that's counter intuitive in python is the number one reason that I recommend it over something like perl where there's more than one way to screw it up (tm). I also don't think that starting in the deep end is necessary because it's very frustrating to be held back from learning concepts by something as dumb as a squiggly brace. The only real problem that I see with starting with a language like python is that you won't have the motivation to learn the arcane parts of very important languages like C and Perl._________________if i never try anything, i never learn anything..
if i never take a risk, i stay where i am..

You really have to look at what you want to do with your programming skills. It seems like you are just starting out. Do you want to be a Linux hacker? Is this going to be a future job?

Here's my two cents. If you wanna be a Linux hacker or have a job to do with linux programming then learn C then read a book on object-oriented programming and then learn C++. From here you should have no trouble picking up Java or *cough* C# or any other O-O programming language eg. PHP. Another essential tool for linux programming would be a scripting language. Since I don't know much about either Perl or Python (I'm not a linux hacker, just muck around with it) I can't say which would be better.

If you aren't particularly interested in hacking linux but would like to be more marketable I would start straight into C++ and Java. Object oriented programming languages are still popular. As tempting as it may be please stay away from anything BASIC. After mucking around with C++ and Java I would look also into server side scripting languages such as PHP, Cold Fusion, JSP, *cough* ASP, Perl and the likes since these are gaining in popularity.

As for learning assembly, I would not bother. Yes it will help you understand what your code will compile into but it seems to me to be a lot of effort just to learn how to code better in C/C++. There are plenty of resources out there to learn how to make your code more efficient.

I would start with perl, python or php ... first you'll get some good results after a few mins of hacking and you'll bee hooked. And I think the systax of php is quite related to C, so shifting later isn't a big bunch.
BTW I started with QBASIC, moved over PASCAL to HTML, Python and PHP for toing quick scripting._________________Do you want your posessions identified? [ynq] (n)

I would like to do Programming as a profession and for Kernel hacking.

Most of you suggested that python would be an ideal starting place. Then moving on to C, then C++, then whatever else tickles my fancy. I think I will stick to this advise (You're all more knowledgable about this subject than me).

While craftyc has already made a decision (and not a bad one I guess) I still feel compelled to disagree with jay (no offense). While the syntax of php is similar to C/C++ I don't think it is good for teaching programming skills. It has next to no type checking and you can do really weird things with variables and variable names.

As a teaching tool I would stick to C/C++ or Java as I feel these languages teach good skills. I can't comment on python, don't know it myself. I guess I just think there should be a stronger emphasis on learning good skills than getting quick results. Once the skills are there, switching to a different language is relatively harmless, just learning a new syntax and funny little quirks usually.

I was debating the same thing up untill about a month ago.. The only "programming" I know is HTML... I decided on PHP. Here is why.... You can create websites with it, you can create scripts for your system with it and apparenly it is similar enough to C that if/when you want to learn that it will be easier.

I was debating the same thing up untill about a month ago.. The only "programming" I know is HTML... I decided on PHP. Here is why.... You can create websites with it, you can create scripts for your system with it and apparenly it is similar enough to C that if/when you want to learn that it will be easier.

Hmmm...
The choice of language to program in, depends on your interests and your (future?) job.

Another good choice that could really land you some well paid jobs, is to learn SQL and database programming. Show me a single compnay who is not relying on some form of a database to run their business on.

Personally, I have not bothered to learn anything related to web programming since:
1. I'm not really interested
2. I never make web pages
3. The ones out there are ugly enough already!

But I have programmed in : Assembly, C, basic, fortran, prolog, pascal, delphi, APL, modula, forth and of course SQL. Plus a few more that are really obscure and not in use anymore

Learning a new language is a lot like learning to actually *speak* a new language. The words are different, the structure of a sentence is different, but once you know how to use one language, it is quite easy to learn a new one. The hardest part is to learn to talk (see how long a child struggles learning to use a language), once you learn how-to, it is easy. Same with programming.

Java is the language you should learn! because it is OOP Also it is good because it syntax are like C++, Java's network API and swing are very useful and very complicated. Java is the language for linux and windows and it represents future. But if you dont have any clue of programming language please start with HTML and then Java or C or C++

With C you have lot of interesting programming areas : variable type, preprocessor instructions, structures, functions, optimisation of algorithms, managing memory, using pointers, having good commenting habits cause anyways if you don't comment you get lost

You don't have then the OO part, but it's just an evolution of all this, and I personnally think that when you know what a structure and a function is you will have not much problems to understand what an object is, even if learning to "think in OO" is another step to take.

Also a good point for C is that you can include ASM inside which is the language you'll love or not, anyways as someone said already in this thread ASM won't be very usefull cause most of the time writting something in C will be faster than writing it in ASM and you won't be able to optimize your ASM to make it faster.

You can also use a wide range of written librairies. And of course since lot of programs are written in C, you can learn from them then
My point is that when you'll be able to handle C language, then you will be able to handle any other. With some adaptation time, but it'll be ok.

Learning Java first would be a mistake in my opinion, cause learning java is more about learning the WIDE range of functions and classes included than learning the real programming skills.

Try to do some basic programs in console mode, like managing a text database, or even doing an ASCII race game for a start