views:

752

answers:

12

I am a software developer. These days, I work for a social networking site and write in Ruby, Php, C, C++, and of course, use SQL. I have a B.Sc. in Computing Science. I love my job. In my free time, I set up MythTV boxes, install open-source firmware on my WRT-54GL wireless router, and generally geek out.

My girlfriend wants to understand what I do. She wants to understand computer programming and all the rest. Just from a general level, of course; she has no intention of going back to university for a computing science degree herself.

So, she's asked me to pick her up a book. I'm thinking something that provides an overview of computing science, the sort of book that would be required in a first semester, first year computing science course. But that was a long time ago for me, so I'd like your suggestions.

I'd really like something that's a fairly high level. An intro to data structures is fine, but no need to get into graph theory. Heck, a book that covered programming in MS Excel would even probably be fine. I just don't want a "programming for dummies"; the goal here is for her to understand what it is that I do. The theory is more important than the practice, but whatever I buy must be sufficiently approachable.

I have already picked up Joel Spolsky's Aardvark'd DVD in the hopes that that covers the non-technical side of things.

+5  A: 

This may be a bit too theoretical, but the Turing Omnibus is a great survey of computer science. It is good in that it is generally accessible to just about anyone and it does not achieve that through vagueness. Very little about programming, though.

rz
A: 

I'd check out Learn to Program - it's a basic intro book based on Ruby. The Pragmatic Programmers also have a book currently in beta called Practical Programming: An Introduction to Computer Science Using Python. The Learn to Program book is all code stuff, but it starts it out from a 1st grade level... very basic stuff.

Tim K.
+2  A: 

Non-CS people might find the traditional concepts boring and/or completely confusing. As an alternative, consider Snake Wrangling for Kids. I know the "for Kids" portion of the title might seem childish, but its programming exercises could be a somewhat entertaining way for a a non-CS person to get an insight into why geeks like us enjoy this field :)

Bullines
+2  A: 

I'd go with either Godel, Escher, Bach, or Code.

If you want her to get her hands dirty writing some actual code, you can try Python Programming: An Introduction to Computer Science.

Bill the Lizard
GEB is my favourite book ever, but I don't think I'd even think about my girlfriend (who used to be a web/graphic designer) reading it. And she is intelligent.
Matthew Schinckel
But you're so super-intelligent that you get it, but she wouldn't? Either you're not giving her enough credit, or you're giving yourself too much. One of the best things about GEB is its clarity, even to non-programmers.
Bill the Lizard
+8  A: 

Code: The Hidden Language of Computer Hardware and Software. This book is readable by anyone. It starts with the basics (the telegraph), progresses through gates and logic, and winds up with microprocessors and computer systems.

Barry Brown
I don't know if it's readable by "anyone". Certainly anyone intelligent and interested in computers, though.And along with Apostol's "Calculus", it's one of my two favorite books :)
Brennan Vincent
A: 

I'd recommend one of the head first series, like head first Java.

Jim C
+1  A: 

Microsoft released a bunch of introductory programming tutorials along with the release of Visual Studio Express editions. http://msdn.microsoft.com/en-au/beginner/default.aspx

They also have a MSDN website for kids learning about computers & development that has lots of high-quality, easy to follow content http://msdn.microsoft.com/en-us/beginner/bb308754.aspx

Nick Kavadias
+5  A: 

I call shenanigans! It's highly unlikely that Chris has a girlfriend. It's extremely unlikely that said girlfriend is interested in what Chris does.

In the event that this isn't a hoax... I'd start her off with Office Space (the movie) and then Superman II.

As for reading material - it really depends on her background and her intelligence. The head first books are nice, but it would be a bit intimidating to some people.

I'd recommend that you just show her something simple that you do.

C'mon - tell us the truth - she is imaginary, right?

mson
Superman III, surely? "Both keys... at the same time?"
Daniel Earwicker
lol - do I have my Supermans confused?
mson
Supe II didn't have computers. It had Terence Stamp trying to sound posh.
Daniel Earwicker
Yeah, Superman III had Richard Pryor inspiring Office Space.
Bill the Lizard
lol - you see why we don't have girlfriends...Actually, I guess I'm continuing the stereotype. Most of the developers I know are 'happily' married with children.
mson
+1 for office Space -1 for Superman.
Abizern
I really do have a girlfriend. :)
ChrisInEdmonton
+1  A: 

Hillis's The Pattern on the Stone. I'm also fond of The Little Schemer for something more hands-on; it's very different from other intros to programming. The Turing Omnibus is great, too.

Darius Bacon
+1  A: 

Programming, like other engineering disciplines, is about knowing how to do things not knowing about things. We build artifacts that solve problems in the world. If I wanted my wife to know what I do all day at the computer, I'd get her Roberto Ierusalimschy's book Programming In Lua and I'd get her to think of a program she'd like to have. Then I'd suggest she write it!

Norman Ramsey
A: 

Well computer science is a very broad range of things. Is she more interested in the programming aspect or the hardware aspect of your job?

If programming is her main interest, I've found the Head First series of books from O'Reilly to be pretty good for beginners, so much that I usually end up skipping the first few chapters in every one.

extra points for you if you can make her read SICP haha.

John T
+1  A: 

Getting Started with Arduino, sorry it's not like a CS book.

But why not step into the computer world from a real computer (if you agree a 8bit MCU with a bunch of IO pins is a computer ^_^) -- an Arduino board? Blinking LEDs, displaying temperature on a LCD with a 1-wire sensor have much more fun than those serious CS books.

Arduino comes with a modified Processing language IDE (the IDE is neat) which has a C-like syntax, easy for newbies.

rIPPER