view the function as object in stack and heap, that will open another door, such as functional programming.
Some university's CS courses are very good.
Recently I read one for basic programming class. It puts the compiler concept in the introduction of python. The final project (2-week lab) is to use python to develop a Lisp/Scheme interpreter. Very impressive and student can learn very deep knowledge in a short indroduction course.