Hacker News new | ask | show | jobs
by speckledjim 5434 days ago
> The community splintered, the language and platform really lost any ability to maintain momentum.

This is the mindset I've never understood.

Do you stop using a hammer to bang in nails because the hammer "community" has splintered, or the development of hammers has stagnated? No, you still use it to fulfill a job it solves.

6 comments

I don't think this is a valid analogy. The language/tools/support/ability-to-hire-developers are all a fluid ever-changing thing. Hammers aren't. Take this post.. people are excited about updates. I'm just saying the updates are kind of too little too late for me.
Well, people want different things. I just want the hammer.

New language features are all fun, but unless they actually result in faster execution, or allow you to do things you could not do before, they're only use is to make some developers happy, which I don't think is particularly important.

It looks like there's some real solid good APIs here though which is great to see.

At first thought I imagined it'd just be useless pandering to developers like "You can now do closures or first class functions" or something equally useless.

Come on, let's get honest. The ecosystem matters. A lot. The community, and level of interest and delight in using the language matters.. Yes, even to you. It determines what third party tools are available, how easy it is to hire developers, and what machines the platform actually runs on. Your argument suggests you'd be just as happy and productive developing today in Pascal.

"You can now do closures or first class functions" or something equally useless.

Flamebait, but I'll take it. I think the dust-up over the possibility of this being added to Java really seemed to contribute to the decline and apparent disinterest of a lot of folks (I'd really be interested in Bob Lee's opinions here, since he was someone who's ideas I was particularly aligned with at the time and has since gone pretty quiet).. That said, lack of first class functions in Java isn't a trifle. It's why Java isn't all that much fun to program in compared to more expressive languages... and a bigger problem is that more than any other language I'm familiar with Java suffers from the problem of not being able to see enough ideas in a given amount of source code. I'm explaining that terribly, but I just mean that Java code is at least 60% scaffolding that isn't material to the author's intent.

Closures, or first class functions done nicely would be a big step in alleviating that issue, IMHO.

> and a bigger problem is that more than any other language I'm familiar with Java suffers from the problem of not being able to see enough ideas in a given amount of source code.

This is not an issue with Java. It's an issue with the programmer. How are you going to cope with assembly language listings? Blame assembly language?

> New language features are all fun, but unless they actually result in faster execution, or allow you to do things you could not do before, they're only use is to make some developers happy, which I don't think is particularly important.

I think you don't appreciate how some language features can help you reduce the size and complexity of your code. Those are the kind of features that are sorely lacking in Java, and that means huge, bloated code bases.

I'm tired of visually parsing 20 lines of a Java method and filtering out all the boilerplate iteration junk just to find the one or two lines that actually do something. Often this kind of thing can be reduced to a few simple, relevant lines when you have closures, for example.

> Those are the kind of features that are sorely lacking in Java, and that means huge, bloated code bases.

No, it doesn't. If you can't write concise Java, you're doing something wrong. And if you can't read code well, go practice some more.

Disclaimer: I'm an outlier. I rarely use 3rd party libs, rarely write with anyone else, etc.

> And if you can't read code well, go practice some more.

Actually, let's not. To paraphrase a minor celebrity of programming, life is too long to be good at reading every variation of boilerplate. Java is essentially hostile to small functions and parametrization, as having any semblance of inner or anonymous functions will require you to define a class at least, or an interface somewhere else, scattering your code unnecessarily, and you'll probably just end up repeating the code because it's just not worth the effort to do it. Don't believe me? Why do you always have to .open() and .close() your any port-like thing manually? That's a solved problem, you know?

> To paraphrase a minor celebrity of programming, life is too long to be good at reading every variation of boilerplate.

Learning to read code is just like learning to read English. You can guess most of the words meaning once you know some of them. Personally, I think being able to read code is the best skill you can have as a programmer. Just as a good musician is able to listen to music properly. (I mean 'listen' as in analyze, understand, notate and copy).

The other point IMHO is that scattering your code with anonymous functions points to bad design and is as bad as scattering "GOTO" everywhere in BASIC code. It leads to spaghetti code which is an unmaintainable mess.

@felipemnoa: Downvotes are presumably for snarky 'You must suck and reading/writing code then' comments. Isn't a positive contribution to the discussion.

Also, 'making the difference' and 'being totally irrelevant' are two very different things. Programming languages matter. I'd be surprised if Mr. Spolsky disagrees.

I think it is. If people haven't learnt yet that the single most important skill you need as a programmer is being able to read any code, in any language, and take a good guess at what it does, be able to hold abstract programming concepts in your head, and match them up to random code listings you have never seen before....

Before you can write code, you need to know how to read it.

There are many real-world, practical examples of code that is a huge clanking mess of boilerplate in Java but yet just a few lines in a more expressive language like Ruby, Python, or C#.
>>No, it doesn't. If you can't write concise Java, you're doing something wrong. And if you can't read code well, go practice some more.

Don't know why you are getting down voted. Even Joel Spolsky says that what really makes the difference is the programmer, not the language. If you suck in Java you will probably suck in other languages.

Then why did he wrote his own language for his product? Oh right, because languages do matter.

Sure, what makes one a great programmer is language independent, but that doesn't mean you can have the same code quality in every language. There's a reason why professionals in every field buy top quality tools and not cheap disposable crap.

I know why he gets downvoted: There's a lot of kids on hacker news that only use ruby and/or javascript and they really don't want to hear about them being bad at something. hell they wrote a WEB APPLICATION. Now ain't that something.
At first thought I imagined it'd just be useless pandering to developers like "You can now do closures or first class functions" or something equally useless.

Congratulations, you've found your Blub. (Mine is Python; I'm still not clear on what monads would do for me in practice).

And all just because the metaphor lacks (here more than elsewhere). Using a tool also means becoming more proficient in it and this is similar to an investment. If you don't expect anything of significance to come out of the movement associated with your language it is hard for the working programmer to enjoy developing in it any more. Here the fundamental difference to hammers becomes clear: Hammers don't evolve and have no complex ecosystem associated while programming languages do.
That's true. Unless someone builds a lighter, more accurate hammer in the meantime.
In certain situations, professional carpenters have found nail guns more effective.

They require more resources to run, but they tend to get the job done a lot faster.

Depends. What if your nails required newer hammers? Would you rather wait for a newer hammer from a company that hasn't been meeting needs for years, or buy one from the store that had them when the nails came out?

Perhaps a better analogy is a screwdriver. Apple came out with their "pentalobe" security screws a while back - is it reasonable to buy one of the screwdrivers that is made for it that are available now if you needed to (un)screw one? The other options are to use a philips and damage the screw and suffer a lot of frustration, or to wait until Craftsman makes one (probably never).

There really is not much you can do to a language to make you code faster. I guess people just like the novelty of a new language.
If you mean that time spent actually coding a program is a rounding error of the time spent conceiving it, then that's an interesting point.

That said..

1. OF COURSE you can make languages that are faster or slower to write code in.

2. Trivializing anyone who jumps ship on a language as being enchanted with the 'novelty of a new language' is obnoxious and arrogant.

Yes, it is harder to come up with the actual design, architecture, algorithms, testing of your program than the actual coding. You should definitely use what makes you more comfortable but criticizing/hating a language because it is not adding whatever is currently hot under the Sun is also obnoxious and arrogant. C++ is a lot older than Java and can be also a pain to write programs in and yet for whatever reason people love to hate Java because it is not keeping up with the times. There really is not much you can do to Java at this point. The tools on the other hand, do make a huge difference. Eclipse is a really time saver and actually makes you a more efficient coder.
I don't hate Java. The language is good and the JVM is great.. but I became increasingly displeased with the fact that the evolution of the language seemed to become slow and aimless. Couple that with where the tools were going, and I felt like it was getting harder and less fun to write applications in Java.. so I kind of bailed.

There really is not much you can do to Java at this point

Because it's basically perfect? Okay.

At any rate, really my point was not "Java sucks, I'm over it"... my point was that I think the community of programmers that surround a language are for better or worse stewards of the direction, best-practices, idioms, and common ideologies that affect my experience developing in it. Jim's arguing that he's not like that.. fine, but most of the rest of us are. We use libraries written by other developers, work with other developers... the community matters and shapes our experiences as a [Insert Language] Programmer. I'm just saying that for me, that community was thriving at one point, and then around when Java 5 came out fragments started showing.. things got worse, and now I don't really see much to get excited about. The frameworks are ridiculously heavy, I hope I never accidentally figure out what an Enterprise Service Bus is for, and generally I just feel like the direction of the language (and probably the platform) seems rather driftless.

>The frameworks are ridiculously heavy... I agree with you on this part. I kept scratching my head when I was first introduced to Enterprise java beans. It all smelled like BS to me but because more experienced people than me and with more status were evangelizing about it I couldn't really call them on it. In the end I just ignored all of that and used the pieces that I like. Kept everything as simple as possible. I'm not directing this at you but just in general: Nothing wrong with moving to knew languages but criticizing any language because it is missing some simple feature like X and claiming that without it you just cannot work seems to me lazy and full of BS. All languages have issues. The difference is made by the programmer.