I recall having a similar epiphany about the value of books when you need to learn something new.
There’s a tendency to believe that all information is equally valuable. Therefore, an hour spent reading about, say CoffeeScript in blogs is equivalent to an hour spent reading a CoffeeScript book, only the blogs are free, immediate, and more entertaining.
The last bit is the key. They reason that blog posts are more entertaining is the reason to read the book. They are all sizzle, with optional steak. A book has structure, as Avdi notes, and part of that structure is balance between crazy-fascinating things and fundamentals that are not that fascinating at first but necessary for deep learning.
In cliche terms, books contain information that is important but not urgent. Thanks to the social mechanics of blogs and social news sites and retweeting, the blog posts the filter through the firehose are all urgency. Some also contain important topics, but none contain the important but not urgent stuff that is necessary for a complete education. Any blog post or essay with important but not urgent information falls into people’s “read this later” bucket and never gets the upvotes to make the front page of Hacker News or anything else.
So, you will learn things in an hour on the web, and in an hour reading a book, but if your primary goal is a thorough education in something that is new to you, an hour in a good book will serve you better than an hour reading blog posts.
p.s. Alas, my own books at http://leanpub.com/u/raganwald are simply collections of blog posts massaged into book format, and as such they are entertaining but do not provide the kind of structure and “important but not urgent” information Avdi and I are extolling here. For example, my essays about Combinators and Ruby might make you interested in Combinators enough to read a real book about them, but the book won’t actually teach you introductory combinatory logic.
Agreed. Books are also the result of much more time and effort spent thinking about, planning, and evolving the content, structure, presentation. A book-length collection of blog posts just won't have the attention to detail and completeness that most books do.
I also believe books improve one's ability to concentrate, which directly benefits a programmer's ability to get into and stay in flow. Whereas blog posts are, to paraphrase Fight Club, 'single serving' bits of information, reading a book requires (and improves) mental commitment and the ability to shut out distractions and delay gratification for longer durations.
I got myself a Kindle for Christmas, and one of the biggest benefits of this little device is that it eliminates distractions like email and makes it much easier to shut out the world and concentrate on reading long, relatively difficult technical papers and books (vs reading them on my computer as I had been doing previously). Amazon really knows what they're doing when it comes to books and reading.
However, you have to careful about reading books on technology. It is very possible that the technology has changed since the book was published. There are some technologies I would read books for and some technologies that I would read the online documentation and blogs.
I disagree. All books are released too early if you think about it. The technology will change rapidly no matter when you buy the book so it's up to the buyer to make sure it's the latest release for the version they'll be working with if a version applies.
Let's take nodejs for example. I think it's safe to say that it's new enough to be considered too early to publish if there were such a thing. Even if node changes drastically within the next few months any book about any technology that's worth anything at all (did I say anything enough times? Haha) will teach you the fundamentals about how to get it, set it up, configure it how you want, and get you going with some reproduce able examples. That's really all you need. No book can be expectd to cover every last bit of the technology in great detail. I'd argue that most people learning to program get the fundamentals from the books and maybe some bonus knowledge and the rest we pick up with experience and research.
Then you have remember that there's a good bit of time between the writing of the book and it's publishing and then some more time between editions. No book can be current. But it doesn't matter because of why we buy the books to begin with. We learn the ropes from them. Even books about advanced techniques teach you enough about a technology so that in a case where the advanced technique is out of date you can still get what you want done by inferring how you're supposed to do things now based on other data from the book combined with experience and practice. So given all this, I don't think there's a such thing as being released too early and in fact believe all books are released too late. But they're valuable nonetheless.
Servicable, sometimes only given that I have 20/20 vision (PDFs with particularly small text), but plenty of room for improvement.
The biggest problem is that Kindle can't reflow PDF text the way it does with mobi formats (which I believe is true anywhere you read PDF, not just kindle), so you can't seamlessly resize the text. You can zoom the PDF document to enlarge the text, but page turning functionality doesn't work until you zoom back out since a zoomed document will reinterpret page turn actions as horizontal scrolling actions (on Kindle Touch at least, not sure about the others with specific hardware buttons for page turning).
There is a literal ton of info on converting PDF to mobi at the Kindle subreddit, but no perfect conversion techniques yet:
1. Use Briss (http://sourceforge.net/projects/briss/) to trim the margins of the pdf, then read it in Landscape mode. This naturally enlarges the text without breaking page turning.
2. Use any of the converters listed in the Reddit/r/kindle sidebar, whether downloadable software or web-based (Readability, Instapaper, SendToReader, etc).
3. Use Calibre to convert PDF to mobi (results are mixed, and graphs and images aren't handled so well).
4. Email your PDF to your_kindle_id@free.kindle.com with "convert" in the subject to have the PDF converted to mobi by Amazon and then delivered to your kindle. Similar results as 4.
All of them except #1 result in mangled formatting to some degree or other, especially PDFs (or PDFs created from websites) with special math or code formatting. Like I said, servicable, you can read it and get the info, but not the brilliant reading experience it is with native .mobi files.
Thanks. Makes me wonder if there's a startup in there somewhere, for converting pdf to mobi or even a device optimized for reading pdfs.
I respect pdfs for their Postscript origins but man do I hate getting a pdf link, hate waiting for them to load, hate reading them on my computer. And yet much of what I want to read is locked inside them.
That thought occurred to me too. There are a bunch already working on it and are all listed in the sidebar of the kindle subreddit. But I imagine whoever perfects it is looking at a quick buyout from one of them, or maybe even Amazon. It's definitely a real pain point for an otherwise brilliant product.
I can't speak for him but on the smallest (7''?) Kindle reading abstracts is a bit of a pain, reading single column per page is fine but double column is annoying enough I'm considering getting reading glasses or a magnifying glass. (I'm 27) I meant to email amazon to find out if you can dismiss the progress bar because with some pdfs it obscures the bottom line which is annoying as all hell. Still highly recommended.
Edit: 10'' would almost certainly be fine. The zoom doesn't really fix the problems with double column pdfs either.
As has been noted repeatedly: “To Mock a Mockingbird” by Raymond Smullyan. It’s one of the finest mathematics/logic books ever written for the intelligent layman.
They ship to a very large amount of places for free. My only complaint is that because it is shipping from another country it takes a while to get to you and you don't get any tracking codes from them.
I don't know why he pushed you should learn "the popular one" so hard, unless he meant that ironically. There's no way to choose the most popular language from PHP, Ruby, and Python.
I do agree on books vs. blogs though. When I started learning Python as my first real language this summer the best source I ended up learning from was LPTHW[1] (I used the free online edition). I think a book like that is a good tool for learning a language, because it makes sure you hit on every important feature/concept in that language. However, I later bought a physical book for $30 about Django that didn't do anything except hold my hand and walk me through what could be a 20 minute Django tutorial on YouTube. Maybe it was just a bad book, but when it comes to learning a framework/stack, I think the documentation provided if you choose one of these so-called popular options will be plenty, and from there it's tinkering and screwing up that gets you there.
I deliberately used a dated example because I figure it would probably ring a bell with a lot of people. Realistically this is a choice a lot of people were probably making around 5 years ago, and the answer at the time would almost undoubtedly have been PHP. Or Java/JSP. From what I've seen I think PHP is a pretty horrid language, and we all know how boring Java is. But the point is five years ago they were both well documented and it was easy to find answers if you got stuck, which wasn't as true of the others, especially for web programming purposes. Once you learned PHP it would have been pretty easy to understand where Rails or Django was coming from as they became popular, and "get" how they differed from PHP and why it mattered.
As I was reading his post, I was thinking that the perfect example of the sort of technology his methodology would apply to right now is the recent explosion of Javascript MVC frameworks: Backbone, Spine, Ember, etc. Using his approach, Backbone would be the obvious choice to start off with.
I think that was his way of saying just pick one. Whichever one seems to you like the most popular, go with that. Because it doesn't really matter which you choose, what matters is that you start.
Author accurately describes the cycle I go through in trying to keep up with technology changes. If I want to make an iPhone app well first let me pick up a book on design so I can make it visually pleasing. ohh wow this psychology stuff is interesting I think Ill read some of that. man wasnt I supposed to be programming? better pick up a book on how to get stuff done." I think the author is on to something when he suggests immediately applying what you are learning to a real world project. I can read a book on HTML and think I know what is going on until I close the book and try it out. Same with Chemistry or this or that. The best way to learn a new skill is to apply it immediately.
This was me a year ago: I’ve read all of their design rationales, and despite the fact that I’ve never written an app in Ruts, I totally agree with their critiques.
Phase I: Print this out, have it framed (with non-gloss glass) and hang it on the wall where you can easily see while you code.
Phase II: A day will come when, while reading this, you will chuckle to yourself and mutter, "I, too, was like that". Then remove it from the wall and pass it on to another noob.
I'm still in Phase I, but have become conscious of this, which is an indication that I may be moving, albeit very slowly, to the second phase.
When it comes to programming books, I tend to prefer paper-based books versus e-books.
With paper-based book it's easier for me to flip back and forth through the book to quickly reference something. Also, reading code snippets is a whole lot easier since you don't have to worry about screen size messing up the code readability and formatting.
>Now use what you’ve learned in a project. For the love of pete do not use it on a project you get paid for, unless you have an explicit understanding with your employer that you are using something you’ve never used before, and will probably get it totally wrong and have to rip it up and start again in six months. Otherwise, use it on a personal project. A small personal project.
Whoops.
To be fair, with my current project there was an expectation that this was a going to be a month long "use and dump it" project.
Well, I just got hired for the rest of the year to expand my horrible, horrible mistakes. It was my first django project and I didn't realize you have to explicitly define relationships in the model on related fields in order to do joins. Now there's too much data and legacy code to go back, and I'm stuck pulling up related fields in other tables one by one... kill me now.
Any time I want to learn something new, I always try to start with a book... SEO, JavaScript, Ruby, Version Control, etc. Being forced to follow a linear learning path works well for me. Even thought many of these concepts are evolving rapidly, books get me the core understanding I need to then venture out online for more current, even cutting edge material.
For me, there's nothing better than cracking open the pages of a book on a new topic.
I just had to go through this and was forced to learn these tips myself recently. Before I discovered HN I was a PHP guy. I knew it. Used it. Was comfortable with it. Then I came lurking around here and found out that I wasn't cool because I didn't know Ruby and therefore Rails. Then I found out that I wasn't cool because I was using Apache instead of Nginx or nodejs. So I read about all that stuff for most of this year, played with getting Ruby to spit out arrays in reverse and organize them in different ways, got a VPS and installed Nginx and then at the end realized that all I got from it was an Nginx server serving up a static unfinished website in HTML and the knowledge of how to play with arrays in Ruby (and just in irb, not even in a web page!).
The moral of the story is that reading is useless without action. It's easy to fall into analysis paralysis even if you're decently experienced.
I've come to almost despise the hipsters (and that word is so apt for describing them) who are too cool to do things the standard, time tested way. It's one thing to go bleeding edge for the sake of experimentation and furthering your knowledge and skill but when you're off using some esoteric language or framework or whatever just to be different or cool then that's really... Well... Lame for lack of a better word. Like wearing some ridiculous outfit "to be different" and claiming its just fashion that the rest of us are too uncool to get.
I eventually did get out of that unproductive cycle by the way. I am learning Rails but I've put more of my energies into actually producing things that work using uncool but very useful languages, practices, and frameworks. Sometimes the cool kids are wrong. It's more important to get something produced and working well than it is to use some hip technology because the cool kids claim its better. Ive found that a lot of these claims of some tech stack being better either all boil down to some very narrow use case or give you some benefit that's really negligible in the grand scheme of things. Take it with a grain of salt. Read a bit but don't get hung up on the hype. Make something.
Can you give me a concrete example of one of these hipsters? I'd like to know because I work at a company where we use rails and related tech exclusively, so we'd probably fit right into this camp.
> who are too cool to do things the standard, time tested way. It's one thing to go bleeding edge for the sake of experimentation and furthering your knowledge and skill but when you're off using some esoteric language or framework or whatever just to be different or cool then that's really... Well... Lame for lack of a better word.
If you're happy with PHP, use PHP. If you don't like PHP and want to learn something else, then learn something else. But no one builds or uses anything just "to be different", they use it because it helps them produce working code quicker.
> Like wearing some ridiculous outfit "to be different" and claiming its just fashion that the rest of us are too uncool to get.
The hipsters that you refer to don't think you're too uncool to get it. In fact they don't think anything about you at all. They're too busy making things.
I don't think Bill was targeting all Ruby users with his response. If anything, RoR is the poster child for what he describes as a "standard and time-tested" technology. As long as you're actually building something with your stack -- whatever it may be -- you probably don't fall into the "hipster" camp.
Right. Thank you. I wasn't targeting any language really. I just happened to remember some instances of Ruby hipsters who laughed at people using anything else and used it as an example. The language or whatever technology doesn't really matter, you can swap out Ruby for anything (literally anything), because the hipsters exist in every camp. Some languages are more well known for their hipsters but I wasn't trying to single out any one group so I'm sorry if I offended anyone.
There’s a tendency to believe that all information is equally valuable. Therefore, an hour spent reading about, say CoffeeScript in blogs is equivalent to an hour spent reading a CoffeeScript book, only the blogs are free, immediate, and more entertaining.
The last bit is the key. They reason that blog posts are more entertaining is the reason to read the book. They are all sizzle, with optional steak. A book has structure, as Avdi notes, and part of that structure is balance between crazy-fascinating things and fundamentals that are not that fascinating at first but necessary for deep learning.
In cliche terms, books contain information that is important but not urgent. Thanks to the social mechanics of blogs and social news sites and retweeting, the blog posts the filter through the firehose are all urgency. Some also contain important topics, but none contain the important but not urgent stuff that is necessary for a complete education. Any blog post or essay with important but not urgent information falls into people’s “read this later” bucket and never gets the upvotes to make the front page of Hacker News or anything else.
So, you will learn things in an hour on the web, and in an hour reading a book, but if your primary goal is a thorough education in something that is new to you, an hour in a good book will serve you better than an hour reading blog posts.
p.s. Alas, my own books at http://leanpub.com/u/raganwald are simply collections of blog posts massaged into book format, and as such they are entertaining but do not provide the kind of structure and “important but not urgent” information Avdi and I are extolling here. For example, my essays about Combinators and Ruby might make you interested in Combinators enough to read a real book about them, but the book won’t actually teach you introductory combinatory logic.