teaching OO

Ian Bicking 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 mailing list