[Edu-sig] Intelligent CS Design
kirby.urner at gmail.com
Fri Jun 16 23:58:20 CEST 2006
So here's a CS sequence I'd like to see (except it's more like a
network, with multiple entry and exit points):
First, we admit that the C language is of lasting relevance, not a
dead language in any way, but an under-the-hood language for just
about everything kernel, tcp/ip and who knows what else. Oh yeah, and
Python. We're not going to bleep over C in other words.
But we start with Python, just like we've been saying on this list.
But then, before going on to Java or C# (the common wisdom at this
point), we offer a fork, with the harder core CS types maybe heading
into unrefined C, and into the source code of CPython in particular.
So now you'll get to see how a list works, how a dictionary works, in
non-OO C. Wow, what a difference. Who knew? A real eye opener for a
lot of gnubees. I call this the "tunnels under Disney World tour."
We'll do it again when we explore other Python implementations
(Jython, IronPython...), but here's a great place to get our feet wet,
in the language of the Linux kernel.
C is the lingua franca, the Latin if you will, behind so many later OO
versions: Java, C#, C++... and Python. So by this route, we come out
ahead, conversant both with an interpreted, and with a fast, close to
the metal code (just a step above MMIX, which we'll also need to get
to -- http://www-cs-faculty.stanford.edu/~knuth/mmix.html ). That's
more well-rounded than just staying on top of a VM all the time
(Java's, .NET's, whatever's).
Now, for the less hard core (non-CS majors), we'll start the same way,
with an overview (lots of history) with Python show-cased for
illustrating key concepts (flow structures, file i/o, basic
algorithms). Given some students will have started along a Gnu Math
trajectory much earlier, in conjuction with "math objects", they may
well have used Python for some years (Pythonic math). So we should
assume an average programming language fluency level greater than zero
(and way higher than today's).
For these non-CS majors, we fork in various directions. VPython and
Panda3D type packages take you more in the direction of computer
animation, although the ability to write a still life, per POV-Ray, is
still highly relevant (render farms then connect these key frames).
Or maybe we could go XML and SOAP, cgi in Apache, MySQL... whatever
the career path demands. NumPy? Just about any profession is going
to use computers in some way. Our intro sequence at least gets you
pointed in the right direction.
Back to the majors: now that they've learned lots of Python, and lots
of C, they're ready to dive more deeply into the world of parsing and
compiling, or interpreting byte codes if on a VM (the VM takes the
place of the chip). We should talk more about PyPy at this point.
CS majors are heading in multiple directions too. Some will go deeper
into the chip, some will fly high in new language design, or design
patterns. Many will join industry at some point, in some ways echoing
their counterparts in bioinformatics, the earth sciences or whatever.
Because CS will have done a good job, we'll have many namespaces in
common, a heritage strong enough to keep us united in the face of our
common enemy: ignorance and incompetence -- those qualities that make
life more difficult and less fun than it really needs to be.
More information about the Edu-sig