On Mon, 21 Dec 2009 11:44:29 -0500, J Kenneth King wrote: > A programmer that > lacks critical thinking is a bad programmer. The language they use has > no bearing on such human facilities.
That's nonsense, and I can demonstrate it by reference to a single programming language, namely Python. For many years, Python had no ternary if operator: result = x if condition else y Instead the accepted, idiomatic Python way of writing this was to use short-circuit booleans: result = condition and x or y However this idiom is buggy! If x is a false-value (say, 0) then result gets set to y no matter what the value of condition. This buggy idiom survived many years of Python development, missed by virtually everyone. Even coders of the calibre of Raymond Hettinger (who neither lacks critical thinking nor is a bad programmer) have been bitten by this: "The construct can be error-prone. When an error occurs it can be invisible to the person who wrote it. I got bitten in published code that had survived testing and code review: ..." http://mail.python.org/pipermail/python-dev/2005-September/056510.html This is a clear and obvious case where a language feature (in this case, the lack of a feature) encouraged an otherwise excellent coder to make an error. It was a very subtle error, which was not picked up by the author, the tests, or the coder reviewer(s). Had Python been different (either by including a ternary if statement, or by forcing and/or to return bools only) then this bug never would have occurred. Of course awful programmers will be awful programmers in any language, and excellent programmers will be excellent programmers in many languages. (I say "many" rather than any deliberately. There's a reason why nobody uses languages like Brainf*ck, Whitespace, Ook or Intercal for real work.) But most coders are neither awful nor excellent. The language DOES make a difference: the quality of a technician depends partly on the quality of his tools, and programmers are no different. If you don't believe me, imagine writing code in a language without functions or loops, so you have to use GOTO for everything. -- Steven -- http://mail.python.org/mailman/listinfo/python-list