Programming

What to expect

This chapter discusses programming, looking at the history of programming education from Knuth’s “programmers’ bible” through the UK’s 1980s computer literacy project, to computational thinking, Barefoot and PRIMM.

An extract is below:

It’s not about code

Dijkstra’s said “Computer Science is no more about computers than astronomy is about telescopes” [1]. However you learn to code and whatever language you choose to do it in, it’s important to remember that programming is not about keywords, punctuation and indentation, but about problem solving.

When Peter Samson learned the opcodes of the Tixo, he did so to solve problems. He wrote his music player to solve a problem, namely “How can I make this machine play Bach?”.  The 9-man and 1-woman team who created the FORTRAN compiler wanted a quicker way to code mathematical programs needed to design aircraft, so they wrote a compiler to solve that problem. Then everyone used the compiler and wrote high-level programs to solve the mathematical problems. When Katie Bouman wanted to take a picture of a black hole by combining images from several telescopes, she wrote a program to solve that problem.

Programming exists to solve problems using a machine. To do this, you must find a way to state the problem computationally, then get a machine to perform the computation. The first part is what we now call Computational Thinking. It’s easily the largest part of the process, but often overlooked by novice programmers and expert instructors alike.

Dijkstra quote link

References

The PCK section in this chapter includes these references:

[37] K.L. Bouman’s testimony to US House Committee on Science etc. May 16, 2019 link

[38] Email to University of Virginia Computer Science mailing list, Dijkstra, June 1975. link

[39] BBC’s “The Computer Programme”, episode 2, February 1982 link

[40] Steve Furber, foreword to “Shut Down or Restart”, Royal Society, 2012. link

[41] National Curriculum level descriptors were abolished in 2015 after research by Dylan Wiliam concluded they imposed a fixed mindset and therefore limiting, not assisting progress. link

[42] Secondary Curriculum Handbook 2007 via teachfind.com

[43] “Shut Down or Restart”, ibid

[44] “Shut Down or Restart”, ibid

[45] “Shut Down or Restart”, ibid

[46] Dijkstra quote link

[47] CAS Barefoot CT booklet link

[48] CT on Teaching London Computing site link

[49] TechTarget pseudocode definition link

[50] Gries 1974 via “Computer Science Education”, Sentance et al 2018 link

[51] Teaching Programming, Caspersen via Sentence et al 2018 link

[52] Teaching Programming, Caspersen, ibid

[53] CS4FN “Searching to Speak” link

[54] “Hacking the Curriculum”, Livingstone & Saeed, John Catt Educational Ltd, 2017.

[55] 100 Ideas for Secondary Teachers: Outstanding Computing Lessons, Simon Johnson, Bloomsbury 2021

[56] Misconceptions and the Beginner Programmer, Sorva 2013 via Sentence et al 2018 link

[57] Misconceptions and the Beginner Programmer, Sorva 2013 ibid

[58] Role of Live-coding in Learning Introductory Programming – Raj, Patel et al link

[59] Teach Like Nobody’s Watching, Mark Enser, Crown House 2019 link

[60] Computational Fairy Tales, Kubica, CreateSpace 2012 link

[61] Inspiring computing booklets, Teaching London Computing website link

[62] Chi 1989, VanLehn, 1996, via Sentance et al 2018, ibid

[63] Clark, Nguyen and Sweller, 2005 via Sentence et al 2018, ibid

[64] Rubber duck debugging, Wikipedia entry link

[65] Engaging Learners through pair programming, NCCE blog, Robinson et al 2019, link

[66] Subgoal labelling influences student success and retention in CS, Guzdial, 2020 link

[67] Computing Education Research Blog entries tagged parsons-problems, Guzdial, 2020 link

[68] Runestone Academy CS Principles course, online Jupyter notebook: link

[69] Grover tbc via Sentance et al 2018, ibid

[70] EduBlocks website by Joshua Lowe link

[71] Physical Computing intro on microbit.org website link

[72] https://helloworld.raspberrypi.org/articles/hw14-the-i-in-primm