I still have a Samsung S3 but for some reason I could never get LineageOS/Cyanogenmod working properly on it, so it'll be retired soon.
But for anyone in their mid 30s or older, it's damn frustrating to see that the $600 smart phone from 2012 or 2013 that has a current street value of $10 even if it works well would have qualified as a damn supercomputer in 1997. So yes, I do want to find another use for it because it seems criminal to dismantle and recycle something that still has an impressive amount of computing power for any time in my life except the past 12 years.
It's workable and high performance. But there are hundreds of posts showing how Scala, Kotlin, or Ceylon let you do everything that Java can do with 50%, 75%, sometimes 90% fewer lines of code without sacrificing readability. Even with lambdas in Java 8 and collection helpers in Java 9 (or 8? I can't remember), it lags the others in a huge way.
Java has the most ceremony syntax of any popular language since COBOL.
And yes before anyone says it, your IDE can fold code and auto-generate setters and getters and delegating constructors and so forth. But instead of putting class Person with its five fields and three constructors and five getter/setter pairs in its own file, you can have something like "case class Person(val name: String, val dob: Date,.....)" in one line and get all the rest for free inside another file and get right down to using Person objects.
Most companies start with a 'toy database' for their 'toy application' and then have the application and the database expand in volume and features used as the business grows. And for an awful lot of companies, the growth never passes the size in which Oracle or something like it becomes necessary.
Oracle didn't want to kill MySQL. They wanted to make it easier to sell potential customers on the transition.
If your goal is to make money, it is an obvious path to take.
Actually, the Graal project that Oracle is funding for Java is pretty cool. And the only thing bad about handing JavaEE to the Apache Software Foundation was that Oracle should have done it sooner.
Java is painful to use, but it's around for the long haul - especially since Oracle couldn't remove OpenJDK even if they wanted to. The JVM, though, is a really useful platform, and Oracle has not yet managed to screw that up.
Right. I did say that other languages have offered the feature. I just think that many of the people wildly enthusiastic about Node.js probably come from Java, C#, and C++ shops where the edit-compile-run-test cycle was measured in minutes. So even though this is not a new thing, it was new to these developers.
Interesting. It must be the variety in regional pricing. The prices I gave are not hypothetical, I went right to the website and priced out my upgrade options.
I always thought of Spongebob as teaching by counterexample. "This is the greedy jerk." "This is the narcissistic artist type." "This is the whiny teenager." "This is the procrastinating teenager." So maybe someday a kid says, "I sound like Patrick Star. Maybe I'm doing something wrong with my life."
But mostly, many - though not all - episodes are surprisingly funny. When my kids started watching I resigned myself to cartoon equivalents of Barney the Purple Parent Torturer, but I found myself laughing a lot.
You don't have to subscribe to all of the streaming services at the same time. And your daughter is fine with DVDs.
So you subscribe to HBO for a few months, then Starz for a few, etc... and take the rest of the money you save and buy her a season of Dora or Mythbusters or Spongebob once a month.
I can get news and political commentary off websites. And I take a tiny fraction of the money I used to spend on paid television and buy the kids entire seasons of Looney Tunes / Spongebob / The Wizards of Waverly Place / Scooby Doo.
And most of my friends and family aren't in the tech industry, and we still switched to discussing shows to buy or rent instead of catching them live.
For live sports, I can catch the local stuff OTA with an HD antenna. I'm not paying for ESPN or similar.
I read that argument on Slashdot all of the time. But at least for me, it's not true.
I have Comcast. My internet service is $75 per month for 25/5. There would be an additional $7 cable modem monthly rental cost if I used their device, but I bought my own.
If I got a bundle with television, it would be $60 per month. Better, right? Except there's also a $5 per month Comcast (not government) regional sports fee, a $7 per month Comcast (not government) regional channel fee, and maybe $4 in state and federal taxes. Now I'm at $76 per month. If I want DVR service, it's an additional $10-$15 per month.
Now you can argue that the added cost of cable is so low that it's a worthwhile purchase. But it is an added cost - who has television without DVR service these days?
Plus, there's one added advantage of staying internet-only with Comcast: they have fewer opportunities to make errors on your billing. Every year or so I have to call Comcast and provide proof that I own my own cable modem to get them to stop adding cable modem rental fees to my bill. But when I had television service? Forget it. My channel package got more expensive every few months, and I constantly had to call to negotiate it back down. And on several occasions they started charging me for premium channel packages I never agreed to get.
I don't know about you, but I can't watch Game of Thrones and Ray Donovan at the exact same time. So you don't need to subscribe to three or four streaming services at the same time. Use HBO Go for a few months and binge on the shows there. Then cancel, and get CBS All Access or Hulu Plus for a few months. Then cancel, and get Starz. etc... etc...
If you insist on getting all first run episodes on release, then it won't work. But that's your problem, not theirs.
I have a cushy position, which is why I haven't jumped ship despite intense frustration over the slow build environment. What you're suggesting makes sense, but it's a huge amount of work. I've suggested it before and couldn't get any traction. But a friend just earned a promotion to developer lead and this is something he's always wanted to fix too, so I'll bring it up again to him.
What kind of hot reload do you use? Just in your IDE? JRebel? JHipster? DCEVM? SpringLoaded?
I specifically said at the end of my post that other languages offered this before Javascript and Node.js. I just said that for a lot of server side developers, Node.js was their first exposure to the concept.
And yes, debugging is much harder and the bizarre type system causes all kinds of headaches. I'm not saying Node.js is flat out better than Java (or C#, or C++, or Haskell, or Scala). I'm just saying that instant feedback on changes can be a wonderful break from "make change, grow beard, test change" iterative cycles.
And repeat 589 more times... in three hours and have something with an amazing set of working features considering all of the work involved.
At my job now, I work on Java code. "mvn install ; cp_to_tomcat.sh ; start_tomcat.sh ; loop_until_login.sh ; espeak 'build ready for manual check' " takes nine minutes on a core i7, even if I changed only one line of one Java file since the last build. If I do "mvn install -DskipTests" it takes five minutes.
So even though the Node.js/Python/Ruby/PHP/Perl developer loses all of the power of static types, he or she can iterate fifty times faster than I can. Once your application is complicated enough, you can make a very strong argument that even fifty times faster iteration doesn't offset the value of a good static type system. But there is definitely trade offs.
Java has had hot code swapping that works in some cases, but not all. If one of the toolkits you use doesn't support it, or you're working in one of the library dependencies for your project at the same time you're working on the project (e.g. you're working in foo and bar at the same time, and bar uses foo.jar at runtime), you can't use it.
Maybe I'm just unlucky, but in all the places I worked Java hot code swapping covered such a tiny sliver of the work we did that none of the developers used it more than a few days per year.
I suspect the real killer feature of Node.js for people coming from Java and C# is the development cycle. Edit, save, hit F5 in the browser. Despite everything ugly about Javascript, that's handy.
Granted, you can get that with Perl, Python, and Ruby too and if you restrict yourself to certain Java and C# features you can also have it there. But in practice I think a lot of server side programmers first saw the instant feedback loop of Node.js first, and fell in love with it.
import java.util.List;
import java.util.Arrays; (or equivalently but not recommended, import java.util.*;)
List<Integer> nums = Arrays.asList(1,2,3,4);
or
java.util.List<Integer> nums = java.util.Arrays.asList(1,2,3,4);
Most other languages have literal syntax for lists, sets, etc... by default, and you don't have to waste your time with imports to use data structures that 70% of your source files will include anyway.
I've been using them for years on Windows and Linux. The Linux client has been clunky in the past, but it seems stable (albeit slow) now.
If you want to go full-free-software, I recommend Tahoe-LAFS (https://tahoe-lafs.org/trac/tahoe-lafs) you can run your own version with any server provider you want, or buy their service https://leastauthority.com/...the last time I tried to use it, the setup was too complex to be worth the hassle and I gave up. But that was nearly five years ago, it may be much more user-friendly now.
I've actually had a really good experience with Comcast support staff, service technicians, and sales staff at their offices. Their sales and billing teams on the phone are hopelessly disorganized and deceptive - presumably intentionally slow. But every time I walked into an office and explained what my billing problem was, it was fixed in three minutes.
1. Cable television brochures lie worse than politicians, and everyone knows it. That "Bundle that adds television service for just $10 more than you're paying for internet" doesn't include the $7 regional channel fee, $5 regional sports fee, $7 monthly equipment rental, $9 monthly DVR network service fee, two year contract with a $30 price jump after the first year, and $5 charge applied to customers that handle their own billing instead of providing the vendor with their banking information so they can use auto-billing. You're actually adding $58 per month across the two years to your bill, not $10. Netflix et al don't lie on their price advertising like that.
2. Most of these customers are going to have internet, Netflix, and Amazon Prime anyway.
P.S. I try to avoid brand groupthink too. I guess we're both stupid.
And I should have added, I am not condemning you for your choice. I respect it. I'm kicking around the idea of making the same choice with respect to mobile phones, since my Motorola Android device hasn't received some major security fixes since it was all of nine months old. I wonder if the FSF would send back my dues if they knew.:) I'm just saying that it's bad for all of us that the freedom-respecting choices are so rare and so poor.
Yes, locked. Can you take the movies you buy on iOS and legally transfer them to your Linux or W10 laptop? Can you buy any laptop you like and put MacOS on it? When your iPhone stops receiving security updates from Apple, do you have any choice other than "trash it" and "run without security fixes"? When Apple decides to change some core feature you don't like, can you fork the code - or pay someone else to fork the code, or take advantage of a fork someone else made - to go back to the old behavior? Can you port the applications you like to other hardware? Operating systems?
Yes, locked. Now again, I'm not saying the situation with Android is better. While Android has the potential to be as open as a typical Linux distribution like Debian or Gentoo, in practice it's nearly as bad as Apple in most respects and worse in a few key respects - namely, security upgrades over the life of a product.
Contrast all of that to running a free software environment like Debian, Gentoo, Arch, Fedora, Suse, etc... or even FreeBSD and its derivatives. Moving movies around is technically possible. Any hardware with drivers is supported and you have the freedom and legal right to create or help fund the create drivers for other hardware. Security fixes are indefinite, typically when hardware is dropped from Linux kernel support it's 15 years or more after it stopped being sold to consumers. That's freedom. No locks. It's what we should have everywhere.
If you work at a place that puts a lot of stock in KLOC metrics, you have bigger problems than deciding what JVM language to use.
If all other things are equal between two languages, a developer will be more productive in the one that lets them accomplish more in fewer LOC without sacrificing readability. So just to be crystal clear, I'm not advocating you compare, say, idiomatic Java with obfuscated Perl that uses every Perl 5 implicit variable abbreviation trick in the book. That Perl may do twenty times as much per line, but good luck maintaining it. (I'm not knocking Perl. Well-written Perl is excellent. We use it for a lot of tasks at work. But that's because everyone working on it is far too smart to show off how clever they are by writing unmaintainable, unreadable abbreviated junk.) But for any Java program much more than a hundred lines wrong you can write a Kotlin/Ceylon/Scala equivalent with the same logic that's 50-90% shorter.
That's not a bad idea, thanks.
I still have a Samsung S3 but for some reason I could never get LineageOS/Cyanogenmod working properly on it, so it'll be retired soon.
But for anyone in their mid 30s or older, it's damn frustrating to see that the $600 smart phone from 2012 or 2013 that has a current street value of $10 even if it works well would have qualified as a damn supercomputer in 1997. So yes, I do want to find another use for it because it seems criminal to dismantle and recycle something that still has an impressive amount of computing power for any time in my life except the past 12 years.
It's workable and high performance. But there are hundreds of posts showing how Scala, Kotlin, or Ceylon let you do everything that Java can do with 50%, 75%, sometimes 90% fewer lines of code without sacrificing readability. Even with lambdas in Java 8 and collection helpers in Java 9 (or 8? I can't remember), it lags the others in a huge way.
.....)" in one line and get all the rest for free inside another file and get right down to using Person objects.
Java has the most ceremony syntax of any popular language since COBOL.
And yes before anyone says it, your IDE can fold code and auto-generate setters and getters and delegating constructors and so forth. But instead of putting class Person with its five fields and three constructors and five getter/setter pairs in its own file, you can have something like "case class Person(val name: String, val dob: Date,
Most companies start with a 'toy database' for their 'toy application' and then have the application and the database expand in volume and features used as the business grows. And for an awful lot of companies, the growth never passes the size in which Oracle or something like it becomes necessary.
Oracle didn't want to kill MySQL. They wanted to make it easier to sell potential customers on the transition.
If your goal is to make money, it is an obvious path to take.
Actually, the Graal project that Oracle is funding for Java is pretty cool. And the only thing bad about handing JavaEE to the Apache Software Foundation was that Oracle should have done it sooner.
Java is painful to use, but it's around for the long haul - especially since Oracle couldn't remove OpenJDK even if they wanted to. The JVM, though, is a really useful platform, and Oracle has not yet managed to screw that up.
Right. I did say that other languages have offered the feature. I just think that many of the people wildly enthusiastic about Node.js probably come from Java, C#, and C++ shops where the edit-compile-run-test cycle was measured in minutes. So even though this is not a new thing, it was new to these developers.
Interesting. It must be the variety in regional pricing. The prices I gave are not hypothetical, I went right to the website and priced out my upgrade options.
I always thought of Spongebob as teaching by counterexample. "This is the greedy jerk." "This is the narcissistic artist type." "This is the whiny teenager." "This is the procrastinating teenager." So maybe someday a kid says, "I sound like Patrick Star. Maybe I'm doing something wrong with my life."
But mostly, many - though not all - episodes are surprisingly funny. When my kids started watching I resigned myself to cartoon equivalents of Barney the Purple Parent Torturer, but I found myself laughing a lot.
You don't have to subscribe to all of the streaming services at the same time. And your daughter is fine with DVDs.
So you subscribe to HBO for a few months, then Starz for a few, etc... and take the rest of the money you save and buy her a season of Dora or Mythbusters or Spongebob once a month.
I can get news and political commentary off websites. And I take a tiny fraction of the money I used to spend on paid television and buy the kids entire seasons of Looney Tunes / Spongebob / The Wizards of Waverly Place / Scooby Doo.
And most of my friends and family aren't in the tech industry, and we still switched to discussing shows to buy or rent instead of catching them live.
For live sports, I can catch the local stuff OTA with an HD antenna. I'm not paying for ESPN or similar.
I read that argument on Slashdot all of the time. But at least for me, it's not true.
I have Comcast. My internet service is $75 per month for 25/5. There would be an additional $7 cable modem monthly rental cost if I used their device, but I bought my own.
If I got a bundle with television, it would be $60 per month. Better, right? Except there's also a $5 per month Comcast (not government) regional sports fee, a $7 per month Comcast (not government) regional channel fee, and maybe $4 in state and federal taxes. Now I'm at $76 per month. If I want DVR service, it's an additional $10-$15 per month.
Now you can argue that the added cost of cable is so low that it's a worthwhile purchase. But it is an added cost - who has television without DVR service these days?
Plus, there's one added advantage of staying internet-only with Comcast: they have fewer opportunities to make errors on your billing. Every year or so I have to call Comcast and provide proof that I own my own cable modem to get them to stop adding cable modem rental fees to my bill. But when I had television service? Forget it. My channel package got more expensive every few months, and I constantly had to call to negotiate it back down. And on several occasions they started charging me for premium channel packages I never agreed to get.
I don't know about you, but I can't watch Game of Thrones and Ray Donovan at the exact same time. So you don't need to subscribe to three or four streaming services at the same time. Use HBO Go for a few months and binge on the shows there. Then cancel, and get CBS All Access or Hulu Plus for a few months. Then cancel, and get Starz. etc... etc...
If you insist on getting all first run episodes on release, then it won't work. But that's your problem, not theirs.
I have a cushy position, which is why I haven't jumped ship despite intense frustration over the slow build environment. What you're suggesting makes sense, but it's a huge amount of work. I've suggested it before and couldn't get any traction. But a friend just earned a promotion to developer lead and this is something he's always wanted to fix too, so I'll bring it up again to him.
What kind of hot reload do you use? Just in your IDE? JRebel? JHipster? DCEVM? SpringLoaded?
I specifically said at the end of my post that other languages offered this before Javascript and Node.js. I just said that for a lot of server side developers, Node.js was their first exposure to the concept.
And yes, debugging is much harder and the bizarre type system causes all kinds of headaches. I'm not saying Node.js is flat out better than Java (or C#, or C++, or Haskell, or Scala). I'm just saying that instant feedback on changes can be a wonderful break from "make change, grow beard, test change" iterative cycles.
And repeat 589 more times... in three hours and have something with an amazing set of working features considering all of the work involved.
At my job now, I work on Java code. "mvn install ; cp_to_tomcat.sh ; start_tomcat.sh ; loop_until_login.sh ; espeak 'build ready for manual check' " takes nine minutes on a core i7, even if I changed only one line of one Java file since the last build. If I do "mvn install -DskipTests" it takes five minutes.
So even though the Node.js/Python/Ruby/PHP/Perl developer loses all of the power of static types, he or she can iterate fifty times faster than I can. Once your application is complicated enough, you can make a very strong argument that even fifty times faster iteration doesn't offset the value of a good static type system. But there is definitely trade offs.
Java has had hot code swapping that works in some cases, but not all. If one of the toolkits you use doesn't support it, or you're working in one of the library dependencies for your project at the same time you're working on the project (e.g. you're working in foo and bar at the same time, and bar uses foo.jar at runtime), you can't use it.
Maybe I'm just unlucky, but in all the places I worked Java hot code swapping covered such a tiny sliver of the work we did that none of the developers used it more than a few days per year.
I suspect the real killer feature of Node.js for people coming from Java and C# is the development cycle. Edit, save, hit F5 in the browser. Despite everything ugly about Javascript, that's handy.
Granted, you can get that with Perl, Python, and Ruby too and if you restrict yourself to certain Java and C# features you can also have it there. But in practice I think a lot of server side programmers first saw the instant feedback loop of Node.js first, and fell in love with it.
That's either:
import java.util.List;
import java.util.Arrays; (or equivalently but not recommended, import java.util.*;)
List<Integer> nums = Arrays.asList(1,2,3,4);
or
java.util.List<Integer> nums = java.util.Arrays.asList(1,2,3,4);
Most other languages have literal syntax for lists, sets, etc... by default, and you don't have to waste your time with imports to use data structures that 70% of your source files will include anyway.
I've been using them for years on Windows and Linux. The Linux client has been clunky in the past, but it seems stable (albeit slow) now.
...the last time I tried to use it, the setup was too complex to be worth the hassle and I gave up. But that was nearly five years ago, it may be much more user-friendly now.
If you want to go full-free-software, I recommend Tahoe-LAFS (https://tahoe-lafs.org/trac/tahoe-lafs) you can run your own version with any server provider you want, or buy their service https://leastauthority.com/
At least for me, 3. follows from 1. I hate them because they're so dishonest with their sales and billing.
I've actually had a really good experience with Comcast support staff, service technicians, and sales staff at their offices. Their sales and billing teams on the phone are hopelessly disorganized and deceptive - presumably intentionally slow. But every time I walked into an office and explained what my billing problem was, it was fixed in three minutes.
Plus:
1. Cable television brochures lie worse than politicians, and everyone knows it. That "Bundle that adds television service for just $10 more than you're paying for internet" doesn't include the $7 regional channel fee, $5 regional sports fee, $7 monthly equipment rental, $9 monthly DVR network service fee, two year contract with a $30 price jump after the first year, and $5 charge applied to customers that handle their own billing instead of providing the vendor with their banking information so they can use auto-billing. You're actually adding $58 per month across the two years to your bill, not $10. Netflix et al don't lie on their price advertising like that.
2. Most of these customers are going to have internet, Netflix, and Amazon Prime anyway.
P.S. I try to avoid brand groupthink too. I guess we're both stupid.
:) I'm just saying that it's bad for all of us that the freedom-respecting choices are so rare and so poor.
And I should have added, I am not condemning you for your choice. I respect it. I'm kicking around the idea of making the same choice with respect to mobile phones, since my Motorola Android device hasn't received some major security fixes since it was all of nine months old. I wonder if the FSF would send back my dues if they knew.
Yes, locked. Can you take the movies you buy on iOS and legally transfer them to your Linux or W10 laptop? Can you buy any laptop you like and put MacOS on it? When your iPhone stops receiving security updates from Apple, do you have any choice other than "trash it" and "run without security fixes"? When Apple decides to change some core feature you don't like, can you fork the code - or pay someone else to fork the code, or take advantage of a fork someone else made - to go back to the old behavior? Can you port the applications you like to other hardware? Operating systems?
Yes, locked. Now again, I'm not saying the situation with Android is better. While Android has the potential to be as open as a typical Linux distribution like Debian or Gentoo, in practice it's nearly as bad as Apple in most respects and worse in a few key respects - namely, security upgrades over the life of a product.
Contrast all of that to running a free software environment like Debian, Gentoo, Arch, Fedora, Suse, etc... or even FreeBSD and its derivatives. Moving movies around is technically possible. Any hardware with drivers is supported and you have the freedom and legal right to create or help fund the create drivers for other hardware. Security fixes are indefinite, typically when hardware is dropped from Linux kernel support it's 15 years or more after it stopped being sold to consumers. That's freedom. No locks. It's what we should have everywhere.
If you work at a place that puts a lot of stock in KLOC metrics, you have bigger problems than deciding what JVM language to use.
If all other things are equal between two languages, a developer will be more productive in the one that lets them accomplish more in fewer LOC without sacrificing readability. So just to be crystal clear, I'm not advocating you compare, say, idiomatic Java with obfuscated Perl that uses every Perl 5 implicit variable abbreviation trick in the book. That Perl may do twenty times as much per line, but good luck maintaining it. (I'm not knocking Perl. Well-written Perl is excellent. We use it for a lot of tasks at work. But that's because everyone working on it is far too smart to show off how clever they are by writing unmaintainable, unreadable abbreviated junk.) But for any Java program much more than a hundred lines wrong you can write a Kotlin/Ceylon/Scala equivalent with the same logic that's 50-90% shorter.