Ruby for Highschoolers?

ReggW wrote:

For student just starting to learn a language, a good IDE would help
greatly.

All right, I’m listening. How would an IDE help?

wenas agusetiawan wrote:

Hi,

I do not think that teaching ruby is a good idea because they will get used
to built-in function and built-in function without even be able to
understand how something is built ( design patterns and etc ), IMHO
learning
what is programming better than what is programming language

Hear hear!

Machine code or bust.


James B.

“Take eloquence and wring its neck.”

  • Paul Verlaine

ReggW wrote:

It took me no time to understand that variables don’t have types,
classes can be changed midway through the script, Arrays can hold
anything.

If you start with this knowledge and try to go to C++, you will commit
suicide.

A compelling argument against using C++.


James B.

“Take eloquence and wring its neck.”

  • Paul Verlaine

On Jun 11, 2006, at 22:24, James B. wrote:

Matthew S. wrote:

Basically, there are many ways to accomplish a given task, which
makes it comparatively easy to write a program that - while it
produces the desired output - completely misses the point of the
learning exercise.

If accomplishing a given task is not the point of the learning
exercise, then what is, and why might students be unclear on what
is expected of them?

For introductory assignments, the results of the assignment are
invariably already known, because otherwise how will the students
know they’re on the right track? So how could the results be the
point of the exercise? The instructor knows them, the students know
them, everyone knows them. What the students don’t know is how to
get from the input to the output, and it’s that process that you’re
trying to teach, not as a recipe, but as a skill.

This is the same in most forms of introductory-level teaching; the
precise nature of your opinions about feminist imagery in Margaret
Atwood’s work aren’t the point of writing a paper for English 101.
The point of writing that paper is to learn the process of writing
any English paper: develop and describe a particular thesis.

As a trivial (and somewhat absurd) example, let’s say the exercise is
to write an array-sorting routine. In teaching terms, this has the
practical value of getting them familiar with arrays and fundamental
operations (setting, accessing, comparing), and demonstrates
theoretical points about efficiency (bubble sort, anyone?),
algorithms, and depending on exactly what the algorithm is, recursion
or notions of combining small local operations to effect a global
result. On the other hand, a student could write “arr.sort” and have
accomplished the same task having learned nothing more than how the
docs are organised.

There are two less-trivial examples that I’ve seen a few times that
are worth mentioning in this context.

Some of the students in the course I taught had only ever programmed
in Prolog before - and a couple of them were extremely proficient at
it. They tended (in Java) to end up finding ways to make everything
effectively global. They accomplished the task, more or less, but
did they learn anything valuable about encapsulation or OO design?
Not really.

Similarly, a few students have come in having done some shell
scripting or website PHP or Perl hacking, and the fundamental mistake
they made was to do everything statically (in Java, so as class
methods). So, they had classes, which were pretty decent, but missed
out objects and had to do some really odd fiddling to manage state at
the class level. Again accomplishing the task, but missing out on
some pretty fundamental aspects of object orientation.

So no, the point of a programming exercise is not simply for a
student to produce the desired output, but rather to teach students
something more fundamental about programming in a practical way.
Philosophically, it’s not just where you end up, it’s how you get there.

I’m skeptical that Tim Toady is the culprit here. If you, as the
teacher, don’t want students diddling arounf with every syntax for
a conditional, then tell them the one form they are allowed to use
for the exercise and leave it at that.

Well, isn’t that equivalent to giving them a language in which the
expression of conditionals is more restricted? What’s the effective
difference of the instructor saying “always write your conditionals
this way” and the language requiring it, from the student’s perspective?

In any case, conditionals are just one example, and the larger
problem boils down to the fact that the students must learn, and
learn on their own (in the sense that they might work together, but
noone can copy understanding of their lab partners). Specifying the
style or allowed syntax for an assignment specifically enough that
noone gets side-tracked is a fruitless task: you end up just giving
them pseudo-code and a set of formatting guidelines.

That’s pretty obviously undesirable, for one thing, you want students
to get side-tracked every so often. What you don’t want them to do
is get so caught up in the subtleties of the syntax that they miss
the larger point of the assignment - not seeing the forest for the
trees.

Think of it as similar to why we advise people not to optimise
prematurely, because premature optimisation amounts to almost the
same thing: a programmer becoming too focused on the specific
implementation of one small piece of code, ignoring the larger task.
For experienced people, this might be “how can I cache my search
results?”, but for beginning programmers, this very often is “what’s
the smallest number of lines I can use to write this conditional” or
“that ternary operator looks clever, how can I use it to do this?”.

I will admit, though, that it is a tricky argument, because the best
students are the ones who experiment on their own and are smart
enough to read their textbook or look up online docs, and
discouraging them from this does them an enormous disservice. But
equally, you want to make sure that you’re not setting traps for
them; it’s just as much a disservice if they spend all their time
working on a one-line #inject implementation of a method, and don’t
learn how inheritance works.

Ruby, this means they have to remember that the last statement
evaluated is the return value, which is just one more thing to
put on their stack of not-quite-understood concepts (and they
have LOTS of those concepts when they’re learning).

Actually, this is fundamental to understanding Ruby; expressions
return values; methods are a series of expressions.

The “must remember to type a gratuitous ‘return’” seems like the
extra work.

You’re assuming that they’re completely understood and internalised
the concept of ‘all expressions return values’, which I will
guarantee that not all of them have. When you’re learning
programming, that is still something that you have to think about.

Again, a practical example: the ‘expressions return values’ thing is
pretty simple at first glance, a = 3 + 2 seems pretty easy to
understand. For some reason, though, the majority seem to consider
variable assignment as some sort of a special case. Of course, it’s
what lets you do things like “a = b = c = 1” and “if (a = a + 5)”.
The latter example never fails to draw slightly confused looks from
people the first time they see it.

So, it is extra work, but it’s valuable extra work because it helps
students internalise that particular concept. It makes it absolutely
explicit to the student that methods return values. If they’re
reading code, it gives them an anchor for their analysis and
understanding.

Again, though, ‘return’ is just an example of a more general idea:
Ruby syntax is concise, which is great for when I’m using it. But
that same property can make it a headache (literally) for beginners -
there’s just more that they have to actively think about and remember
in order to grasp what’s going on.

Students will learn the Ruby you teach them. Don’t throw a lot of
syntax at them before explaining basic principles. Otherwise the
syntax just seems arbitrary (or more arbitrary than it is), and the
principles will not make much sense after they’ve been blindly
coding with random expressions in search of code that simply runs
without errors.

Striking the balance between introducing concepts and introducing
syntax is difficult, since they have a somewhat circular relation:
this syntax expresses this concept, which is implemented using this
syntax.

So, while “don’t throw a lot of syntax at them before explaining
basic principles” is correct advice, it’s not very useful advice,
since all it does is rephrase the problem. In fact, it’s about the
biggest problem in teaching programming, and it has no correct
answer; some students will do better if you just give them a link to
the language docs and turn them loose, some do better with formal
definitions of the syntax, some need a simple, plain-english
explanation, and some always need some hand-holding.

A more subtle point is that the instructor isn’t teaching you Ruby, s/
he’s teaching you how to program. Ruby does have a lot going for it
in this regard: first-order functions, object-orientation, and so
on. But my point is that Ruby’s concise nature is an argument
against using it to teach general principles, because the syntax
takes many of those general principles as already understood, and
tucks them out of the way.

matthew smillie

Matthew S. wrote:

I appreciate the detailed post. I’ve only done a limited amount of
teaching, so much of what I believe may be ill-founded; it’s certainly
difficult for me to present it as little more than gut feeling and the
results of personal experience. (And my questions are not directed to
you, but are the things that I was asking myself.)

If writing arr.sort would have satisfied the requirements of the
exercise, then a student may not quite understand why it is not the
right answer. If the requirements are to demonstrate a knowledge of
algorithm design and analysis, then (purely speculative voice speaking
here, mind you) the exercise should be designed to enforce that, or at
least make clear why simply using a built-in function is an insufficient
solution.

And it may be that for teaching fundamental computer science concepts
that Ruby is a poor choice, precisely because it abstracts away so many
details. Or that exercises must be more carefully designed so that the
features of the language do not force students into solutions they would
never bother with in real life, nor allow for sloppy design. (I’m
wondering if students should have to maintain and debug each others
code. They’d get fed up fast.)

There are two less-trivial examples that I’ve seen a few times that are
worth mentioning in this context.

Some of the students in the course I taught had only ever programmed in
Prolog before - and a couple of them were extremely proficient at it.
They tended (in Java) to end up finding ways to make everything
effectively global. They accomplished the task, more or less, but did
they learn anything valuable about encapsulation or OO design? Not
really.

Why would they? I don’t mean to sound trollish, but, all things being
equal, if they can write code that runs and produces the correct answer,
where is the failing? How do things get to that point? Are students
allowed to keep coding like that? What would motivate them to do
things differently?

I have a CS degree, and can safely say that while I learned all sorts of
CompSci things, I didn’t really learn to program well until I coded
large projects, after graduation. Class assignments rarely had enough
of the real-world nastiness that make clear why certain design and
development practices are to be preferred. For the most part,
lessons were more focused on language syntax or dealing with the linker.
So, while teachers may have commented on poor procedure or function
design, it was not a key point.

It is very hard to come up with really good tutorial examples.
Gratuitous class definitions are likely to give the impression that OO
is all about more lines of code.

Without some clear understanding of what OOP is for, and when to
use it (or not), I think it pretty reasonable that people use globals
and write long streams of procedural code. The code runs, and they’ll
never have to maintain it. It passes the unit tests, so to speak.

It may be difficult for some people to “get” OO, but that may be because
they are asked to apply it without a compelling reason.

(Perhaps exercises should always have multiple stages, with each next
phase introducing some new requirement that is sure to make life hard
for students who haven’t applied some basic OO design. )


So no, the point of a programming exercise is not simply for a student
to produce the desired output, but rather to teach students something
more fundamental about programming in a practical way.
Philosophically, it’s not just where you end up, it’s how you get there.

Absolutely. Do the students know this? (I’m being rhetorical).
Because I can imagine telling a group of students to all go to the top
of the Sears Tower in Chicago, and then complaining that they took the
elevator, not the stairs.

… (much good stuff chopped out)

A more subtle point is that the instructor isn’t teaching you Ruby, s/
he’s teaching you how to program. Ruby does have a lot going for it in
this regard: first-order functions, object-orientation, and so on. But
my point is that Ruby’s concise nature is an argument against using it
to teach general principles, because the syntax takes many of those
general principles as already understood, and tucks them out of the way.

It seems that, in what you’ve described, there are multiple problems at
play: Teaching basic programming concepts; teaching the syntax and
semantics of a particular language; undoing the harm of students who
have already acquired poor techniques and misconceptions from previous
classes or personal hacking.

If this is what the OP has to face, I’d argue for Scheme if for no other
reason that students will not have the false impression that it is “just
like” what they think they know about Java|PHP|Perl.


James B.

“Take eloquence and wring its neck.”

  • Paul Verlaine

Nicholas E. wrote:

I think that teaching students Ruby might be a bit less…arcane. It
looks friendlier, for one. It would also open the course up to more
concepts than Scheme offers, like automagic testing, manipulating files,
object orientation, etc. Teaching OO during this course would probably
also benefit the kids later on for Java during Programming II…

Hi Nicholas,

For what it’s worth, I took an introductory CS course taught by one of
the authors of How to Design Programs as a freshman, and we used that
book as the class text. I found both the curriculum and the instructor
to be immensely annoying, and I won’t go into it, but suffice it to say
that I think there’s a lot to recommend other approaches, including the
reasons you gave.

That having been said, developing a curriculum for any subject is
difficult. Computer science is a harder subject than most, and a lot of
very smart people have used up a great deal of ink trying. Moreover,
Scheme is a powerful language that’s well worth knowing, even if it
takes several years before you realize what you’ve learned. If you do
start to develop your own set of lesson plans, please post them online
as you write them. I’m sure you can find people, myself among them, who
would be happy to read them and make (completely uninformed)
suggestions.

So, given all of that, I have two questions for ya, list. One, do you
think there’s any merit from teaching pretty non-technical sophomores
in
highschool Ruby over Scheme? And two - Is there a DrScheme-eqsue
environment available for Ruby (screencap:

http://www.plt-scheme.org/software/drscheme/tour/images/editor-repl.gif)?

The DrScheme-esque thing is a big deal. The computer labs are all
Windows labs, and nothing will change this. The program serves as a
sort
of incredibly simple IDE. In the top pane, you can put in your code,
and
the bottom pane displays results and lets you use an irb-for-scheme
type
thinggy.

I think you’re right about DrScheme, and unfortunately, I can’t think of
any Ruby-based IDEs with similar features. I can’t imagine that it
would be hard to replicate the salient features of DrScheme, minus the
debugging, pretty easily in Eclipse, although I don’t know that anyone’s
tried yet.

For those wondering how an IDE could possibly be useful for a beginning
programming course, you should absolutely download DrScheme and check it
out. You might be surprised.

I guess at the end of the day I do think that Ruby is a pretty good fit
for beginners, even non-technical sophomores. I can say that HtDP
left a pretty sour taste in my mouth for a long time. But Ruby is
relatively internally consistent, it’s elegant, it’s friendly, and it’s
immediately useful.

Brian Guthrie

Francis C. wrote:

about orienting future businesspeople who will spend a lifetime
programming
Word and Excel macros (aarrgh, where’s my razor… I can’t face that
future)? Are you thinking about people destined for technical careers for
whom some mild familiarity with scripting can be useful? Or have you
smply
taken a personal interest in imparting some of your own joy of
programming?

If you know your goals and your audience’s goals, then the choice of
language(s) may be self-evident.
I believe the goals are stated in the original post. The first half of
the course, Programming I, is to teach programming concepts. The second
half, presumably by someone else, called Programming II, is in Java.

Now, unlike Hal F., when I was in high school, high schools didn’t
have computers. For that matter, major universities didn’t have computer
science programs and minor universities, if they had a computer at all,
it was a punched card thingie used to do accounting. :slight_smile: Of the 300 or so
people in my senior class, perhaps 10, among them of course myself,
ended up learning how to program. I think I’m the only one still doing
it, mostly because I love it too much to retire.

In any event, that was a long time ago. For teaching programming to
today’s high school students, I think there are really four choices for
Programming I, given that Programming II is in Java.

  1. Stay with Scheme. It’s a “known quantity”, it’s a perfect vehicle for
    learning about recursion, lists, selectors, constructors and predicates,
    functional programming styles, etc. If they’re going to be computer
    scientists, this would be my choice.

  2. Start with Java. Hey, why not? They’ll be learning Java anyhow in
    Programming II, and there are world-class free IDEs for it. Why make
    them switch languages in mid-stream?

  3. Hold on now … I am serious. How about C? Darn near everything under
    the hood in today’s computers – the Ruby interpreters, Java (and
    Scheme) virtual machines, the Linux kernel, the GCC compilers – is
    written in C. It’s close to the metal.

Actually those are the only choices I would have picked, since I don’t
know Ruby very well yet. But hey, this is a Ruby list, so I’ll say

  1. Ruby. I don’t think the IDEs are a problem, it is a good introduction
    to programming and unlike Java and C, there’s no “compiler” to wait for.
    In fact, if Programming II was not in Java, Ruby would have been number
    2 and there would have only been three items in the list. :slight_smile:

she should try it for one of the programming courses next year.
with writing basic functions. Our teacher kind of blamed herself for
think there’s any merit from teaching pretty non-technical sophomores in

I appreciate any comments you can give me, list.

Regards,
Nick Evans


M. Edward (Ed) Borasky

On 6/11/06, Nicholas E. [email protected] wrote:

I’m not after a full-blown IDE. They’d be working under Windows, and I’m
(perhaps wrongly) reluctant to open up the command prompt. I want to
focus on programming, and not have to bother with Windows shell commands
too.

DrScheme worked out really well. I guess what I’m after is a nice
frontend to irb, and if I have to, I’ll write it myself (and release it
to the world, of course!).

I think that Ruby is an excellent vehicle for teaching programming. I
have a
couple of suggestions:

  1. Get a copy of “Learn To Program” by Chris P… It does precisely
    what
    you want to do: teach programming using Ruby. You should easily be able
    to
    build a curriculum from the material in this book. You can find it here:

    http://www.pragmaticprogrammer.com/titles/fr_ltp/index.html

  2. If you use the One-Click Ruby Installer for Windows (
    http://rubyinstaller.rubyforge.org/), it includes the FreeRIDE IDE (
    http://freeride.rubyforge.org/).

Good luck!

Curt

On 11-Jun-06, at 12:55 PM, Nicholas E. wrote:

The goal of the course is to teach programming concepts in half of
a school year. The things that were covered during this year’s
course were writing functions to do a simple calculation, using
variables, and using cond/booleans. Many students struggled during
the beginning of the year with writing basic functions. Our teacher
kind of blamed herself for that, because
this was her first year teaching programming, and she had never
been trained on Scheme.

If you can teach someone to program, learning a new language isn’t
going to be a big problem. Your decision should be less about the
language and more about the concepts you need to be teaching. Scheme
is an excellent language for teaching people how to program. Sure,
most of them are unlikely to use scheme much if ever in day to day
operations on the job (if they choose to go down this path and stick
with it), but it’s an excellent language to teach programming concepts.

So, given all of that, I have two questions for ya, list. One, do
you think there’s any merit from teaching pretty non-technical
sophomores in highschool Ruby over Scheme?

No, I don’t. Keep the language simple, teach them how to program;
those who continue on with programming will find languages that they
wish to pursue, and will learn those when the time is appropriate.

Nick Evans


Jeremy T.
[email protected]

“One serious obstacle to the adoption of good programming languages
is the notion that everything has to be sacrificed for speed. In
computer languages as in life, speed kills.” – Mike Vanier

On 6/12/06, Nicholas E. [email protected] wrote:

Howdy list,

I’m a highschool student with a very high chance of ending up
student-teaching the Programming I course during the 07-08 schoolyear.

Glad to hear you have that priviledge, as a student :slight_smile:

This year was the first year for the course, and Scheme was used.

Scheme? Wow, that must really beat the students to death.

However, I’ve been talking to the teacher about Ruby, suggesting that
she should try it for one of the programming courses next year.
(Unfortunately, there’s no ready-made curriculum for Ruby available to
her, and she is not really a techie, so that idea was shot down.)

If I end up teaching it, I think it would be cool to cover Ruby instead
of Scheme. I’d have to develop my own curriculum, but whatever.

This is why I love Ruby. Ruby is very adventurous, and with every
adventure you have a good time, and it’s not so difficult to
understand.

Ruby is easy to explore, and really doesn’t get in your way. If you
want to teach the students some of the basics first, perhaps you
should consider the QuickRef, which is an excellent reference
(Ruby | zenspider.com | by ryan davis).

The Pickaxe also covers a lot of the language in an orderly fashion
(http://www.rubycentral.com/book).

The goal of the course is to teach programming concepts in half of a
school year.

If you can teach Java or C++ in half a school year (as my high school
did), then you can most certainly teach Ruby in half a school year.

The things that were covered during this year’s course were
writing functions to do a simple calculation, using variables, and using
cond/booleans.

I don’t believe that programming is about solving only one person’s
problems. Only focusing on a specific set of functionality for a
semester seems to only restrict the students from doing what they want
to do.

I’d suggest walking them through the basics, handing them lessons, but
also every now and then telling them to write programs which solve
problems they have.

Maybe one student’s problem may be that he wants to calculate his
monthly allowance based on his grades. Say this student wants to see
how much allowance his parents will give him if he aces his US History
exam. Maybe another student wants to write a small game. This can be
sort of a project the students will get every 2 weeks.

I feel that programming is more about having fun.

Many students struggled during the beginning of the year
with writing basic functions. Our teacher kind of blamed herself for
that, because this was her first year teaching programming, and she had
never been trained on Scheme.

If the students don’t learn anything, it’s natural for the teacher to
feel ashamed and feel that she is to be blamed.

I think this is where Ruby fits in well, because Ruby has a more
readable syntax than Scheme (obviously) and it has a better flow of
logic as far as the student’s concerned.

I think that teaching students Ruby might be a bit less…arcane. It
looks friendlier, for one. It would also open the course up to more
concepts than Scheme offers, like automagic testing, manipulating files,
object orientation, etc. Teaching OO during this course would probably
also benefit the kids later on for Java during Programming II…

Teaching Ruby is good, but I suggest you stay away from
metaprogramming. Students may get as confused by Ruby’s
metaprogramming than they did with basic Scheme.

All in all, I think it’s a good idea to teach high school students Ruby.

I have to warn you though, I’m obviously biased :slight_smile:

Jeremy T. wrote:

If you can teach someone to program, learning a new language isn’t
going to be a big problem. Your decision should be less about the
language and more about the concepts you need to be teaching. Scheme
is an excellent language for teaching people how to program. Sure,
most of them are unlikely to use scheme much if ever in day to day
operations on the job (if they choose to go down this path and stick
with it), but it’s an excellent language to teach programming concepts.

I completely agree with the above.

So, given all of that, I have two questions for ya, list. One, do
you think there’s any merit from teaching pretty non-technical
sophomores in highschool Ruby over Scheme?

No, I don’t. Keep the language simple, teach them how to program;
those who continue on with programming will find languages that they
wish to pursue, and will learn those when the time is appropriate.

And almost agree with this too.

Knowing almost nothing about Scheme (it’s a lisp), and not prejudiced
agaist it at all (honestly), a possible advantage of Ruby could be that
its libraries let you do some really fun stuff very quickly, cleanly and
easily. I can imagine that being extremely appealing in a learning
environment. However, there may be equally wonderful libraries for
Scheme, in which case this is a moot point.

The other possible advantage with Ruby is that it has a current, active
community (which, again, Scheme may have; I don’t know), and if these
children are good at looking for things for themselves (which I hope
they are), then they may have more luck with Ruby in this respect.

Having made those two points, I would expect Scheme to have more
teaching environment material available for it - potted courses,
teacher’s notes, etc; I believe it was originally conceived as a
teaching oriented language (this may well show my total ignorance!).

Once again though, Jeremy T. is absolutely right that concepts are
transferable, and there’s not a great deal of value in choosing a
teaching language because of current “real world” use.

On 6/11/06, Nicholas E. [email protected] wrote:

Howdy list,

I’m a highschool student with a very high chance of ending up
student-teaching the Programming I course during the 07-08 schoolyear.

Brian Schroeder put together quite a nice course:
http://ruby.brian-schroeder.de/course/

I found a few errors but mostly I thought it was very good.
FXRI comes with the Ruby one-click installer and may be able to
replace DrScheme.

As to whether to teach Ruby - of course! The advantage with Ruby is
that it’s FUN, and I think that’s the biggest factor when learning
anything.

Les

[much elided, since a lot of it seems like specific examples of the
following general idea]

… So no, the point of a programming exercise is not simply for
a student to produce the desired output, but rather to teach
students something more fundamental about programming in a
practical way. Philosophically, it’s not just where you end up,
it’s how you get there.

Absolutely. Do the students know this? (I’m being rhetorical).

Sincere and serious answer: Not really. Most are willing to suspend
their disbelief and take your word for it, given some reasonable
explanations as to how it might benefit them. I wouldn’t say that
they really know it, certainly not at first, maybe not until
they’ve had a hairy, real-world project to tangle with, and maybe not
ever and they just think of it as having paid their dues once upon a
time by proving that quicksort will always terminate.

There’s always a certain amount of “what’s the point”-ism and “I’ll
never have to do this in the Real World”, and the various academic
urban legends[1] provide some interesting insight into how students
often conceive of their studies and evaluation[2]. Getting around
these perceptions, such as by inducing the above-mentioned suspension
of disbelief, is a fairly large part of your job as an instructor.

matthew smillie.

[1] The ‘barometer question’ is probably the canonical example of
academic urban legends:

[2] In a lot of cases, though, they’re entirely correct. I’ve had
what I’d say is a more varied programming career than most (from web
apps c. 1997, through mainframes and telecoms switches, to graduate
school in natural language processing) and there are plenty of things
from my undergrad degree that I’ve never had to worry about again.
The catch, though, is that as an undergrad neither I nor my
instructors could ever have predicted exactly what has ended up being
the most useful: I really liked the graphics course, but I’ve never
touched it since, and the frustratingly hard course on graph theory
has been enormously helpful.

Ed Borasky said: “I believe the goals are stated in the original post.
The
first half of
the course, Programming I, is to teach programming concepts. The second
half, presumably by someone else, called Programming II, is in Java.”

You rather missed my point, and the rest of your post goes on to show
that
you implicitly answered my question in a particular way. (You’re
thinking
about how best to give early training to young people who intend to
become
serious programmers, as has everyone else on this thread.) That’s the
assumption I was questioning.

You’re an old pro, Ed, and you have a lot of good insights on how to
train
people who will be doing serious programming using the traditional
methodologies we all use every day. But CS pedagogy (at least at the
university level) has undergone at least two upheavals in the last dozen
years that I’m aware of. The Scheme revolution happened at places like
MIT
and Stanford when people realized that of the two equivalent models for
understanding computation (Church-style and Turing-style), only the
former
can be taught easily without a lot of distortion from the lanugages
used. (I
have opinions about why that turns out to be true, but that’s another
thread.) Several years after that, business leaders started complaining
that
CS graduates had no real-world skills (only Scheme), and a lot of places
changed their programs to basically teach algorithm cookbooks in Java.
(In
my opinion, equally useless, in fact worse, since these young people may
know how to write Java but they don’t know how to think about
computation.)

Now it’s dawning on a lot of people that since programming itself may
become
a relatively low-value economic activity (why is yet another thread but
Ruby
ironically has something to do with it), some other kind of training may
need to supplement programming pedagogy. And that may be training in how
sophisticated information technology may be used to add value to
business
processes and other environments. It would be forward-looking if nothing
else for high-schoolers to be exposed to some of this.

Matthew S. [email protected] writes:

Ruby does have a lot going for it in this regard: first-order
functions,

Did I miss something?

James B. [email protected] writes:

Hear hear!

Machine code or bust.

Once you know how a linked list/hash/sort/Delegate/Flyweight works,
you can use the existing version. It’s always been like that, no?

Nicholas E. [email protected] writes:

I also like Ruby better than Scheme.

Again, just a matter of taste. :wink:

teacher’s assistant and I can sell Ruby, I’m going to be the one
teaching it to the class AND the teacher.

Aah, so that’s the reason. Okay. Of course, given you know Ruby, you
can teach Ruby better than Scheme. Fair point. (And it’s probably
better to teach Ruby by a person that can program instead of teaching
Scheme by a person that can’t program.)

true

[else false]
)
)

(Sorry for parse errors, if there are any.)

IMHO, cond is overused. This is perfectly readable, no?

(define (do_something n)
(if (< n 10)
true
false))

(Hint: Senseful indentation matters.)

I was unaware that Scheme had OO. I don’t really know Scheme, so I
guess I’m not being terribly fair.

It doesn’t have OO out of the box, but it’s powerful enough to build
your own OO.

Of course, teaching this is not that easy. Did you ever read SICP?
Have a look into it and rethink your choice.
I haven’t even heard of that. I’ll look into it. =)

(Despite all of this, I prefer Ruby for coding, of course. But
Scheme is the better choice for teaching. YMMV.)
Thank you for the feedback!

You’re welcome.

On Jun 11, 2006, at 23:29, Matthew H. wrote:

This year was the first year for the course, and Scheme was used.
instead
of Scheme. I’d have to develop my own curriculum, but whatever.

This is why I love Ruby. Ruby is very adventurous, and with every
adventure you have a good time, and it’s not so difficult to
understand.

I thought I needed to add my $0.02 here. My background - Medical
Informaticist
with an undergrad in Engineering/Programming. Program in 16+ languages
on a fairly regular basis. Love Ruby. This being said, Scheme is
one of those
languages that do more than teach you how to write lines of code.
Many can
write programs, however, the design and understanding to put together
interfaces,
applications, etc. take a bit more understanding. Also, computer
languages are
like tools in a tool box. Many mechanics like programmers only use
one tool.
We have computers, calculators and other helpful devices, however,
one still
needs to understand the math, science, biology, etc. fundamentals
behind these devices to be fully effective.

Ruby is easy to explore, and really doesn’t get in your way. If you
want to teach the students some of the basics first, perhaps you
should consider the QuickRef, which is an excellent reference
(Ruby | zenspider.com | by ryan davis).

The Pickaxe also covers a lot of the language in an orderly fashion
(http://www.rubycentral.com/book).

The goal of the course is to teach programming concepts in half of a
school year.

Scheme is very good here.

problems. Only focusing on a specific set of functionality for a
exam. Maybe another student wants to write a small game. This can be
sort of a project the students will get every 2 weeks.

I feel that programming is more about having fun.

One can have fun with programming. However, the scope of such courses
are generally fundamentals in nature.

Many students struggled during the beginning of the year
with writing basic functions. Our teacher kind of blamed herself for
that, because this was her first year teaching programming, and
she had
never been trained on Scheme.

Here is an example of poor programming principles and understanding.

files,

I have to warn you though, I’m obviously biased :slight_smile:

I use Ruby for quite a few things and am quite happy with its
functionality.
I too am biased in many ways, however, stepping back and looking at the
larger picture one needs to keep in mind the scope of the project.


Matt

-Bob-

On Jun 12, 2006, at 12:42, Christian N. wrote:

Matthew S. [email protected] writes:

Ruby does have a lot going for it in this regard: first-order
functions,

Did I miss something?

I probably should have said “higher-order functions” or “first-class
functions”. I admit to a habitual disfluency when it comes to this
distinction**. Or am I missing what you think you’re missing?

matthew smillie

** in my defence, they’re very closely related, and first-order
functions are a subset of higher-order functions, so I claim that I
was technically correct (which is the best kind of correct).

Leslie V. wrote:

FXRI comes with the Ruby one-click installer and may be able to
replace DrScheme.

As to whether to teach Ruby - of course! The advantage with Ruby is
that it’s FUN, and I think that’s the biggest factor when learning
anything.
See previous post on fun … Scheme is just as much fun as Ruby IMNSHO.


M. Edward (Ed) Borasky