Recently, my girlfriend asked about what languages were good for a beginner to learn. Her sister is interested in computers and is going to be going to community college soon, and wants (or at least, is wanted) to prepare for possible classes in programming by learning a simple language which will teach her the fundamentals.
Myself, being born of a number of languages, Common Lisp and VB6 as well as others, immediately thought, "Scheme." I soon realized though that, if this girl is going to community college, chances are they don't really want to teach her to be a brilliant, deep thinking, professorial type of person, but rather a run-of the mill, decent, get the job frakking done coder. Now I want to say, run-of-the-mill coders are not run-of-the-mill intelligent people, they are often orders of magnitude smarter than most. Maybe I'm bias, but to give some perspective, I consider my father, who has a Bachelors degree from Northeastern University in Boston, and about 25 years of experience in the field, to be a run-of-the-mill coder. There is noone on the planet who I think is smarter than my father, not even me. Now that you have that nice perspective thing. Realize that though Scheme is a wonderful language for learning about CS as Theory, and even Math to some extent. It presents an unfortunately distorted world view. In the real world, we write code in an imperative style (though thats slowly changing, and I'm quite happy of that). In the real world, we write code in C, Java, or similar languages. In the real world, we write mostly object oriented code. In the real world, we generally solve problems iteratively using arrays as a principal data-structure-- not recursively with lists as a principal data-structure. So I said to my girlfriend, "Well, you have a few options." I continued to think about what makes a good languages, heres my list:
- Easy to Setup
- Good Errors
- Results Oriented
So, by now, you probably want to know what I thought was the best language to learn, well- I didn't pick just one, but for what its worth, here is my list of the top few good beginner languages:
- Scheme or Java
- Other Web Languages (PHP, ASP, etc)
- Haskell/Erlang/ML et al
Oh, by that way-- I only tossed Assembler on the list to make the list an even ten. Assembler is a terribly confusing subject to the uninitiated, and makes a good +infinity on the list. I suppose the list should also have a 0, which would be the metamagical mythical languages of "JustRight" where no matter what you type, there are never any bugs, it compiles and runs in optimal space and time, all NP problems become P, and magical unicorns prance in fields of cotton candy and happiness outside your cube.
Then again, you could argue JustRight would present a distorted realworld view too.