I've finally convinced my girlfriend that learning to program is an essential skill for getting a good job. Personally, I have done a lot of work with a lot of languages and I think that Java offers enough features (OO for one) and prevents enough headaches (pointers!) that it makes a good starter language.
Now, I'd like to find a book for her to use as a tutorial, but I haven't found any that meet what I'm looking for. The ideal book would be:
-For true beginners. There should be no expectation of understanding even what a language or a compiler is. A book that starts with basic definitions and builds up would be great. She was asking me the other day about the difference between code, programs, and applications, if that gives you any idea.
-Actually useful. I've looked at the "For Dummies" books in the past and they seem a bit shallow. I don't think that even if you followed a For Dummies from cover to cover that you would really understand programming.
-Purely Object Oriented. I've seen a few books that introduce languages like C++ and Java with a functional approach and then a OO approach. For her purposes, OO is ideal and if she never has to learn what the "static" keyword is for, then great.
Frankly, it is difficult to learn programming AND OO concepts AND Java from a single book. For a beginner with absolutely no background, I would suggest below books:
1) Head First Programming (Griffiths et. al.)
2) Head First Object-Oriented Analysis and Design (McLaughlin et. al.)
3) Head First Java (Sierra et. al.)
Most importantly, programming is like mathematics. We learn concepts by reading book, but we become good at it only by solving problems.
On another note, someday, she'll have to learn what 'static' keyword is for
Are you sure this is a good idea? It sounds kind of like it's your idea that your girlfriend should learn to program, not hers. And have you considered giving her an easier route in by starting with Python instead? It's widely taught as a first programming language in schools, universities and even big tech companies like Google. It's object oriented, but it's dynamically typed and interpreted, so the syntax is much easier to get started with and you don't have to worry about dealing with compilers etc. There are huge numbers of high quality libraries available for Python, so you can do pretty much anything with it, and it's widely used in science, industry and commerce - I'm seeing more and more Python jobs coming up in the financial sector for example.
Because of its popularity as a learner's language, there are lots of books and free learning materials for Python. Here's just a few examples:
Think Python - free online edition of a well-known introductory book on Python.
Hello World! - a fun book "written in language a 12-year-old can follow, but anyone who wants to learn how to program a computer can use it. Even adults."
Head First Python - a great introduction to Python that covers a lot of ground in the distinctive Head First style.
O'Reilly Python Programming 1 - not free (costs about $500), but a very good, well-structured course with lots of practical work and your own tutor to provide feedback and answer questions.
FWIW, I think Python is a much better language for learners than Java, while still allowing you to acquire solid programming skills that can be applied in the real world. It allows you to make things happen quickly, tinker with your code in a REPL-like environment, and develop your skills in OO programming without all the cruft associated with Java. If you already know Python, then you're in an ideal position to help her - and if you don't know Python, it will probably be more fun for you both to be learning together (and share the pain ).
You're taking on quite a challenge here. Lots of very clever people simply don't get programming, and lots of clever people can't teach the stuff they know either (teaching is just as specialised a skill as programming), so you'll need to tread carefully and look out for positive ways to help your girlfriend work through the difficulties. But if she enjoys writing her first few programs in Python, as many people do because it's so easy to get started, then she's more likely to want to continue. Eventually, she may want to apply her OO Python knowledge in learning Java, or she may want to leapfrog Java and use her dynamic Python knowledge to get into the cool new dynamic languages on the JVM platform - she may even end up ahead of you on the tech adoption curve! If she decides not to take it further, she'll still have learned the basics of a useful programming language that can be used very easily for all kinds of ad hoc tasks on pretty much any platform.
Anyway, good luck to both of you - you're going to need it!
Chris, I hadn't even thought about Python, since I don't use it in my daily work, but that's a great idea and I think you're right.
To everyone else who's worried about me losing my relationship, I should have started my request with "My gf is finally convinced to learn a programming language" instead of "I finally convinced her...". This is her call, but she doesn't want to be overwhelmed.