I am currently publishing a book "Beginning SQL with SQLite" with O'Reilly Media. I wrote it initially pro bono to help train unemployed professionals in Dallas, but the other volunteers (many of whom are local CEO's) insisted I publish it. O'Reilly was very receptive to the book and Richard Hipp (the creator of SQLite) even reached out to help review it.
I am discovering I love sharing what I know. I am passionate about enabling people and making technology accessible to even the most nontechnical folks. After this book publishes, I am already outlining the next book to further my mission to democratize technology. I am a Java developer and have written a lot of intensive business applications with it. I think I am going to write about that next. But I am debating the audience.
A common complaint I hear from people learning Java from books is they do not know how to apply it. They go through an encyclopedic documentation of functionalities (even with beginner books), but afterwards they do not know how to piece these functionalities together to create a practical solution. Even worse, these beginner books do not teach some very simple best practices that can save their program from severe bugs, especially in mitigating mutability with immutable designs and Google Guava 's Immutable Collections. I do not see why beginners cannot be taught to leverage these relatively simple practices and libraries that make a world of difference early in their programming success.
But that is also my paradox. Knowing how to do something well often comes from experience and mistakes. But at the same time i would like to believe preaching immutable design early on can make a difference in a beginner's success and program stability. I am not preaching they learn functional or reactive programming as a beginner, but there are simple measures they can take I wish people told me early in my programming career.
Another idea I have floating in my mind is a book that uses an underlying project to teach Java. This will solve the complaint I have heard from people and provide an opportunity to apply and integrate Java knowledge on a real business problem. If throughout the book a business problem is presented and with each chapter some code is added, a full-solutioned product will be built by the end of the book, and encompass all topics from class design to database interaction and JavaFX GUIs. This is what a lot of people want, but then I ask if this fits into a beginners book as well.
What do you guys think? Can I take all the material above and put it in a single book? Can a book have "practical" beginner material and an intensive project to apply it? Or would it be better to separate that into two books? Or should I target this as an intermediate book and not a beginner book?
Of of the most enjoyable development books I have ever used (Rails 3 Tutorial - Michael Hartl) spends the entire books teaching by doing.
The book introduces the content, all the while also creating a clone of Twitter that uses this content. This is not an entirely new learning tool either, I have heard from many sources (See SimpleProgrammer on Youtube) that the most effective way for software developers to learning is by coding. Reading and listening do not come even close to the effectiveness of actual practical application.
If a book doesn't provide content that facilitates practical application, then you need to practice the contents in your own way. Anything else just isn't netting you a 100% effective learning experience.
I should also mention that the Head First series is built on the idea of engaging/stimulating content to make it stick to your brain, which is one of the reasons why the Head First Java book was so revolutionary, and still is today. Cathy Sierra (one of the authors) actually built this website too.
So in summary: Write a book where the reading is building an app. Take some visual cues from the Head First series too, and you will definitely be on to a money-maker.
Okay thanks Marc! I've seen "Head First Java" when browsing through Amazon many times, and I was a little skeptical because it looked kind of salesy. But I just added it to my wishlist and will read through it.
I think I'm going to make the underlying project define the book, and all the Java functionalities presented to the reader will be applied to this project.
People learn to build houses with blueprints, not an encyclopedia of house parts.