How can I teach computer science without using computers?

In some places in the world, people don't usually have access to (and hence little knowledge of) computers, and even if they have, hard- and software are outdated and usage plagued by power outages and such. Access to (good) books also tends to be lacking. How can I teach computer science under such circumstances?

I'm worried that without being able to do experiments and apply what they learn, they won't learn (well) at all even though they are incredibly motivated and devote most of their time to this hobby. Is it possible to teach CS only theoretically?

• People have been fascinated by mathematics for thousands of years. Nobody had access to a digital computer back then. In fact, typically on theory courses you don't need computers at all.
– Juho
Sep 11, 2014 at 6:00
• I would like to point out that the first computer program was written about 100 years before the first computer was ever built.
– Gabe
Sep 12, 2014 at 4:06
• Take a look at cstheory. Most probably those guys need only pen and paper, and it may the highest of computer science (I have no idea what they talk about most of the time). Sep 12, 2014 at 14:53
• It would probably help if you highlighted the areas of CompSci that you intend to cover. Things like discrete math and even data structures or algorithms can be covered on pen and paper alone. Software Engineering on the other hand is likely to be problematic. Sep 12, 2014 at 16:38
• @abhimanyu Great, the question got "protected" before I could post my response; I put it here now: pastebin.com/6tbMtVM8 (This is a long answer, as the possibilities should be obvious but seem not to be. There's many ideas in there and I hope you find something useful…) Sep 13, 2014 at 22:09

Asking how you can study computer science without computers is a bit like asking how you can study cosmology without telescopes. Sure, it's nice to be able to look at the things you're studying and it's often very helpful to be able to play around with things. But there's a whole lot you can do without access to a computer: in extremis, you could probably do almost all of a undergrad course with no computers.

In practical terms, access to computers helps reinforce a lot of what you learn in a computer science course. Programming courses are, obviously, much more natural with access to a computer. On the other hand, being forced to write code on paper does encourage people to think about their code and make sure it really works, rather than just running it through a compiler again and again until it compiles and then running trivial test cases again and again until the obvious bugs go away.

Topics that would be most natural without computers would be the more mathematical ones. All the background mathematics, such as combinatorics and probability. Computability, formal languages, logic, complexity theory, algorithm design and analysis, information and coding theory. Anything to do with quantum computation!

• +1 this distinction between CS and programming is key! My undergraduate CS course had minimal requirements to use a computer, beyond accessing online reading material I could easily have looked up in dead-tree form in a library. Sep 11, 2014 at 16:35
• @CosmicOssifrage I agree but, while CS is not programming, programming is a very useful tool for computer scientists to have at their disposal. And that's why we teach it. Sep 11, 2014 at 16:41
• @Abhimanyu That would depend on your own qualification. If you've got the knowledge and skills, they are only a blackboard away from your students' minds.
– Raphael
Sep 12, 2014 at 10:55
• @vzn No, a large part of programming is learning the art of debugging. It's very important. But it's not computer science. Sep 12, 2014 at 23:41
• @vzn If you quote the man, do it right. He is talking about runtime experiments for the purpose of verifying/refuting (scientific) hypotheses, not debugging. I don't think Sedgewick ever claims that testing/debugging your experimental implementations was science.
– Raphael
Sep 15, 2014 at 10:09

There is the obvious use of paper and pencil. When I was taught signal processing the special signal processor was not directly available to us and we just handed in paper reports.

Note that the great computer scientist Dijkstra apparently did not use computers very much:

Almost all articles in this series appearing after 1972 are hand-written. Having invented much of the technology of software, Dijkstra eschewed the use of computers in his own work for many decades. Even after he succumbed to his UT colleagues’ encouragement and acquired a Macintosh computer, he used it only for e-mail and for browsing the World Wide Web.

Cited from Disjkstra's Memorial

This shows that you can do great computer science without a computer!

Besides paper and pencil computer science problems can also be solved 'in the real world', e.g., demonstration of sorting algorithms with cards or - more unusual - with dance as done by the Sapientia University.

• Any advice on how to effectively do this? The teacher may not have had the benefits of a chalk-blackboard lecture at a big university.
– Raphael
Sep 12, 2014 at 11:02
• Much mathematics is taught chalk-blackboarded. I suppose you just do similar with computer science. Sep 12, 2014 at 22:36
• As an example here is a nice blackboard lecture on splay trees: youtube.com/watch?v=So8szqIvIFs Feb 23, 2015 at 13:29
• Personally, I applied my data structures and algorithms knowlege to office work at a summer job. I used a radix sort on boxes of check stubs and went between one and 2 orders of magnitude faster than anyone else who did that chore, to the point of disbelief. I used a natural merge sort on printed cards that needed to be filed. data structures and computation exists in the real world. Apr 7, 2016 at 7:41

Many computer science theories are purely theoretical and can be solved using pen(cil) and paper. Getting information about them and communicating them to the outside world requires a computer.

• This strikes me to be more of a comment.
– Raphael
Sep 12, 2014 at 11:03

See http://csunplugged.org/ for some great ideas. Google is one of the sponsors.

From the site:

CS Unplugged is a collection of free learning activities that teach Computer Science through engaging games and puzzles that use cards, string, crayons and lots of running around.

The activities introduce students to underlying concepts such as binary numbers, algorithms and data compression, separated from the distractions and technical details we usually see with computers.

CS Unplugged is suitable for people of all ages, from elementary school to seniors, and from many countries and backgrounds. Unplugged has been used around the world for over twenty years, in classrooms, science centers, homes, and even for holiday events in a park!

• The conditions are complex, but that's worth a try when resources permit. Sep 12, 2014 at 1:51
• I agree that this looks good, but in order to make this a proper answer you need to address the specific issues layed out in the question: which resources are needed? Can we expect to have them e.g. in (rural?) Africa?
– Raphael
Sep 12, 2014 at 11:00

You can, it's pretty obvious how you would do it. I'm not sure how useful it'd be to people, but you can.

But I don't even know how a would be teacher of computer science, can ask how you can teach computer science without a computer.

Because if you can teach computer science, then you would know how.

If you know that-

-Algorithms can be written on pen and paper, and traced on pen and paper.
-Flow charts are written on paper.


Studying normalization, the structure of tables of data for databases, can be done on pen and paper. (I only did that on pen and paper when I studied relational databases)

Computer science textbooks don't require a computer.

If you ever picked up a computer science textbook and studied it in a library you'd know you didn't need a computer to understand it.

But you should be aware that anybody that has sat in a computer science class can see that most people cannot program, it's just beyond them. Too abstract for people. That is even true at University level.

http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

A substantial minority of students fails in every introductory programming course in every UK university. Despite heroic academic effort, the proportion has increased rather than decreased over the years. Despite a great deal of research into teaching methods and student responses, we have no idea of the cause.

I would add that to call it a substantial minority, is an understatement. It's a small minority that -can- program.

I would note though, the cause of the decline that he witnessed.. As computers got more popular e.g. between 2000 and 2010 (he wrote that in the middle of that decade), more wollies were interested in studying 'computer science'. Before then, only the more fanatical people were interested. And earlier on, using computers was more technical, but as computers got easier for the average person to use, and more powerful in the applications they could run, then more wollies were using them and more people that were only interested in what they could do rather than how they do it and how to do it.

• What the heck are "wollies"? Sep 11, 2014 at 18:21
• @NateEldredge Urban dictionary: «Jovial term for someone who says or does something silly / Someone who adds 2 and 2 and gets 5. "What a wolly"» Sep 11, 2014 at 18:49
• @NateEldredge Normally spelled "wally". Sep 11, 2014 at 23:12
• Berating the OP is not an answer.
– Raphael
Sep 12, 2014 at 11:00

It WOULD be possible to teach the concepts of Computer Science without a computer. Of course without access to a computer, what good does learning Computer Science really do?

When I was learning Computer Science in high school, our first several classes didn't involve computers at all. Instead, we worked from a book called Karel++, which taught object oriented concepts. The made up language can be "run" on a whiteboard or blackboard pretty easily because all of the code takes actions on a graph. Our first few assignments were all handwritten and the professor would demonstrate the correct solution on the board at the start of the next class.

When we started discussing algorithms, our professor called us all up to the front of the room and told us to stand in a line. He proceeded to demonstrate a few different sorting algorithms - starting with something silly he called "monkey sort" where he would randomly exchanged two of us and then check to see if we were sorted every iteration, but then performing bubble sort and shell sort - by "running" them on us.

He drew diagrams on the board, explaining the basics of how computer memory and the stack work. He demonstrated variables and pointers (it was a C++ class) and from there to linked lists and trees...

I could probably add to this if I went over the notes I kept from that class, but that's all I remember now. If these suggestions are interesting, I can expand on this answer.

• You seem to confuse programming (the craft) with computer science.
– Raphael
Sep 12, 2014 at 14:49
• @Raphael I understand that the mechanics of programming in a particular language may not be important to the science part, but how much can you really divorce computer science from programming before it becomes so theoretical as to be incomprehensible to students who are possibly unfamiliar with even how to operate a computer? I could alter my answer to separate the two, but the image that comes to my mind based on the OP's questions is not adults looking to learn about the mathematical underpinning of complexity theory, but grade schoolers needing an introduction to the applications of CS. Sep 12, 2014 at 15:05
• @DavidRicherby I've asked the OP for clarification on who (age/experience with computers) the target group of students will be and what material he intends to teach. I will adjust my answer accordingly. If I may, I would suggest that a more direct analogy would be creative writing vs knowing how to use alphabets and vocabularies. Except even that analogy falls short because the study of programming languages is actually encompassed by computer science. Sep 12, 2014 at 15:42
• @Blackhawk Of course, no analogy is perfect (almost by definition). But, while the design of programming languages is CS, simply using them is not. Sep 12, 2014 at 15:44

I did a computer science degree and thought we were taught much programming (in various languages) we also were taught many mathematical aspects (and some hardware too).

The maths parts were more important to the first year - think matrix mathematics which is essential to 3d graphics (how do you calculate a surface normal for lighting a vertex?). We did a lot of statistics - think job throughput analysis, what rate of jobs can you pass into a system before it clogs up? That's pretty important for many centralised systems, and networking.

You can teach many algorithms, one poster here mentioned giving students a number each and then getting them to sort themselves using various algorithms (that's active and informational). In fact, any algorithm that can be described in an animated image on the internet can be taught in this way. Similarly the fundamentals of computing - program counter, accumulator and registers can be taught in the same way, or on paper. How about student-based multithreading - set a group of students a card game with a stack between each of them in a classic multi-threading exercise (or the 1 shared spoon problem). Or design patterns, I can think the blackboard architecture is perfect for students to learn how multi-process communication can be implemented, or a n-tier architecture described as a sort of chinese-whispers game or finite-state machines would suit students acting as modules in a 'living computer'. You could teach binary maths, or stack-based (ie reverse polish) execution.

Of course if you have access to electronics you could build an analog computer out of op-amps. They're cool.

Unfortunately all this will seem more like maths than computing, but much of it will stick and one day they'll understand why they were taught it (assuming they go into the computing industry). Remember that anything a computer can do, a person can do - it'll just take him a lot more time and boredom to achieve the same result. You just have to take simple examples to demonstrate what the computer would do, and imagination to describe computing fundamentals in a less dry way that I was taught, way back :)

Asking how you can study computer science without computers is a bit like asking how you can study cosmology without telescopes.

I am mostly answering just to react to this statement and because I strongly disagree with other answers. The correct comparison would in my opinion be

Asking how you can study computer science without computers is a bit like asking how you can study cosmology without a cosmos.

Computer Science is about computers, not just using them. True, a lot of Computer Science is based on mathematics, so the mathematical parts can be studied without computers (thus you're teaching mathematics then) just like instead of cosmology you can study physics which will be useful once there is a cosmos (or have access to telescopes), but in the end what you're studying is still physics.

Now, what everybody is doing in the answers here is note how bachelor level computer science is mostly theoretical and doesn't require computers, the thing those people are IMHO forgetting is that the same people have used computers extensively up to that point. Without a natural understanding directly delving into the theoretical stuff will just cause many students to either give up or have a terribly mismatched view of computer science. So teach some programming, understanding of what computers are first and only afterwards get into the theoretical stuff.

Like if I'm teaching students in Africa that have no knowledge of a computer besides general-level know-how but who aspire to learn advanced computer science and devote most of their time to this hobby?

Depends on budget:

• Nearly no budget If you've the money to travel to Africa grab a bunch of arduino clones (there are functional arduino clones for $13, check this list for example) , some output components (such as LEDs) and one laptop. Start with some basic programming, teach it to them on paper and have to input it on the laptop. It's not the most efficient way, but it will teach them at least a basic basic understanding of what computers practically are. • Low budget Buy \$750 dollars worth of \$50 android smartphones and keyboards (microusb keyboards or bluetooth keyboards, check ebay.com or aliexpress.com for both the smartphones and keyboards). Yes they are crappy in a million ways, don't even tell me about it. Still though, you can input data on them (though don't even consider using the onscreen keyboards) and there are simple coding apps for android. Have multiple students per smartphone and that can work quite well. So let me be clear, I am not saying Computer Science can't be taught without computers, just that you need to be used to computers and know them fairly well before you should start considering such a thing. • I've either misunderstood your disagreement with my answer or I disagree with it. If we knew there was no cosmos, cosmology would be a total fabrication. If we genuinely believed in the existence of the cosmos, cosmology would be at worst a well-intentioned waste of resources. But, actually, we know it exists. Cosmology without telescopes is saying "Hey, I can't observe the cosmos this week but it's definitely there. I can learn about it now and look at it next week." CS without computers is saying, "Hey, computers definitely exist so I can study them now and physically experience them later." Sep 12, 2014 at 10:16 • And teaching someone computer science without them ever having used or practically understood what a computer is is just as much of such a fabrication. You don't directly interact with the cosmos through a telescope, it's just one of many ways to observe it. At night it can still be seen and it can be easily understood at a basic level. The same simply does not apply to computers. Sep 12, 2014 at 10:21 • I completely disagree that it's fabrication to teach somebody about something that genuinely exists but that they haven't experienced. Sep 12, 2014 at 10:31 • @DavidRicherby: You and others here are so ingrained with being used to computers it's hard to comprehend what it truly means to try and teach somebody computer science without a basis with computers in the first place... I know somebody who has indeed given courses to youth who never used computers with actual computers... he didn't even attempt teaching programming or computer science and just getting to the base level of comprehension of what a computer is is a task of it's own if you didn't grow up with computers. (continued) Sep 12, 2014 at 11:05 • Nowadays it's relatively easier as more youth has at least some experience, but the question was about those cases where they do not have any experience at all. That same individual told me how in the country where he was teaching there was a period where students from secondary school would arrive at informatics courses in university without ever having touched a computer before... having learned just some theory in secondary school and how in most (by far not all) cases that ends poorly. The problem/idea is that computer jobs pay well, so they just want to get those no matter what... Sep 12, 2014 at 11:07 Computer Science is about algorithms and not (strictly) about computers (and electronics). As such, study of algorithms (even of elementary arithmetic) can bring about understanding of computer science and programming. Remember that even term "algorithm" is a paraphrase of the author of an arithmetica book (al-Khwārizmī, circa 9th cent. CE). Study of algorithms can be done using elementary means, but should provide coverage of why the algorithm works, how it came about and how can one actually demonstrate that it works correctly. Thwe history behind the evolution of computer science and algorithms and programming is not to be underestimated. For example, Babbage's/Ada's calculator, Enigma machine, Konrad Zuse's plankalkul, ENIAC etc. Then one can introduce programming (and programming languages) as a way to formalize algorithms. This can also be done (to a large extend) using elementary means. Note, some studies have shown that peole learning programming have two main difficulties in understanding (related to the overloading of symbols for example asignment vs equality test and the operation of a RAM machine). 1. Loop constructs (e.g for, while etc..) seems difficult 2. Assignment vs equality testing, seems also difficult. So one can make sure these are clearly grasped and understood by the people. Moreover if any computer can be accessed (even a calculator which can be programmed), this can be used to provide application examples and hands-on experience. Else one can use a simulated computer. This can be done in various ways, for example a group of people can simulate parts of a computer and the class can design algorithms to solve various problems for this simulated computer and see how it goes. This can be seen as a game also, be creative and make-do. Then some (abstract) computation models (for example Turing Machines) can be introduced and related to the previous material on algorithms and the formalisatinn into a (programming) language. If one wants to introduce the electronics of an actual computer this can be done also in two parts. Remember that even in universities some electronics and computer architecture courses are theoretical (one does not actually come into contact with a CPU or design one). So some principles of operation of electronics (and the underlying physics) related to computer architecture can be introduced (semiconductors, solid-state energy zones, p-np gates, etc.). Then one can leverage the previous material about programming and algorithms and introduce (modern) techniques of CPU design (and description) which are used in the industry (Logic gates, Flip-Flops, FPGA, VHDL, CMOS circuits etc). This can be taken further into, CPU design architecture issues like parallelism, pipelining, cache memory, vector adressing, micro-programming, DMA, etc.. Well, ok maybe this can be too much, but added for making the answer self-contained. Are you looking to teach programming? When I was a kid, we went on a camping holiday and I took the computer manual with me. I was able to write a simple game using pen and paper. This was my first real program I guess, so a lot of learning was involved. I knew what I wanted to do, but there were a lot of false starts while I figured it out. But eventually I was able to write out the whole code. I guess what I'm saying is start with pseudo code and\or flow charts to plan the project and then translate into code. I was able to debug a lot of my code just by reading it. You could also use peer reviews here. • I'd definitely go with pseudocode rather than flowcharts. Sep 12, 2014 at 10:18 • This question deserves more than one experience data point per answer. – Raphael Sep 12, 2014 at 10:58 To echo to the previous answers: there is a lot to be learned just from reading and doing pen and paper exercises. If you can work the problem on paper you have the hard part down pat. However, I also wish to mention the existence of fairly cheap ways to expose students to CS. Are you familiar with the Raspberry Pi Project? Even if several people has to share or you can only afford to get 1 or 2 units it might still be worth considering as a way to expose your students to the technology. • This does not add anything over existing answers. – Raphael Sep 12, 2014 at 10:58 • @Raphael True,though note that the other answers that mention cheap computing devices were posted after this one. Sep 12, 2014 at 11:51 am going to try wiggle on this one a little & "think outside the box". full blown computers are indeed expensive, sometimes resource-demanding and tricky to maintain. but there are many inexpensive electronic systems that mimic full-blown computers eg with LCD screens etc and which many basic programming principles can be applied, many battery powered. there is also a close connection of EE principles with computing such as building binary logic circuits etc.; also nowadays some toys have programmability capabilities. • programmable calculators. some have entire programming languages (not so high level but more like assembly languages) built into them. some would support advanced programs. • Raspberry pi minicomputer/microcontroller was developed for this purpose & runs linux. less than$40 in many cases.

• parallax STAMP kit microcontroller requires a USB connection but maybe a Raspberry pi would be sufficient. see also PIC microcontroller

• robotics systems. there are many inexpensive ones that have some programmable logic. Lego robotics mindstorms/nxt is one of the best & there are less expensive models.

• some console games have programming principles built into them. eg Little Big Planet has amazing programming features built into it. there are some handheld versions of programmable games. there are many youtube videos of complex constructions for inspiration.

• smartphones are the new programming world. they have browsers that run javascript, and there are many programming related apps, and one could even surf programming sites with an internet connection (incl wifi).

also suggest as in comments building TM programs eg for addition etc and attempting to follow them by hand.

• I suspect that people who don't have access to computers also don't have access to Lego Mindstorms, console gaming systems, smartphones or wifi. Sep 11, 2014 at 23:11
• a fair/ obvious/ anticipated point but nothing mentioned was explicitly ruled out in the question criteria. its not known from the question whether the students dont have stuff because its eg expensive, and everything listed above is cheaper than desktop computers as a benchmark. students or schools who can afford textbooks could afford the above (maybe sharing it). and if textbooks are not affordable, then what else is left?
– vzn
Sep 11, 2014 at 23:22
• (fyi question scope was chged significantly by mod since this answer written, to me that question edit makes major assumptions not nec intended by original writer & prefer the original ambiguity as a feature not a bug)
– vzn
Sep 12, 2014 at 15:22