[Rebol School] Rebol School
the better way to gauge useage is not by frequency within one script but by useage amongst many scripts... where useage within that script many times still only counts as one. I'd use the rebol.org site to scan scripts from any given group and put usage from them. Thus networking would score view as almost 0 where gui would place view as the most used word (in every script)
and using rebol.org you could even classify by advanced, and separate words being used more often in 'advanced or intermediate work.
That would improve things I think.
Also it's clear to me that the importance of a function is not always related strongly to it's frequency of use. This is why you need the Genus. View would be a root, while many string commands would be all gathered at the end of some branch. This becomes really easy to see when you present the data that way.
It's not so simple, because there are many ways to hierarchically arrange the words, looking at them from different aspects.
then its a good test for the associative DB I am about to start working on. :-)
I was looking for a good and simple data set to organise.
(I have been REBOLing full time for a while and yess many things are moving ahead :-)
You could make trees where the grouping is by the words that follow or precede a word. Expressions, basically :-)
we can have each atom of information relate to any other atom based on rules we define... once the dataset is parsed, then you end up with a complex modeling of all related data which you can query and search trough quite quickly.
I am trying not to open too much on many of my current projects... but this is going to be co-developped while I'm doing liquid.
I'll give a shot at sorting out all of rebol.org once I get basic capabilities going and report back here, when its done.
I think just the list of natives would be a good start then use the source for the mezzanine functions as excersize of what can be done.
Classify the native words from easy to advance. I assume everything else can be generated using the native words.
op! action! native! then probably function!
Although the "choose a task first then learn what needs to be used to code it" approach is fine in many circomstances, in a 45 hours course, the student ends up knowing how to code a few tasks (hopefully more than one, but not necessarily), but often has a very hard time transferring this knowledge to other tasks. So I think a better "generalist" approach would be to categorize generic tasks, like "file manip"', "math", "iterations", "series", "network sharing of data", ... and identifying just a few native words category that are enough to solve all or most problems given in those categories.
Example problems I would give my students to solve would look like (to be adjusted according to the native word set retained): Using iteration, draw a 19 line isoceles triangle (concepts of looping not obvious for beginners, but essential to grasp early) Find all prime numbers lower than a given one, using previously found primes in the process to speed up the search. Given a list of adresses, get the files and identify which ones have a given information on them (elementary parsing) ... Things like that. Diversified enough to give a good feel of what programming can solve while gaining basic skills (data stores, interation, maybe recursivity, various control structures - not necessarily all of them, operators, native functions and user defined functions, input and output, ...)
The pdf manual "Rebol Essentials" comes close to that. It seems to be a good starting point.
Another idea someone proposed in this thread which is very interesting if it is possible, is tracing a hierarchy of all the native Rebol word. If such a structure really undelies the whole or part of the 400 word list, then this would be a powerful conceptual tool to aid in building learning "environments" for the language.
I think it depends a lot on your audience. You said they had no previous experience in programming, but are they computer science students or humanities, or engineering? Their are many things to teach at once; computer science concepts, Rebol concepts, how to program, etc. I guess you would also have to settle on a single programming paradigm to start with. If your audience are hunamities students then the not so simple concepts such a "programming language" and "program" (leading to "syntax", "semantic", "type") are very important to understand properly first. Then you have "expression", "evaluation", "subprogram"" etc. (leading to "values", "binding", "function"). I think all this can be done through meaningfull practical example built russian doll style.
When I said native, I did mean op!, action!, native! which source classifies as native.
There are about 270 in View but the op! are duplicates of some natives, and some natives are for efficiency and can be rewritten using the other native words. I guess I like looking at Rebol as a Forth language with very good and standard I/O support.
Jean-François: one of the courses I teach is an introduction to programming to science students. Some of which will follow two more courses in programming, in the same language. Over the years, I've done this in Fortran, Pascal and now C++. At one time the first two courses were given in Python and the last (which I was giving), in C++. We decided that it was better to give all 3 in the same language. I didn't think Python was a good choice. I'm now giving the first course (and maybe all 3). I'm exploring the possibility of opting at some time for Rebol, if I can break down the language into subsets that are "easily" learned and that offer useful tools for some large category of problems. I did'nt find any tutorial that seems to be quite there yet. Of course, the language is not the only thing taught. Basic programming and computer science concepts are also taught. But these can be taught independently from the choice of the language, for a large part. Rebol is my preoccupation. Some languages need a very lot of reading/learning before you can start to use it for solving problems with them. Maybe this is the case for Rebol. But I'm not sure yet. My hypothesis is that nearly everyone has learned Rebol by reading the Core manual and looking at examples in tutorials. It's ok to do it this way if one chooses so. But the teacher is expected to devise smoother paths for the learning process.
If I can engineer such a learning path, even if we never switch to Rebol for our classes, I'm sure that it would help enlarge the Rebol community. So I'm getting more interested in this project as I'm going along. It is not an obvious endeavor.
I agree, starting with polygons and graphics is great for instant visual feedback at the beginning.
i'd say the most important rebol native is INSERT. (even print is insert system/ports/output under the hood)
ah! "insert". I would not have thought so. Will remember that while picking native words...
Denis : You should maybe contact Gerard Cote on the mailing list. I believe he has been using Rebol in teaching introductory programming for a while now. He might have interesting pointers. Also I would be curious to know if you have ever considered using Scheme for your courses. There are great ressources such as PLT Scheme and their book "How to design Programs" or "Simply Scheme" by Harvey and Wright. I think the content could be adapted to a curiculum based on Rebol
A few ideas were collected here as well 3 years ago http://www.compkarori.com/vanilla/display/Rebol+School
tks for the link Graham. And there is a mention of Gerard Cote in there too, Jean-François.
Actually, I'm not trying to figure out how to introduce programming concepts, or computer science in general. I already have a lot of stuff on that since I have been teaching this for 20 years now. And I'm not looking tor a "better" language to teach, even though I have given a look to Scheme.
What I want to develop is a "better" approach to learning Rebol, for non-programmers mostly. I'm really focusing on Rebol, and not what should be learned before, nor what could be a better option.
The "Rebol Essentials" is a good start. But I think I can break the approach down to still simpler steps. The difficulty I face is not having the broad, overall picture for Rebol. I am very conscious this limits my ability to make the best choices for the moment.
Here is what I figure would be a good starting point, at the present level of my knowledge:
First concepts: values, words (at a basic level), blocks (later on : functions)
First natives: print, arithmetic operations, the simplest control structures (conditional, for loop, while loop)
Then reading data somewhere and some simple parsing techniques: find a string, extract from one point to a second and saving the data.
I have the feeling that would be a very good starting point. I'm a little hazy on what is offered for parsing in Rebol at the moment. I'll look into that next. I think that once you have read a file into memory, it is in block form and you can use natives like "first", "next", "find" and so on on it. If so, then I would be going that way for sure.
read file --> string load file --> block
Strings and blocks are both series, so first, next find etc work on both, but when you load you get a block and the units are values. When you read, you have a string and the units are characters.
When you load, the file has to be LOADable by rebol, which means everything in it must be parseable into rebol values. When you read, the file can be absolutely anything. I usually have to read web pages and parse a string, for instance.
How about that old way of starting with a text-adventure? Write a framework and let the learner add some special item?
actually denis, for introducing looping I'd use foreach before while. while is rather hard to grasp in the begining, cause its easy to bugger up the end conditions and end up in infinites loops.
for example, in parsing a sentence, foreach could make you very easily traverse the whole string like so: foreach letter sentence [print letter]
also remember that find, does not copy the series, it returns the serie at a different index.
to extract substrings without use of 'PARSE you can do: substring: copy/part find sentence "debut" find sentence "fin"
in the above, the string "fin" is not included, since find returns the start of the match by default... to include it, just add the /tail refinement. substring: copy/part find sentence "debut" find/tail sentence "fin"
this can allow you to explain optional arguments later on in funcs. also as an easy exercise, you can ask them to return the substring without "debut" or "fin"... (simply switch the /tail to the first find)
Anton, Maxim: noted. Hum... will have to test what happens if I use "début" with the accent. In VC++ console mode, the output doesn't use the same character table as the editor. Didn't think of checking this yet, but the classe will be held in French so I should check, although this is not vital.
Volker: good idea. "old way"? I've never seen this approach used before (and I'm not young). But I think it would be very motivating project for these students. I'll use this suggestion.