> As the author said, this book is NOT about Java.
That's what it says, but the concepts covered are so java-oriented it may as well be.
It uses generic language to describe most of the concepts, but the underlying assumption seems to be that you need to understand these concepts because you need to program in Java, C#, C++, or some other closely-related language with no dynamic typing, no first-class functions, and explicit java-style semantics for abstract classes, interfaces, public vs private methods, implements vs extends, and such.
Much of that is invisible in a language like Python, and a book that laboriously covers each concept in the context of a language where you have to specify everything explicitly probably isn't going to make you much better at writing classes in python. Or if it is, it's going to be a lot of work for minimal benefit.
> Interestingly, It's the same author who teaches how to design programs with Racket, a lisp dialect.
Indeed, that's partly why I'm surprised the book takes the approach it does. However, it does seem to be a good, thorough book (ignoring the missing sections) if you need to design classes in Java or C# (which covers a lot of people).
I think this is where a lot of Rubyists/Pythonistas get lost. Just because the languages hide ideas like "interface" and "abstract base class" doesn't mean that those concepts aren't useful. Particularly in Ruby-land there's been a push to have common interfaces. They're only enforced by contract. And if you think about it, having "interface" explicitly in the language just means that the contract is enforced at compile time. Even so, you have to be careful. You could implement an interface and still just return null.
> I think this is where a lot of Rubyists/Pythonistas get lost. Just because the languages hide ideas like "interface" and "abstract base class" doesn't mean that those concepts aren't useful.
I agree, somewhat. The problem is that HtDC seems to spends so much time on vocabulary and describing how to construct classes that very little is left over for discussion of actual design. Here's an excerpt:
This first section on classes suggests that the design of a class proceeds in
three steps:
1. Read the problem statement. Look for statements that mention or list the attributes of the objects in your problem space. This tells you how many fields you need for the class definition and what information they represent.
That is probably quite reasonable from a java-perspective. But in Python the best answer might be to use the built-in data structures, define a bunch of functions to operate on that data, which are automatically encapsulated in a namespace based on the name of the file. But it might not, sometimes you would want to define a class with explicit fields.
The question is, how do you know which technique to use? This book doesn't seem to help with that. We've jumped from a data-driven approach using scheme to a java-style object-oriented approach for no apparent reason and very little explanation of the benefits of this approach.
Even if the part about interfaces might help a bit with designing a Python module, in order to get that out of this book you're going to have to wade through a lot of other stuff.
That's what it says, but the concepts covered are so java-oriented it may as well be.
It uses generic language to describe most of the concepts, but the underlying assumption seems to be that you need to understand these concepts because you need to program in Java, C#, C++, or some other closely-related language with no dynamic typing, no first-class functions, and explicit java-style semantics for abstract classes, interfaces, public vs private methods, implements vs extends, and such.
Much of that is invisible in a language like Python, and a book that laboriously covers each concept in the context of a language where you have to specify everything explicitly probably isn't going to make you much better at writing classes in python. Or if it is, it's going to be a lot of work for minimal benefit.
> Interestingly, It's the same author who teaches how to design programs with Racket, a lisp dialect.
Indeed, that's partly why I'm surprised the book takes the approach it does. However, it does seem to be a good, thorough book (ignoring the missing sections) if you need to design classes in Java or C# (which covers a lot of people).