Posted
by
ScuttleMonkeyon Monday March 01, 2010 @11:27AM
from the fear-the-behemoth dept.

angry tapir writes with news that Google Go seems to be cutting a wide swath through the programming community in just a short time since its early, experimental release. While Google insists that Go is still a work in progress (like so many of their offerings), many developers are so intrigued by the feature set that they are already implementing many noncritical applications with it. What experiences, good or bad, have you had with Google Go, and how likely is it to really take over?

It is an interesting concept for a low-level language and could be pretty important. And since the gccgo compiler has been accepted by the gcc steering committee (link [gnu.org]), I am expecting Go to stay and prosper.

Well we could suspect nefarious link ranking by Google, but it's more likely the fact that anything Google does is instantly linked from every news source on the planet, including the big, respected media websites which generate a lot of page rank and don't want to be seen as missing out on the Next Big Thing.

Perl and python are quite portable too, though not as portable as Java.

But in practice many nontrivial programs end up with so many dependencies that they aren't that portable anymore.

For example, say you want to write a program to record video from a video camera and audio from a sound device. And you want to cater for the possibility of more than one selectable camera and sound device.

Even if you write it in java, you're going to have to do different things depending on whether it runs on Windows, OSX or Ubuntu.

Why? Little things like figuring out which is the user's default recording device, and using it might be different on different platforms.

Or in theory it's supposed to work, but currently the current Java release for the current OS release is buggy, so the workaround meantime is "...".

If you want a polished end product you have to take care of stuff like that.

As someone that works on a non-java cross-platform enterprise product and has experience working with some of the big java ones I'd like to add -

For fsck's sake please stop using java unless you know what you're doing!

I know, the old "C is just faster" meme makes people angry. I'm sure java can be programmed well and made to be fast and efficient. So why is it every java app of any size I encounter is a slow, bloated memory hog?

angry tapir writes with news that Google Go seems to be cutting a wide swath through the programming community

He may write that, but that's not what the article says:

While Go is still a work in progress, some developers are so encouraged by its features and design that they have started using it to build noncritical application

What experiences, good or bad, have you had with Google Go, and how likely is it to really take over?

Um, take over what? Is this a serious question? The answer here is "never" -- for the same reason that no single language will ever "take over" the software development landscape. There is no one tool fit for every job.

Are you really claiming there are no large Python apps? A lot of people in high-performance computing (including myself) are running huge massively-parallel (either MPI or some MPI+threads hybrid model) scientific codes that are largely Python, with some computationally expensive modules written in C or C++.

Another element that plays a role is Google's "ass-ness". Does anyone think for a second that they didn't bother *Googling* the damn name prior to release? There is and *was* a Wikipedia entry, it'd probably be one of the first results. They simply switched on the "Apple Mode" -- grab the name, and let's see who has the balls to sue.

I run into more portability issues with Python than I ever have with Java, and thats just between Windows and Linux, the same could be said for Ruby. I haven't dug deep enough into perl to say the same for it. I avoid TCL ever since I stopped using eggdrop, vile creature that it is.

I've written a little python, a lot of ruby, and a fair amount of java, it beats both those others for cross platform issues in my experience, and I'm ignoring Ruby on DOS as thats a whole new set of issues and isn't really even a fair comparison since the OS is so far different, I don't think there is a DOS JVM, and I have no idea about python and DOS.

I absolutely HATED Java apps before I was forced to start writing Java code myself. What I learned VERY rapidly is that Java apps suck if you're a shitty programmer. If you don't have any clue how to write code and no clue about the common pitfalls of cross platform dev, it can kill you. 9 times out of 10, its because the programmer did stupid shit that he/she shouldn't have that is clearly OS specific when its a cross platform compatibility issue. Likewise all the slow beasts of Java 'apps' that you come across generally suck because the programmers have no idea what they are doing. Stupid crap like doing string concatenation one character at a time using a string variable rather than class designed for string concatenation and proper allocation for it.

Java isn't the problem. Much like VB, shitty Java programmers are the problem. Java and to a much larger extent, VB draw in people who aren't programmers because of the marketing, and then we see tons of crappy Java apps because the language is in fact, TOO easy to use.

Say what you want about Java in the past, it could be true. Today? Muh, there is very little if any truth in your statements at this point in time.

Many people think that portability means "your code will run on multiple platforms".

With Java, I feel it is more a case of "your code will run on the Java platform".

The distinction is that, in the latter case, a lot of the facilities that have been implemented for existing platforms have to be re-implemented for the new platform. I feel a lot of effort has gone into creating things for Java that already existed outside it.

By contrast, many other programming languages attempt to fit in and play nice with whatever platform they end up being deployed on. Where Java has your programs run inside a virtual machine which is more or less the same across native platforms, other languages have you create programs that are just like the programs your native platform knows how to run. Where Java has people build functionality on the facilities provided by the virtual machine, other languages have you build functionality on the facilities provided by the native platform.

The approaches are different, and lead to a vastly different feel both during application development and when using an application developed using one approach or the other. Both approaches have their pros and cons.

Java's approach has the advantage that, absent deficiencies in the specification and bugs in the implementation, the Java platform is the same everywhere, regardless of native platform. The disadvantage is that you lose access to the native platform's facilities that are not also in the virtual platform. It also means that your software is almost certain to not really fit in with the native platform.

The other approach leaves you with access to the native platform's facilities, which is a double-edged sword. The disadvantage is that many of those will not be available on all platforms, and code that uses them will therefore be non-portable. The advantage is that you can make your software do anything that would normally be expected of an application on the native platform. Software developed using this approach will thus tend to integrate better with the native platform, and feel less foreign to users.

Yeah. And all those are *extremely* slow interpreted scripting languages. While java on the server (its actual main base) is actually half as fast as C. Which is really nice for code that does all the type checking for you and is machine code independent.

The reason that Java WAS not on every platform is... well, have you seen the size of its standard libraries (J2SE, J2EE)?? All those language’s *built-in* languages are a joke to what Java offers out of the box.

Sorry, but for professional big projects, those languages can’t hold a candle to Java. The only one that can do that, might be.NET. But that one’s by definition not portable. (No, the Linux version of it doesn’t count, for it is way outdated.)

I doubt that. Many languages invented before Java have already been qualified to fulfill cross-platform requirement in almost all fields except GUI. And look Java did what to GUI? Almost nothing. Java's GUI sucks, and instead of providing cross-platform, it created a new platform (recommend the use of Metal Look-and-Feel?). If your whole solution to make people working on two platforms feel better is to create the third platform, what's your point? Does people who are willing to get unified user experience have to pay money to Microsoft and Sun and Apple, and then resort to Java to get the same Look-and-Feel?

More over, all users I encountered, except developers, using one single OSs dominantly. So if you want to offer your app on multiple platforms, good, but only make the functionality cross-platform, not the user experience at the GUI level. Your cross-platform app is meant to make the same functionality accessible from different OSs, not to enforce the users of an OS experience what they should feel in another, or worse, in another new.

I think some people eventually realize GUI is of so high level of complexity and all different GUIs of different OSs can not be abstracted with a unified model in such detailed level like Java Swing.

So write once, test everywhere, for non-GUI? OK, C and other language already do that.
For GUI? No improvement from Java.