A procedure is a named group of programming instructions that may have parameters and return values. Parameters are the input variables of a procedure; arguments are the values passed in when it is called. Procedural abstraction lets you use a procedure knowing what it does, not how it does it, and lets a big problem be solved from smaller subproblems. Splitting a program into subprograms is modularity. RANDOM(a, b) returns a whole number from a to b, each equally likely.