Ask HN: Learning to code, without a computer?
I have a friend who is incarcerated, and is dedicated to learning how to code, no matter how slow or arduous the process may be. He has no access to a computer, just books and writing utensils. While it may be very difficult, what are suggestions you have on how to give him the best chance for success?
Even if he's not learning a specific language, what are some background concepts he can learn in depth that will help him understand coding? I recommended he study algorithms as a starting point but I am not a dev and am not sure how to proceed without a computer.
I realize this is an unusual question, but I greatly appreciate any responses. It's sad that someone so badly wants to improve themselves and can't easily do so because of our archaic prison system. I want to help give him a chance to have a real profession once released. Thank you!
(
185 comments
| 205 points
| on HN
)
He may write programs on paper, and send them to you to type them in, compile them, and print out a listing with the errors. You then send back the listing, and he will correct his program and repeat.
He'll become a great programmer, since he will have to be extra careful to avoid losing one week on some typo.
Now, it's been a few years since gcc has been able to produce a real listing of the compiled source. You would have to write some script to combine the error output with the source file to produce a classic listing. Similarly for other common modern programming language implementations.
On the other hand, without direct access to a computer, he would not attempt to write any interactive or GUI application, only batch programs, unless the interaction is performed only by an external tester for him.
Another idea: some progress has been made on optical character recognition, so if he can write well enough, it may be possible that you may be able to scan his written programs, and convert them to source file easily, without having to transcribe them. So the process could be smooth enough.
If writing ustensils include typewriter, then even better for the OCR!
Comments like this reminds me of how much of a difference is to live in a 3rd-world country compared to a 1st-world country. I am still on my twenties and I can still relate to what the parent comment says, I learned the basis of my programming skills reading books around ~8 years ago because during that time having a personal computer in my home country was a luxury. Very often I joke with my friends that most of the innovative things that we find in the market are already +3 years old. I still remember the popularity of the BlackBerry when it was already obsolete in the US because of the iPhone.
One thing I did during that time to learn some algorithms was to buy a deck of cards — which I suppose is allowed in jail — which allows you to understand sorting algorithms and some of the basic data structures like queues and stacks. Writing things on paper might also help to visualize and memorize some concepts (I know, memorizing is not the solution, but what else can you do when you cannot run your code in a computer).
I hope it helps, and good luck to @givinguflac 's friend.
I'd pay good money to know what the prison superintendent thinks of this cryptic communication.
(I kid, of course.)
The guy could 'run' his hand written programs on his own.
Unless, by chance, you were suggesting he set up some kind of turing machine where running is a different matter than reading your program over in your head?
Reminds me of this Reply All podcast episode https://gimletmedia.com/episode/64-on-the-inside/
"For years, Paul Modrowski has been writing a blog from inside a maximum security prison. Only thing is, he was arrested when he was 18 and has never seen the internet."
Can you share with readers the version number for the last gcc that can do this satisfactorily?
I would concentrate on the things that don't require a computer- algorithms and mathematical type stuff (the stuff I am not particularly good at these days because I am usually setting up servers, using a database and high level frameworks).
Basically it's a listing that intermixes the original C code with the generated assembly.
It worked fine on my Ubuntu 16.04 system, running GCC 5.4.0 so I don't understand what was better before.
We learned to code by typing out programs on the selectrics...
I was going to ask if he has access to a smartphone to take and send photos of paper?
Set up a server for it. Hell turn it into a business.
Also the following books, which I've copied and pasted from somewhere, to learn theory:
Mano, M. Digital Design, 3rd ed. Prentice Hall, 2002
Mano, M and Kime, C Logic and Computer Design Fundamentals, 2nd ed Prentice Hall, 2001
Gajski, D Principles of Digital Design Prentice Hall, 1997
Tanenbaum, A Structured Computer Organization, 5th ed Prentice Hall, 2006
Patt, Y and Patel, S Introduction to Computing Systems: From Bits and Gates to C and Beyond, 2nd ed. McGraw Hill, 2004
Null, L and Lobur, J The Essentials of Computer Organization and Architecture, 2nd ed Jones and Bartlett Publishers, 2006
[1] http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html [2] https://docs.racket-lang.org/racket-cheat/index.html
Also bear in mind that without access to a computer or external tutelage, it's going to be very difficult for your friend to know whether or not his code is working properly. Stratoscope's suggestion of hand execution (https://news.ycombinator.com/item?id=12668865) is a good suggestion to help combat this issue. However, this means most likely that your friend will need to start with a language that's simple in structure; this disqualifies most modern languages. BASIC, Pascal, C or other extremely simple languages will be most amenable to this type of hand execution.
It's probably safe say that it's more concise than others that I have read. A sentence in SICP could become a paragraph in a lesser book.
Frankly, I do not understand the people who are attempting to push CS textbooks on this person. The original question does not contain the words "computer science" anywhere within it.
SICP: "We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells."
Code: "You're 10 years old. Your best friend lives across the street. In fact, the windows of your bedrooms face each other. Every night, after your parents have declared bedtime at the usual indecently early hour, you still need to exchange thoughts, observations, secrets, gossip, jokes, and dreams. No one can blame you. After all, the impulse to communicate is one of the most human of traits."
While I was stuck in school and did not have access to a computer, I wanted to challenge myself during classes. The most interesting distraction by far was to play around with the programming functions of my TI-82 calculator that was required for math classes. Even with almost no idea about programming I could soon do interesting things with it, because it is programmed using a version of BASIC. In the end I even created a clone of snake. It worked, but moving one block ahead would take 2 seconds.
I also did programming with my TI calculators back in school.
In this context, the 83 is an awful, awful choice, because TI-83 programs only allow for variable names to be one character long. I was lucky, when someone asked me to copy my TI-85 blackjack program into their TI-83, that I had used less than 28 variables.
True, but very sad. I am given to understand, from an HN thread months ago, that the state of the art in school graphing calculators now is the HP Prime. But that never even gets mentioned in recommendations, because no one's ever heard of it. (And there's very little incentive to learn what to recommend, because the only value of a graphing calculator is that it's permitted on standardized tests -- the HP Prime is $165; the HP Prime software for your Android phone is $10.)
> I was envious of my friend's 89, but my parents wouldn't pay the higher cost.
Also sad. I read the manual for my TI-85 cover to cover; it taught me about polar coordinates and euclidean vectors before my school covered them. For a child interested in math, these calculators can be wonderful.
Nice! I ended up creating a Minesweeper clone. I remember the program being really long, and really annoying to write without having access to actual recursion.
Emphasize learning that will serve freelancing, since someone with a criminal record will run into issues with traditional employment. (I've been out since 2009 and done very well) Ruby, PHP, Javascript are some of the best bets.
I'd recommend O'Reilly's Head First books. Even if they're a few years old, really doesn't matter, given the situation. I think Sandi Metz's Practical Objected Oriented Design in Ruby is great - she does an awesome job of explaining OO principles even if you don't end up writing Ruby. The Manga Guide to Databases is another good read that explains concepts well.
I'd also consider a book that shows a quick way to build web apps, like Agile Development in Rails or maybe a book on ColdFusion. Without the ability to write and run code, it can help plant seeds for those "aha!" moments for understanding the code -> web request lifecycle without getting bogged down in ceremony.
In Texas, the books had to come from a bona fide bookseller, so don't go to B&N and try to mail the books yourself.
This will be much more productive than trying to learn to write code from scratch while also learning a language and learning how to execute the code with pencil and paper.
I would start by going through the exercise yourself: pick out a book and use one of the first sample programs, and set up a "debugger" on a pad of paper.
I used to do this kind of debugging myself: when I first learned BASIC back around 1969, I spent some time in my grandmother's basement with two pads of paper, one with my code and one for the debugger. The debugger pad had columns across the top:
Then I would step through my code, adding a row on the debugger for each line I executed, with the current line number in the first column and each new variable value in the other columns.After going through this exercise with one program, send your friend the "debugger" pad along with the book, so he has a place to start with this idea. He can then go through the same example and follow along with your debugging steps.
That way he has a solid place to start when exploring the other sample programs in the book.
Please feel free to email me if you'd like to kick this idea around - address is in my profile. And I strongly suspect that everyone else in this thread would be happy to extend you the same offer.
I also heartily endorse the suggestion to read Charles Petzold's _Code_. It's a wonderful book!
This does not give any experience in debugging, which is not taught in books, AFAIK. I am not sure what to do about that...
-- If he'll be in for a year or two with essentially zero access (no computer inside, no computer buddy outside), he should learn something related to programming (math, web design with CSS, etc.), basically re-ordering a typical multi-year learning sequence to put the coding later
-- If he'll be in for ten or more years, he should learn something else. His learning will be so slow and the field changes so quickly that he might learn a few timeless fundamentals, but that's all. He could accomplish much more in some other challenging field that didn't require tools he wouldn't have (ex: math, physics, accounting, ...)
-- If he'll be in for less than five years with access to a computer (via friend outside, for example) every couple of weeks, it could work. It would be like my situation when I was a kid and kids didn't have computers (but I was able to sneak some access). I would do it differently now from what I did then. I would read programming books and get my hands on lots of small example programs. You read the lesson, do the exercise on paper, run it on paper, and only when you are SURE it works (or you're SURE you don't know how to make it work), you read the "answer" (code written by a pro) and study it. Use worked examples as feedback when you can't get it from an actual computer. As you do this, write simple things and send them to the partner on the outside as you continue to work examples on the inside. The turnaround time won't delay you as much if you have other things to do while you wait.
Now, take his real situation, consider the above scenarios, and craft one that will work for him.
The field changes quickly but the fundamentals (data structures, design patterns, data structures) not as much.
Those are topics that one could make progress on with only a pencil, paper, and the occasional phone call to a mentor.
I cannot imagine submitting punch cards and reading JavaScript stack traces by mail.
As an EE student, there are plenty of engineers who know nothing about those topics (except maybe linear algebra) that have successfully completed the image processing/computer vision course.
"Featuring a strong emphasis on the fundamentals underlying contemporary logic design using hardware description languages, synthesis, and verification,"
You mean to tell me that set theory is too abstract, but full-adders and VHDL are right up his alley.
The problem is that most mathematicians don't have more than a surface level working knowledge of set theory, because they don't think it's useful. It's even less useful for computer scientists (who use type theory any way).
With the exception of set theory, I've taken the classes you've mentioned, and while they've been very useful for electrical engineering, I don't believe they're useful for software engineering.
SICP, dearth of practical experience... MIT? Any case, you live in a daycare. Remember we're talking about someone incarcerated.
Also, you should give him realistic expectations. Learning to code isn't the panacea that many think it is. There are many broke but talented programmers out there, and most don't have the extra baggage associated with a felony conviction. If he doesn't truly have a passion to create software, and is just looking for a way to make money, there are more efficient things he can learn about - like the psychology behind viral marketing (The Tipping Point by Malcom Gladwell and Purple Cow by Seth Godin might be good for example). I know someone that couldn't write a line of code to save his life, but makes 6 figures per month creating Facebook pages around ridiculous topics and using them to drive traffic to affiliate offers and his own Adsense pages. Your friend can always hire coders when needed if creating software isn't what he actually wants to do.
And it's just a book, and all exercises in it can (and should) be done with no computer.
Once he works through this, send him a copy of SICP: https://mitpress.mit.edu/sicp/ Covers some of the same material at a much higher level, and more.
Apart from that... reading books and solving programming puzzles might be a good way. Something that has a feedback loop, which you won't have in the normal way without a computer at hand.
I must take my hat off for this kind of determination! I hope it provides your friend with a way out and they have a better life ahead of them.
1) Edovo is a tablet learning solution that is in many jails (https://edovo.com/)
2) Another group The Last Mile, while they got their start in San Quentin, is working to bring their program/model to more prisons. https://thelastmile.org/
Regardless, I would encourage reaching out to either program to explore their options further. The people behind each are incredibly helpful and may be able to assist you with additional details.
We're going to be expanding into a few more in 2017. You can see some of the details of how we setup the classroom here: https://github.com/thelastmile/intranet
When they're out the hard working ones will have programming skills which will help with the job hunt.
"Why am I paying to have rapists, killers and thieves jerk around on the internet all day," they'll say, while voting out the party responsible and voting in the party promising to take the computers away and make the inmates break rocks in the sun until they drop.
But I feel like I saw an actual curriculum without a computer recently, but now I can't remember what it was, curious to see if it shows up in this thread. Great idea for the incarcerated! I'm going to see if I can figure out what I'm thinking of.
Ah, I think I was thinking of the CS Unplugged that others have mentioned, sweet!
Thanks for this post, I think I'm going to buy a few copies of Little Schemer and CS Unplugged and ship them directly to a Books to Prisoners program I know that sends books to prisoners in response to topical requests.
With music, we are taught to read before we write.
With programming, we start out writing.
This seems like a great chance for your friend to try out the music learning approach. Send them books of excellently written programs, and allow them to read before they write.
[As a side note: What is their goal? To program to become a software engineer? To program to build web applications for fun? To program to learn how to build products to produce a profit for themselves? The goals will inform the process.]
What we find easy is to read programs we wrote. Recently.
(I'm trying to help change this: http://akkartik.name/about)
It is aimed at school children, but it's a place to start.
CS Unplugged: Computer Science without a computer and Nine Algorithms That Changed the Future: The Ingenious Ideas That Drive Today's Computers. I've also posed a problem for him to ponder:
"You have five fingers on your hand (usually -- a few people have more, many have fewer). Each finger can be either extended, or curled up. So a fist would be all fingers curled up, a high-five would be all fingers extended, and many other combinations exist (including the obscene middle-finger gesture, and probably a whole lot of gang signs). What is the total number of possible combinations that can be produced using five fingers? Can you do them all? What is the total number of possible combinations that can be produced using ten fingers? Can you figure out a pattern so that you could calculate how many possible combinations there would be if you had 16 fingers?"
https://neil.fraser.name/news/2015/04/13/
One of the key things to also understand here is - what is missed out in this type of training. Tools. Tools. Tools.
As developers we have come far away from limited IDEs. We rely on so many tools that knowing-they-exist or sometimes mastering them is difference between good-or-bad devs. I would recommend to read printed material about IDEs, screen shots of tools.
Couple of other things I have found really helpful: * I had underestimated Medium as a platform to rely for tech news till lately. There is so much of latest developer/platform news and articles. Print outs of these definitely help. * Stackshare posts (http://stackshare.io/featured-posts) on what stacks/tools companies use (and how) are eye opening to say the least. Print outs of this.
Is he in state or federal prison? Are there no classes available that could give him access to a computer?
https://www.ohio.edu/ecampus/print/correctional/
or
https://www.adams.edu/extended_studies/undergrad/prisoncolle...
You can draw a program on paper and follow it with a finger to "run" it. With a bit of practise, it'll be possible to run such mental models without even writing them down. At that point you're thinking like a programmer.
This skill is transferrable to any programming language.
Would help if you shared the end goal. Get hired anywhere? Get hired by Top 4 Tech Company or Hot Startup of the Year? Start a business? Don't get bored? How long is he going to be incarcerated?
I would greatly appreciate if you shared your experience.
Understanding how variables, loops, stacks and so on work was all done by writing the algorithms, and our first contact with a computer was in order to write some assembly code, after something like 2 months.
That's not ideal but you can already learn a lot without actually writing code to a computer.
Having access to a programmable calculator or even better to a smartphone would obviously be better.
Would he be able to get some kind of no-name android portable media player and write code on that ?
A simple google search leads me to QPython, I am sure there are tons of other IDEs running on Android. That might be the best option if he has access to such a device.
CS theory probably makes a good starting point, as a lot of it doesn't require actual coding, but still lays a solid foundation for future work. I would recommend SICP (Structure and Interpretation of Computer Programs, by Abelson and Sussman) as a good starting point. It uses Scheme, which isn't exactly a language he's likely to end up working in, but it will teach him a whole lot about thinking like a programmer.
https://www.amazon.com/How-Design-Programs-Introduction-Prog...
Otherwise I would suggest combining CS with more applied programming with smaller scope (like a web stack), developer methodologies (designing, methodology, testing) or design (interaction, interfaces, experience). Those would be things that he could more easily be practice as he gets out, aren't as focused on credentials and would more likely land him some sort of job.
https://en.wikipedia.org/wiki/CARDboard_Illustrative_Aid_to_...
Unlikely to be useful if he's not allowed to possess a programmable device.
My first thoughts:
- iterate more quickly by experimenting with non-computer users who aren't in prison, as letters/email to a prisoner will have a slower feedback loop
- learn what people consider to be more fun, and and try to structure lessons within that
- see if there are some existing resources that are close to, but not exactly like, programming without a computer
- set up an open source curriculum on GitHub, so people besides yourself can contribute
Suggestions for absolutely no computers:
* CLRS, the classic. (I just skimmed the intro, though, and if he has no background in uni-level maths, it might be a little tough to digest.)
* (maybe) the Head First series (as someone else suggested). I'm wary of suggesting it not just because I have no experience with the books (I only even mention it because I know they're ubiquitous), but also because bad habits are formed early, and this could do that.
* Patterson and Hennessy - Computer Organization and Design (5d.)
* Sebesta - Concepts of Programming Languages (11d.) (but only after finishing some of CLRS, and even then I don't know how appropriate this is)
=====
What kind of experience did he have with computers before he went in?
Depending, you may be able to make recommendations about stuff relevant to what he's used.
=====
Can you get him something like a TI-84? Because even that will at least allow him to go in and write TI-BASIC.
We'd go line by line and change the relevant registers, arrays, pointers, counters, etc. Exams consisted of doing that, too. Sometimes you're given a piece of code and asked about the state at a certain break point. Sometimes you're given a succession of register values an asked what the program is doing. A missing semicolon had a direct influence on your grade, not on stdout.
It's not guaranteed that it produces excellent programmers, but one can learn a lot and it was almost a meditation to focus like that and ask yourself "Why isn't it running?". It was cool (at least for me, I disassembled programs as a teenager and I had a computer, but I still think this was useful).
I have used this to introduce my son to the basics - and call it "post-it" programming. We built a few obstacle courses around the house. The most advanced we got was to "unload the dish washer", that resulted in him "inventing" functions.
It typically works better when some one else "executes" the program, since bugs are easier to surface and debugging is a lot more fun.
That said, my son has since learnt to read and write. There is greater enthusiasm to "type" on a computer than use post-it notes.
Hopefully this can be adapted to your friend's circumstance. Best wishes to him.
It is very much an introductory text to programming, something that can be picked by someone who has an inclination to the craft but with no prior experience. It doesn't even get into Haskell's powerful type system and sticks to primitives and lists. The intention is to teach the building blocks of programming through small, pure functions.
The text is very conversational, chapters are short and sweet, and have a lot of bite-sized exercises along with their answers which will greatly help a self-learner. It will also be easy to evaluate since functional code don't tend to get very verbose.
I recommend C++ as it is useful for a LOT of different types of electronics, embedded, pc, servers, you name it.
Also UNIX scripting is very useful.
Then he should write very small programs that he can use to build into little functions for larger ones. Something like adding two numbers at first, really simple, like almost blindingly simple, just to get comfortable with the architecture of the language.
Then write something that is more complex, something like how to make a little calculator that does all sorts of functions.
He'll need at least one reference book (which I heard you said he has, but you didn't specify what type of book, so look into it... it's a bit of a tedious process to get decent textbooks into the squares, but if you buy it new and send it to them FROM THE PUBLISHER, he can get it, you probably know this, but someone else might be reading and they might wanna help someone learn as well, so they need to know)
Additional texts of note:
Data structures
Math books, especially linear algebra
Web Programming
Wireless Communications / Bluetooth
That'll last him at least a couple of years to really master. Beyond that, he needs to get a system of writing so that he's not having to use English constantly, as it will take a ton of time. I've seen people use something akin to semaphore, but it's not _extremely_ important unless he's older, and has used his hands a lot. Cramping sucks, and losing your ability to write is nicht gut.
Alright well, I hope this helps. Best of luck to your friend, and if he mentions a thank you, please tell him he's welcome.
God Bless.
I was driven by courisity, no pressure of completion and had all the time in the world. The book was thick with complete programs with outputs instead of snippets. Book also had list of all core packages, class and their members. It helped to grasp the core libs before hand.
I would suggest a comphrensive book. I have not checked any Osborne reference series since then, but check if there are similar ones for python.
But like others in this post I would recommend CS unplugged.
And depending on how long he is in there for he might want to look at:
How to Design Programs - This is a good book, and although it's in Scheme, it teaches how to create appropriate levels of abstraction, which seems to be something many programmers struggle with.
Concepts, Techniques & Models of Computer Programs - Discusses the different paradigms and how they are inter-related.
Also something a bit more vocational like The Pragmatic Programmer or Clean Code / Clean Coder probably wouldn't hurt either.
If he can read all of those he will be very well prepared to do some actual programming when he gets out.
SICP not a bad shout either, although I've not got past the first chapter.
So what books do I have?
Books on usability and web accessibility are good reads, however no obvious title springs to mind ('Don't Make Me Think!' would last your friend all of a morning).
One thing though, chess. Chess is played in prisons and some prisoners get rather good at it. Maybe encourage your friend to form a chess league if there isn't one already. Perhaps get him a really good book on chess that can be used by this chess league to be.
He can learn the algorithms and apply them to the cards in order to check his understanding. He just needs to make sure that he acts like a computer would - only ever comparing two cards at once.
He can simulate this by having all cards placed face down apart from the two that he's currently doing the comparisons with. At the end he can flip all the cards over to make sure he got the intended result.
I'm sure by doing this he could learn all sorts of algorithms this way, and learn to code in the same way.
He may not have a computer, but don't they say that the greatest computers are the ones in our heads?! He just needs to dumb it down a bit for the sake of the exercise.
One thing that did help me a lot when I didn't have computer or fast internet connection, were: the computing and programming paper magazines.
Maybe you can research for your friend programming magazines (on paper) which are available nowadays; and he can subscribe to them. Maybe he can even redistribute or perform as internal reseller once done with the chapters.
They use to treat diverse topics on monthly steps, and is a convenient way to assimilate knowledge. Ones are better than others and introduce less partial views... you must view on your own.
I can't help, because I'm many years without buying one.
I'd then suggest moving to something like SICP and/or NANDtoTetris.
If you learn the abstract fundamentals first, you will understand how they apply in every increasingly complex system you encounter... and none of that is syntax or frameworks but instead an ability to see and extract the underlying problem domain, which will then guide you in the solution.
It might be a good place to start, at the very least. But it will only appeal to a certain sort of person.
I'll definitely take a look at some of the languages mentioned in this thread that are made to be done on paper. Sounds like a great exercise.
Most (all?) CS students learn this early on in university anyways, so it's natural to study if your friend is interested in computer science.
He can also spend the time to master math, especially linear algebra. Getting a firm understanding on math never hurt any budding programmers and opens a ton of doors.
* Once released, he can play with different DSs and experience their asymptotic performances for himself.
Then buy him a RasPi (+with instal guide).
OK, I guess I'll also mention Hillis's The Pattern on the Stone, which I feel has mostly been superseded by Petzold's Code. It's less technical and less detailed than Code and would be a much quicker read, where Code gives a more detailed understanding of these ideas.
D is for Digital is a good survey and has some Javascript programming info, Amazon has the second version draft already http://kernighan.com/
Gary William Flake: Computational Beauty of Nature
Douglas Hofstadter: Godel Escher Bach
They won't make you a programmer ready for a job at Facebook; but they will entertain the part of your head that makes you a good programmer.
The two books are also very well written and quite entertaining which give you the motivation you miss if you cannot try things out on your own.
Other than that: Study math at any level.
The way of thinking that such a text gives is nearly identical to the thinking needed for coding.
Just one example: We coders sometimes forget that a conditional like "if (not (A and B)) or C then..." is utterly incomprehensible to the bulk of humanity. Go through a logic book and that stuff will be second nature.
Also it helps lifelong with clarity of thinking which is nice too.
There is a lot to be learned from writing code as it forces you to make decisions. This can be done in part on paper and in batch programming mode. There is also a lot to be learned from reading not just snippets and algorithms but from studying complete works. Software is a lot about architecture and integration. A stack of printed code and a #2 pencil is all it takes.
We used to frequently emulate a machine by hand on paper I think it was 16-bit but it might have been even smaller (not touched it since my first year of undergrad) and you could/can write a lot of cool programs for it.
There are plenty of algorithms you can learn without a computer too, and carry out on paper.
I have no idea what kind of things are allowed in prisons - would a microcontroller running a simple interpreter coupled with a small LCD and keypad be allowed? If so, something like that would be really great for applying programming concepts.
That were the old times: as the "bandwidth" was limited, everybody was motivated to check as much as possible before executing only once. "Processing in your head" was very important and people were really careful. It was nevertheless, or maybe exactly because it was so, "addictive."
Richard Feynman, about one early example:
"“Well, Mr. Frankel, who started this, began to suffer from the computer disease that anybody who works with computers now knows about. It's a very serious disease and it interferes completely with the work. The trouble with computers is you play with them. They are so wonderful. You have these switches - if it's an even number you do this, if it's an odd number you do that - and pretty soon you can do more and more elaborate things if you are clever enough, on one machine.
After a while the whole system broke down. Frankel wasn't paying any attention; he wasn't supervising anybody. The system was going very, very slowly - while he was sitting in a room figuring out how to make one tabulator automatically print arc-tangent X, and then it would start and it would print columns and then bitsi, bitsi, bitsi, and calculate the arc-tangent automatically by integrating as it went along and make a whole table in one operation.
Absolutely useless. We had tables of arc-tangents. But if you've ever worked with computers, you understand the disease - the delight in being able to see how much you can do. But he got the disease for the first time, the poor fellow who invented the thing.”"
* Many appliances can be great hiding spots for drugs, makeshift weapons, etc - in Texas all of the allowed appliances were clear for this reason, and had to purchased from the prison
* Paranoia about Internet access (yes, I know a typical laptop can't connect, but try to get into the mind of undereducated, paranoid staff that has to answer to a frightened public)
* Use of computers for illegal activities in prison - like gambling rings, etc - anything in prison is searchable, and paper is inherently more searchable than GB of texts for low-end guards)
At which point the possibilities expand ...
http://www.bbc.co.uk/newsbeat/article/31089469/the-surprisin...
Maybe work on a conceptual project. E.g build a complete UML solution for a HN clone for example.
That'll take care of the analysis part.
If he's enough time then move into discrete maths and algorithms.
That'll sandwich the actual coding , after which it'll be a short effort once he's got access to a computer
So definitely possible.
"Computer science is no more about computers than astronomy is about telescopes."
- Commonly attributed to Dijkstra.
the HEAD First book series, they have fill in the blanks programming exercises.
The best thing I found http://csunplugged.org/
Print out the better ones.
Get him familiar with the lingo.
My biggest stumbling block was learning the ever changing language of all aspects of computing.
Then buy him Learn to Program by Chris Pine. I would also want him very comfortable with UNIX, and the command line.
When he gets out,if he has some support; he will do just fine.
I'm 'fighting' ('working' is a better definition) for civil rights in my city, so I think I will be incarcerated in the future...
I think I will organize a 'paper' version of Scratch, with me as an interpreter of lines of code.
edit: I'll miss Stallman's videos...
edit: I am a condamned and I didn't commit a crime.
Suggestion: put everything in an encrypted file (I think .7z is good, AFAIK .zip is very bad), send that to lots of people. If anything happens to you, it should be manageable to get the passphrase to somebody.
PS. HN is using HTTPS
https://www.amazon.com/Programming-Language-Brian-W-Kernigha...
I'd also learn SICP: https://www.amazon.com/Structure-Interpretation-Computer-Pro...
and algorithms from either CLRS https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press... or Skiena Algorithm Design https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
Once that is worked through, Godel, Escher, Bach would be an especially entertaining and enlightening read.
You don't need to have a computer (Von-Neumann et al didn't have one!) to invent a brilliant algorithm.
He needs to find interesting things around him, and just make plans. Write it down. Without a computer he can use a paper and pencil.