资源说明:List of books and screencasts related to development, user experience design, and entrepreneurship.
= Reading list Inspired in part by Apprenticeship Patterns, I've decided to maintain a public reading list. The goals are pretty simple: * Be honest about what books I've read, partially read, and plan to read. * Write a few sentences about each book – mostly for myself but also for anyone who might be interested. * Only include books related to development, user experience design, and entrepreneurship. * Include screencasts as well since that's how I do much of my learning. Note that many of these entries were written long after having read the actual book. I apologize for any inaccuracies. Also, the completion dates are often rough approximations. == Books {The Little Schemer}[http://www.ccs.neu.edu/home/matthias/BTLS/] Daniel P. Friedman & Matthias Felleisen Really good so far. Making me think how much of our work is done recursively. It's easy to overlook using high level languages, like Ruby. Currently Reading. {The Cucumber Book: Behaviour-Driven Development for Testers and Developers}[http://pragprog.com/book/hwcuc/the-cucumber-book] Matt Wynne and Aslak Hellesøy The most interesting chapters, like AJAX testing, are still in beta. Currently reading. {Crafting Rails Applications: Expert Practices for Everyday Rails Development}[http://pragprog.com/titles/jvrails/crafting-rails-applications] Jose Valim Only read the first few chapters but it's already paid off by giving you a deeper insight into whats really going on in Rails. Currently Reading. {The Pragmatic Programmer}[http://www.informit.com/store/product.aspx?isbn=9780201616224] Andrew Hunt & Dave Thomas Seminal book loaded with practical advice for writing good software. Packed with really smart analogies (e.g. tracer bullets) written in simple, clear language. I'm inclined to agree with the book's bold, opening paragraph: "This book will help you become a better programmer." {Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman}[http://oreilly.com/catalog/9780596518387] Dave Hoover & Adewale Oshineye Inspirational read, especially if you've only been coding for a few years. Lots of good ideas for improving your skills organized into loosely overlapping patterns. Also, peppered with thought-provoking quotes. Completed in February 2011. {Agile Coaching}[http://pragprog.com/titles/sdcoach/agile-coaching] Rachel Davies & Liz Sedley Most useful if you plan to lead a team of agile developers. If you're simply looking to better familiarize yourself with Agile practices, this isn't your best choice. That's not to say you won't read about general practices. You will, but this book focuses more so on coaching. Partially read in late 2009. {The Agile Samurai: How Agile Masters Deliver Great Software}[http://www.pragprog.com/titles/jtrap/the-agile-samurai] Jonathan Rasmusson This book makes for a good primer. It's very easy to understand and you're sure to come away with a decent understanding of what Agile is all about. A slight criticism, some of the methodologies (e.g. inception deck) seemed a little contrived. Overall, a good read for those looking to learn the basics of Agile. Partially read in mid 2010. {The Entrepreneur's Guide to Customer Development}[http://www.custdev.com/] Brant Cooper & Patrick Vlaskovits Presents a strong case that most startups fail not because they couldn't to make a product but because no one wanted to use the product they made. The solution? We need to step away from our terminals and talk to potential customers. Find out what people really need. Make the product they want even if it's not entirely inline with your vision. This book will guide you through the process. Completed in December 2010. {Arduino: A Quick-Start Guide}[http://pragprog.com/titles/msard/arduino] Mark Schmidt This is an excellent primer to building robots with Arduino. One caveat. This book is written for programmers with very little knowledge of electronics. This means the book assumes a basic knowledge of programming and almost no knowledge of electronics. That's great for most web developers. But if you're an experienced hardware hacker, this probably isn't the book for you. Partially read in mid 2010. {Pragmatic Guide to Git}[http://www.pragprog.com/titles/pg_git/pragmatic-guide-to-git] Travis Swicegood This makes a good reference. If you're like me you have an excellent understanding of Git – at least until you mess some- thing up. That's when things get tricky and you start to feel like you could wreck the entire code base. That's when this book comes in handy. Partially read in mid 2010. {O'Reilly Head First: HTML with CSS and XHTML}[http://oreilly.com/catalog/9780596101978] Elisabeth Robson & Eric T. Freeman Despite the hokey cover art, this book gets the job done. I started this read with absolutely no knowledge of HTML/CSS. Two weeks later I could build a (shitty) website. Note, however, that this book is probably a bit dated (e.g. I don't recall any mention of HTML5/CSS3). Complete in November 2008. {HTML5 & CSS3: Develop with Tomorrow's Standards Today}[http://pragprog.com/news/html5-and-css3-develop-with-tomorrows-standards-today] Brian P. Hogan There's a lot of HTML5/CSS3 resources out there and, unfortunately, this is not the best of them. Hogan spends too many pages covering concepts that hardly require any explanation at all (e.g. how to use new markup tags). Also, he goes into unnecessary detail when explaining how to use JavaScript to ensure support for older browsers. I suppose this could be good if you're looking for a leisurely overview of the latest web standards. But ultimately for me this book failed to distinguish itself. Partially read in early 2010. {Pro JavaScript Techniques}[http://apress.com/book/view/1590597273] John Resig Excellent, exhaustive overview of modern JavaScript from the creator of jQuery. Admittedly I've never read this book cover-to-cover but I seem to learn something new every time I flip through it. I suspect the web would be a different place today had this been published a decade earlier. Partially read in early 2010. {JavaScript: The Good Parts}[http://oreilly.com/catalog/9780596517748] Douglas Crockford Absolutely my favorite JavaScript book. Crockford's style is incredibly concise – almost to the point of laconic. Yes, this can make it difficult to understand. But it also makes for a rewarding read since you probably had to work a little bit to really understand the patterns that make functional languages very powerful (e.g. closure, lexical scoping, currying, etc). As Crockford says: "This is not a book for dummies...Don’t be discouraged if it takes multiple readings to get it. Your efforts will be rewarded." Completed in early 2010. {Learning jQuery: Better Interaction Design and Web Development with Simple JavaScript Techniques}[https://www.packtpub.com/jQuery/book] Jonathan Chaffer & Karl Swedberg I've heard other books (e.g. jQuery in Action) put this one to shame but it got the job done for me. I was able to finish the entire book in about a week and immediately apply what I'd learned. I'd have a look at other books as well but you could certainly do worse than this. Completed in late 2009. {Head First PHP & MySQL}[http://oreilly.com/catalog/9780596006303] Lynn Beighley & Michael Morrison Every profession has it's cross to bear and ours is having to code in PHP. Truth be told, I have no intention of becoming an expert PHP developer but occasionally I need to hack a WordPress plugin, build a registration form, etc. This book gave me the basic competency needed to tackle simple tasks using PHP. {Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction}[http://www.learningprocessing.com/] Dainel Shiffman Excellent introduction to the Processing language. The book, however, aims also to teach the basics of programming. This means experienced programmers might find themselves skipping large sections which cover rudimentary programming concepts (assignment, data structures, etc). Still, you'll probably run across some things you didn't know about – especially if you haven't spent much time programming animations or games. Note that you can also use this book to learn Processing.js since the APIs are essentially interchangeable. Completed in mid 2010. {Agile Web Development with Ruby}[http://pragprog.com/titles/rails2/agile-web-development-with-rails] Sam Ruby, Dave Thomas, David Heinemeier Hansson Relatively speaking, there weren't too many basic Rails book when I was first learning. So, like everyone else, I spent a good deal of time reading Agile Web. It was decent for the time; however, I suspect beginners would be better off having a look at newer, easier to understand resources – such as Michael Hartl's introduction. Partially read in late 2008. {Getting Real: The Smarter, Faster, Easier way to build a Successful Web Application}[http://gettingreal.37signals.com/] 37signals Lots of tips for how to cut out the bullshit and focus on rapidly building a solid, successful web application. At its most basic, this book suggests you stop planing, start writing code, and let the details sort themselves out as you go. That's pretty good advice but only, I think, if you have a very strong team. Like all 37signals books, this has a kind of bad-boy contrarian philosophy that could lead to disastrous software if followed by less qualified development teams. Nevertheless, it's a good read. Completed early 2009. {Rails 3 Upgrade Handbook}[http://peepcode.com/products/rails-3-upgrade-handbook-pdf] Jeremy Anally Upgrading is not a fun process. This tiny book makes it a bit more tolerable. A must if you find yourself needing to bring an old application up to speed. Completed in late 2010. {The Rails 3 Way}[http://www.informit.com/store/product.aspx?isbn=0321601661] Obie Fernandez I've only poked through this book a little bit and mostly as a reference tool. But given the author, it's likely to be a high quality read. Nevertheless, you might consider reading Peter Cooper's much-discussed review which details some pretty significant shortcomings. Partially completed in early 2011. {Simply Rails 2}[http://www.sitepoint.com/books/rails2/] Patrick Lenz Along with Agile Web, this book helped me grasp the basics when I was still a total novice. Of course, I wouldn't recommend it for current learners since it's way out of date. If you're looking to learn the basics, check out Michael Hartl's introduction. Completed in early 2009. {The RSpec Book: Behavior-Driven Development with RSpec, Cucumber, and Friends}[http://www.pragprog.com/titles/achbd/the-rspec-book] David Chelimsky, et al. I can't imagine anyone really understanding RSpec until they've read this book. It's long and at times complicated, but absolutely integral if you're looking to be a professional Ruby developer. Completed (after many false starts) in mid 2010. {Rails Test Perscriptions: Keeping Your Application Healthy}[http://pragprog.com/titles/nrtest/rails-test-prescriptions] Noel Rappin I was initially annoyed by this book's use of Test Unit rather than RSpec. But I gradually warmed up to it. Most of the topics transcend this-or-that framework, so there's much to be gained regardless of your preferred framework. And in the end, there's lots of good information in here. This book is intended for readers with at least some existing knowledge of testing. Completed in early 2011. {Beginning Ruby: From Novice to Professional}[http://apress.com/book/view/9781590597668] Peter Cooper Best all around Ruby primer. Cooper begins teaching you programming basics, like flow control, using simple string methods. Later, he gives an excellent explanation of object orientation and various data structures. By the end of the book, Cooper touches on to fairly advanced topics, like metaprogramming. Thinking back, it's amazing how much this book covers in relatively few pages. Completed in early 2010. {Design Patterns in Ruby}[http://www.amazon.com/Design-Patterns-Ruby-Russ-Olsen/dp/0321490452] Russ Olsen Olsen covers each of the classic design patterns discussing how they might be implemented with Ruby. His simple style and choice of examples makes this potentially daunting read relatively easy to follow. Especially enjoyed the "In The Wild" sections which show examples of each pattern being used in open source projects. Advanced developers will probably get more out of this read, but there's no reason less experience developers should be discouraged. Partially completed in mid 2010. {Learn to Program}[http://pine.fm/LearnToProgram/] Chris Pine Absolutely the best book to get started if you have never programmed in your life. Pine gently guides you through the very basics (What's a string? What's an array? What's an if statement?). Each chapter ends with a few problems which, in my experience, were difficult enough to get you thinking without leaving you stumped and discouraged. This is book that got me started and I try pushing it on everyone I met. Completed in late 2008. {Metaprogramming Ruby}[http://pragprog.com/titles/ppmetr/metaprogramming-ruby] Paolo Perrotta This book answers all kinds of mysteries. If you've ever wondered "How the hell is that even possible?" this book probably has the answer. Dynamic finders in Rails? How to build a DSL? How RSpec works under the hood? This book sheds light on the dark magic that makes Ruby so powerful. Most importantly, however, this book showed me that metaprogramming really isn't that complicated. Completed in mid 2010. {Why's Poignant Guide to Ruby}[http://mislav.uniqpath.com/poignant-guide/] why the lucky stiff Part comic, part novel, part technical manual. If Kurt Vonnegut were to write a programming book, it'd probably end up like this. It's an odd book but it definitely has flashes on brilliance. I'd recommend reading it in conjunction with Peter Cooper's "Beginning Ruby". They make a nice pair. {Beginning Unix}[http://www.amazon.com/Beginning-Unix-Programmer-Paul-Love/dp/0764579940] Paul Love, Joe Merlino, Craig Zimmerman, Jeremy C. Reed, Paul Weinstein I'm no Unix hacker. And for the most part, I'd like to keep it that way: focusing on programming rather than sysadmin. But we all need to know our way around the terminal at least a little bit. This book taught me everything I needed to know (and probably more). If ssh-ing on to a server makes you nervous, you should probably just bite the bullet and read this book. Completed in Early 2010. {Designing For The Social Web}[http://www.amazon.com/Designing-Social-Web-Joshua-Porter/dp/0321534921] Joshua Porter This book's about UX design not programming. One bit that stuck with me: Porter suggests modeling software interfaces after real world objects (e.g. users don't need to be told what a shopping cart is or how it works). Partially completed in early 2010. {Don't Make Me Think: A Common Sense Approach to Web Usability}[http://www.amazon.com/Think-Common-Sense-Approach-Usability/dp/0789723107] Steve Krug If you only read one book on usability, make it this one. It's short, pragmatic, and has surprising breadth. Some of Krug's advice has proven indispensable. For example, Krug explains how to get people to actually read your website. Or in another chapter, Krug explains how to make your site simpler through tiny, incremental usability improvements. Completed in late 2010. {Digging into WordPress}[http://digwp.com/] Chris Coyier & Jeff Starr I don't really love WordPress but often it's the most practical choice for simple projects. Occasionally, I find myself looking to do something off the beaten path, and that's where this book comes in handy. In typical Chris Coyier style, the prose is a bit long-winded. But depending on your familiarly with the topic being discussed, that can definitely be a good thing. At any rate, it's my goto WordPress reference guide. Partially completed in early 2010. {20 Things I Learned About Browsers and the Web}[http://www.20thingsilearned.com/home] Folks at Google Chrome Nice, non-technical explanation of how the web works and have evolved over time. Impressive design and HTML5 book effect. == Screencasts {Meet Postgresql}[http://peepcode.com/products/postgresql] Peepcode Gives quite a bit of advanced information (e.g. generating reports). Perhaps more than you'll need if you're just looking to simply convert your Rails app to Postgres. Nevertheless, I highly recommend it if you're using Heroku and need to get your development environment using Postgres rather than MySQL. Watched March 6, 2011. {Node.js Roadmap}[http://developer.yahoo.com/yui/theater/video.php?v=yuiconf2010-dahl] Ryan Dahl Dahl discusses various improvements planned for Node version 0.3 (faster buffer, streams, etc). Much of the talk is pretty low level, so it's not a good choice if you're unfamiliar with Node. Concludes with a cool demo of a simple chat server. Watched 14 February 2011. {Project Future}[http://developer.yahoo.com/yui/theater/video.php?v=crockford-projectfuture] Douglas Crockford Crockford discusses a wide variety of topics – urban planning, war, politics, suburbanization, righteous hatred, and Walt Disney – all as part of a wonderfully discursive discussion of our future and past. If it's not obvious, this is not a technical talk. Quotes I liked: "I used to think that everyone should learn to program. I don't think that anymore. Programming is a talent." Watched 14 February 2011. {Classy Web Development with Sinatra: Series}[http://pragprog.com/screencasts/v-aksinatra/classy-web-development-with-sinatra] Adam Keys A good place to start if you have no experience using Sinatra. After watching this screencast, I felt confident about when and how to best use Sinatra. And a few months later, when making a simple registration page, I found myself reaching for Sinatra rather than PHP. That's when I knew it was a worthwhile watch. Watched in late 2010. {Meet Node.js}[http://peepcode.com/products/nodejs-i] Geoffery Grosenbach (Peepcode) Another high quality screencast from the folks at Peepcode. I have to admit I didn't run out and build the next great node app, but I did come away with an understanding of what Node.js is all about and why it's so exciting. Watched in mid 2010. {Ruby 1.9: What You Need To Know}[http://envycasts.com/products/ruby-19-package-deal] David A. Black A two part screencast to get you up to speed with Ruby 1.9. It doesn't cover every little detail but it does an excellent job hitting the main points. Watched in mid 2010. {Crockford on JavaScript}[http://yuiblog.com/crockford/] Douglas Crockford Crockford's six part public lecture series on JavaScript. The series begins with a brief history of programming languages, discussing the process of language design becoming progressively more abstract and powerful. But, as Crockford is careful to point out, programmers have often been terrible at recognizing advancements even in their own field. Too often, the current generation of coders is reluctant to embrace a new technology. So progress is stalled until a fresh batch of programmers enter the field and are willing to accept new technologies precisely because they have no ties to the old way of doing things. Crockford argues this same tendency in part explains why JavaScript has been dismissed as a "toy language". It's functional nature was out of step with the current emphasis on object oriented design. Had anyone taken a sustained look, however, they'd have discovered a powerful, flexible, even superior language. As Crockford says, "JavaScript is Lisp in C's clothes". More generally, Crockford is suggesting we reconsider our current commitment to object oriented languages and their reliance on complicated taxonomies. Functional languages offer more powerful features, like closure, and thus more flexible design patterns. And given the popularity of something like Node.js, I'm inclined to take Crockford's ideas seriously. Watched in mid 2010. {Version Control Made Easy}[http://pragprog.com/screencasts/v-jwsceasy/source-control-made-easy] Jim Weirich Weirich does much more than just explain how to use Git. He takes you on a tour of how version control ought to work, starting from the very basics. Gradually you'll see how Git conforms to the patterns he describes, and by the end, you'll have a fundamental understanding what makes Git a superior version control solution. Watched in mid 2010. {Haml & Sass}[http://peepcode.com/products/haml-and-sass] Geoffery Grosenbach (Peepcode) If you're not using HAML and SASS, you probably should be. It's pretty awesome and very simple to learn. In fact, this screencast will teach you everything you need to know. Watched in early 2010. {Advanced Active Record}[http://envycasts.com/products/advanced-activerecord] Envycast Awesome little screen cast from the makers of New Relic. Chalked full of little tips. No matter your experience level, you'll probably learn something new here. Watched in mid 2009. {Everyday Active Record: Series}[http://pragprog.com/screencasts/v-rbar/everyday-active-record] Ryan Bates Ryan Bates is too awesome. If you watched Railscasts, these are very similar but longer, more focused, and have better visualizations. Note these are intended for beginner to intermediate level developers. Watched in mid 2009. {Mastering Rails Forms: Series}[http://pragprog.com/screencasts/v-rbforms/mastering-rails-forms] Ryan Bates This is like a three hour Railscast episode which focuses on forms. Very high quality. Intended for beginner to intermediate level developers. Watched in mid 2009. {Phusion Passenger}[http://peepcode.com/products/phusion-passenger] Geoffery Grosenbach (Peepcode) I don't really use Passenger anymore since I deploy everything to Heroku. But if you're looking to use Passenger this is a good primer. Watched in mid 2009. {Productivity for Programmers}[http://peepcode.com/products/productivity-for-programmers] Lars Pind Not amazing but totally worth a watch. One bit of advice I took from this: Identify the most and least productive hours of your day. Be sure to program during your productive hours and use the less productive times for other activities (exercise, lunch, socializing, etc). Watched in mid 2009. {Scaling Ruby}[http://vimeo.com/2164455] Envycast Honestly, this screencast discusses a bunch of problems I've never had to encounter firsthand. Still, it was watching if only to broaden my horizons. Watched in mid 2009. {RSpec Series: Basics, Mocks and Models, Controllers and Tools}[http://peepcode.com/] Peepcode This is a set of three screencasts each discussing different aspects of the RSpec testing framework. Testing is very difficult especially at first. While these screencasts definitely help, I suggest attacking the topic with a variety of resources. Unless you're already familiar with similar testing frameworks, these screencasts probably won't teach you everything you need to know. Watched in mid 2009. == Things I plan to read. {Mythical Man Month}[http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&qid=1304104002&sr=8-1] Frederick P. Brooks {Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages}[http://www.pragprog.com/titles/btlang/seven-languages-in-seven-weeks] Bruce Tate {Clean Code: A Handbook of Agile Software Craftsmanship}[http://www.informit.com/store/product.aspx?isbn=0132350882] Robert C. Martin {Business Model Generation}[http://www.businessmodelgeneration.com/] Alexander Osterwald & Yves Pigneur {jQuery Pocket Reference}[http://oreilly.com/catalog/0636920016182] David Flanagan {Design Patterns: Elements of Reusable Object Oriented Software}[http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612] Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides == Things I plan to watch. {Meet Rails 3: Series}[http://peepcode.com/products/meet-rails-3-i] Peepcode {Play by Play: John Barnette}[http://peepcode.com/products/play-by-play-jbarnette] Peepcode
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。