In a Software Carpentry post, Wilson presents some small ways in which he takes pedagogical principles and turns them into real teaching practices in the computer science classroom. In particular, he is careful to explain the big picture. For example, any programming system must have:
- individual things
- groups of things
- commands that operate on things
- ways to repeat commands
- ways to make choices
- ways to create chunks
- ways to combine those chunks
He also emphasizes the connections between the components of a programming system. Much like in Juha Sorva’s dissertation, Wilson notes that the density of connections between ideas is the mark of an expert, not the just quantity of ideas a person has.
Wilson recommends the Software Carpentry essay on counting things as another way to implement education theory into classroom practices. The essay works through successively complex examples, which are accompanied by integrated Python code and contextual examples.
This post has me thinking about ways to communicate basic computing ideas to introductory students. I remember being an undergrad in my first Java class and hearing my professor talk about objects and classes. Neither concept is unattainable to introductory programmers, but both ideas are abstract enough to feel unnatural to students at first. I never received an explanation of the abstract idea of an object or class, so I struggled through making (false) paradigms in my own mind for their creation, importance, and use. It wasn’t until I had a professor who drew interpretations on the blackboard of objects/classes as abstract items that I started to truly understand the nature of OOP.
How should I approach this learning barrier with my students in CSE 231?
When is it appropriate to start talking about these more complex ideas?
Is it ever too early to discuss the big picture?