Back in the dark ages of 1998, I took my first programming class. As was the style of the time, the class was taught in Pascal , a language Nicklaus Wirth designed explicitly to teach structured programming concepts. Think of Pascal like an advanced jet trainer: They teach you all the cool stuff with it, before they turn you loose in the F-15's to wax some MiGs. Anyway, Pascal had some neat concepts and quirks, one of which was the way it made a distinction between 'functions' (subroutines that returned data) and 'procedures' (subroutines that were passed data and operated on it). So, for example, you might have a function called 'double' that took an integer and returned that number times 2: function double( k: integer ): integer; begin double := k*2; end With the above, the parameter 'k' isn't modified, so you'd call the code this way: ... var i:integer, result:integer; i: = 2; result := double(i); # at this point, 'i' is still ...