Procs are very surprising when no background in languages that
implements it.

Actually concepts is very simple. It's just some code chunk, like
anonymous function that you can send inline. Concepts are very similar
to javascript functions.

Here is an (unrealistic) example :

in javascipt :

el = Document.getElementById('blah');
el.onclick = function(event) {
  alert('Do something with the event');
}

In ruby (if navigators understood it..) :

el = Document.gel_element_by_id('blah');
el.onclick = Proc.new{|event| puts "Do something with the event"}

Like in javacript, Proc.new create a anonymous function that would be
executed only when the dom element is clicked.

Most of the time we don't use Proc.new but directly pass a block to a
function call. This is most of the time to iterate over a collection.

[1, 2, 3].each do |item|
  puts item
end

=> 1
=> 2
=> 3

For each element of the array the each function we pass the value to
the block and let you do what you want with the item.

That was just a intro but HTH.

Antonin.