Hacker News new | past | comments | ask | show | jobs | submit login

I'm not entirely sure that's a cogent argument. Two major objections:

1. If anything, I think the problem with Java is that it encourages too much abstraction. This isn't inherent in the language design, but is a product of Java culture—the massive UML diagrams and fragile class hierarchies which are glorified in Java tend to encourage adding extra abstractions to things which don't really need to be abstracted away, and you spend time doing extra work to accommodate them. There's an attitude among computer scientists, especially of the academic variety, that there's no such thing as "too much abstraction," and while abstraction is generally a decidedly good thing—I have, in my time, written Strategy-Factories, after all—I think it can be possible to overemphasize and overuse it. (John Carmack: "It is not that uncommon for the cost of an abstraction to outweigh the benefit it delivers. Kill one today!")

2. I'm not entirely sure that I agree with the statement that Python has poor data abstraction, especially in comparison to Java. Python in many ways lets you abstract away more details than Java does; e.g. duck typing allows you to treat several pieces of data as identical black boxes without having to worry about the implementation details and without using subtyping or interfaces, which is exactly the definition of abstraction. On the other hand, Java fails to abstract away some of the implementation details which are unimportant to the kind of programming that beginners do, e.g. the differences between int and Integer.

My own two cents is also that I also prefer Python's OOP-but-not-necessarily-always philosophy to Java's OOP-all-the-time-everything-in-a-class-somewhere philosophy. I am involved with teaching a Java course right now, and it has made me really wish that students could start out not worrying about classes and just writing scripts, as in Python, before they have to learn about classes and inheritance and data abstraction. (I have previously taught everything from C to Scheme, and it really is wonderful to just start people out writing code in a high-level Python-like language without having to handwave about static and classes and so forth.)




My impression (given the next FAQ about Matlab) is that by "abstraction" he means "static types". Whether static typing is better or worse for beginners than dynamic typing is (as far as I know) an open question, like (unfortunately) most questions about software engineering practices.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: