Sunday, February 04, 2007

Java IS the IDE

I read a post about Java and what developers think about its possible future extensions: Why is everything a language extension? So why is everything an IDE?

IDE, IDE, IDE... why are you all Java programmers concentrated on the IDE power? I really can't accept this concept. What this means? This means that Java can be boring on many tasks... what about writing Java GUI and other things without an IDE? Yes, the first reason why i left Java programming is just this: you need an IDE that saves you from the code.

Why is it hard to understand that Java is the only language that needs so much IDE support instead of writing plain code? I'm a Smalltalker/Pythonian but take the closer language to Java: C++ doesn't need as any "magic" stuff as Java does trough IDEs.

Please, let Java become simpler since i have to study it by force against my will.

10 comments:

Anonymous said...

Not everything is an IDE. When I reference the IDE, what I really mean is:

Use a macro!

Which is exactly what I've done for years with emacs whether I'm writing in Ruby, Java or C++. Java doesn't need an IDE any more than C++ or Ruby.

In respect of coding effort, C++ is at least as heavyweight as Java, worse in fact once you get into debugging multiple threads etc. The difference is that C++ has encouraged development of a collection of good quality standalone tools for GUI production, debugging etc. Java, for some reason has encouraged putting all these standalone items into one integrated environment. The result of such integration is a reduction in quality/features of each integrated element.

I suspect the reason this has happened is that in the last decade or so, the quality of developer has reduced significantly such that mastery of a collection of discrete tools is beyond them and they focus on meaningless measures such as Kloc and how quickly they can produce that Kloc which means wizzy method-name completion etc is what gets them excited.

In summary, Java doesn't need more language extensions, it needs better craftsmen who understand and exploit a collection of separate, quality tools. I'm reminded of something DHH said in relation to RoR. Essentially he said:

"I'm not interested in making Rails easy to use for the masses. I'm building a power tool for smart people."

And the favourite editor of the early Ruby'ists? TextMate (emacs on the Mac). Note however that the masses are coming to Ruby and they want an IDE as demonstrated by the recent release of an Intellij beta plugin. The end is coming......

Dan Creswell
http://www.dancres.org/

Tom said...

I think you need to be more specific. I don't think Java has any more IDE requirements than many other languages.

The good Java IDEs (Intellij and Eclipse (maybe netbeans soon) support really safe and powerful refactoring, code navigation, exploration and analysis tools that just are not available to dynamic languages except Smalltalk (which gets the same effect through a totally different approach).

My favorite scripting language is Ruby but the lack of these tools (especially exploration and refactoring) really does hurt, and I do not see we you wouldn't need/want these in other languages.

Smalltalk cheats by being a highly extensible IDE as well as a language ;-)

Could you give some more specific examples?

Luca Bruno aka Lethalman said...

Indeed i'm not talking about refactoring, code browser, server administration and so on.
I think the IDE and other XML/blabla based tools affect too much the code itself.
Yes, C++/Qt for instance generate C++ code from designer and moc objects, but it's only the graphical side; in fact i won't critique how the Java GUI is developed trough IDEs like any other language.

I agree with increasing language flexibility (not extensibility).

In other words (sorry for my poor English), isn't there any other way to do things using the language itself instead of external tools?

Take for example Hibernate and Ant at http://www.hibernate.org/hib_docs/v3/reference/en/html/tutorial.html what the hell is that? Why you need external support to do things?

Anonymous said...

"In other words (sorry for my poor English), isn't there any other way to do things using the language itself instead of external tools?

Take for example Hibernate and Ant at http://www.hibernate.org/hib_docs/v3/reference/en/html/tutorial.html what the hell is that? Why you need external support to do things?"

Because doing it externally leads to tools which can cover all possible options via plugins or whatever whilst doing it in the language often leads to a convoluted mess which can't tackle all of the special cases and has undesirable side-effects.

In Java's case, generics remains a great example of undesirable side-effects - horrid syntax, messed-up reflection API's, a pile of compiler bugs and unexpected behaviours. A large part of the justification for generics was to avoid runtime ClassCastExceptions from collections. That could easily have been solved with a wrapper in the style of SynchronizedMap/List. A simple API.....

Dan.

murphee said...

@Luca:
So... I assume you don't use any of the IDE based Smalltalks, but instead write solely in GNU Smalltalk?

Luca Bruno aka Lethalman said...

@murphee Yes, because that's the language itself. And however, that's not a good comparison since Smalltalk is not statically typed

"Because doing it externally leads to tools which can cover all possible options via plugins or whatever whilst doing it in the language often leads to a convoluted mess which can't tackle all of the special cases and has undesirable side-effects"

Your statements translates to: creating a Java application means delegating part of the code to external tools because Java can't do it by itself. What's the power of the Java language itself then? Being translated from XML? Being multiplatform like Python is at all? Being usable for applets? Being Sun?

"In Java's case, generics remains a great example of undesirable side-effects - horrid syntax, messed-up reflection API's, a pile of compiler bugs and unexpected behaviours. A large part of the justification for generics was to avoid runtime ClassCastExceptions from collections. That could easily have been solved with a wrapper in the style of SynchronizedMap/List. A simple API....."

I'm thinking about a Java without any tools... nice not a language: a danger.

Anonymous said...

"Your statements translates to: creating a Java application means delegating part of the code to external tools because Java can't do it by itself. What's the power of the Java language itself then? Being translated from XML? Being multiplatform like Python is at all? Being usable for applets? Being Sun?"

Errr, no my statement doesn't translate to that. That would, for example mean that I couldn't use an editor of any type, not even emacs or vi.

The point of what I'm saying is that power should be put in the right place so that it can be exploited to the max. And some power is better exploited in tools and APIs than the language itself.

Dan.

murphee said...

@Luca
Don't get me wrong... I have no intention of defending Java. The only reason I can still program Java without having to tear out my hair every day is Eclipse ... not because of code generation, but because it allows structured editing and code browsing.


But I find ironic that you seem to dislike "Java IS the IDE", where most Smalltalks mention this as their most important advantage, ie. that Smalltalk == IDE/tools == program you're writing.
After all, Eclipse is heavily modelled after Smalltalk.

Luca Bruno aka Lethalman said...

"But I find ironic that you seem to dislike "Java IS the IDE", where most Smalltalks mention this as their most important advantage, ie. that Smalltalk == IDE/tools == program you're writing.
After all, Eclipse is heavily modelled after Smalltalk."

At all, Java wasn't crafted like Smalltalk was, don't you think so? It's _just a bit_ different. While you can create Smalltalk applications without the living environment, in Java you can't because the code would be too long to write and to mantain. The Smalltalk environment is _just an IDE_ not _a tool that writes for you_. Visual Works doesn't have anything out of refactoring, GUI designer, repository, class browser, finder, etc. Which are the same things other language IDEs have but under a different philosophy. It's like writing a program using block notes or an editor with syntax highlighting. It doesn't do things for you.

"Errr, no my statement doesn't translate to that. That would, for example mean that I couldn't use an editor of any type, not even emacs or vi"

Wow, this means that i can't use my favourite editor because _Java is Eclipse_ and that i need Eclipse to "create" (not exploit) the most relevant features.

"The point of what I'm saying is that power should be put in the right place so that it can be exploited to the max. And some power is better exploited in tools and APIs than the language itself"

Sorry, but tools are not the right place. You MUST have the same code using different editors. So, without using Eclipse and code generators, you lose the 80% of the Java power, just because coding Java application without tools is a pain.

Poker Software said...

It can be discussed infinitely