22

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?

Raphael
  • 72,336
  • 29
  • 179
  • 389
Abhimanyu
  • 323
  • 2
  • 6
  • 14
    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 '14 at 06:00
  • Another question: do you (or the anonymous hypothetical person) have access to textbooks, say via a (university) library, or has the funds and opportunity to buy some? – Raphael Sep 11 '14 at 10:25
  • The Art of Computer Programming by Donald Knuth contains a lot of material which does not require a computer to learn. – Thorbjørn Ravn Andersen Sep 11 '14 at 20:35
  • Computer science, and software engineering, are not always the same thing. You can certainly teach things like lambda calculus, and even things as complex as optimization, entirely on paper. You might also want to try to contact organizations such as OLPC to see whether you can get a hardware donation. Also, remember that computers such as the Raspberry Pi or Arduino can be had much less expensively than full PCs, if you really want folks to see programs run. – keshlam Sep 12 '14 at 02:45
  • 3
    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 '14 at 04:06
  • 2
    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). – Trylks Sep 12 '14 at 14:53
  • As a clarification, can you explain details of your students and the material you would like to teach? In @Raphael's comment on my answer, he points out that programming and computer science are separable to some extent. Would these students be adults or children in grade school? Are they familiar with computers and how to use them or are they starting fresh? Do you intend to teach them only abstract concepts such as data structures, algorithms, computational complexity, etc, or will you also be teaching them to apply these with a programming language? – Blackhawk Sep 12 '14 at 15:16
  • 1
    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. – NotMe Sep 12 '14 at 16:38
  • In a very real sense, Computer Science -- as opposed to Software Engineering -- is a branch of mathematics and can be approached as such, just as we approach physics through the math. It's a lot more fun if you have the opportunity to try out some of it in the lab and prove to yourself that it really works as the theory predicts (and try to explain where the errors come from), but it isn't actually necessary. But that assumes you have students who actually want to learn theory. – keshlam Sep 13 '14 at 01:27
  • What are the chances, I just stumbled upon this video and remembered your question. Unplugged - Graph Paper Programming – ADTC Sep 13 '14 at 02:07
  • Sorry for the self-promotion, but I've developed lecture notes for an introductory programming class at my university: https://www.dropbox.com/s/yc2tshnap8j8xec/lecturenotes.pdf They are designed to help people with programming skills who may not have access to a computer. So technically it is possible to teach CS without a computer (especially topics like TCS will be even easier). It just may be harder when dealing with "Software Engineering" topics, but I'd argue it is still possible. – Ryan Dougherty Sep 13 '14 at 16:54
  • 1
    @abhimanyu Great, the question got "protected" before I could post my response; I put it here now: http://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…) – nobody Sep 13 '14 at 22:09
  • @nobody: your answer was very good. And very large. – Abhimanyu Sep 15 '14 at 02:22
  • A minor comment is that you always have a computer, namely yourself. I believe that in the early days of computer science – zpavlinovic Sep 17 '14 at 20:56

12 Answers12

24

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!

David Richerby
  • 81,689
  • 26
  • 141
  • 235
  • 11
    +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. – Cosmic Ossifrage Sep 11 '14 at 16:35
  • 4
    @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. – David Richerby Sep 11 '14 at 16:41
  • That's right, but mostly, I want to ask how those aspiring students learn computer science without the resources? What ways one shall use to teach them? How can one make them familiar with the advanced concepts of computer science? Books are a good bet, but quality books are a rare sight, plus computer systems are outdated... – Abhimanyu Sep 12 '14 at 01:46
  • 2
    @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 '14 at 10:55
  • If you get one copy of, say, Kaldewaij's "Programming: the Derivation of Algorithms", you can teach the rest on the blackboard. Despite being only a little over 200 pages, this should contain enough material for the first year of post-secondary education in programming if the students have an excellent background in mathematics. Requires substantial time from you (and your TAs) to check the proofs in the tests (and homework). – Erik P. Sep 12 '14 at 22:02
  • -1, think that a large part of CS is learning the art of debugging and how easily it is to write buggy code & how hard it is to debug it & remove defects, often only discovered on running real code. also think much of it is best learned in an applied, interactive and empirical way. know there is an institutional concept that CS does not really require computers in theory but think this is unrealistic in practice. however, as answered, a proliferation of many devices qualify as "nearly a computer". but, also concede the question is nearly contradictory under this interpretation. – vzn Sep 12 '14 at 23:39
  • 2
    @vzn No, a large part of programming is learning the art of debugging. It's very important. But it's not computer science. – David Richerby Sep 12 '14 at 23:41
  • 1
    @vzn: you're talking about software engineering. CS had little to do with debugging, or even computers at all. "Computer" in CS refers to idealized machines like finite state machines, automatas, or Turing machine which are mathematical constructs and they behave very differently to a real machine. – Lie Ryan Sep 13 '14 at 00:31
  • wow lol uh huh and hows that working out for you? sort of like physicists who have never done an actual experiment? try Sedgwick, Putting the Science Back in Computer Science "The algorithm designer who does not run experiments risks becoming lost in abstraction" – vzn Sep 13 '14 at 03:26
  • 2
    @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 '14 at 10:09
  • 1
    Algorithms are a major part of computer science, and a lot of them were invented before computers were thought up. It is possible to learn about computer science without a computer to actually run your algorithm. (In fact, my first semester during my freshman year was sort of like that.) – code_dredd Oct 10 '15 at 22:13
10

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.

Raphael
  • 72,336
  • 29
  • 179
  • 389
  • 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 '14 at 11:02
  • 3
    Much mathematics is taught chalk-blackboarded. I suppose you just do similar with computer science. – Finn Årup Nielsen Sep 12 '14 at 22:36
  • As an example here is a nice blackboard lecture on splay trees: https://www.youtube.com/watch?v=So8szqIvIFs – Finn Årup Nielsen Feb 23 '15 at 13:29
  • 2
    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. – JDługosz Apr 07 '16 at 07:41
8

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.

Dave Clarke
  • 20,205
  • 4
  • 68
  • 113
7

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!

cdjc
  • 179
  • 1
  • 4
  • The conditions are complex, but that's worth a try when resources permit. – Abhimanyu Sep 12 '14 at 01: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 '14 at 11:00
3

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.

barlop
  • 199
  • 1
  • 6
2

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.

Blackhawk
  • 174
  • 8
  • 1
    You seem to confuse programming (the craft) with computer science. – Raphael Sep 12 '14 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. – Blackhawk Sep 12 '14 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. – Blackhawk Sep 12 '14 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. – David Richerby Sep 12 '14 at 15:44
  • 1
    @DavidRicherby I've just read the tour page for CS and specifically the "ask about..." and "DON'T ask about..." and I get the impression that too many people ask/answer questions on this site that would be much better over on SO... so I apologize if I've contributed to that. Can you point out to me the specific things I could change about this answer to bring it in line with the goals of the site? I suspect I should at a minimum remove the references to "semicolon" and "C++", but what about the use of Karel++ as a teaching tool for the concept of Object Oriented languages? Or computer memory? – Blackhawk Sep 12 '14 at 15:54
2

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 :)

gbjbaanb
  • 209
  • 1
  • 4
1

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.

David Mulder
  • 126
  • 4
  • 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." – David Richerby Sep 12 '14 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. – David Mulder Sep 12 '14 at 10:21
  • I completely disagree that it's fabrication to teach somebody about something that genuinely exists but that they haven't experienced. – David Richerby Sep 12 '14 at 10:31
  • 2
    @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) – David Mulder Sep 12 '14 at 11:05
  • 2
    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... – David Mulder Sep 12 '14 at 11:07
1

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.

Nikos M.
  • 957
  • 6
  • 16
-1

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.

Juho
  • 22,554
  • 7
  • 62
  • 115
Ricky
  • 7
  • 1
-2

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.

David Richerby
  • 81,689
  • 26
  • 141
  • 235
liko
  • 1
-3

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.

vzn
  • 11,034
  • 1
  • 27
  • 50
  • 2
    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. – David Richerby Sep 11 '14 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 '14 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 '14 at 15:22