Why Python is a great language for teaching introductory programming classes
stanford.edu
stanford.edu
This is non-sense. It's encouraging bad coding practice, and it's the reason why languages like ColdFusion, JavaScript, etc. gave real developers so much trouble: amateurs write code that "runs" but is wholly broken. I agree that Python is a great beginner (and pro) language, but not for this reason!!
One of the most fun things about python, or any terse loose language, is that you can now write amazingly massive amounts of code without having to do exhaustive checking as you go. For example, in C, a non-expert will often end up having to write tons of tiny functions, recompiling, and testing _constantly_ in order to avoid the hell that is having written a large chunk of code containing one tiny error and not being able to find that error even after hours of debugging.
Just the other day I reimplemented a rather large network protocol coded in C into ~1500 lines of python all at once. When it was done I decided, with some trepidation, to just run the whole thing and see what happens. It worked! Soon after, my test code did find one small type error in an obscure edge part of the code, but the good feeling from getting the immediate success didn't go away!
So the bad practice is not having tests/asserts anyway -- regardless of whether your language has type checking. He is right that just running as much as possible can be much more encouraging and even FUN, for beginners especially.
It's truly sad to me that Berkeley and MIT seem to have dumped Scheme as the introductory language for the "job skills" approach of using less flexible but more popular languages.
Thanks for the update.
Python is maps far better to how problems are commonly presented, very rarely has gotchas that would make you drag out some advanced programming construct, and has batteries included at a level which scheme/lisp may NEVER catch up with:)
All of the world is not calculus! Spend all your time playing in that area and you won't become a very well rounded or capable programmer/engineer.
There's a serious problem with how people learning languages... their exposure to their first language has a strong tendency to color their thinking (read: biases) towards/against other languages for the rest of their careers.
Another serious problem is that students end up with very distorted views of what "programming" is by getting only one narrow view of the how things work. Some curricula are over-focused on the abstract, "math" side of the field while others are stuck on the basic engineering side. There's not only a need for both but also the very hands-on administration/operations side precisely so that people get a much more well-rounded experience of the entire picture.
For that reason, I agree with the article that Python (or Scheme) is a good starting language. You can start with nothing, and add concepts until you understand the whole language. You don't need to know programming before you can understand "hello world".
(Amusingly, I don't really like Python or Scheme, but I do like Perl and CL. I'm not sure what that says about my personality, but I'm sure it's something :)
(re: indentation-sensitive languages for teaching)
http://mail.python.org/pipermail/python-list/2000-December/0...
http://mail.python.org/pipermail/python-list/2000-December/0...
If you really want a close block delimiter, python is happy to oblige. Just spell it `#end`. ;-)