
Computer Science by Mail - pavel_lishin
https://neil.fraser.name/news/2015/04/13/
======
latj
When I was a kid we used to try to guess the computer science teacher's
password. (This was back when a mischievous computer science student would be
made to do some manual labor around the school-- not sent to federal prison.)

After too many attempts it would lock us out and we'd have to wait to try
again. One day when our teacher was trying to start class he found that he had
been locked out. We all started laughing and he knew why.

The next day there was a sign on the door telling us that the class had been
moved to a new room. When we arrived we found that the classroom had no
computers. The work was the same. The lessons progressed. But we wrote all
that Pascal on paper. We only had one chance to turn something in and I
remember going home and trying to remember all the code to type into my home
computer to see if my program would compile.

Anyway, I would suggest someone sending this guy a copy of The Little Schemer.
Anyone can read that book and gain great confidence in a short amount of time
while starting to think the way a programmer ought to think.

~~~
elwell
Our Chemistry teacher typed his password on a tablet and the image was
projected on the screen. So I watched which keys appeared depressed and was
able to login later, view GradeQuick, had ability to change grades, but
didn't. Good thing I didn't get caught, I might be in federal prison. I did
get caught for making a "virus", which was just a webpage that opened it self
onload. I think I just got detention for that though.

~~~
cmdrfred
I poisoned the squid cache at my school and made a fake sex offenders website
with all of the teachers on it. Times have changed.

~~~
hansolo669
Heh, with some friends I took down the email service board wide for a day via
auto-responder. Unlikely you could do that today - most schools are switching
to Office365.

~~~
meric
Nice. I short-circuited the school ethernet network, shutdown the access to
internet school-wide forcing all office staff to work on paper for two days.
Suspended 2 days.

------
joshuapants
I was kind of hoping this would be a service that sends you a postcard each
week with some information and exercises that you're expected to do without a
computer. Maybe the postcard could be scantron-able so the customer simply
does the work in a notebook then fills in the bubbles on the card then gets a
grade for the last week stamped on the card that comes the following week (or
maybe that's going _too_ far with the no computer policy and there can be a
website that shows what questions you got wrong).

I'd pay a few bucks a week for something like that.

~~~
ChicagoBoy11
What's the gain from the snail-mail medium as opposed to getting something
like this in your email inbox?

~~~
joshuapants
Novelty, as said below. Also, it removes a possible level of distraction. It's
harder to get distracted when you go right from the mailbox to the kitchen
table with a pad and pen than it is when you have to open an email and avoid
switching to your other tabs.

------
jewel
I had a few computer science theory classes where we never wrote any code.
Algorithms can be worked out on pencil and paper. Imagine, for example, trying
out different sorting algorithms by using twenty different strips of paper of
all different lengths on a table.

Remember that a lot of the theory of computer science was invented before
there were any computers as we known them today. George Boole, Ada Lovelace,
Charles Babbage, and probably lots of others I am forgetting never saw a
computer in their lifetimes.

~~~
zeidrich
Sometimes doing things in this way can demonstrate time complexity in a very
real way.

On a computer a bubble sort of a large list might take a few milliseconds. Do
it with strips of paper and you're immediately thinking there's obviously a
better way.

------
PeterWhittaker
That's awesome. I am looking forward to following this. He can certainly learn
quite a lot of the supporting theory working with just pencil and paper...

...and submitting a program for "compilation by email" is very old school,
like our punch card days, only a bit slower.

~~~
Jtsummers
And it has the added benefit of forcing thinking before executing. Along with
a potentially very forgiving "compiler". In college at GT prior to 2002
(2003?) the intro class was taught using a pascal based pseudocode. The TAs
grading it were necessarily lenient on issues of syntax and the students could
focus on the semantics of the program. Need a function that interacts with the
outside world (reads a character, draws a figure to a screen, whatever)? Just
say that's what it does and it does it.

This leaves the student with a solid understanding of algorithms and data
structures, and in the follow-on courses they can worry about stricter syntax
(language and APIs).

------
rubyrescue
One summer in France while I was a kid (from the states, visiting for 6
weeks), I wrote a spell checker in 6502 assembly in a notebook...as I had no
access to a computer and my french was terrible, so I had more alone time than
I should have had.

I then typed it into my Commodore 64, at home at the end of the summer.

It didn't compile at first (of course) but it was mind-expanding to have so
much time to think about the algorithm.

I had totally forgotten this entire incident until this moment.

------
jonsen
From a review comment:

 _The highlight, and in my opinion success, of this book is the fact that no
"real" programming language is used to notate any examples. Rather, Dr.
Shackelford, along with other TA's of recent past, devised a pseudo-language
which encapsulates many elements of previous educational languages (such as
Pascal); naturally, this language is not vulnerable to obsolescence. Also,
since this language can not be practically compiled, the reader is forced to
trace through examples on his or her own, building his or her skills in
mentally evaluating algorithms._

[http://www.amazon.com/Introduction-Computing-Algorithms-
Russ...](http://www.amazon.com/Introduction-Computing-Algorithms-Russel-
Shackelford/dp/0201314517)

------
abecedarius
As a teenager in the 80s I did learn mostly on paper at first -- no computer
for the first year and more. The maybe nonobvious benefit, if you're lucky in
your choice of books, is in coming to expect code to be as nice and pretty as
the textbook examples. The working world was quite a comedown later on.

Maybe a crazy idea, but Dijkstra's _A Discipline of Programming_ was meant for
coding on paper. Hehner's _A Practical Theory of Programming_ is kind of
similar and more recent -- I haven't read it.

------
acbart
The OP here is Neil Fraser, a google employee who's done some really awesome
work, including the creation of Blockly[1]. The rest of his writings and
software are worth checking out.

[1]
[https://developers.google.com/blockly/](https://developers.google.com/blockly/)

------
bch
Some of the most interesting computing I did was as a child with nothing but
paper, a pencil, a programming book[0] and my imagination. I coded my work on
reams of paper with decimal numbers representing everything (the idea of
assembly code didn't really occur to me). I got a _LOT_ of mileage from that
method, and I still today refer to lessons and accomplishments learned that
way. There is hope.

To be fair, I _did_ have a Commodore64 to put my work into -- but perhaps the
subject of this story could get one too -- the Internet and illicit
hacking/communication are probably the biggest worries for a "no computer"
environment.

[0] [http://www.amazon.com/Machine-Language-Commodore-Other-
Compu...](http://www.amazon.com/Machine-Language-Commodore-Other-
Computers/dp/0893036641)

~~~
ewindisch
I did the same, but did NOT have a computer. I had picked up non-functional
Commodore 64, its manuals, and some magazines.

Since the computer didn't work, I spent my summer of '94 writing BASIC code
that I'd never run.

~~~
bch
Nice! My work was 6510 machine language, hence all the "coding in decimal" \--
using mneumonics to _write_ my code (ie: "lda" for "load the accumulator")
didn't occur to me, and neither had using hex. Using assembly (lda vs whatever
the decimal equiv was) wouldn't have made sense anyway, since I didn't have an
assembler -- I just POKEd all my code into memory. Then I'd (typically) hijack
the keyboard interrupt (with the final call in MY code to the real kb handling
code) and my code would run -- things like switching screen colours everytime
you pressed a key. But I learned about looping, conditions, CPU program
counters, registers, flags, boolean logic, memory addressing...

Good times.

------
joeframbach
Do you think Ray Reyes would be allowed a TI-83, the reference manual, and
some spare batteries? In high school I taught myself quite a bit "offline".

~~~
adambratt
Truth. I remember coding under my blankets at night with a flashlight on my
TI-83. Made some mad BASIC apps.

------
Speakeasys
Thank you for believing in somebody who probably had nobody to believe on him.
The fact he reached out for help in learning to program is awesome. I wonder
if he'll figure out the puzzle.

Quick question would the solution be 10 factorial?

~~~
ro_sharp
Hint: Each finger (digit) has two states (extended or curled up)

------
yodsanklai
Reminds me of this famous quote "Computer Science is no more about computers
than astronomy is about telescopes."

------
BorisMelnik
I was in a similar predicament (not prison) where I had zero access but wanted
to continue to hone in on my skills.

My advice is to learn something like HTML/CSS.

It is really easy to read and understand. Send him a "before and after"

Sheet 1: some b, i, title, font, etc tags marked up in HTML with data

Sheet 2: the "after" sheet of what it looks like rendered

Each week the remote student will be tasked with writing out a basic website.
He / she sends in his work to the teacher that inputs the data (bonus points
for OCR.)

The teacher sends back the rendering along with the next lesson plan.

From there you can go into CSS. Javascript would be a little harder but think
how advanced you can get at HTML/CSS in a few years?

Being that I already had knowledge, I took time to hone in on more theoretical
skills such as UX and read a ton of books related to user experience,
business, etc.

~~~
jmgao
HTML is not computer science.

~~~
themoonbus
Why isn't it? I'd say as a markup language, it touches on a lot of computer
science topics: data structures, semantics, abstraction, etc. Also, I think
it's a great entry point that could lead to an interest more "serious" CS
topics.

[http://blog.acthompson.net/2013/03/html-and-computer-
science...](http://blog.acthompson.net/2013/03/html-and-computer-science.html)

[http://supercomputerscience.blogspot.com/2012/07/html-is-
not...](http://supercomputerscience.blogspot.com/2012/07/html-is-not-
programming-so-why-teach-it.html)

~~~
astrocat
Completely agree - it's an incredibly easy first step in understanding the
abstraction of code -> results.

I've actually had the privilege of walking a recently released inmate with 0
computer skills through the process of writing their first lines of html. The
excitement he experienced seeing "hello world" transform just by changing it
to "<h1>hello world</h1>" was incredible. I think it boils down to realizing
the power of - to put this in the simplest terms possible: "typing some jargon
and making things happen."

------
dikaiosune
In retrospect, my own education would probably have been much more rigorous if
I'd been denied access to a computer while learning the fundamentals.

Very interested to see if anything comes of this.

------
captn3m0
This brings back memories. When I started learning C++ in school (outside
curriculum), I did have someone older teaching me, but I didn't have access to
a compiler. I'd finished half of the introductory book before I ran my first
program.

I was used to programming in BASIC and a few other languages by then, so it
was far easier for me. But I still remember the first time I typed in my first
C++ program in Turbo C++ and got it to compile.

------
pakled_engineer
Math books would be better, 5 yrs to build up linear algebra, analysis,
discrete math and study theory of computation. Learn to code with a MOOC when
released. You can also do a lot of SICP by hand by printing out MIT 6.001
online tutorial answers and questions.
[http://icampustutor.csail.mit.edu/6.001-public/](http://icampustutor.csail.mit.edu/6.001-public/)

------
krat0sprakhar
Can anyone recommend the two books the author recommends? I haven't read
either and it would nice to have something interesting during the commute.

~~~
fcbsd
The CS Unplugged material is excellent - I've used it to teach kids from 6 -
14 years some Computer Science with out using any computers - the exercises
are good and have a good pedagogical underpinning.

------
alexirobbins
I think it could be really cool to make a physical representation of addressed
memory, and then have a few op codes that can be used to solve basic problems.
The op codes could be introduced as needed, and problems can grow in
difficulty until actual compilation is necessary.

The program could be worked out by physically moving around paper strips with
instructions written/erased/scratched-out/rewritten etc.

------
msisk6
"Code" by Charles Petzold is another book I'd recommend for this sort of
thing. I usually keep a few copies on hand to give out to folks that show a
genuine interest in learning more about code and how computers really work.

~~~
tvz
seconded

------
ZeroGravitas
This is great, but the gang signs comment seemed really out of place and
unnecessary.

------
utnick
could he get access to a graphing calculator possibly? That would be a good
environment to learn coding and wont allow him to connect to the net or make
calls.

~~~
herdrick
Great idea! That was my first programming environment, in fact. Hooked me
good!

