ianb at colorstudy.com
Wed Nov 24 21:33:37 CET 2004
Gabriel Zachmann wrote:
> Another question is: can you teach effectively the inner workings, if you
> teach only a dynamic language?
To a degree, maybe not. But I don't think that's the place to start --
to me the foundation of CS is abstract algorithmic thought, not a CPU;
math, not electronics. Again, that's not a perspective everyone agrees
with, some feel it's best to start with assembler.
But then, if you are writing assembler, there's a good chance now that
you'd be writing MIX or some other fake assembler for a fake CPU. I can
imagine approaching that from Python -- code an assembler and virtual
CPU in Python, and start programming it. To the degree that the virtual
CPU looks like real CPUs, you learn about processors. The assembler
teaches the beginning of compiler design.
The next level up -- C, where you are dealing with pointers and memory
management -- probably isn't feasible from Python. In assembler you are
only writing trivial programs, so it's not a big deal that it's slow;
you can't realistically implement either C or an efficient runtime
environment in Python; even if you could, the task would be too large.
But that's okay, C still has an important role in a CS education. I'm
less certain about C++ -- it's neither low level nor high level.
And since Java or C# will almost inevitably be taught at some point,
most of C++'s features and complications are not novel, again making C
seem more reasonable.
Ian Bicking / ianb at colorstudy.com / http://blog.ianbicking.org
More information about the Python-list