Teaching Programming with Computational and Informational Thinking

Greg Michaelson


Computers are the dominant technology of the early 21st century: pretty well all aspects of economic, social and personal life are now unthinkable without them. In turn, computer hardware is controlled by software, that is, codes written in programming languages. Programming, the construction of software, is thus a fundamental activity, in which millions of people are engaged worldwide, and the teaching of programming is long established in international secondary and higher education. Yet, going on 70 years after the first computers were built, there is no well-established pedagogy for teaching programming.


There has certainly been no shortage of approaches. However, these have often been driven by fashion, an enthusiastic amateurism or a wish to follow best industrial practice, which, while appropriate for mature professionals, is poorly suited to novice programmers. Much of the difficulty lies in the very close relationship between problem solving and programming. Once a problem is well characterised it is relatively straightforward to realise a solution in software. However, teaching problem solving is, if anything, less well understood than teaching programming.

Problem solving seems to be a creative, holistic, dialectical, multi-dimensional, iterative process. While there are well established techniques for analysing problems, arbitrary problems cannot be solved by rote, by mechanically applying techniques in some prescribed linear order. Furthermore, historically, approaches to teaching programming have failed to account for this complexity in problem solving, focusing strongly on programming itself and, if at all, only partially and superficially exploring problem solving.

Recently, an integrated approach to problem solving and programming called Computational Thinking (CT) (Wing, 2006) has gained considerable currency. CT has the enormous advantage over prior approaches of strongly emphasising problem solving and of making explicit core techniques. Nonetheless, there is still a tendency to view CT as prescriptive rather than creative, engendering scholastic arguments about the nature and status of CT techniques. Programming at heart is concerned with processing information but many accounts of CT emphasise processing over information rather than seeing then as intimately related.


In this paper, while acknowledging and building on the strengths of CT, I argue that understanding the form and structure of information should be primary in any pedagogy of programming.


computational thinking; informational thinking; programming; teaching

Full Text:



(Barnes, 2012) D. J. Barnes and M. Kölling, Objects First with Java: A Practical Introduction using BlueJ, Fifth edition, Prentice Hall / Pearson Education, 2012.

(Clocksin, 1981) W.F. Clocksin and C.S. Mellish, Programming in Prolog, Springer Verlag 1981.

(Cole, 1989) M. Cole, Algorithmic Skeletons: structured management of parallel computation, Pitman, 1989

(Curzon, 2014) P. Curzon, M. Dorling, T. Ng, C. Selby and J. Woollard, Developing computational thinking in the classroom: a framework, Computing at School, 2014.

(Cutts 2014) Q. Cutts, R. Connor, P. Donaldson and G. Michaelson, `Code or (Not Code): Separating Formal and Natural Language in CS Education', WIPSCE 2014, 9th Workshop in Primary and Secondary Computing Education, Bonn, Germany, Nov 5-7, 2014

(Dijkstra, 1968) E. Dijkstra, Go To Statement Considered Harmful, Communications of the ACM, Vol. 11, No. 3, March, 1968, pp366-71,in E. N. Yourdon (Ed), Classics in Software Engineering, Yourdon Press, 1979.

(Dijkstra, 1969) E. Dijkstra, Structured Programming, in Report of NATO Science Committee Conference, Rome, Italy, October 1969, in E. N. Yourdon (Ed), Classics in Software Engineering, Yourdon Press, 1979.

(Dromey, 1982) R.G. Dromey, How to Solve it by Computer, Prentice-Hall, 1982.

(Foster, 1995) Ian Foster, Designing & Building Parallel Programs: Concepts & Tools for Parallel Software Engineering, Addison-Wesley, 1995.

(Gamma, 1995) E. Gamma, R. Helm, R. Johnson and J. Vlissides, Design Patterns: Elements of Reusable Object- Oriented Software, Addison-Wesley, 1995.

(Haigh, 2014) T. Haigh, M. Priestly and C. Rope, Los Alamos Bets on ENIAC: Nuclear Monte Carlo Simulations, 1947- 48, IEE Annals of the History of Computing, Vol 36, No. 3, July-Sept 2014, pp42-63.

(Horowitz, 1976) E. Horowitz and S. Sahni, Fundamentals of Data Structures, Pitman, 1976.

(Jackson, 1975) M. A. Jackson, Principles of Program Design, Academic Press, 1975.

(Kao, 2011) E. Kao, Exploring Computational Thinking at Google, CSTA Voice, Vol 7, Issue 2, May, 2011, p6. http://csta.acm.org/Communications/subCSTAVoice_Files/csta_voice_files/csta_voice_05_2011.pdf

(Knuth, 1968) D. Knuth, Fundamental Algorithms: The Art of Computer Programming, Vol. 1, Addison-Wesley, 1968.

(Ma, 2005) L. Ma, J. D. Ferguson, M. Roper, and M. Wood, A collaborative approach to learning programming: a hybrid learning model. In: 6th Annual Higher Education Academy Subject Network for Information Computer

Science conference, August, 2005.

(Mattson, 2005) T. Mattson, B. Sanders and B. Massingill, Patterns for Parallel Programming, Addison-Wesley, 2005

(McCorduck, 1983) P. McCorduck, Introduction to the Fifth Generation, Communications of the ACM, Vol. 26,

Number 9, pp629-30, September, 1983.

(Michaelson, 1989) An Introduction to Functional Programming Through Lambda Calculus, Addison-Wesley, 1979.

(Michaelson, 2014) G. Michaelson and Q. Cutts, Haggis: full pseudocode specification,

http://www.macs.hw.ac.uk/~greg/Teaching%20Computing/Haggis%202.docx [accessed 2/5/14]

(Morrison, 1961) A. A. Lovelace, Sketch of the Analytic Engine Invented by Charles Babbage by L. F. Menabrea. With Notes upon the Memoir by the Translator, Ada Augusta Countess of Lovelace, in P. Morrison and E,. Morrison (Eds), Charles Babbage and his Calculating Engines, Dover, 1961.

(Naughton, 2012) J. Naughton, Why all our kids should be taught how to code, Observer New Review, 31/3/12, http://www.theguardian.com/education/2012/mar/31/why-kids-should-be-taught-code [accessed 2/5/14]

(Nuutila, 2005) E. Nuutila, S. Törmä and L. Malmi, PBL and Computer programming – the Seven Steps Method with Adaptations, Computer Science Education, Vol. 15, No. 2, pp123-142, June, 2005.

(O’Kelly, 2005) J. O'Kelly, J. A. Mooney, S. Bergin, S.Dunne, P. Gaughran, and J.Ghent, An Overview of the Integration of Problem Based Learning into an exiting Computer Science Programming Module, Pleasure by Learning, Cancun, Mexico, 2004.

(Papert, 1980) S. Papert, Computer-based microworlds as incubators for powerful ideas. In R. Taylor (Ed.), The computer in the school: Tutor, tool, tutee (pp. 203–210). New York: Teacher’s College Press, 1980.

(Parnas, 1972) D. Parnas, On the Criteria to Be Used in Decomposing Systems into Modules, Communications of the ACM, Vol 5, No. 12, pp1053-58, December, 1972, in E. N. Yourdon (Ed), Classics in Software Engineering, Yourdon Press, 1979.

(Polya, 1990) G. Polya, How to Solve It (2nd Edition), Penguin, 1990.

(Schmidt, 1983) H. Schmidt, Problem-based learning: rational and description, Medical Education, Vol. 17, pp11-16, 1983.

(Shein, 2014) E. Shein, Should Everybody Learn to Code?, CACM, Vol 57, No 2, February 2014, p16-17.

(Sierra, 2013) A. J. Sierra, T. Ariza and F. J. Fernandez, PBL in Programming Subjects at Engineering, Bulletin of the IEEE Technical Committee on Learning Technology, Vol. 15, No. 2, April, 2013.

(Stevens, 1974) W. Stevens, G. Myers and L. Constantine, Structured Design, IBM Systems Journal, Vol. 13, No. 2, May , 1974, pp115-39, in E. N. Yourdon (Ed), Classics in Software Engineering, Yourdon Press, 1979.

(Stevens, 2000) P. Stevens with R. Pooley, Using UML: Software Engineering with Objects and Components, Addison- Wesley, 2000.

(Wickelgren,1974). W.A. Wickelgren, How to Solve Problems, Freeman, 1974.

(Yourdon, 1979) E. Yourdon and L. L. Constantine, Structured Design: Fundamentals of a Discipline of Computer Program and System Design, Prentice-Hall, 1979.

(Weinberg, 1971) G. M. Weinberg, The Psychology of Computer Programming, Van Nostrand Reinhold, 1971.

(Wilkes, 1951) M. Wilkes, The preparation of programs for an electronic digital computer, Addison-Wesley, 1951.

(Wing, 2006) J.M. Wing, Computational Thinking, CACM Viewpoint, March 2006, pp. 33-35.

(Wirth, 1971) N. Wirth Program Development by Stepwise Refinement, Communications of the ACM, Vol. 14, No. 4, April 1971, pp. 221-227

(Wirth,1973) N. Wirth, Algorithms + Data Structures = Programs, Prentice Hall, 1973.


  • There are currently no refbacks.

Copyright (c) 2015 Greg Michaelson