UA-5095748-1

Wednesday, November 20, 2024

How to teach programming to bright non-technical students?

I’m watching online Python programming classes (Google Dev Edu, Berkeley 61aMIT OpenCourseWare, and freeCodeCamp.org Harvard). No, I’m not doing this for fun and I don’t need to learn Python. This is part of my research / learning process. I’m working on an opportunity to teach intro programming to a bunch of bright college non-STEM major students. 

In my quick search, I agree some of the common barriers to learning programming are as follows: 

  • Technical jargons - This is extremely pervasive in software engineering. Especially in basic programming where computer science is like a branch of mathematics so there are shared vocabularies but it’s used with different meanings such as variables, expressions, functions, parameters, etc. 
  • Too many abstractions - There are layers and layers of conceptual framework from how computers work (binary, cpu, instruction set, memory, address space, etc) to high level data structures and algorithms (dictionary, vectors, linked list, search, regular expressions). They are related so it’s hard to teach without overloading students. 
  • No good real world analogies - Steve Job famously said “Computers are like a bicycle for our minds.” Of course, programming is like a recipe. But that analogy just doesn’t quite have the same favor. Same goes for variables, dictionaries, vectors, functions, and the list goes on and on. Job’s analogy successfully conveys the what and the why of computers using a real world analog. Recipe is a good concept analogy for programming. But if you don’t care about cooking, why do you care about writing a recipe to a computer.  The benefit / motivation is not convincing.    
  • Error prone, repetitive, and terse - Once students get past all that, when it comes to actually programming, most people, even programmers would agree that the act of programming is tedious. Between edit, compile, run, debug cycle. The lack of feedback or good introspection tools. It’s more like a witch’s nasty brew with magic incantations thrown in for effect. 
  • Demotivation factors - I suspect there are plenty of systematic stereotypes that have evolved over years. It’s “geeky”. It’s for “smart” people. One research on adult attitude indicates programming is “difficult, boring, and something they generally couldn’t learn” (paper: Challenging stereotypes and changing attitudes: The effect of a brief programming encounter on adults' attitudes toward programming, Polina Charters)
  • AI and tech job recession - Currently top of mind in the news cycle, social media, etc about the evolving cost and benefit of learning to program. Will AI take over programming jobs? Have we reached peak programmers demand? AI, along with rapid potential societal changes, brings uncertainty and anxiety.  

There is no shortage of challenges to teaching something that I love to do. I think that many of these barriers are within our control and influence. As an instructor, I hope to 1) motivate, 2) build mental models, 3) try then theory, and 4) offer practical advice to make programming easier. Start by establishing common ground and context then talk about the larger “why”. Take the time to dispel common myths and misconceptions. Learning is about building new connections, and practice to strengthen those connections. I would start with an understandable problem then show how the concept solves the problem. Next, get hands-on quickly. Have you noticed how gaming ads always show a person doing lame moves? I want to start with trying it, allow me to make mistakes, and then explain the details. Finally, be a coach that guides with practical real life advice. 

Here is my attempt to write my first lesson plan. I welcome feedback. 

Do you have teaching suggestions or a favorite story about learning to program? 

Ricky

No comments: