5 ms·
I'll have to disagree with you there. Type foo = new Type() is a bad idea? why? Shape myShape = new Rectangle(); seems pretty logical to me. If you want to us
by axod 17y ago
I'll have to disagree with you there.
Type foo = new Type() is a bad idea? why?
Shape myShape = new Rectangle(); seems pretty logical to me. If you want to use static types, you can't really argue against that syntax.
single inheritance sidesteps lots of potential issues, and interfaces are cleaner IMHO
>> "but it will stop people from writing good code."
I'd also strongly disagree with that. Arguing that Java prevents you from writing good code is nonsense. As much sense as saying using French prevents you from writing a good story. I've seen some brilliant code written in Java (If you steer well clear of 'enterprise' etc).
- jerf 17y agoBecause "Type foo = new SubType()" comes up approximately never. Note, I did not say never. But don't give me a line about how you use it all the time. You don't. If you think you do, go grep over your code; you may think you do but I still bet you don't, it's probably a perceptual bias where you notice the exceptions out of proportion to their actual occurance. If you still pass that test, congratulations, I was wrong, you're one of the five people who do it all the time. You should probably stop, as something is probably very wrong with your design. Meanwhile, optimizing the syntax for this case is a terrible optimization decision. That's the real problem, forcing literally millions (conservatively) of type annotations that are totally redundant. "I've seen some brilliant code written in Java (If you steer well clear of 'enterprise' etc)." You don't see the brilliant code that was never written because Java doesn't offer you the ability. I also point to the "brilliant code" that isn't Java code at all, but compiler and bytecode hacks, which I suspect had you taken the time to mention some examples of "brilliant code" would have been in the list. That's not brilliance you can credit to Java, it's simply stuff that was so desirable it had to be done despite the fact Java didn't permit it.
- axod 17y agoI do use it every now and then, but personally even when types are the same, I don't really have issue with it. Makes it easy to see which type something is, and keeps things uniform and sane. Shape foo = new Shape(); is often written separately: Shape foo; // Further down foo = new Shape(); So in that instance it's easy to see in both places what foo is. If you do have issues with the duplication, it wouldn't be crazy hard to just write a pre-processor to insert the Types on the left if you haven't specified them, before compilation. I simply don't buy the notion that you can't write great code in language X. Language is largely irrelevant to how great the code is or isn't. Also irrelevant to how well you can scale, how successful your startup will be, etc etc Great coders write great code. Languages are just ways of communicating that great code with machines, and other people.
- jerf 17y agoActually, it isn't that great coders can't write great code in Java, it's that great coders, having virtually by definition a certain amount of experience in a wide variety of languages, require a lot of incentive before they'll choose to write their great code in Java, where the language is fighting them every step of the way. Some people have managed to put out the necessary incentives, so such code does exist, but seeing a putatively great coder reach for Java as their first choice without such incentives is like seeing a putatively great coder reach first for Cobol... it pretty much proves they aren't a great programmer. Even if you want the JVM libraries, there are better ways. Yeah, it's an opinion, but it's one from someone with the aforesaid experience in a lot of languages. It's like saying a great marathon runner can run a marathon in concrete shoes. Yeah, maybe they can, but seeing them choose it of their own free will would say an awful lot about their wisdom in shoe choice. Java is a language that simply loathes great code. Besides, you seem to have missed the core point that optimizing the language for a case that doesn't come up often is a misfeature, no matter how you slice it. Optimize the language for the case that occurs most. "var X"-type syntaxes cover that. "var X" still works in your example, too; there's no reason that a smart compiler can't deal with that sort of separation between declaration and initialization.
- axod 17y agoWell, agree to disagree :) I've used a fair number of languages, and don't really understand the java hate. There's far uglier languages to look at. But then I love writing in assembly - which some feel overwhelmed with. Personally it seems like some programmers at some point dislike being restrained by anything and become slightly high and mighty about the whole subject - the whole "Unless you use lisp, you can't understand why lisp is the best language" BS. Why is "var X"-type syntax better? Why does that create better code :/ Sorry, I don't buy it. "var X" would be less precise, and less useful than specifying the explicit type you want. FWIW, I just checked for fun my own comet server written in Java against tornado (Python). Very similar functionality, except the Java one is a smaller codebase. It's as verbose as you want it to be.
- eru 17y ago
- cia_plant 17y agoI like static types, but I prefer "myShape = rectangle", with the most general applicable type (e.g. Shape) being inferred.
- blasdel 17y agoIf you want to use static types, you can't really argue against that syntax Maybe before ML appeared in 1973... after that it's just Bondage and Discipline to repetitively declare non-machine types.
- jrockway 17y agoA good question you raise: is subtyping itself even a good idea? (Why not make data non-subtype-able and make interfaces composable?)
- jrockway 17y agoArguing that Java prevents you from writing good code is nonsense. Well, I know it prevents me from writing good code. I start writing it and it becomes so repetitive that I just get bored and do something else. I can't see progress quickly, and doing simple things involves a lot of work. (A new test case in Perl is one line in a file. In Java, it's an entire new file.) I've also noticed that I can cleanup legacy Perl codebases very quickly, but legacy Java codebases are often a total loss. There is often Just Too Much slightly-tweaked editor-written boilerplate, instead of actual abstraction. It hurts to look at. There is a reason that lots of smart people don't use Java and it's not because they hate popular languages.
- axod 17y ago>> "Well, I know it prevents me from writing good code." Right, but everyone is different. It depends on how you think and your personal taste. Some people look at 'public void foo()' and apparently recoil in horror. I look at significant whitespace, or foo => |something| etc type syntaxes and recoil in horror. Lots of people also claim that no one can be productive writing in pure assembly language, and while that may be true for many programmers, it's certainly not true for everyone. I don't think you can really say which language 'smart people' use. Obviously there's a lisp/functional bias here on HN, but I'd be very surprised if 'smart people' congregate toward any one particular language. I still think good programmers are defined by the code they write, rather than which language they choose to write it in.
- jrockway 17y agoThe examples that you list above don't really matter. Whitespace, "public static void main", sigils on variable names, and so on may look weird when you aren't used to them, but they don't detract from the programming experience. What matters is how many tokens you need to say something simple. Say you have a list of words, and you want to sort it by length. That's one line of code in Perl, Python, Ruby, Common Lisp, Haskell, etc. It is not one line of code in Java. When every simple concept in your program requires a new class with a new file, it just becomes unmanageable, even with the best tools. That's why I can't be productive in Java. (Java also doesn't allow quick hacks; private is private, so fuck you. This means that prototypes have to be "as good as" the real implementation, which simply means that you don't prototype. The resulting software sucks accordingly.) But anyway, I know you have a pretty good app written in Java. I would like to hear more about how you deal with it sometime.