Hacker News new | past | comments | ask | show | jobs | submit login
Computer Science by Mail (fraser.name)
151 points by pavel_lishin on April 15, 2015 | hide | past | favorite | 50 comments



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.


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.


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.


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.


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.


The Windows version my school ran dumped these hashed password files of everyone who logged in. It was trivial to copy them and crack them at home but it certainly gave me an uneasy feeling so I stopped.


Back in high school our library had absolutely ancient DOS machines from the early 90s. It was always fun to make autoexec.bat call autoexec.bat on boot...


Yes, TLS http://mitpress.mit.edu/books/little-schemer is at least somewhat approachable without the aid of a computer.


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.


It'd be cool if someone did this and used the profits to run a "Teach inmates how to code" program based on OP's initial attempt.


That's an even better idea! Like Warby Parker or Tom's Shoes, one subscription paid for equals a free subscription to inmates/disadvantaged youths/etc.


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


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.


I think people's email inboxes are so cluttered, that things get easily dismissed. Receiving an actual letter in the email, now that's something I haven't experienced in a while!


Novelty.

Physical reminder vs something that is too easily filed away or deleted.


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.


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.


> Imagine, for example, trying out different sorting algorithms by using twenty different strips of paper of all different lengths on a table.

Or by folk dancing![0]

[0] https://www.youtube.com/watch?v=ywWBy6J5gz8


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.


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


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.


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...


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.


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/


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...


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.


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.


I wrote my first Turing machine software out on paper, took several sheets. Then decided to write a Turing machine emulator in C to interpret it to see how well I'd done. Definitely some bugs, but overall not bad.

Had I realized the PC lab next door had a Turing machine emulator, I would have saved some time but missed out on some fun. Wish I still had my emulator software around; this was many years pre-Github.


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".


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


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?


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


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


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.


That would also reinforce the importance of checking things work first time. With the rapid feedback we get now, the temptation to hack away gets in the way of properly understanding and predicting what the effect of the changes will be.


HTML is not computer science.


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://supercomputerscience.blogspot.com/2012/07/html-is-not...


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."


the point of this entire post is not to argue semantics. this inmate wants to get involved with programming, and the best way to start (in my opinion) is to pursue HTML.


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.


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.


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/


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.


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.


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.


"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.


seconded


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


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.


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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: