Hacker News new | past | comments | ask | show | jobs | submit | speckledjim's comments login

It's still a problem with US carriers. (Other countries have far better carriers and ecosystems than the US)

It still absolutely amazes me that you guys usually pay for incoming SMS messages.

I mean come on. W T F? If the carriers started charging each time you charge your battery the US public would just bend over and take it.


Even worse, Cincinnati Bell charges 25c for incoming texts (if your plan doesn't include them), but then charges you $3 a month to block incoming text messages altogether! I've long since switched back to T-Mobile, and regretted ever moving away from T-Mobile in the first place, but my parents have decided to put up with the stupid 25c charges for spam texts because it's still cheaper than paying a monthly fee for what used to be a free "service" of flipping a switch in their database.


Paying for SMS is awful. Just out of curiosity how would you suggest we don't, "just bend over and take it?"


Just look at what other countries are doing right and copy that. More concrete: Vote for a politician who will force the FCC to create a real market, not a oligopoly of a few large behemoths.

Contrary to most the promises politicians make, this one costs no money and simply involves signing the right bills into law. It will even be good for the economy. Of course, they would have to withstand the rich and powerful lobby of said behemoths, which is of course why such a politician will be very hard to find.


Only if they have a plan that doesn't include texting, which is vanishingly rare now.


Both t-mobile and verizon offer this. And I havent checked the others. Ive never paid for text and have incoming SMS's blocked too.


Oh yeah, my guess is that all carriers offer no-texting plans, I just mean it's getting rarer that people choose them.


> It still absolutely amazes me that you guys usually pay for incoming SMS messages.

What? I've never seen a carrier charge for incoming SMS.


Last time I checked (a few months ago), every large carrier in Canada charges 15 cents for each incoming SMS. That's Bell, Rogers, Telus...maybe some others.

Many people have a plan addon that includes receiving some SMS for free, but the basic stock plans do not.


Canadian cell companies are a special kind of terrible. AFAICT, they exist purely to make the american companies look good by comparison. When I was there for 5 days, the cheapest way for me to get phone/internet on my Nexus S was to stick my Vodafone Germany SIM in and use roaming. (I was just using texts, twitter, and light maps; a total of 10MB for the weekend.)


Only Telus. Bell and Rogers are free incoming texts - or at least were, when I bought my phone (I have unlimited texting, but I like to make sure). However, that's not to say they don't try to jip you at every possibility.

For the last few years, texting to the US had always been at the same rate as Canada (and covered by texting plans). Rogers decided to switch that on me when I wasn't paying attention... although I'm pretty sure I asked, and the Sales guy lied.

In either case. One complaint to the FCC in the USA, or CCTS in Canada will get things your way. Both countries, from my experience, has pretty terrible customer service. I can barely understand half of Verizon's CS team, and one guy at Roger's CS actually told me I should just do nothing, even though I felt cheated, because "if you sue, our company has more money than you, and you'll lose for sure". Sigh.


Actually all three telecoms charge for incoming text messages. Telus pioneered it, Bell followed suit and then Rogers jumped on the bandwagon in 2009.

I called Bell to have them block all incoming text messages and they said that they could not do it because it was somehow tied to their emergency 911 location determination service. After much prodding they said they could turn off incoming texts (but I should hope that I never have to call 911 with my mobile) but came back with a $3/month plan for like 500 text messages so I just took that instead.

I switched to Rogers and am now on an iPhone plan which has text messaging but I would love to be able to block incoming texts again if iOS 5 and Google+ gets serious traction.


Really?

Verizon: "20¢ per text sent (per recipient) or received (including Canada, Mexico, Puerto Rico and the U.S. Virgin Islands)"

AT&T: "All AT&T customers with Text Messaging-capable phones are pre-activated to send and receive messages at $0.20 per message with no monthly charge."

Straight from their websites.


I guess it depends on location, because around my area, all I see are 'GET UNLIMITED TEXT AND DATA FOR ONLY YOUR LEFT LEG!!" ads all over the place.

Also it could quite possibly be that I am indeed living under a rock as I am very satisfied with my carrier so I don't actively look at plans of others.


It doesn't depend on the area. Most if not all American carriers charge for incoming text messages. When you select the "unlimited data and text" plan, you're paying for those incoming text messages.


Have you been in a coma for the last decade? Americans get bent over the barrel on SMS pricing.

https://encrypted.google.com/search?q=incoming+text+message+...


> because the article is primarily about problems with the Android ecosystem.

IN THE U.S.A.

If you want better cellphones with better carriers who don't do stupidly intrusive things, move to Europe.


If you want better cellphones with better carriers who don't do stupidly intrusive things, move to Europe.

That's practical advice, but I still haven't unpacked after moving to Canada to get affordable medical care.


It seems like Canada is half way along the awesome scale to Europe.


...or just get an iPhone.


That won't solve the abysmal coverage and dropped calls enjoyed in the US.


Disclosure: I recently switched to Android from iOS.

The dropped calls and coverage issue are overblown. It is not like any carrier has a magic cure to the vagaries of radio reception. CDMA phones might have some edge on reception, but those tend to be offset in the area of battery life. In any event, I think coverage is in a 'good enough' phase now.

The real problem is that so many android phones sold in the US are not running 2.3, they're stuffed with un-deletable space-wasting crapware, and they often have absurd carrier restrictions. I think it is very conspicuous how the most happy android customers seem to be the ones with phones that do not have carrier mods.

I could definitely recommend a Nexus S to my mom and expect her to be able to use it just as well as an iPhone _now_. I do not have the same feelings about the other phone I tried (and returned), the AT&T Samsung Infuse.


It will if he gets it on Verizon.


More generally, don't use anything on the day of release... Wait a week or 2 for the bugs to be ironed out.

Surely we've all learnt that by now...


Certainly with Java (speaking from experience going back to 1.0) and most certainly with major language/compiler releases like this one (see 1.5 previously). Java almost always requires a dot-release or two after a major version to iron out the kinks. Which isn't to say don't try it, but try it in development with low expectations. On the other hand, they're usually very quick about turning out the next few dot-releases (I'd wager that it'll be 1.7.3 by September, unless they continue with the silly 1.6.0_xx version format in which case 1.7.0_03).


You cannot kill a language, unless everyone stops using it. The chances of that are nil.

But keep on with the hyperbole.


It's all about money and greed. Sad indeedy.


Airbnb is a business. And honestly their behavior is exactly what I would expect from them: dont admit any liability, offer words of consolement.


This isn't an isolated incident though.

Their whole business model pretty much is built on the fact that things like this will happen. A lot.


Given that they control the communication, the implied business model is that trustworthy people will be using the service.

If they truly expected these types of incidents to happen a lot, they would require more information from people (to be able to trace and hold visitors accountable) and have some sort of legalese to ensure that they would never be held liable.


BS. They will know about it, and know that it carries large risks.


> 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.


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.


> 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).

Yes, that's very true, but it's also a red herring. Not all code is worth to read, nor is it worth to write. Certainly not either the copy+pasted mess that would result of not using first-class functions, or all the _noise_ introduced by their half assed expression using classes.

> 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.

Spaghetti? Really? As in flow of control? You _really_ don't know what you are talking about. Sure, it does enable some trickery, like Continuation Passing Style, but if you are arguing that such a technique is a 'con' for the existence of what amounts to just both functions and lexical scope, you are grasping straws.

On the other hand, you have simple abstractions that are enabled by first-class functions, like map or the folds, and you won't have to hear of silliness like the 'Command Pattern' or the 'Strategy Pattern' to work around the restrictions that make them necessary. And the subsequent explosion in code, to be found later shoved in other classes and packages. They make dispatch tables easy, they give you a simple way to make asynchronous code, they allow wrappers for guarded code, they...

Do yourself a favour and take a good look to the first two chapters of SICP (http://mitpress.mit.edu/sicp/), most of their charm is displayed there.


@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.


I recently had the great displeasure of working on a 20,000 odd line class. You cannot keep 20,000 lines in your head, it's an extreme challenge.

Each method only had tiny differences but spotting them, as pivo's original comment argues, is a total nightmare.

Refactoring brought it in at 1,500 lines. Now you can glance at any method and see the actual difference to the default that they do.

Are you seriously suggesting there's little difference between a programming language that encourages 20,000 line behemoths filled with dross compared to a concise 1,500 line program. That there's not a massive mental overhead to reading through what is essentially a book compared to a short essay?

As that's what's being discussed, but you don't seem to get it.

There's reading code, and there's reading pointless code.


Java does no such thing as "encourages 20,000 line behemoths filled with dross". Bad programmers do.

If you're creating several methods that only differ a little bit, you're doing something stupid. In any language.

Bad programmers create bad code. The language is totally irrelevant.


It's really not irrelevant.

There's a reason that people aren't programming in COBOL or BASIC.


Yes, the reason is the runtimes for them suck, or aren't needed.

If there was a decent runtime for BASIC or COBOL, which gave real world advantages over everything else, I'd switch to BASIC or COBOL in a heart beat.

I'm a programmer. The language I use is pretty irrelevant. If It starts looking ugly, I'd just write a cross compiler. This is not rocket science.


I'm sure no one is disagreeing with the importance of knowing how to read code. I'm just saying that Java makes it harder than it needs to be. If your argument is that that's a good thing, then where does that argument end?

(Probably with Perl, I guess...)

...sorry Perl guys. Couldn't resist.


Maybe you couldn't resist because you're nostalgic? Read-only Perl went out with the 1990's, unless you're talking about golf (which FYI is done for the challenge of it - it's not for production).


You want to have a look at the APL / J / K family, where functions like |/0(0|+)\ that compute the maximum-consecutive-sum (honest!) are the norm.


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.


>>There's a reason why professionals in every field buy top quality tools and not cheap disposable crap.

Agree But Java is not cheap disposable crap. At this point it is more a matter of taste. You don't like Java fine, but other people are able to be just as productive as you using Java and probably more depending on the programmer itself. At the end of the day it is the programmer that makes the difference.


I would strongly contest the assertion that there is someone of equivalent programming aptitude and experience who will be as productive in Java as I would be in Scala or Clojure or C#.

Boilerplate kills. It kills again when you have to go back and try to re-read code slathered in it.


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.


That's just foolish. I write Java daily for a very large web company, and I downvoted him. Because his claim is nonsensical. I downvoted you too, because your claim is trollish and wrong.

I have been writing Java since I was 13. I am 23 now. I have been paid for code written in C#, Java, JavaScript, PHP, F#, and Python. My personal projects are written in Scala, C#, C++, and JavaScript. I emphatically do not use Ruby for personal or professional projects (unless forced, with regards to the latter). From this reasonably broad body of experience, I am quite certain that I would be vastly more productive if the language wasn't consistently getting in my way. As it is, I have an unhealthy number of vim macros to deal with all the boilerplate that Java foists upon a developer. It is insufficiently expressive without them, and once those macros are applied the resultant boilerplate code (method objects, for example) greatly decrease readability and increase potential failures, due to more difficulty in conceptualizing and reviewing the code.

His posts also belie a lack of perspective. He doesn't "write with anyone else," yet I would venture to guess that the primary use case of Java, today, is in environments with more than one developer. He doesn't "use 3rd party libs", which suggests a lack of familiarity with his own ecosystem of tools, let alone those that provide these features that others (including myself) have indicated are part of what makes Java unpleasant to use. (Seriously--if you're not using Apache Commons at the very least, there is a credible argument that you're probably reinventing wheels and Doing It Wrong.) And he has a critical lack of perspective about what are generally considered basic programming constructs: if you think closures and first-class functions exist to "make some developers happy," you are ignorant of why they exist in the first place. Do you think that now-very-standard tools like map, fold, etc. would be generally adopted if the only way to use them was Java-boilerplate code-vomit?

.

pivo said it nicely upthread: "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." And he is right. Because this is what Java makes you do. In 2011, it has been surpassed in terms of flexibility, expressiveness, and utility by other JVM languages that allow you to pull in Java objects and work with them, but write your code in a way that is much more pleasant.

.

But no--clearly we're all kids, writing Ruby and JavaScript. Except that this kid almost certainly writes more, better Java than you do, and still finds it a regular source of frustration simply because it isn't good enough.

Perhaps you should be less upset when people demonstrate that you are lacking in perspective about your favorite toys.


As it is, I have an unhealthy number of vim macros to deal with all the boilerplate that Java foists upon a developer.

I hate to bring up the editor wars thang, but knowing a lot of very skilled people in the Java world, I will say this: it's rare for a "best in class" Java developer to use anything but a full fledged Java IDE (not unheard of, but rare). If you're not using one of these (IntelliJ, Eclipse, or Netbeans, in my personal order of preference), you're really missing out on almost everything good that Java has to offer over other languages, as far as boilerplate-simplifying, integration, and bug-hunting. IMO, unless you're using a good Java IDE and have used it long enough to know it well, you are not actually coding Java, you're coding some shitty worst-of-all-worlds version of Java, and it's no surprise that you hate it. I don't know how I could possibly code Java and remain sane without the ten-times-a-minute ctrl-space auto-complete/lookup routine (along with all the other time saving macros and shortcuts that a good IDE will give you)...

FWIW, I say this as a die-hard emacs user (bite me, vim :) ) that uses it for damn near every "I have to edit some text" task that he comes across, so this is not an issue of me not understanding what a good text editor is capable of. Ruby, JS, PHP, Clojure, Python, and the like are in emacs territory for me, but when it comes to Java, the tools really do counteract many of the language's failures (and let's be honest, the number one offender is the lack of closures, with the annoyingly explicit static typing coming a close second), and I'll be honest, I miss the IDE features when I code dynamic languages - it sucks to have to resort to textual searches instead of actually walking the parse tree, even if it can get you 80% of the way there most of the time.

Honestly, I've always personally thought that AS3 had a lot of potential, as a mostly-statically-typed-but-dynamic-if-you-need-it version of Javascript, but even there the IDEs aren't quite up to the Java standard (mostly due to apathy, as far as I can tell, there's nothing about the language that would make any of the features common to Java IDEs any more difficult to implement in AS3 ones), so the benefits of the default static typing are somewhat muted...


Sorry, I should have been more specific--I use Eclim to bring gvim inside the Eclipse environment, or I use Netbeans with a set of macros that parallel my vim ones. I find the built-in "boilerplate simplification" nonsense to be a patch over the fact that Java itself is no better than mediocre, and should not be considered a valid defense of Java as a tool.

And the reason? Because even with all these tools that have grown up around Java to address its shortcomings, it completely sucks. Absolutely sucks. Miserable to write and--more importantly--miserable to read. Meanwhile, I can comfortably write idiomatic Scala in Netbeans (the Eclipse plugin is shaky) with the editor's only help being Intellisense, idiomatic Scala that another programmer can read easily without trouble, because the language is geared toward actually being descriptive rather than covered in boilerplate.

And Scala is not a dynamically typed language, but shows that a static language can actually act very similarly to one. And you still get all those features that you miss. It's sort of what you're talking about re: AS3, but it's here now and works.

.

I wasn't joking earlier when I said that the best Java "tool" is a Scala compiler. It's not perfect (hello, long compile times), but I can do anything that I do in Java faster and with more readable and therefore reliable code in Scala. The reverse is not true, because to get around Java's inherent lack of expressivity you are forced to create new points of failure for yourself.

That's not good. It's not necessary. But it's defended to the death by people who--not you, but some of the other posters on this thread--really do truly think in Blub and don't understand why these things are bad.


> I have been writing Java since I was 13. I am 23 now. I have been paid for code written in C#, Java, JavaScript, PHP, F#, and Python.

Woah! You're 23? I bow down to your knowledge and wisdom ;) (I started programming before you were born).

> I am quite certain that I would be vastly more productive if the language wasn't consistently getting in my way

Again, then you're doing something seriously wrong. If you're spending more than 25% of your time typing out code, you're doing something very very wrong.

If your bottleneck is the language, there's something seriously fucked up with the way you program. As a programmer you should be primarily using your brain, to solve problems. Then you take a few minutes to splurge that all out by pressing some keys on a computer.


Yes, you started writing Blub before I was born. Good for you. It's very unfortunate that you haven't progressed past that point.

That you have openly admitted that you do not understand the productivity and code quality benefits of closures, etc. is so very much not my problem. Massive switch statements and needless object subclassing to get around Java's inefficiencies--be my guest. Enjoy your spaghetti.

I have demonstrated, to my own satisfaction and really that's all I give a damn about, that I am considerably more productive using Scala (you do know what Scala is, right?) on the JVM, consuming Java libraries, than I am Java. The language is a roadblock, regardless of how your 90's sensibilities feel about the issue.

(Seriously, whoever decided a function object pattern was a suitable alternative to a delegate or closure should be barred from programming, ever again.)


That's great that you've discovered you're less productive in Java than Scala. Hopefully you can improve that deficiency in your programming at some point.


You are basically saying that people cannot write good code in Java. You are generalizing and that makes you sound like and troll even though I know that is not your intention. You can write good or bad code in Java. I personally have never really had an issue with Java so I don't really understand the hate.

Yes, there are sucky frameworks out there but you do know that you don't have to use them? Either I'm writing really simple code that Java never gets in the way, Java is not really a problem, or I'm a super programmer. I don't think I writing simple code, I don't think I'm a super programming, so it has to be that Java is not really a problem for me. And I write similar code in Objective-C, C++/C, JavaScript and even had to write a lot of code in VBA. Had even to write code in PL-SQL several years ago.

Every language has its own nuances, you just find the best way to work with them, ignore the junk, and adapt. Which is why I really don't get where all this hate is coming from. You never hear this for C++ and it can also be a pain in the ass but you do hear it for Java.

Is almost like it is cool to hate on Java.


You know, I was thinking the same about Java. That's when I posted this question. http://news.ycombinator.com/item?id=2094274 ; It got front page, and one (that's 1) pointer to good Java code.

For whatever reason, whether it is merit or culture, Java programmers tend to write horrible code. I'm sure there's some nice Java code out there, that is not 20 times longer than it should be. But I have not yet seen evidence, even though I've been searching for it for a while.


You can certainly write good code in Java. Totally doable, never said it wasn't. But I'd agree with you that Java programmers tend to write horrible code.

I linked the essay by pg (which I'm sure our upset friends did not read) that suggests a decent reason why: I tend to find that in the Java world there's a lack of awareness of the proper (and I do mean proper) way of writing a lot of more advanced, more indirected code. (This is the "thinking in Blub" you see from pg or Joel Spolsky.) I have a hunch that this lack of higher-level awareness results in weird kluges and hacks that don't even really match the "canonical" design patterns and idioms of what you or I might call "good" Java.

I feel pretty confident in saying that people who are fully comfortable with a more expressive tool (C#, Scala, even dynamic languages like Python or JavaScript) will write better Java than someone who is inculcated into Java first and Java only. It's easy, if unpleasant, to move "down" the continuum that pg references--it's not so easy to move "up", especially when you don't see a reason to (as these posters clearly demonstrate that they do not).



>> You are basically saying that people cannot write good code in Java.

Wrong. I would not say that, because I do it. I am saying that it is vastly more difficult than it needs to be to write good code in Java because it is insufficiently expressive.

I will say that I am suspicious of the ability to write good code of people to whom Java is not a poor development choice, because I suspect brain damage, but a decent programmer can write fine Java. It just sucks to do it.

.

>> You are generalizing and that makes you sound like and troll even though I know that is not your intention.

I am doing no such thing. You are misunderstanding me, but it's pretty clear from the upvotes that you're the only one.

.

>> I personally have never really had an issue with Java so I don't really understand the hate.

It is likely because you think in Blub. Read pg's article regarding Blub, Beating the Averages:

http://www.paulgraham.com/avg.html

He makes the contention that Lisp is at the apex of the pyramid of software development tools. I disagree, for a number of reasons, but the contention of the article is correct at its core: once you have the perspective of a decent set of other tools, you realize that regardless of your tools of choice, Blub languages rank very low on the scale of expressivity--and thus, in power and ease-of-use. (And everyone should learn Lisp, anyway. Even if they don't write code in it. I think in Lisp when writing Java, and aside from Java's miserable boilerplate, my Lisp-in-Java is better than your average Java programmer's Java-in-Java.)

And I would submit that Java is one of the most Blub languages in common use. You have no basis for understanding why others would have an issue, because you are looking up the continuum without insight into what is above.

.

>> Yes, there are sucky frameworks out there but you do know that you don't have to use them?

Meaningless statement. At my current employer, we are forced to use a legacy servlet infrastructure, but my own Java (and Scala) code uses Play! and other frameworks and libraries that at least attempt, if not always successfully, to drag Java reluctantly into some semblance of modernity.

Writing Java still sucks.

.

>> Either I'm writing really simple code that Java never gets in the way, Java is not really a problem, or I'm a super programmer.

Or you are insufficiently experienced with better tools to be able to reliably determine whether it is done better elsewhere. One who does not know any better may be happy with Blub, but one who has used better is not. This seems eminently straightforward.

.

>> And I write similar code in Objective-C, C++/C, JavaScript and even had to write a lot of code in VBA.

I'm beginning to see your problem. With the exception of JavaScript, you do work in Blub. And I'd bet that you write Blub in JavaScript, too, instead of JavaScript in JavaScript.

.

>> Every language has its own nuances, you just find the best way to work with them, ignore the junk, and adapt. Which is why I really don't get where all this hate is coming from.

Nonsense and worse words. The best way to "adapt to Java" is to download a Scala compiler. Spend a few weeks using the JVM with something modern like Scala or Clojure and you will get where the antipathy towards Java comes from.

Java commits the ultimate sin a programming language can commit: it wastes my time. It is a language designed by committee that does nothing excellently. Its successors on its own platform do not commit the same sin and I am more productive for it--they are better for it.

.

>> You never hear this for C++ and it can also be a pain in the ass

This is blatantly untrue, in my own experience. I can rant on about C++ quite successfully and at great length, because C++ has its own share of problems. Where it differs is in much, much greater expressivity--that C++ is capable of supporting Boost is a perfect example of this expressivity. It is by no means perfect, but it is certainly a smaller problem than Java.

And unlike Java 7, C++0x actually fixes (most of--templated lambdas are unavailable for what I consider fairly stupid reasons) the problems that. Oracle decided to push anything useful out until Java 8, and I'm skeptical it'll actually keep the promise of "next year."

.

>> Is almost like it is cool to hate on Java.

You lack the breadth of experience to make this claim.


Well, lets agree to disagree. Maybe I am a dum*bass and too dumb to realize it. Ho well.. C'est la vie


"Agree to disagree" is a polite way of saying "you're wrong."

Are you incapable of substantiating your position?


Yes, you are right. I'm politely telling you that I respect your opinion but I disagree.

>>Are you incapable of substantiating your position?

The thing is that a lot of the arguments we are making are just our own opinions and hence anecdotal. Really what we need here is scientific research measuring what difference does the programming language make when working on coding projects

A couple of examples that I've worked on are the following:

A Java to Objective-C transcoder

C to Java transcoder

Physics Engine

Collision Engine

Symbolic Math Engine

Game Engine (includes the Physics Engine and Collision Engine along with the rendering and animation code)

And some things I'm currently working on:

Java to C++ transcoder

Java to JavaScript transcoder

What I've noticed is that the coding takes very little time, the figuring out part, the design, architecture, debugging, that takes most of the time.

I'm not really sure whether one of the most modern languages would really make much of a difference if at all. I believe it won't really make much of a difference. Coding is the easy part.

Use the language that makes you comfortable, definitely.

Now, tools are a different story. I would hate to have to code in a simple text editor. IDEs make my life extremely easy and actually make me a faster coder. I love the Eclipse IDE. XCode would be my second choice and Visual Studio 3rd.


Upvoted for "coding takes very little time" ! Most often, you are making 100s of small but significant decisions of algorithms, runtimes, libraries, memory footprints etc that the actual coding part ends up being the less significant aspect.

Also, I really admire the polite but confident way you responded to eropple's borderline trolling. Good show !


> You lack the breadth of experience to make this claim.

Wake up. You're 23. You're a kid. You've just started programming and think you know everything. You don't.


I'm well aware that I don't know everything--but, with what little respect is due a troll like yourself, apparently I know more than you. :-) After all, I'm not the one saying "you don't need that" because I don't understand it; on the contrary--I am saying that these tools greatly empower a programmer to write better code. Because they do. You can certainly write "good" Java, but it will not be in the same ballpark as "good" Scala or "good" C# or "good" any-other-remotely-modern-language. The effort expended to write "good" Java is much greater, and as such it is a worse tool.

As for your ad hominem: I've been doing this at some level for ten years, thanks. I've been getting paid to do this stuff for about six. I didn't "just" start programming. I work in a fairly high-level, demanding environment with plenty of hard problems and a lot of code smell that can be directly attributed to poor Java expressivity.

That you can only fall back on "you're a kid" as a way to attack claims says much, much more about you than I.

You are describing to a T the sort of Blub programmer that is referred to in the Graham article I linked upthread, but I won't bother advising you to read it--you won't recognize yourself. Have a nice day. :)


You'll look back at these comments you're making in 10 years and be embarrassed. Hopefully by then you will have learnt a bit more about being a productive programmer.

The language doesn't matter. Repeat after me...

A good programmer can make good stuff in ANY language. A bad programmer can only make good stuff in their favorite language.

You should stand up, be confident, and realize that it is the programmer that creates awesome software. Not the language.


I think you're misunderstanding the point here. It is perfectly possible to write awesome software in Java. With the amount of software out there, it would be completely insane for anyone to say that you can't do awesome things in Java.

> You should stand up, be confident, and realize that it is the programmer that creates awesome software. Not the language.

This highlights the misunderstanding. You're right. We should be spending our time making awesome software, not typing letters and building boilerplate code.

Full disclosure: I work with eropple on a fairly regular basis, I favor C#, I write C++ at my day job. I spent a few months doing Java, was able to do what I wanted to with it, but missed a lot of features from more featureful languages.


There is more to awesome software than typing.

(Note this point stands compatible with the entirely orthogonal point about expressiveness and concision of a language.)

For me (at least due to client demands ..) awesome software, in part, posits the requirement of economically maintainable artifact.

PG's writings on Blub languages is imo addressed to a narrow audience of readers as it does not in anyway address maintenance and extensions to systems by non-elite development teams. Even elite teams, if tasked with delivery of products to non-elite consumers, must factor in the economic equation of the cost proposal.

To wit:

Having a bench of solid OCaml/Scala developers is a viable economic proposition for Wall Street and rich hedge funds; starry start-ups; and possibly elite teams in major media; a hacker community project. It is insanely difficult enough to find competent help in Blub-land, much less competent Scala programmers.

And, of course, the majority of software is developed/internally-consumed precisely by shops that must staff from blub-land. And surely you are aware that a big chunk of "programmers" out there are just recent graduates of some web-app vocational CS education.

Software language economy is not simply about lines of code. The economic cost equation of a language is definitely a critical factor if positioned as a general use language.

Java is unsurpassed in terms of the balance it brings to the economic equation: it is effectively powerful enough to allow serious developers to create "awesome" software, and approachable enough for blubland coders to crank out (yes) meh code that gets the (business) job done.

This fact was recognized by all entities chasing development dollars out there, including IBM, Oracle, and in its own cute way, via Google (Android).

Tell me: why isn't Android dev done with Scala or Clojure? My answer: Because Google management is not stupid.


I'm embarrassed for both of you. Will you please stop baiting one another?


I think an example is in order. I'm going to code up a simple event dispatching algorithm in three languages. They'll have the same functionality. I consider myself fluent in all three, and I'll write them in the most consise and style-respecting way I can.

C++:

    #include <vector>
    #include <string>
    #include <iostream>
    typedef void (*hndlr)(std::string);

    class Event {
      private:
        std::vector<hndlr> handlers;
      public:
        void Listen(hndlr handler) {
          handlers.push_back(handler);
        }
        void trigger(string arg) {
          for (std::vector<hndlr>::iterator i = handlers.begin(); 
              i != handlers.end(); i++) {
            (*i)(arg);
          }
        }
    };
    
    void h1(std::string arg) { 
      std::cout << "First handler got " << arg << std::endl;
    }
    void h2(std::string arg) { 
      std::cout << "Second handler got " << arg << std::endl;
    }
    
    void main() {
      Event event;
      event.Listen(h1);
      event.Listen(h2);
      event.Trigger("something happened!");
    }
Lua:

    event = {listeners = {}}

    function event.listen(self, handler) 
      if (type(handler) ~= "function") return end
      table.insert(self.listeners, handler) 
    end
    
    function event.trigger(self, arg) 
      for handler in self.listeners do handler(arg) end
    end
    
    event:listen(function(text) print("First handler got "..text) end)
    event:listen(function(text) print("Second handler got "..text) end)
    event:trigger("something happened!")
    
C#:

    using System;
    public delegate void HandlerDelegate(string arg);

    class Main {
      static event HandlerDelegate Event;
      static void Main() {
        Event += (arg) => { Console.WriteLine("First handler got" + arg); };
        Event += (arg) => { Console.WriteLine("Second handler got" + arg); };
        Event("something happened!");
      }
    }
    
    
Now, go ahead and say that choice of language doesn't matter. You might not need lambdas, or first-class functions, or event handlers, and a good programmer can make the same algorithm "work" in any language. But by choosing a more powerful and expressive language, you can get those algorithms done in a way that's more readable, maintainable, and faster to code, which in the end is what really matters.


Also fun: The only one of these that works when a callback removes itself from the event list in its own callback routine is C#. You get a hanging iterator in C++, and removing items from a table mid-iteration in Lua is undefined (though in practice usually works).

To make this case work properly, the place I work for has a 335 line C++ template class. This is all time that the developer could have spent actually building our product.


The C++ version could be greatly simplified by using boost::bind. It'd still be shorter and clearer than a Java equivalent that had to bung in anonymous classes and other crap to create a proper dispatch.

Your point, however, totally stands.


You don't seem to understand something that I guess I feel is rather basic: I don't have a "favorite" language. I have tools that are expressive and thus more useful because I spend more time in the problem space than I do in the language space. I also have Java.

Objects are a powerful concept because they allow a programmer to more easily map a problem to the available solution space. This is good. Java, however, fails to take the next step to enable even better mapping of a problem by creating a more flexible solution space. The other languages cited in this thread do create that more flexible solution space, and thus make getting a job done more easily and more cleanly a viable possibility.

.

A good programmer can make good stuff in any language. You are correct about this. Where you are wrong is in your inability to understand that a good programmer can make good stuff quicker and more easily in an environment that minimizes the distance between the problem and solution set.

But I rather get the impression that you don't know enough about what exists outside of your "box" to be as authoritative as you'd like to sound. You seem fundamentally uninterested in understanding the benefits that these constructs, and these simplified syntaxes (note: these are two separate points, but you seem to miss them both) provide to a developer. I don't think there's a lot of value in continuing this with you. Unless you bring forward salient points instead of petulant defenses based on fundamental ignorance, I won't reply to you again.


You ignorance is so painful embarrassing, it almost hurts to read your non-sense.


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.


The more surprising thing is that they seem to genuinely believe they can "block" content. Sorry, the internet doesn't work like that.


Actually the judge says:

       Finally, I agree with counsel for the Studios that the order
       would be justified even if it only prevented access to Newzbin2
       by a minority of users.
Though he probably doesn't realise quite how ineffective this will be!


> The more surprising thing is that they seem to genuinely believe they can "block" content.

They can. Or do you mean that the judges think there's no way around the block? If so, do you have a reference for that?


The only time I've ever used an optical drive is to re-install the OS.

You can pick up a USB DVD drive for next to nothing for those rare times you need it.


No, the worst that could happen is the host is a psycho who wants to murder / rape / take nude pics of you without you knowing.

There's a reason hotels exist, and there's a reason why it's a bad idea to hitch-hike, or even worse, stay with people you don't know.


Everything in life carries risks. Trusting strangers is nice. I'd rather live in a world where I can. Then again I live in a place where people leave their cars unlocked.


Sure, but the whole premise is that you're traveling. Going to unknown territories.

If I'm going traveling, I'm sure as hell in "untrusting" mode since I don't have a clue what the locals are like.

There's strangers as in "local resident I see each day but don't know", and there's strangers as in "I've just traveled to a completely different country and have no clue who this person is"

Wanting to trust everyone and believing majority of people are good is a nice hippy dream. There's some nasty horrible people out there.


> a nice hippy dream.

Bullshit. Live in fear of strangers your whole life or trust the basic humanity of strangers. Either way you're still going to die of heart disease like the rest of us. Why don't you live in constant fear of that?

Stranger danger is a result of a fear-mongering media. Are you seriously worried about serial killers? Do you know how few of them there are and how freaking many people there are in the world?

People love to live in fear of things like strangers because it's immediate and controllable. They can just choose to stay away from them. It gives people a sense of control. Heart disease is long-term and amorphous. It's harder to gain immediate relief from fear of that.

By all means, don't leave a bunch of cash around while staying at a stranger's house. Take reasonable precautions. But fearing people by default is irrational.


"Live in fear of strangers..."

Strawman. I don't live in fear of strangers. They don't haunt my dreams or make me break out in cold sweat or make me stop going places. But I keep my eye out, because I am not stupidly naive about it.

It's not as irrational as you think, either. The majority of people are decent, or society wouldn't exist at all. However, the non-decent ones tend to seek out travelers and other people who can be victimized. This is why the best advice to give to your kids is that they can probably trust anyone they walk up to if they have a serious problem, but anyone who approaches them for anything out-of-the-ordinary should probably be treated with great skepticism. Statistically speaking there are many situations, such as traveling, where you are disproportionately likely to encounter the non-decent types. Ignore this fact at your own peril.


I also believe it is much worth to live with a strong faith in the good nature of people.

However I believe one should not indulge in it.

This faith is very precious and this is exactly why it is a sin to rely upon it in the wrong circumstances. I live in Japan, that has a very low crime rate, but I found it very interesting when they told me "Don't leave anything valuable at the office. There is very little chance that something might happen, but can you imagine how you will feel and act towards your colleagues if something happens..." What you value you must protect. Although it sounds controversial, this means that it is your obligation to protect your faith to the goodness of people from the ones that could destroy it.


I don't live in fear. But I'm not going to go stay with random people thankyou. They might be in a cult for a start.

I'll take my hotel room thankyou.


This family bicycled 26,000 miles over 43 months and didn't run into a single one of those nasty horrible people. Maybe they were extremely lucky, but I like to think you can't live your life worrying about the few nasty horrible people.

http://familyonbikes.org/blog/2011/01/isn’t-bike-touring-dan...


For an alternative anecdote see this 2008 BBC article: "'World peace' hitcher is murdered". http://news.bbc.co.uk/2/hi/7344381.stm

A woman hitchhiked through the middle east dressed as a bride to promote world peace and was murdered and raped.

Are either of these anecdotes indicative of people's experiences when travelling? No. Is there potential danger in relying heavily on stranger's good intentions? Perhaps.


People generally don't like outliers. If not-so-decent people see someone not like them (probably noticeably better), they would have a natural desire to make them harm. At least of envy.


Me too (live in a place where cars go unlocked), but last night I watched a burglar open my passenger door, sit in the seat and look around. I never put valuables in that car, so I wasn't concerned if only for the awareness that my neighborhood is not as safe as I once thought. I shouted at him from my second-story window and he took off like a bat out of hell. The cops came and I now lock the doors on my beater every day.


Absolutely. The few times I've been surprised by the kindness of strangers stand out to me as some of the most pleasant experiences of my life.


A guest can only needs to steal credit card details to attack the host. The host needs to steal a whole house. That might be possible (through, say, AirBnB), but I doubt it would be easy.


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

Search: