On a conceptual level, the three are entirely separate activities.

  • Programming is giving computers instructions to achieve a certain task, line-by-line, within a particular language. Generally, a single typo or mistake would crash the programme.

  • Computer science (“CS”) is the more abstract, often mathematical, study of various issues arising out of computers. E.g. what is computable; how much time or memory do algorithms take; how electric circuits or distributed systems work etc. There is more fault tolerance than programming: you may “get” a concept despite making a mistake with the details.

  • IT is the largely practical and sometimes ad hoc art of how to make machines work as intended. Fault tolerance can sometimes be very high, even though serious dangers (e.g. running “rm -r”) also lurk.

But in practice, the three are often closely interconnected.

  • In order to replicate the results of other people’s programmes, it is usually necessary to set up the correct “environment”, i.e. software settings. This cannot be done without a degree of IT skills.

  • Many CS ideas are difficult to grasp in the abstract: to try them out and to better understand them, hands on programming is almost unavoidable.

  • Without an interest in the theoretical reasons why computers are made the way they are, it is very difficult to sustain an interest in the practical side of IT. Why is memory getting cheaper and cheaper? Why is backup difficult? Why is security difficult? Why do computers sometimes freeze? What is WiFi and what happens when you visit a website? There is only so far one can go in remembering/discovering bags of IT tricks without at least an interest in the deeper reasons behind these tricks.

This interconnection may go some way in explaining why in the popular imagination, the three are often confused with each other, even though someone could be very strong in one of the three activities but not others.