A surefire way to ignite a Web flame war is to say one programming language is better than another. James Gosling, known the "father of Java," understands that as well as anybody.
Scripting languages such as PHP and Python--also known as "dynamic" languages--are simpler to learn than Java and are a popular choice among developers, particularly for building Web pages. Many people, including former Java devotees, contend that the rising use of scripting languages and the so-called LAMP stack of open-source components comes at the expense of Java.
Although clearly biased toward Java, Gosling, now the chief technology officer at Sun's Developer Products Group, isn't losing sleep over the issue. "It feels like we're only a third of the way through exploiting into what we can really do with Java. There's a lot of play in this puppy yet."
Gosling spoke to CNET News.com about the never-ending debate over programming languages, the bright side of being flamed and the future direction of Java.
Q: There is this ongoing discussion about the merits of Java as a programming language. Many people say that scripting languages are replacing Java. So, is Java's use waning? Is it aging ungracefully? Is it getting old and crusty?
Gosling: Well, there's a part of me that actually wishes that was true--that would make my life a lot easier. But from everything I see, things like survey data from Evans Data, and just the enormous uptake we keep getting of Java and all the related technologies around it, there's no detectable slowdown.
I know there's a lot of people who wish there was a slowdown. For me the most exciting thing is the way that the excitement is sort of diversifying.
Why did you say you wish it would get old and crusty?
Gosling: Well, I've been doing this for a while, and there are times when I think, "You know, it would be nice to be able to take a vacation."
It's funny, looking at the blog replies (to his recent posting), I try really hard to steer away from even vaguely controversial topics. But because of who I am, it doesn't take very much before the blogosphere erupts in craziness.
AJAX is pretty cool, but it certainly has its problems.
At one level, I thought I was trying to be very laid back and innocuous, and people were inferring insults when there was none there. But the sort of flipside of that is that there's also a huge number of folks who came strongly to my defense. I thought that was quite heartwarming.
I think one of the best indicators for me these days (of Java's health) is these developer education programs we do around the world. They're just getting bigger, and more and more people are showing up--particularly in places like China and India and Brazil, they are mob scenes.
Let's talk about some of the points that have been brought up. Evans Data had a study showing that use of Java has been going down in North America for the past two-and-a-half years, although it's been going up in Asia. PHP and other scripting languages are getting more popular and robust. And if you look at Web 2.0 companies, it seems that lot of them are using AJAX, which involves scripting.
Gosling: Well, AJAX is just a style of using JavaScript to build advanced things. It's pretty cool, but it certainly has its problems.
Right. Then there are books like "Beyond Java," which says that Java is great for some things but for Web development, other development languages and frameworks are better. So, what's your reaction to that? Do you think that it's well-founded?
Gosling: Well, there's bits of both. When you take a look at something like PHP, which is totally focused on doing just Web development--if you're just generating a Web page, PHP is actually pretty good. It's almost a clone of JSP (Java Server Pages), pretty much is exactly a clone of JSP.
The place where I think it's getting messy is when you go beyond something that is purely Web page generation. As soon as you start doing much analysis or integration with other kinds of computation, it gets difficult because something like PHP is very focused on Web page generation.
His responses in this interview seem to really avoid confronting any one of the questions. Every time a REAL problem Java faces is mentioned, he says "Well that's actually a good thing". It' a bit too positive for my tastes. I think it's just a lot easier for him to say that than to say "We haven't really taken good care of Java."
I like Java as a language & platform. Not everyone is into it. You have to admit, it is nice to be able to use one language across a pile of different uses. It's stable, and platform independant. By platform independant, I don't mean .NET's blaitant lie. Java is available to run on a variety of operating systems and hardware.
PHP and Python really are great, but they are not going to supplant Java any time soon. Java is just too powerful and diverse, it can really do anything, although it is not best for everything.
I would really like it if they started to seriously go against C++ and C, It is such a cleaner, more straightforward language(especially compared to the mess that C++ has become) and does come with the hair-trigger shotgun that comes standard with C++, and too a lesser extent C. A solid native compilation, that performs well would go along way into digging into those two languages. Java is already pretty fast, I have seen it match well-written and well-compiled C++ code, so maintaining that speed and the cross-platform nature and being able to generate solid native code, would be a boon for Java. Of course, C and C++ are extremely good at being cross-platform(they just require multiple compilations, but sticking to standards and staying away from platform specific API's keeps your code easily crossplatform), of course C++ is lacking things like a standard networking and GUI library and it is in these places that Java can really compete on the desktop.
Java is getting better, however when will the powers to be at Java release a javaplugin for 64 bit systems? Currently those of use who use Linux64 are left out in the dark because if we use our 64 bit browsers we cannot use the Java plugin because it does not exist. when will Java(SUN) correct this misstep?
Read some of those "flames", and you have to wonder where 21 - 25 year old script jockeys get off criticising one of the best software architects around.
Believe what you will about java: It's still one of the most stable architectures around, very robust, completely extendable. Complex? Maybe to a script jockey or a .Net "programmer"...
It's unfortunate that Java's designers have never really addressed some of its fundamental shortcomings. Some examples: Java's combination of a funky type system and method overloading makes reflection unnecessarily complicated, which in turn makes dynamic functionality hard to implement. The lack of language support for inheritance of class methods and constructors makes it extraordinarily difficult to design extensible classes; the resulting rigidity causes needless difficulties in reusing components and frameworks.
Sadly, it seems that Java's designers have chosen to focus on adding syntactic sugar in Java 1.5 (excuse me, 5.0), rather than fixing things that are truly broken.
What exactly do you mean when you say: "The lack of language support for inheritance of class methods and constructors makes it extraordinarily difficult to design extensible classes"? Are you referring to polymorphic behavior being the default mode, unlike C++?
It is fairly simple to write, reusable and extensible components in Java, you just need to understand more then the basics of inheritance.
"Java on Desktop is Dead" (c) Linus Torwalds said Long time ago. I didn't believed back then. Now it is fact.
When I see people struggling with Java on servers, I really feel sad for them. People use expensive servers to do operations I used to do on embedded $250 system. What'a joke.
This is 100% stupid idea: isolate people from platform.
Applications are not portable not because platforms are "incompatible", but because they are "different". Users choose platform by value it gives them. What sense it make to lock out all advantages of platform by using Java? Java is not giving people choice - but rather removes it from them.
But, it beats me, I guess word "choice" doesn't ring any bell in Gosling's head...
Scripting languages giving you a greater choice. Most have very liberal licenses - allowing you tune them for your particular application. Java is [CENSORED] generic and abstract optimized for everything in general and nothing in particular. And controlled by Sun. Most of people caught in Java are people who have bought Sun's promises for platform independence. But of course Sun has lied: Java application are dependent - guessed that? - on Java platform. (Try to port from Java 1.0 - 1.2 - 1.3 - 1.4 - 1.5, and add that 1.5 has different byte-code format. What'a [CENSORED] [CENSORED] [CENSORED] m*rons Sun with Gosling are.)
Would you like to declare Java the Antichrist right away or should we wait a day or two?
Java fulfilled a very real and very serious problem for a very long time. In fact, it still could be an absolutely wonderful tool to bridge Linux distributions.
That being said... Please, tell us how you "really feel" about Java.
Java is backwards compatible, with 1.5 older code will likely cause more warnings, mostly things related to generics, but it compiles and runs fine. The JVM doesn't even care what version of Java you are using, or if you even use Java, it has not a clue about the language and the API.
You do realize that you can hook into the underlying OS in Java don't you? You can use KDE libraries, windows libraries, whatever you want, even DirectX if you really wanted to. Of course you do, you aren't an ignorant ranter.
PHP is not nearly as scalable, stable and consistant on the server-side. It is a great language but there is a reason it is the choice for non-programmers.
RealBasic? PUH-PLEAAAASE It is a toy.
Perl is hideous and slow, but fantastic for data manipulation or gluing 2 real languages together. As for its flexibility, not even close to java. Perl's limits come much, much sooner then Java's.
Java is not the end-all be-all of languages, no language is, but it is extremely powerful and extensible.While it is not the best choice for everything, there really is nothing you can not do with it.
Programming is very complicated task and if someone has BA in software development it does not mean that they can be good programmers. So if you do not understand OO, then at least admit it and do not try to take your frustration on Java :)
Take a look at BeanShell ( <a class="jive-link-external" href="http://www.beanshell.org/" target="_newWindow">http://www.beanshell.org/</a> ).
And, ZK is an example using Java in the markup language ( <a class="jive-link-external" href="http://zk1.sourceforge.net" target="_newWindow">http://zk1.sourceforge.net</a> )
My thinking is with all these languages and all this knowledge why can't we create a singular language that could be grown out of all the knowledge of other languages and systems? Oh, yeah. We don't live anywhere near perfect. My bad, I forgot.
Personally, I like Java. I don't care much for C++ or Perl. I have been learning PHP, Python, and Javascript. I think RealBasic is a fine language. I also have been trying to learn Assembly (why not). I also like Pascal. I don't really find anything wrong with any of those languages. Each has a strength and weakness. Each has a loyal group of followers. And each was created to fill a need and has, in one way or another, grown from there. Life is grand.
I think it's time we create a few more languages, only this time we try to make them do everything. They need to be fast, portable, scaleable, easy to learn, and they must work seamlessly on the web and desktop. Perfect. :)
It seems .NET is very similar to Java in regards to a garbage collector and both being closedsource in that area. Not sure yet how one could trunp the other other then a codeing preference.
Sorry, biased view... .NET certainly has a place in today's world of Enterprise Architecture, even if it isn't my preference. Realistically, Sun and Microsoft have enough clout (and cash) to keep their development environments running.
On the more technical side, I like the OO implementation in Java more, and the options it gives me on the hardware and O/S side. There are enough open source engines (think JBOSS, Tomcat, and more) to choose from, loads of tools, support from the big players, such as Oracle, IBM, Sybase and the rest. You've even got Open Sourced Architectures Patterns, such as Struts and Tapestry.
.NET = Microsoft. Mono is an option, but until .Net is published as an open standard, Microsoft will pull all the strings here, and I have a problem with that.
As for complexity - Applications (and especially enterprise applications) are complex, often integrating with other applications (JMS, Integration Brokers), multiple databases on various platforms, etc etc. J2EE/Java caters for all of the complex tasks that you can think of.
Let me also say that I'm not saying Java should be the be all and end all of all applications. I like PHP, Perl, and I started as a C programmer, ventured into Delphi and Powerbuilder. Thinking back, Java seems to have been around for most of that time. Should tell us something?
.net is the third( or is it the 4th) attempt by MS to copy Java.
.net is platform dependant, momo does not count since it is not officially part of .net. MS doesn't have the guts to make it truly platform independant.
Why use a poorly implemented copy, that ties you very close to a single architecture, and puts you at the mercy of a company that can and will make changes to boost profits, not for technical reasons?
I think Java is the best thing yet to happen to graphic interface development. The development of the language, swing library, garbage collection, profiling utilities, etc. are really just coming of age now.
Java is now a wonderful way to write a large graphical application that is expected to have a 10-20 year product life. No experienced programmer would take on a project like that using a scripting language, so the whole comparison of Java to scripting languages is rather silly in my opinion.
Java meets all of the criteria for a major language to have a significant impact on the industry for decades to come. Specifically. 1) It fills a need - platform independent GUI development. 2) It is well rounded, meaning that there are many available books, libraries, programming utilities, etc. 3) It is available for all major platforms. 4) Java is being used by a large percentage of the industry right now. Since many major codes end up having a 20 year product life, all of these projects will keep Java going for decades to come.
Look at how long Fortran has stayed around. It's now a pretty small percentage of the market, but there are still companies that are completely focused on Fortran and even starting new projects from scratch and choosing Fortran from square one. It's not my favorite language, but it just goes to show how long a language will stay around once it has acheived a major share of the market. Java's market share right now, is probably about like Fortrans market share in the late 1950s. (That's my guess. Does anyone have statistics to back it up?)
As such, Java can't die out for decades to come. The only question left is whether the current level of Java's acceptance is it's plateau or if it's golden age is yet to come.
In my experience, unless you've made some really inappropriate choice of language and/or framework to develop in, the language is never the barrier to productivity. If you know the language well, you can be productive in it. What really sucks time on projects is all the non-programming stuff -- gathering the requirements, expressing the requirements in design, shifting requirements, etc.
Java and .Net are maturing in the same direction although not necessarily at the same pace.
Java and .Net IDEs are available to maximize productivity.
Web development with Java/JSP and ASP.Net are more or less similar already since the release of Java 5 and JSF.
Java applications with GUI are known to be slow in Windows for some reason so it is best to develop GUI applications in .Net when working with Windows. For the other platforms, Java, of course, performs well.
Background processes and services with Java and .Net are on equal stand except that Java can be cross-platform and .Net is specific to Windows. Although, as mentioned in the article, more and more Java-based products are actually developed to target a specific platform and device.
In a way, because .Net targets the Windows platform, .Net can grow with Windows. Microsoft is already actively integrating .Net in most, if not all, of their products. Simply put, as Windows grows, you can be sure .Net grows.
On the other hand, Java grows on its own as a language because its growth depends on the implementations of the many third-party innovators using Java. This is actually an advantage because Java can grow in more ways than one.
Side note: For the C++ fans, keep it cool... you're always good anywhere... ;)
Web giant is spending $120 million to beef up its Mountain View, Calif., headquarters, according to filings with the city reviewed by the San Jose Mercury News.
The Samsung Galaxy Mini 2 S6500 could make its debut at the Mobile World Congress in Barcelona later this month, according to a leaked promotional image.
MIT creates a simulation to celebrate the 50th anniversary of Spacewar. A relic of the early days of minicomputers, it was one of the first computer video games and set the stage for many others, including Asteroids.
It' a bit too positive for my tastes. I think it's just a lot easier for him to say that than to say "We haven't really taken good care of Java."
I like Java as a language & platform. Not everyone is into it. You have to admit, it is nice to be able to use one language across a pile of different uses. It's stable, and platform independant.
By platform independant, I don't mean .NET's blaitant lie. Java is available to run on a variety of operating systems and hardware.
I would really like it if they started to seriously go against C++ and C, It is such a cleaner, more straightforward language(especially compared to the mess that C++ has become) and does come with the hair-trigger shotgun that comes standard with C++, and too a lesser extent C. A solid native compilation, that performs well would go along way into digging into those two languages. Java is already pretty fast, I have seen it match well-written and well-compiled C++ code, so maintaining that speed and the cross-platform nature and being able to generate solid native code, would be a boon for Java. Of course, C and C++ are extremely good at being cross-platform(they just require multiple compilations, but sticking to standards and staying away from platform specific API's keeps your code easily crossplatform), of course C++ is lacking things like a standard networking and GUI library and it is in these places that Java can really compete on the desktop.
Believe what you will about java: It's still one of the most stable architectures around, very robust, completely extendable. Complex? Maybe to a script jockey or a .Net "programmer"...
some of its fundamental shortcomings. Some examples: Java's
combination of a funky type system and method overloading
makes reflection unnecessarily complicated, which in turn makes
dynamic functionality hard to implement. The lack of language
support for inheritance of class methods and constructors
makes it extraordinarily difficult to design extensible classes;
the resulting rigidity causes needless difficulties in reusing
components and frameworks.
Sadly, it seems that Java's designers have chosen to focus on
adding syntactic sugar in Java 1.5 (excuse me, 5.0), rather than
fixing things that are truly broken.
It is fairly simple to write, reusable and extensible components in Java, you just need to understand more then the basics of inheritance.
I didn't believed back then. Now it is fact.
When I see people struggling with Java on servers, I really feel
sad for them. People use expensive servers to do operations I
used to do on embedded $250 system. What'a joke.
This is 100% stupid idea: isolate people from platform.
Applications are not portable not because platforms are
"incompatible", but because they are "different". Users choose
platform by value it gives them. What sense it make to lock out
all advantages of platform by using Java? Java is not giving
people choice - but rather removes it from them.
But, it beats me, I guess word "choice" doesn't ring any bell in
Gosling's head...
Scripting languages giving you a greater choice. Most have very
liberal licenses - allowing you tune them for your particular
application. Java is [CENSORED] generic and abstract optimized
for everything in general and nothing in particular. And
controlled by Sun. Most of people caught in Java are people who
have bought Sun's promises for platform independence. But of
course Sun has lied: Java application are dependent - guessed
that? - on Java platform. (Try to port from Java 1.0 - 1.2 - 1.3 -
1.4 - 1.5, and add that 1.5 has different byte-code format.
What'a [CENSORED] [CENSORED] [CENSORED] m*rons Sun with
Gosling are.)
another platform - you have to have blessing of Sun.
Recall how this /geniuses/ simply revoked OpenBSD license.
(Jealous because OpenBSD runs better than Slowaris^WSolaris on
Sun's own hardware!?)
And Sun still gave no license for porting Java to 64bit Linux. And
Java is also unavalable on Linux/PPC{32,64}.
Thanks God Sun have no relation to Perl - it simply compiles and
runs on any hig-end/low-end/embedded-crap I'm throwing it
into.
Would you like to declare Java the Antichrist right away or should we wait a day or two?
Java fulfilled a very real and very serious problem for a very long time. In fact, it still could be an absolutely wonderful tool to bridge Linux distributions.
That being said... Please, tell us how you "really feel" about Java.
You do realize that you can hook into the underlying OS in Java don't you? You can use KDE libraries, windows libraries, whatever you want, even DirectX if you really wanted to. Of course you do, you aren't an ignorant ranter.
PHP is a faster/easier tool for most web (server side) development.
RealBASIC is a simpler/faster (client side) tool for cross platform Linux/Win/OSX GUI app development.
Perl is a more flexible general purpose and data manipulation tool.
RealBasic? PUH-PLEAAAASE It is a toy.
Perl is hideous and slow, but fantastic for data manipulation or gluing 2 real languages together. As for its flexibility, not even close to java. Perl's limits come much, much sooner then Java's.
Java is not the end-all be-all of languages, no language is, but it is extremely powerful and extensible.While it is not the best choice for everything, there really is nothing you can not do with it.
So if you do not understand OO, then at least admit it and do not try to take your frustration on Java :)
And, ZK is an example using Java in the markup language ( <a class="jive-link-external" href="http://zk1.sourceforge.net" target="_newWindow">http://zk1.sourceforge.net</a> )
My thinking is with all these languages and all this knowledge why can't we create a singular language that could be grown out of all the knowledge of other languages and systems? Oh, yeah. We don't live anywhere near perfect. My bad, I forgot.
Personally, I like Java. I don't care much for C++ or Perl. I have been learning PHP, Python, and Javascript. I think RealBasic is a fine language. I also have been trying to learn Assembly (why not). I also like Pascal. I don't really find anything wrong with any of those languages. Each has a strength and weakness. Each has a loyal group of followers. And each was created to fill a need and has, in one way or another, grown from there. Life is grand.
I think it's time we create a few more languages, only this time we try to make them do everything. They need to be fast, portable, scaleable, easy to learn, and they must work seamlessly on the web and desktop. Perfect. :)
How about the place of .net?
Not sure yet how one could trunp the other other then a codeing preference.
Sorry, biased view... .NET certainly has a place in today's world of Enterprise Architecture, even if it isn't my preference. Realistically, Sun and Microsoft have enough clout (and cash) to keep their development environments running.
On the more technical side, I like the OO implementation in Java more, and the options it gives me on the hardware and O/S side. There are enough open source engines (think JBOSS, Tomcat, and more) to choose from, loads of tools, support from the big players, such as Oracle, IBM, Sybase and the rest. You've even got Open Sourced Architectures Patterns, such as Struts and Tapestry.
.NET = Microsoft. Mono is an option, but until .Net is published as an open standard, Microsoft will pull all the strings here, and I have a problem with that.
As for complexity - Applications (and especially enterprise applications) are complex, often integrating with other applications (JMS, Integration Brokers), multiple databases on various platforms, etc etc. J2EE/Java caters for all of the complex tasks that you can think of.
Let me also say that I'm not saying Java should be the be all and end all of all applications. I like PHP, Perl, and I started as a C programmer, ventured into Delphi and Powerbuilder. Thinking back, Java seems to have been around for most of that time. Should tell us something?
.NET - not for me thanks.
.net is platform dependant, momo does not count since it is not officially part of .net. MS doesn't have the guts to make it truly platform independant.
Why use a poorly implemented copy, that ties you very close to a single architecture, and puts you at the mercy of a company that can and will make changes to boost profits, not for technical reasons?
Java is now a wonderful way to write a large graphical application that is expected to have a 10-20 year product life. No experienced programmer would take on a project like that using a scripting language, so the whole comparison of Java to scripting languages is rather silly in my opinion.
Java meets all of the criteria for a major language to have a significant impact on the industry for decades to come. Specifically.
1) It fills a need - platform independent GUI development.
2) It is well rounded, meaning that there are many available books, libraries, programming utilities, etc.
3) It is available for all major platforms.
4) Java is being used by a large percentage of the industry right now. Since many major codes end up having a 20 year product life, all of these projects will keep Java going for decades to come.
Look at how long Fortran has stayed around. It's now a pretty small percentage of the market, but there are still companies that are completely focused on Fortran and even starting new projects from scratch and choosing Fortran from square one. It's not my favorite language, but it just goes to show how long a language will stay around once it has acheived a major share of the market. Java's market share right now, is probably about like Fortrans market share in the late 1950s. (That's my guess. Does anyone have statistics to back it up?)
As such, Java can't die out for decades to come. The only question left is whether the current level of Java's acceptance is it's plateau or if it's golden age is yet to come.
Java and .Net IDEs are available to maximize productivity.
Web development with Java/JSP and ASP.Net are more or less similar already since the release of Java 5 and JSF.
Java applications with GUI are known to be slow in Windows for some reason so it is best to develop GUI applications in .Net when working with Windows. For the other platforms, Java, of course, performs well.
Background processes and services with Java and .Net are on equal stand except that Java can be cross-platform and .Net is specific to Windows. Although, as mentioned in the article, more and more Java-based products are actually developed to target a specific platform and device.
In a way, because .Net targets the Windows platform, .Net can grow with Windows. Microsoft is already actively integrating .Net in most, if not all, of their products. Simply put, as Windows grows, you can be sure .Net grows.
On the other hand, Java grows on its own as a language because its growth depends on the implementations of the many third-party innovators using Java. This is actually an advantage because Java can grow in more ways than one.
Side note: For the C++ fans, keep it cool... you're always good anywhere... ;)