Domain: teach-scheme.org
Stories and comments across the archive that link to teach-scheme.org.
Comments · 20
-
Teach Scheme, Reach Java
You may be interested in the Teach Scheme! project. The idea is to teach the programming fundamentals with Scheme where the syntax is simple and use those experiences as a scaffold for more complex languages. The project offers both a LGPL Scheme interpreter, Racket, and an online textbook, How to Design Programs. Follow up with How to Design Worlds, and students could be making games in no time! An intro course to game design might give that touch of creativity you were looking for.
-
Re:How about Alice?
At Brown (cs.brown.edu), we've tried teaching with Alice in intro classes, and it's gone terribly. Have you considered TeachScheme or How to design worlds?
-
PLT TeachScheme! and Bootstrap
The PLT TeachScheme! project has a curriculum for teaching programming to high school students, and apparently it's been modified for middle school students as well in the Bootstrap project.
-
Some resources
Because using Scheme and their teaching methodology will allow you to teach students more stuff that is actually important and have them learn it better and faster. There are a couple of FAQs http://www.teach-scheme.org/Notes/ there that explain why it's a good idea.
-
Some resources
Because using Scheme and their teaching methodology will allow you to teach students more stuff that is actually important and have them learn it better and faster. There are a couple of FAQs http://www.teach-scheme.org/Notes/ there that explain why it's a good idea.
-
Re:Scheme? *ducks*
There is actually absolutely nothing wrong with your suggestion. In fact, it's being used already, although admittedly it's mostly at a slightly higher level (High School).
I strongly suggest checking out:
The Teach Scheme Project
How to Design Programs
The first is a project designed around teaching programming through scheme, and the second is the text book for the project (full text online, free). -
Kids do still program
Speaking as one who currently teaches computer science in high school classrooms, I can offer my own anecdotal evidence to the contrary: students do still program computers. That said, I agree with much of what others have said here. These days there are usually several different courses that tend to be lumped together as 'computing', although some of them have nothing to do with one another save that they involve a computer:
- keyboarding, aka typing
- computer literacy, aka word processing, productivity applications, etc.
- introductory programming,
- intermediate programming,
- AP computer science
The first two in the list have little if any programming component. I say little, though the second course may cover a number of use of spreadsheets and through that the use of formulae, conditional expressions, etc. [ I should note that there is a online journal dedicated to documenting the various ways in which spreadsheets can be used to teach various concepts - see http://www.sie.bond.edu.au/ for more details. ]
The introductory and intermediate courses may have widely differing names depending upon when they were introduced into the school system; a local public system calls the second course "Data Structures", most likely because it was introduced during the Pascal heyday. Even though these two course sound like a close-knit progression of coursework, they actually may be quite different. Two of the local systems teach a different language (Java) in the second course than is used in the first course (VB.Net). The reasons for this choice are not entirely clear. Pascal was introduced into high school classrooms largely via the Apple II series; even the emergence of the IBM PC and its clone still gave access to Turbo Pascal. Not to imply that VB.Net is a step backwards, but the return in the high school classroom to QBasic, VB 6, and then VB.Net seems driven more by the availability of textbooks than other factors. I welcome a more informed explanation.
Originally Pascal was chosen as the AP Computer Science language of choice. { Here A.P. means Advanced Placement, high school courses with an associated standardized exam; many colleges and universities recognize exam scores and award credit towards degree programs. } For whatever reason, though, that choice was relatively short lived - perhaps driven by a 'pragmatic' crowd that wanted a 'real programming language' to be taught in the high school? At any rate, Java is now the language used in the the AP Computer Science exam. There is talk of changing the exams again to use a more language agnostic format.
A great many other tools and languages are taught in addition to or besides these, obviously. A smattering of ones that I know of or have used:
- The TeachScheme project http://www.teach-scheme.org/ exists to provide resources for those who wish to use Scheme in introductory high school and college courses. { And DrScheme rocks.... } I personally know one high school instructor who went through their workshop and adopted their approach and who had good things to say about it. { In fairness, though, he is currently teaching Java due to his participation in an NSF-funded grant. } For those looking for a natural follow-on to Java or more 'traditional' OOP programming, might I suggest having a look at Proulx and Gray's work in
How To Design Classes and ProfessorJ
http://www.ccs.neu.edu/home/vkp/HtDCH/ http://www.drscheme.org/.
- Alice http://www.alice.org/ is getting a lot of well deserved buzz, especially in light of the recent announcement that EA will be funding the development of their next major version (3.0), which will include features from the popular Sims game series. Caitlin Kelleher's work in extending Alice into a storytelling environment has also produced good results, esp -
Re:DrScheme
I second that! There is also support for high-school teachers available in the form of the TeachScheme! project and workshop series. Other good choices are Squeak as already mentioned, and Logo. StarLogo is loads of fun and there are tons of cirriculums and fun exercises developed around Logo, and you really can't beat the easy to use multimedia capabilities combined with the hidden real-programming-language center.
-
Re:Functional?
I'd disagree. If you start with C++ you spend your time learning syntax not programming, or computer science. Scheme has a very minimal syntax, and so you can start learning about computation, not where to place the "}", ";", ",", etc. If you want to "get the idea of compiling in there" thats fine. A program written in DrScheme can be interpreted, compiled to byte code, or compiled to an executable. Scheme also supports variouse programming methodologies. If you wan't to learn OO you can there are OO libraries available (The DrScheme GUI is written using classes, methods, all that fun OO stuff). If you want to do functional that's fine to. If you want to do procedures Scheme supports that also. I agree that Scheme is "fundamentally different from most of the big languages out there" that isn't a bad thing. The teach scheme project (http://www.teach-scheme.org/) has been using Scheme to teach programming in high school for years, they've found that students that spend 1/2 a year learning Scheme followed by 1/2 a year learning C++, end up being better C++ programmers than those that do a full year of C++! The theory is that they learn how to program first then how to program in C++ (the syntax) is easier. As a side note they also use Scheme to teach algebra, as Scheme is very close to executable math.
-
My experience
I suffered an introductory course in programming in VB while studying physics at university and despised it. Later I was fortunate enough to come across SICP and the SICP videos when I decided I needed to learn programming in earnest but if I'd been stuck with something like C++ or BASIC or Java, I suspect I'd still have found programming a tedious and unrewarding distraction from real maths and science and never really understood its potential. Now I actually like and respect it and there are good resources available for high school level stuff:
http://www.teach-scheme.org/
http://home.adelphi.edu/sbloch/class/hs/testimonia ls/
Apparently Scheme/Lisp appeals even to 'liberal arts' types and though I'm not one of those myself it certainly rapidly transformed my attitude to and understanding of computing and I can see why it might make better and more enthusiastic programmers of students whatever their abilities and preferences. -
A few learning languages
First of all, you could start with Lego Mindstorms (which is a little humorous as it's so close to LOGO [by name, at least]). This seems like a good hands-on way for kinds to learn some programming with tangible effect.
There is also a teaching version of Scheme (somewhat like lisp). See the FAQ for the "Teach Scheme" project here.
There is also a list of softwrae to use in teaching programming here, but I've not looked it over and am not sure how useful it is. -
Re:Check out Lisp
(loop for x from a to b do (print x))
(+ 1 x) isn't RPN, if anything, it's "PN".
And regardless, there's little need for Lisp to look nice to anyone except a Lisp programmer, as Lisp tends to be written and read by Lisp programmers. And serious Lisp programmers will tell you that they don't have any problem reading Lisp. I generally find it easier to read Lisp written by other people (who are actually Lisp progammers) than, say, C (written by C programmers). So it's mostly a matter of experience. And people who have _no_ programming experience and then are exposed to Scheme as their first language don't really seem to have too much trouble with it (c.f. The Teach Scheme Project). -
Computers not used *Correctly*
Computers, used correctly, can be a great benefit to education. Take a look at the Teach Scheme project as an example- among other things, they use programming to help teach math. Educators, however, have to get a few things through their heads: 1) They're teaching life skills, not jobs skills. You don't need the latest and greatest of anything. I learned to write using Wordstar 3.0 on an 8086- Word 2 for Windows on a 133 MHz Pentium is enough, you don't need a 3GHz P-4 with Windows XP. Remember that your average 9th grader is still 8 years from entering the work place- so 2004 technology will be as obsolete when they land their first job as 1996 technology is today. And those 3rd graders? They're 14 years away from getting a job- today's technology will be like using 1990 technology. Windows 95 vr.s Windows XP doesn't matter. 2) Everyone needs to be taught to program. This isn't just a class for upper classmen (notice the *men*) looking to go into technical careers. I don't think 2nd or 3rd grade it too early to start teaching everyone to program- this is the point of the Logo language. And the earlier they come to it, the less strange it will be! 3) The computer needs to be used for more than rote memorization drills. This is the number one failure I see. Computers are, first and foremost, problem solving tools. This is why programming is so important- the *child* should be figuring out ways to get the computer to solve problems in the field being taught. With mathematics, this is easy- add a couple of graphics routines, and all of a sudden geometry comes alive. Algebra is all over programming. The computer has fascinating abilities as a musical instrument. Etc. As someone who was originally taught to write with pen on paper, I *hated* writting. One mistake and you had to copy the entire page over. Until I discovered computers. Opps- mispelled that word? Just go back and correct it. Hmm- that paragraph is in the wrong spot, let's move it. Don't worry about the details, get the ideas down and fix it later. This is still how I write (it's how I wrote this posting). And instead of hating writting, I enjoy it. Of course, this requires a lot more computers. Which is why it's important that school systems not buy the latest and greatest (which always cost), but instead can get by on seriously obsolete hardware. Lots of counter examples, of computers incredibly enhancing education, exist. See especially The Children's Machine by Seymore Papert. But notice how these success stories tend to follow my guidelines much more so than "traditional" education does.
-
Teach them functional programming! (Really)The vast computing resources that children have today are both a curse and a blessing. The curse is that there is so much more complexity for today's children to grapple with than we had when we were learning to write software. But, the blessing is that today's children have vast computing resources at their disposal, resources that we could scarcely dream about.
I think we ought to harness those resources. We ought to use them to teach children those languages that are immensely powerful yet, judged by our standards, too inefficient to be practical. In particular, I'm referring to functional programming languages like Scheme and Haskell.
Now, hear me out.
Why functional programming languages? Because they lend themselves to extremely powerful, mathematical ways of thinking about and solving problems. Learning these ways of thinking when young will benefit our children for the rest of their lives. For example, take a look at the The TeachScheme! Project. I wish something like that was available when I was in High School.
Let us not teach our children the technologies of today but of tomorrow. More and more, I am convinced that functional programming, once considered too computationally inefficient for industry work, will be tomorrow's dominant programming paradigm. No other way of programming so readily lends itself to the formalism that is necessary to manage the ever-increasing complexity of modern software projects.
So, let us give our children the tools they will need to solve the problems of their day. Teach them functional programming.
-
Re:Teach the kids Scheme or Smalltalk.
these probably won't be widely accepted at teaching institutions
Au contraire. Hundreds of high schools and universities have decided to teach Scheme. It's being taught at MIT right now! -
How To Design Programs (HTDP)
SICP is fantastic, but tough going for many. Here's one that's being used even at the high school level, with some success: How To Design Programs (HTDP).
-
No no no. Scheme! Teach Scheme.
The Teach Scheme Project and the "How to Design Programs" web sites have some very good arguments in favor of using Scheme as a first computer language.
-
Learning Programming
First, a personal opinion: I believe that learning how to program is so valuable because through it, one learns problem solving skills.
On that note, if you want to teach programming, here are some ideas. I have use none of these for teaching, but I am intrigued:
Scheme/LISP - I learned Scheme from The Little LISPer (the most recent version is called The Little Schemer ), a great book! I already knew how to program when I learned Scheme, but this might be a good way to learn.
Other resources for learning programming through Scheme (with which I have no experience, but sound interesting):
http://www.cs.rice.edu/CS/PLT/Teaching/
http://www.cs.rice.edu/CS/PLT/packages/drscheme/
http://www.teach-scheme.org/ (doesn't seem to be working right now)
Starlogo is very cool, you might also want to look at the book Turtles, Termites, and Traffic Jams by Mitchel Resnick, the creator of StarLogo (in the book he talks about working with kids on StarLogo projects)
I don't even know Python, but I have read several things about using it as a teaching language:
Article at O'Reilly on Python as a first language
Computer Programming for Everybody - a proposal by Guido van Rossum
The Official Python Tutorial
Why Python? - by Eric S. Raymond
Learning to Program - uses Python
I hope this is helpful!!! -
teach-scheme.org
I just realized that in all my talking about Scheme, I never once mentioned the "Teach Scheme!" project which has some notes and presentations on just this topic.
-
To reach the edge, you must start at the hilt...
Cutting edge stuff is good (though I would say that Java as a core is not cutting edge anymore but more an industry standard).
However, I think it's perhaps better to start on general CS knowledge which serves as a wonderful base for whatever he wants to do with computers. Perhaps he'll want to be the next Linus, but he might also want to be the next Feynman and if that's so it's good to give him the best grounding in CS possible so he can exploit computers to the fullest in other fields of research.
My starting point? Look at the Teach Scheme! project. After Pascal, Scheme was my first language I spent a lot of time in while at college and I'm a lot better for it now using whatever langauge I choose. Scheme is a great way to start learning CS concepts and is quite powerful as well. I think Java is a great language and use it all the time at work, but Scheme is a better place to start an education in advanced CS concepts. The Java KVM on Palm is a good second place to go though as you can build small apps really fast (look around developer.java.sun.com to find the current beta KVM for the Palm).
As for the "go outside" people - that's great, if the kid wants to do that. But just as you don't want to push him technically where he doesn't want to go, you don't want to push him into outside activities he doesn't care about. As a tutor, you should help amplify what he is and wants to be, rather than shape him. If he gets really into a computer project and wants to spend a year doing just that, I personally think he should be able to and I do not think it will hurt his "socalization" skills in the slightest.
Also, consider this - he's probably getting some socalization skills just from the tutor being around! And better ones at that - why would you care if he can socalize well with a bunch of nine year olds when he'll end up interacting with adults? Far better he learns to deal with people in an adult manner. That's the final goal of socalizing kids anyway, to be able to work with other people well.