Experiences/guidance on teaching Python as a first programming language
steve+comp.lang.python at pearwood.info
Thu Dec 19 18:12:24 CET 2013
On Wed, 18 Dec 2013 17:15:30 +0000, Mark Lawrence wrote:
> On 18/12/2013 08:18, Steven D'Aprano wrote:
>> The C99 standard lists 191 different kinds of undefined behavior,
>> including what happens when there is an unmatched ' or " on a line of
>> source code.
>> No compile-time error, no run-time error, just blindingly fast and
>> correct (according to the standard) code that does the wrong thing.
> Plenty of compile-time warnings depending on the compiler, which the
> CPython core devs take a great deal of trouble to eliminate on every
Correct. The *great deal of trouble* part is important. Things which are
the responsibility of the language and compiler in (say) Java, D, Rust,
Go, etc. are the responsibility of the programmer with C.
I mention these languages as they are all intended to be safer languages
than C while still being efficient. Whether they succeed or not is
Now, I wish to be absolutely clear. There are certain programming areas
where squeezing out every last iota of performance is important, and to
do so may require making some compromises on correctness or safety. I
find the C standard's position on undefined behaviour to be
irresponsible, but, hey, maybe it is justified on the basis that C is a
systems language intended for use in writing performance-critical
operating system kernels, device drivers and similar. It's fine for
Python to promise that nothing you do will ever cause a segfault, but for
a language used to write kernels and device drivers, you probably want
something more powerful and less constrained.
But why is so much non-performance critical code written in C? Why so
many user-space applications? History has shown us that the decision to
prefer efficiency-by-default rather than correctness-by-default has been
a disaster for software safety and security. C language practically is
the embodiment of premature optimization: the language allows compilers
to silently throw your code away in order to generate efficient code by
default, whether you need it or not.
More information about the Python-list