DEV Community

Ben Lovy
Ben Lovy

Posted on

What are your favorite books?

There is an absolute wealth of technical knowledge found in books out there, but nobody has time to read them all. What's on the top of your "must-read" list, either in your specific technology or in general?

I've got three.

First, The Little Schemer taught me how to think recursively more effectively than any other material I've read. You don't come out understanding recursive solutions to a set of problems, you come out equipped to tackle any problem at all recursively. It was a powerful experience, and a fun reading style.

Second, Programming in Scala, 3rd edition. This is a book about Scala but I learned a lot about programming in general from it and the author cleared up some misconceptions I'd held especially around closures. I didn't end up going on to use Scala much but this book made me a stronger programmer.

Finally, I've only just begun Mazes for Programmers but it's already a blast. It's both a nice reintroduction to Ruby and a super fun way to explore a bunch of algorithms. The subject matter is light and not academically presented but does not mean this book isn't absolutely packed with algorithmic goodness.

What else ya got?

Top comments (36)

Collapse
 
bhaibel profile image
Betsy Haibel

_why's Poignant Guide to Ruby made programming fun for me again, years ago.

Michael Feathers's Working Effectively with Legacy Code is long and a bit dense, but it's an intensely practical look at navigating systems that are complicated, untested, and too big to fit in your head at once.

Sandi Metz's Practical Object-Oriented Design in Ruby looks like a simple primer on what OO is, but if one goes into it expecting to learn things it emerges as something much more multi-layered. I figure out something new every time I reread it. Her follow-up with Katrina Owen (99 Bottles of OOP) is also brilliant and is specifically structured to hack away at one's preconceptions.

James Coglan's JavaScript Testing Recipes is dense and not really what one would expect from a recipes book -- it's not "here's what to type in," it's about the theory of testing JS effectively. Because testing well changes the shape of your code, I learned a whole bucket about how to write effective, composable JS by paying attention to the edges of the book. I'm really looking forward to James's upcoming book on rewriting the Git internals in Ruby. (Disclaimer: he's a friend of mine.)

And then of course there's my book, Untangling Asynchronous JavaScript, which ought to be coming out in February or so. :)

Collapse
 
deciduously profile image
Ben Lovy

Excellent! It seems like dropping everything and running towards whatever Sandi Metz has written is a pretty good policy, and I think the Poignant Guide probably gets the dubious honor of being the first programming text I ever read.

Testing theory is a huge gap in my knowledge, I'm definitely looking forward to exploring that book, and a HUGE congrats on getting so close to publishing! Let us know when we can buy it, yeah?

Collapse
 
chenge profile image
chenge • Edited

Mazes for Programmers, looks an amazing Ruby book, I want to read. Thanks share. I need a great book to learn algorithm, maybe this is a fun and not boring one.

Authors I like include: Robert.M(3 Clean Books), Pragmatic(DRY), Kent.B(TDD), Fowler(Refactoring), Eric.E(Domain Driven)

Eloquent Ruby, is my ruby aha book.

Collapse
 
deciduously profile image
Ben Lovy • Edited

Thanks for the author list! I've heard good things about Eloquent Ruby - it's definitely on the list if I keep exploring the language.

The mazes book wont replace a rigorous study of algorithms (there's no proofs or anything), but it's a great way to see them in action and start to figure out how to apply them.

Collapse
 
chenge profile image
chenge

Could you share some example code of mazes book so let us know if we can understand it?

Thread Thread
 
deciduously profile image
Ben Lovy • Edited

Sure, here's a partial (but functional) implementation of the Cell class used in the book. It is not advanced Ruby, but the author does not spend any time teaching Ruby concepts - this code snippet appears early on in the first chapter and the assumption is the reader can understand it:

class Cell
  attr_reader :row, :column
  attr_accessor :north, :south, :east, :west

  def initialize(row, column)
    @row, @column = row, column
    @links = {}
  end

  def link(cell, bidi=true)
    @links[cell] = true
    cell.link(self, false) if bidi
    self
  end

  def unlink(cell, bidi=true)
    @links.delete(cell)
    cell.unlink(self, false) if bidi
    self
  end

  def links
    @links.keys
  end

  def linked?(cell)
    @links.key?(cell)
  end

  def neighbors
    list = []
    list << north if north
    list << south if south
    list << east if east
    list << west if west
    list
  end
end

And the simplest algorithm:


class BinaryTree
  def self.on(grid)
    grid.each_cell do |cell|
      neighbors = []
      neighbors << cell.north if cell.north
      neighbors << cell.east if cell.east

      index = rand(neighbors.length)
      neighbor = neighbors[index]

      cell.link(neighbor) if neighbor
    end

    grid
  end
end

Basic building blocks, but you do need to know what, for example, attr_accessor means

I'm following along in TypeScript and finding the translation straightforward.

Thread Thread
 
chenge profile image
chenge

Thanks, I almost understand it.

Collapse
 
mattnmoore profile image
Matt Moore
Collapse
 
deciduously profile image
Ben Lovy

Awesome! That's 3 for Pragmatic Programmer, and thanks for the more general suggestions too - these sound like books everyone could benefit from.

Collapse
 
mattnmoore profile image
Matt Moore

For good reason, it's a fantastic book!

I noticed you lean toward FP, an area that I'm just starting to explore. I'm not sure how much Domain Driven Design will help in that realm.

Clean Code and Clean Architecture should have plenty of wisdom nuggets for both FP and OOP languages.

Collapse
 
anchnk profile image
anchnk

Ah that thread is actually very cool. Thank you so much Ben for starting it.

I purchased so many books during the last years (~100 mostly from manning and pragprog). OFC, I didn't read them all yet but I have already plenty to do with this.

I would absolutely recommend:

I've read that a some people recommend The Art of Computer Programming. I didn't read them myself but I've seen recommendations when I was looking at some reviews from other MIT Press books.

Collapse
 
deciduously profile image
Ben Lovy

Awesome List! Grokking Algorithms is definitely worthwhile, I really like his style. I'm not familiar with the rest of your list, thanks for the suggestions!

Collapse
 
jmplourde profile image
Jean-Michel Plourde

Effective C++ by Scott Meyers. The guy is a C++ titan and has a lot of great insight on that language. This book is perfect for any c++ intermediate developer looking to make their code more efficient.

Collapse
 
deciduously profile image
Ben Lovy

This book taught me how little I know about C++. I'm going to have to come back to it a little more equipped, but this seems to be a universal recommendation. Thanks!

Collapse
 
jmplourde profile image
Jean-Michel Plourde

At first it can seems daunting, but you only have to read the entire tutorials on cplusplus dot com and you should be fine to understand the book pretty well.

Collapse
 
marmalade118 profile image
Marmalade

I've found Adaptive Code: Agile coding with design patterns and SOLID principles by Gary McLean Hall really good. I'm also currently reading The Pragmatic Programmer at the moment. It has loads of really good reviews but I've literally just started so I can't speak from experience.

Collapse
 
deciduously profile image
Ben Lovy • Edited

The Pragmatic Programmer comes up a lot - I should probably get around to it sometime.

Thanks for the suggestions!

Collapse
 
ronaldoperes profile image
Ronaldo Peres

The books I read was Head First Python, C# 2nd and 3rd edition - but i didnt finished them yet.

Also this year i started to read The Pragmatic Programmer but still not finished.

And i am planning to read the Eric Evan´s book about domain driven design.

Any hints?

Collapse
 
deciduously profile image
Ben Lovy

That's two votes for the Pragmatic Programmer!

Collapse
 
nabbisen profile image
nabbisen • Edited

I agree with you, Ben.
Reading is not everything on development, but is actually something 😀
How about Hackers & Painters by Paul Graham?
I think you might like it because he's a Lisp programmer.
I haven't read any of your list ever but they seem interesting!

Collapse
 
deciduously profile image
Ben Lovy • Edited

Neat! I enjoyed his On Lisp but hadn't heard of Hackers & Painters. I'll have to check it out!

Collapse
 
ballpointcarrot profile image
Christopher Kruse

Gonna +1 for The Pragmatic Programmer, as I credit reading that to much of my approach to development. I have a copy that gets passed from dev to dev in my office; the book is well worn but loved.

Release It! by Michael Nygard has also been a great read (not quite finished, but has been massively helpful already.

Collapse
 
deciduously profile image
Ben Lovy

Awesome! Because of this thread I've started reading it and even just two chapters in I think I understand the hype.

Release It! seems like a great resource too for filling in some common sense that's hard to build on your own, thank you for the suggestion!

Collapse
 
simplymanas profile image
Manas Ranjan Dash • Edited

I wrote a small collection in LinkedIn long back about this. and i keep adding when more to the collection. please have a look.

linkedin.com/pulse/books-software-...

Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)

Code Complete Paperback by Steve

Refactoring: Improving the Design of Existing Code by Martin Fowler (Author), Kent Beck (Author),
John Brant (Author), William Opdyke (Author), Don Roberts (Author)

Test Driven Development: By Example By Kent Beck

The Art of Unit Testing: with examples in C# by Roy Osherove

Design Patterns: Elements Of Reusable Object-Oriented Software by Gamma

Patterns of Enterprise Application Architecture By Martin Fowler

The Pragmatic Programmer By Hunt

Collapse
 
deciduously profile image
Ben Lovy

Thank you for sharing the link!