challenge of programming opening slide
Opening Slide for First Video of Series

I have begun to publish my new series of programming chops, what follows is from the readme file in the root branch of the dedicated GitHub repository for the project. Keep an eye here for updates to the links!

In this series I will focus on the core skills and concepts of coding for any language. I have extensive experience teaching a variety of programming languages (Assembly (ARM), C/C++, JavaScript, Java, PHP, BASH, and others) for a variety of platforms (Linux, Windows, Apple, Android, Web, etc.) and I enjoy helping students get a great start to their careers in development. I started out teaching in the mid-90s with a private college, loved teaching but had not really worked much in the industry. Leaving a job I loved I leapt into a fairly traditional development job – working with a language I had never seen (Lingo), in an environment I had not worked in
before (multimedia using Macromedia director), and I was hired as an expert in object oriented programming. Having a solid foundation in programming languages made this transition quite manageable. From there I worked in a variety of fields: Multimedia, Web, Enterprise, Project Management, and at the end of that part of my career I was an Internet Security expert working with the government as they deployed Public Key Infrastructures. It was at that point I managed to move back towards teaching, doing professional training as a consultant for Entrust. In 2000 the tech bubble burst and I had an opportunity to rethink my career, heading back to school I completed a doctorate in Theology and began teaching at the local university as soon as I passed my comprehensive exams. The discovery I made was that teaching is in my soul, I love it. So when the opportunity came up to teach software development at a college walking distance from my home, I went for it.

The idea for this series comes out of teaching at Algonquin College with students in all levels of their studies. I see some consistent challenges for students: Having trouble taking concepts from one language to another, not having a good sense of how to decompose a problem for programming, and struggling with having a helpful approach (method) to coding. With a grounding in these skills a student can have the confidence to handle the challenges of a career filled with change. I call these programming chops, skills that can be employed in most programming languages and development environments. I hope that these fundamental skills are helpful for my future students and for all who stumble upon this series.

What follows is a tentative schedule for the series, I’ll update as the series develops. Each of these areas will have its own code example branch.

  1. Pre-Programming
    1. The challenge of programming (series introduction)
    2. Problem decomposition, pseudocode, and flow diagrammes
  2. Coding Basics
    1. Blocks of code (basic anatomy of a computer program)
    2. Code branching (jumping around in the instructions)
    3. Code to test (working with your pseudocode)
    4. Variables (how the computer remembers things)
    5. Labelling conventions (writing code that makes sense)
    6. Conditional branching (how the computer makes decisions)
    7. Looping (doing the same things over and over again)
  3. Programming Chops
    1. Coding for modularity (how to stop reinventing the wheel)
    2. Parameter passing (values and references demystified)
    3. Commenting for sanity and sustainability
    4. Refactoring and clean code (making your future life easier)
  4. Development Paradigms
    1. Compiling as assembling and linking
    2. Coding for an interpreter
    3. Debugging old school (manual tracing)
    4. Memory management (the highs and the lows)
    5. Procedural programming
    6. Object oriented programming
    7. Functional programming