Procrastination is the mother of invention. When I am swamped with work, like in these scant post-exam days as I prepare for the inevitable E&P meetings to discuss how my students did. Sure enough, I have this brainstorm of an idea for a series that I think would be really helpful for my students. In many of my programming classes I find that there are always students who are lacking small fundamental ideas that would save them so much time and pain. And this problem is across the board – low level to high level. It basically comes down to knowing how to deconstruct a problem into small enough chunks that can be translated into a programming language in such a way that it is easy to follow as well as easy to debug. This in a sense is the fundamental art of programming.

All programming happens in a context. That is it is done in a language, or group of languages, and it targets a specific platform. As students in my courses move from one coding paradigm to another (web, enterprise, mobile, etc.) they get bogged down in the specifics of their platforms and the syntax of their specific languages. So fostering good fundamental programming chops is a second consideration. And this in not the fault of the programme so much as the necessity of giving students a broad exposure to the field. But for the poor evaluators of their code, it is often akin to trying to mark a trash fire! Yeah, and just like trash fires are usually avoidable, a bit of differentiation of skills can help avoid the pain of student and teacher alike.

So my idea is to put together as series of language and platform agnostic coding chops videos to cover off, in short videos with example code, the art of coding. An intro video will help extricate the coding chops from the environment and language concerns – we’ll park those and use a variety of languages in to drive home the point. Topics I want to cover include:

  • Problem decomposition into pseudocode/flow diagrams
  • Blocks of code (coding anatomy)
  • Code branching (jumping all over the place)
  • Coding to test
  • Variables and memory
  • Labelling conventions
  • Conditional branching
  • Looping
  • Coding for modularity
  • Refactoring and clean coding
  • Parameter passing values and references
  • Commenting practices for sanity and sustainability
  • Compiling as Assembling and linking vs. Coding for an Interpreter
  • Debugging foundations: manual tracing and tracer statements
  • Memory management: implications of being low or high
  • Programming paradigm: Procedural
  • Programming paradigm: Object Oriented
  • Programming paradigm: Functional

I am aiming for 10 minutes or less for each video and a couple of these will be broken into a few videos. I’m wondering if I’m missing anything?