Computing for Non Computer Scientists

This year (2018) I’ll be teaching CODE1161, the introductory programming course for creatives, analysts and entrepreneurs, at UNSW. My team and I are left the fun yet elusive task of designing a course that provides a general introduction to the field of computing but also leaves them productive in a couple of areas. The old breath versus depth problem.

alt text

What should be taught?

The most import skill I’ve picked up as a someone in the game (programming) professionaly for three years are the general problem solving skills. Learning programming teaches you how to solve problems generally. How?

A tale from the past: Prior to me picking up my computer science degree in my last year of my commerce/actuarial degree, most “work” came in the form of solving equations or systhesising arguments. There was no way to know whether you got the right answer until you received feedback from a tutor or lecturer. With computing it’s different, you know the problem and you can (mostly) see whether your solution fixes it. This tight feedback loop couple with the great resource that is the internet gives rise to the emergant behaviour that is useful to solve any problem. I’m going to have a crack at breaking down this emergent behaviour.

Four steps to success or QSUT (needs a better name)

┌────────────────────────┐
│                        │
│      Question/Want     │
│                        │
│                        │
└────────────┬───────────┘
             │            
┌────────────▼───────────┐
│                        │
│         Search         │
│                        │
│                        │
└────────────┬───────────┘
             │            
┌────────────▼───────────┐
│                        │
│       Understand       │
│                        │
│                        │
└────────────┬───────────┘
             │            
┌────────────▼───────────┐
│                        │
│         Tweak          │
│                        │
│                        │
└────────────────────────┘

To expand a little further:

  1. Question/Want: Be able to break a larger problem into smaller more searchable sub problems
  2. Search: Understanding what to search and where to search. Stack overflow is good for code snippets, documentation is better for understand the api design and available options
  3. Understand: Not taking the found script as a black box, rather understanding every line of it. This may require recursive step to step 1 (pretty sure that’s wrong).
  4. Tweak: Adapt solution for the specific use case. May also require a heading back to step 1.

This is roughly the process most programmers end up imbue in their workflow knowingly or unknowingly. Non-programmers can also develop this too however the exegencies of their work may not be so condusive to such a process.

QSUT (yep really needs a better name) this essentially what the course aims to teach them. The vehicle for learning these meta skills will be learning Python, some machine learning and data analysis.

alt text