I think starting with an explicit focus on mathematic concepts -- variables, functions -- can be an important early concept in programming, and one that is very useful even when the student doesn't continue on in CS. I think a lot of mathematical concepts are *much* easier to grasp in a procedural environment with programming metaphors, than in the declarative environment with math metaphors. Math becomes really dense and difficult to approach around algebra, which is exactly where programming has the potential to pick up the slack. Logo has a heavy emphasis on math, moreso than on the craft of programming, for this reason.
Some of that fits well with your year 1 stuff, though I believe the standard Mindstorms environment is too crippled to be reflective of mathematics. Task-oriented learning is definitely the right way to go, because that's the other thing programming has that math usually doesn't -- pure and immediate motivation. It's also great when students come upon the motivation for a concept, and then the concept is revealed to them.
I'd put web-related stuff in year 2. HTML isn't quite programming, but I think as an abstract language for describing layout it is useful, and its relevence is undeniable. But web programming should go in there too -- I think it's the most useful programming environment available to a beginner. The big motivating aspect to this is that students can produce real applications that can be used by their peers. And not just their immediate peers, but just about anyone. That's unattainable for beginners (and even intermediate programmers) in any other programming environment. It's also a relatively simple environment, at least once you learn HTML.
I think it might also have the potential to keep girls involved in the classes as well, primarily because it's not an isolated activity like many other programming tasks -- it's public, potentially easier to collaborate on (at least if everyone is programming in a central environment, not in private sandboxes), and of course the relevant.
Ian, i like your point about procedural programming having potential for learning mathematical concepts. for a while now, i've been meaning to work through "SICM":http://mitpress.mit.edu/SICM/, which uses Scheme to teach classical mechanics. i'm really curious to see how well that approach works.
i'm not at all tied to Mindstorms. i haven't even used them before. the idea for the first year is just to have something that has some real world connection (and his hopefully a bit easier than programming a STAMP chip and wiring your own circuits).
yeah, web stuff probably could be a little more prominent. i was just afraid that it would be too much too soon. but then, i remember learning the basics of HTML in about 15 minutes, so i guess it wouldn't be unreasonable to at least do a short unit on it early on.
For an approach that harnesses social forces in positive ways, check out this curriculum at the Canterbury school (pycon2003):
http://tech.canterburyschool.org/pycon/teaching_pygame.html
And an hs curriculum that incorporates Extreme Programming (pycon2005):
http://wiki.python.org/moin/PyConDC2005/Presentations#22
Drawing from my personal experience, the first cs class I took in college was lucky enough to be with Robert Sedgewick, who was working on a grant to develop the Halliday and Resnick of CS.
Here is a link to curriculum - http://www.cs.princeton.edu/courses/archive/spr98/cs126/
It was really great - a survey of all the major sub-fields in cs, with a weeklong unit on things like graphics, ai, animation. Not like a psych or sociology survey class, with multiple choice exams - very well designed and integrated lectures and problem sets.
One thing that worked incredibly well early on, was that Prof. Sedgwick had us write programs which generated postscript, allowing us to work on programs that had a graphical, "fun" output (although I shiver at how many trees were killed debugging, until we figured out how to use ghostscript).
Postscript is essentially logo, and was really easy to master.
I remember the second program I wrote in my entire life generated pictures of mandelbrot sets (the equation for generating them is _very_ simple) - that was incredible.
The next week we played with recursion, and everyone got to make up their own shape, in postscript, which was repeated in a fractal-like pattern.
For the "pointer" project, we had to solve the nearest neighbor problem for a starfield, using a technique where we divided the space into a grid of boxes and only considered a star's nearest neighboring boxes.
Perhaps I am just a visual thinker, but the power of this approach is evident in my vivid recollection of these programs.
dynamic, high level scripting lang + logo-like postscript = fun entry level programming
I am certain that many of these exercises could be adapted for hs.
Ian Bicking - 2005-09-08 13:07:19
I think starting with an explicit focus on mathematic concepts -- variables, functions -- can be an important early concept in programming, and one that is very useful even when the student doesn't continue on in CS. I think a lot of mathematical concepts are *much* easier to grasp in a procedural environment with programming metaphors, than in the declarative environment with math metaphors. Math becomes really dense and difficult to approach around algebra, which is exactly where programming has the potential to pick up the slack. Logo has a heavy emphasis on math, moreso than on the craft of programming, for this reason. Some of that fits well with your year 1 stuff, though I believe the standard Mindstorms environment is too crippled to be reflective of mathematics. Task-oriented learning is definitely the right way to go, because that's the other thing programming has that math usually doesn't -- pure and immediate motivation. It's also great when students come upon the motivation for a concept, and then the concept is revealed to them. I'd put web-related stuff in year 2. HTML isn't quite programming, but I think as an abstract language for describing layout it is useful, and its relevence is undeniable. But web programming should go in there too -- I think it's the most useful programming environment available to a beginner. The big motivating aspect to this is that students can produce real applications that can be used by their peers. And not just their immediate peers, but just about anyone. That's unattainable for beginners (and even intermediate programmers) in any other programming environment. It's also a relatively simple environment, at least once you learn HTML. I think it might also have the potential to keep girls involved in the classes as well, primarily because it's not an isolated activity like many other programming tasks -- it's public, potentially easier to collaborate on (at least if everyone is programming in a central environment, not in private sandboxes), and of course the relevant.anders - Thu 08 Sep 2005 14:58:34
Ian, i like your point about procedural programming having potential for learning mathematical concepts. for a while now, i've been meaning to work through "SICM":http://mitpress.mit.edu/SICM/, which uses Scheme to teach classical mechanics. i'm really curious to see how well that approach works. i'm not at all tied to Mindstorms. i haven't even used them before. the idea for the first year is just to have something that has some real world connection (and his hopefully a bit easier than programming a STAMP chip and wiring your own circuits). yeah, web stuff probably could be a little more prominent. i was just afraid that it would be too much too soon. but then, i remember learning the basics of HTML in about 15 minutes, so i guess it wouldn't be unreasonable to at least do a short unit on it early on.jonah - Sun 11 Sep 2005 02:02:24
For an approach that harnesses social forces in positive ways, check out this curriculum at the Canterbury school (pycon2003): http://tech.canterburyschool.org/pycon/teaching_pygame.html And an hs curriculum that incorporates Extreme Programming (pycon2005): http://wiki.python.org/moin/PyConDC2005/Presentations#22 Drawing from my personal experience, the first cs class I took in college was lucky enough to be with Robert Sedgewick, who was working on a grant to develop the Halliday and Resnick of CS. Here is a link to curriculum - http://www.cs.princeton.edu/courses/archive/spr98/cs126/ It was really great - a survey of all the major sub-fields in cs, with a weeklong unit on things like graphics, ai, animation. Not like a psych or sociology survey class, with multiple choice exams - very well designed and integrated lectures and problem sets. One thing that worked incredibly well early on, was that Prof. Sedgwick had us write programs which generated postscript, allowing us to work on programs that had a graphical, "fun" output (although I shiver at how many trees were killed debugging, until we figured out how to use ghostscript). Postscript is essentially logo, and was really easy to master. I remember the second program I wrote in my entire life generated pictures of mandelbrot sets (the equation for generating them is _very_ simple) - that was incredible. The next week we played with recursion, and everyone got to make up their own shape, in postscript, which was repeated in a fractal-like pattern. For the "pointer" project, we had to solve the nearest neighbor problem for a starfield, using a technique where we divided the space into a grid of boxes and only considered a star's nearest neighboring boxes. Perhaps I am just a visual thinker, but the power of this approach is evident in my vivid recollection of these programs. dynamic, high level scripting lang + logo-like postscript = fun entry level programming I am certain that many of these exercises could be adapted for hs.