by Alan Chatham » Sun Oct 03, 2010 9:40 am UTC
I have to throw my hat in with all the other Python supporters here. As has been mentioned by many others in here, the point of beginning to learn how to program is that you're learning how to program. To that end, you should be focussed on the higher-level concepts and algorithms that you'll be using during your entire career, even if the only programming you do 5 years from now is writing a script to reformat the names of 1000 image files on your hard drive. As a result, I think beginners are best served by a language like python that abstracts as much away as possible.
I think it's hard for anyone to really think back at the first time they started programming and have an accurate idea of what made sense, what didn't make sense, and what was hard. I really appreciate Python's syntax in that regard - no messing around with curly braces, enforced tabbing, and no end-line semi-colon. It took me at least a year of working with Java/C++ before I wasn't regularly omitting semi-colons. I figure if you stick with CS, you'll get plenty of chances to deal with mystery compiler errors because you forgot a semicolon or paren or bracket, so starting with something that's somewhat more forgiving syntactically makes a lot of sense.
Also, it's hard to remember how much very basic stuff in CS you don't know when you're a beginner. For instance, on Day 1, do you really need to know much about variable types? I don't think you do. You probably need to know what a function is. I mean, in a first-semester CS class, you should learn about types, but I think your time is much better spent wrapping your head around recursion, iteration, and what's appropriate, rather than worrying about memory allocation, pointers, and generics. Python is ideal for that level of "I've never programmed anything in my life", IMO.
I'm just thinking back to my progression - I work almost exclusively in C and ASM for microcontrollers these days, so there's a ton of stuff I never touched with Python that I have to deal with. However, all that stuff came later in my education. My first class (CS 5) started with Python, then did some digital logic, then some made-up ASM, then back to Python, and I thought it was fantastic for a beginner. Mostly Python, with just enough to start to realize what was going on under the hood. In later courses, I did Java, Scheme, C++, and C, but yeah, it wasn't until course #3, course #4 in the series that we got back to memory management, even. There are a lot of really important things that go on in lower-level languages, but we have languages that do all those nasty things for you, so when you start out, go ahead and ignore them. You'll get to them eventually, and they're really interesting topics, but there's a lot of foundation stuff that needs to be built first - when you're building a house, it's a lot easier to make the frame if you use power tools than if you forge your own nails.