The Joel on Software Discussion Group (CLOSED)

A place to discuss Joel on Software. Now closed.

This community works best when people use their real names. Please register for a free account.

Other Groups:
Joel on Software
Business of Software
Design of Software (CLOSED)
.NET Questions (CLOSED)
TechInterview.org
CityDesk
FogBugz
Fog Creek Copilot


The Old Forum


Your hosts:
Albert D. Kallal
Li-Fan Chen
Stephen Jones

Response to why 'reddit' users (alpha hackers) hate java (and m

I posted a question on reddit on why they hate java so much (and possibly .net) but love haskell/python/lisp/erlang/ruby/ and other functional languages.

http://programming.reddit.com/info/utqb/comments

It basically summed up to (outside of the normal technical issues with .NET/JAVA) that java and .net are status

Here are 'facts'; if you go into a bookstore, you can't find a modern books on the subjects (for example on haskell, I think one is being published soon and that is about it), most of the software written in the languages above haven't reached a version 1.0 or is stable, few web-application tools or frameworks, very few or no jobs (haskell?  lisp?). Personally, I just dont see java as being the next COBOL and I work with mainframe COBOL developers, it is much more pervasive.  Can you develop with COBOL on a PC without a mainframe?  So I think there is a lot of misinformation out there.

I like the open languages I mentioned above and some that aren't mentioned, they are great to learn from and could be the next thing we will all start using but I think the FUD associated with java/.net is wrong.  Maybe it is because I was born before 1980?  shrug?
Bot Berlin
Friday, January 05, 2007
 
 
"It basically summed up to (outside of the normal technical issues with .NET/JAVA) that java and .net are status quo"
Bot Berlin
Friday, January 05, 2007
 
 
Fashion, it's not just what's on your back . . .

Friday, January 05, 2007
 
 
Is it weird that I dislike Java but I like .NET?

(I don't code in either regularily but I have no interest in doing anything in Java but I've played around quite a bit in .NET).
Almost H. Anonymous Send private email
Friday, January 05, 2007
 
 
"Is it weird that I dislike Java but I like .NET?"

Not entirely. Although .NET borrowed a lot of Java's flaws (rampant use of OO constructs in non-OO designs, misuse of inheritance within the framework, verbosity, etc.) it did away with or at least did a decent job of hiding others, such as the object/primitive divide.
clcr
Friday, January 05, 2007
 
 
"Is it weird that I dislike Java but I like .NET?"


What about the libraries...man?
Bot Berlin
Friday, January 05, 2007
 
 
Were you wondering if people there liked Java as programming language or from a user perspective?
Ben Mc Send private email
Friday, January 05, 2007
 
 
Prefer the .NET framework over the Java mess-o-libraries.
Almost H. Anonymous Send private email
Friday, January 05, 2007
 
 
Uhm, user being - user of the software created with Java
Ben Mc Send private email
Friday, January 05, 2007
 
 
"Is it weird that I dislike Java but I like .NET?"

If so, I guess I'm weird, too. Java just rubs me the wrong way for various reasons, and I find C#/.NET to be more enjoyable to work in.
sloop
Friday, January 05, 2007
 
 
http://www.amazon.com/Engineer-Human-Failure-Successful-Design/dp/0679734163/sr=8-3/qid=1168036709/ref=sr_1_3/103-3520470-2380621?ie=UTF8&s=books

One lesson in Petroski's book is that failure often occurs after a tech refresh because the old lessons, which became second nature in the old technology, are forgotten.

Software in particularly suffers from wholesale reinvention on each technical cycle.  It seems necessary to completely divorce new technology from old, because one way of selling new technology is to frame the old technology as broken and problematic, and the new technology as the solution.  Demonizing the previous generation of technology is de rigueur.  It's also common to finger point at failed projects and blame the failure on technology or methodology.  Glass & Cockburn show the opposite is true, and retroactive blame is just being used to situate sales of the new stuff.

It's a good sales technique.  People are never going to buy new stuff if they are happy with what they have.

Man, they'll even have success stories.  Toy shill projects that were wildly successful.  Done in one tenth the time with half the manpower and no bugs.  Then they hit the scaling wall like every generation of technology before them.  Always ask about scaling, and if the answer is handwaving instead of hard numbers, the discussion is about marketing, not engineering.

Almost all technical refreshes contain nothing of practical consequence, but do support the sale of new books, courses, consulting, tools, supporting software and conferences.  Old wine into new bottles, or meet the new boss, same as the old boss.  Those with little investment in the previous generation of technology are most easily impressed and recruited.  Those who object are blub programmers, old timers who can't adapt, or the same pejoratives that are trotted out for each tech refresh.  This ain't your father's Oldsmobile.

Of course, Java followed the same playbook during its introduction.  A technology either fades into obscurity, or becomes the new old generation.  The arguments are even the same in each tech refresh, modulo terminology.

Fundamental improvements build on the previous generation of technology and are incremental, not revolutionary.  Anything of real value I'd expect to eventually get rolled back any languages in current use -- notice how many languages got object oriented extensions (Perl, TCL, C, Lisp, etc.) and exception handling.  Hacky retrofits, to be sure.  But OO finally allowed us to do structured programming (and one day we'll discover something that finally allows us to do object oriented programming).  There was something there worth pushing into existing language designs, even if the language creaked and groaned under the new weight.

I find it hard to get excited about new languages -- not because I'm a blub programmer, but novelty for its own sake is worthless in engineering, as is simply trading one set of idioms for another.  I understand the larger context or ecosystem in which a language functions, so unless I'm offered a fundamental improvement, a sea change in technology is a major disruption offering no net improvement at the end of long effort.  And per Petroski, many lessons encoded in the existing technology get lost and must be relearned the hard way.

The most successful tech refresh I've participated in first spent some time reverse engineering a technically neutral model of the system, generating bespoke patterns from the current implementation.  Code generation was also key, because once reduced to patterns, there was a mechanical translations between the old technology and the new.  The reason for the tech refresh also wasn't fashion, but because vendors were starting to squeeze too hard, and so the tech refresh was cost effective.

New language idioms are not a big engineering win, not compared to a language with an existing healthy ecosystem.  Most languages remain marginal until they have support from a major player.  About the only language that stands out is C/C++, because it is the implementation language for key components in many modern software architectures (the OS, the DB, the scripting interpreter, libs, web server, browser, etc.).  That is, C/C++ is doing the heavy lifting.

But the current crop of languages is targetting the middle tier and page generation, and so Java/.Net are the 'enemy'.  Hating Java/.Net is part of the playbook that most of them don't even realize they are following, and by the time they do they'll be another neophyte generation ready to assume the evangelist role.
Borealis
Friday, January 05, 2007
 
 
"New language idioms are not a big engineering win, not compared to a language with an existing healthy ecosystem."

Well said, Borealis; what new languages have you worked with or are you talking about in general.  I like your statement.
Bot Berlin Send private email
Friday, January 05, 2007
 
 
"The most successful tech refresh I've participated in first spent some time reverse engineering a technically neutral model of the system..."

While I liked most of Borealis' points, I don't understand anything he said in this paragraph. Is he really saying that the most effective new language he learned was one that basically took his stuff and rewrote it in the old language?
TheDavid
Friday, January 05, 2007
 
 
>Is it weird that I dislike Java but I like .NET?

No, and I spend most of time in Java and I like it.  I don't dislike .NET, I just prefer Java and the UNIX world over the Microsoft on.

I think it is quite natural to have a languages/environments that we like.  The only problem comes in when you place your emotion preferences over rational thoughts.
Bill Rushmore Send private email
Friday, January 05, 2007
 
 
I think that the problem is more fundamental.  I think it is that we are lazy.  So lazy, in fact, that we are willing to create indefinite churn in our technologies in the hope of having to do less, or at least getting more done with the same effort. 

Java was once easier** than C/C++ (particularly in memory management).  Now Python/Ruby/Perl are easier than Java.  C# is easier than Java for Windows programming, mostly because of Microsoft's support and the existence of Visual Studio.  You'll notice that these easier languages are rapidly being ported to the platforms that are already established; JRuby, Jython to the JVM and IronPython, RubyCLR to the .NET framework. 

On some level, also, this churn actually works.  Can you imagine trying to write Ruby on Rails (or equivalent) in C?  Effectively, you have to implement half of Ruby in C ... isn't that what the Lisp people have been saying about C/C++ for decades?  Makes you wonder where this churn is actually taking us to.

** I am defining easier as less characters per completed task, or roughly, the expressive power of the language
Joshua Volz Send private email
Friday, January 05, 2007
 
 
I agree with you Josh.

But what about practical, applications that have to be written today?  Today = next 1,2 - 5 years.

And lets use the hypothetical, you are tasked with writing an (web) application that could span dozens to hundreds of tables and must support hundreds of thousands of users.  Your contract says you have to support Oracle?

Do you use lisp?  Python?  or .NET/J2EE.

If I was faced with the decision and somebody was going to give me millions of dollars to support this project, I would go with J2EE in a heartbeat.
Bot Berlin Send private email
Friday, January 05, 2007
 
 
Joshua inavertly brought up a good point. He says Java, Ruby, Python, et al are easier because they require less typing (or expression) to accomplish a task.

The other camp likes Haskell, Erlang, Scheme, et al because they allow you to think unconventionally and more appropriately to the task at hand.

Remember Logo? You definitely didn't have to worry about pointers, memory management, sorting algorithms, strong typing verses weak typing or any of that stuff. You just thought about distance and direction so you could tell the turtle where to go.

I wonder if one reason people are pushing back against Java is because Sun Microsystems initially promised it as the Holy Grail of computer languages; remember "Write Once, Run Anywhere?"  And unfortunately, we're finding out today that Java is arguably no easier or harder than any other language.

It's definitely not one of the famous Magic Bullets we've been promised.
TheDavid
Friday, January 05, 2007
 
 
"I wonder if one reason people are pushing back against Java is because Sun Microsystems initially promised it as the Holy Grail of computer languages; remember "Write Once, Run Anywhere?"  And unfortunately, we're finding out today that Java is arguably no easier or harder than any other language."

I think java is taken out of context.  People will take code to write a file or read a file and say that it takes more code in java (see the link above) than it does in python or ruby.

I say, people aren't looking at the larger picture, not looking at enterprise development.

Look at reddit, they went from lisp to python.  I know they probably wont go to java, but if their business was expanded, I bet they would think about.  Also, ebay/walmart same thing.  Ebay started out with C++ libraries and then went to java in 2001(or 99?).
Bot Berlin Send private email
Friday, January 05, 2007
 
 
"I say, people aren't looking at the larger picture, not looking at enterprise development."

That's true, but then most people don't want to do enterprise development.
Almost H. Anonymous Send private email
Friday, January 05, 2007
 
 
"[W]hat new languages have you worked with or are you talking about in general."

Languages that I've developed code for include Lisp, Smalltalk, Forth, Pascal, Fortran, Perl, TCL, PHP, Java, C, C++, X86/6502/68000 assembly, sh, awk, Lua, Python, PL/SQL, Javascript, Prolog, BASIC, Ada, XSLT, PL1, Visual Basic.  Toss in a few weird in-house scripting languages (e.g. Maxscript, Torquescript).  This is what I get from having a varied career, and spending a lot of it in enterprise integration (every new technology was just another one to pile on the heap, including integration technologies, which needed to be integrated with all the other integration technologies :-( ).

The only ones overlapping the OPs list are Python and Lisp.  I'm pretty much without language bias, except for considering C/C++ fundamental (for the reasons stated in my previous post, plus I insist that one cannot bash C/C++ if the other language's interpreter is written in C/C++, and especially if most of its libraries are just wrappers around C/C++ libraries, and the language relies on major compoents implemented in C/C++ -- otherwise, as the old joke goes, go get your own dirt).  Most commonly these days I oscillate between C++ and Java (languages with very extensive ecosystems) combined with Perl, PHP, Lua, XSLT and/or Javascript.  Lua has a pretty thin ecosystem, but is a great lightweight scripting language.

"[B]asically took his stuff and rewrote it in the old language?"

Think more OMG Model Driven Architecture, although MDA didn't exist at the time, and I don't know if it would have been practical if it did.  Same concept though.

The point however was that software source functions as both instructions to the machine, and encodes essential knowledge about the system and domain.  Improvements in the former do not justify losing investments in the latter, let alone simple changes of idioms.  Even coding new software in a new language (in which case prior investments in essential knowledge do not exist) forces an organization to support parallel language ecosystems, creating many duplicate expenses (tools, training, staff, etc.).

"[...] the expressive power of the language [...]"

Expressive power is also a tricky beast, since an example can always be cooked to favour one language over another.  What language twaddles bits better than C?

The quality of engineering is more important than the language of implementation, especially at scale.  Which means that debates about language miss the point, at least without specific context.

"If I was faced with the decision and somebody was going to give me millions of dollars to support this project, I would go with J2EE in a heartbeat."

Part of the Java ecosystem includes being able to hire experienced practioners.  I'm told by recruiters it is getting increasingly difficult to find C++ people.  Adopting a marginal language with a weaker technology ecosystem introduces a major risk, so there better be a big upside (Paul Graham has argued exactly that for his use of Lisp, the big upside being feature velocity, although Yahoo's rewrite in C++ (?) probably goes exactly to risk management -- but I'm speculating.)

For toy Web 2.0 sites, feature velocity is critical, because it's no use perfecting the engineering if the company is always late to market and doesn't survive; and there is no existing investment in essential knowledge that needs to be preserved.  However, successful startups are typically plagued by all the (necessary) shortcuts and need to at least consider a tech refresh as risks change.  So it's easy to inject young languages with immature technology ecosystems into such projects, and interpreted languages with short implementation cycles best support feature velocity (compile, link, package and deploy is such a drag).

I also don't see any language in the OPs list hitting the tipping point without support from a major player in the industry.  This gives organizations the confidence that they aren't investing in a future also-ran.  Advocates think that Java/.Net are preventing adoption of their pet language, when really it's this lack of support.  Every language needs a major player to bootstrap its adoption.
Borealis
Friday, January 05, 2007
 
 
Microsoft is probably scoring big points;

They have F# and their adoption of IronPython.

Sun seemed to make a kind of 'lets latch on to any project we can find' move by snagging the jruby developers and is Rhino part of the new JDK?

Lisp seems to be the girl that will never get a date to the prom.  It has gotten a lot of press and hackers love it, but has it gotten a nod in industry?  Franz?
Bot Berlin Send private email
Friday, January 05, 2007
 
 
On lisp, recently I mean.
Bot Berlin Send private email
Friday, January 05, 2007
 
 
"Can you develop with COBOL on a PC without a mainframe?"

Absolutely.

http://www.microfocus.com/products/NetExpress/
Bluebeard
Friday, January 05, 2007
 
 
Tons of Cobol for PC implementations out there.

And yes, Java is the Cobol of the 21st Century.

C# is just Anders' personal version of Java, since they got sued over J++.
Codger
Saturday, January 06, 2007
 
 
J++

I never did figure out what was going on there.  I had a j++ cd for a while and lost it.
Bot Berlin Send private email
Saturday, January 06, 2007
 
 
"you can't find a modern books on the subjects (for example on haskell, I think one is being published soon and that is about it)"

At my Borders they keep 3 different Lisp books in stock and also a Haskell book. They also have about a dozen Ruby/Rails titles.

Don't talk bullshit about shit you don't know about, you Engrish-speaking retard.
blah Send private email
Saturday, January 06, 2007
 
 
Java is the new COBOL -- there is no question about it. To me, all that means is Java will be around for decades to come, so there will always be Java work. Once it was adopted by the corporate world, that sealed its fate.
MBJ Send private email
Saturday, January 06, 2007
 
 
"At my Borders they keep 3 different Lisp books in stock and also a Haskell book. They also have about a dozen Ruby/Rails titles.

Don't talk bullshit about shit you don't know about, you Engrish-speaking retard."

Can you please tell me which haskell book that is and isbn numbers.  I really want to know.

There may be a lot of ruby books, but a dozen rails titles?  Come on.

These are the ones at my borders:
"Programming Ruby: The Pragmatic Programmers' Guide, Second Edition" - 0974514055
"Agile Web Development with Rails" - 0977616630
"Rails Recipes (Pragmatic Programmers)" - 0977616606
"Ruby In A Nutshell" - 0596002149

Not even close to the 12 you mentioned.
Bot Berlin Send private email
Saturday, January 06, 2007
 
 
Here are some haskell books, though they vary in terms of modernity:

http://www.haskell.org/haskellwiki/Books

You raise an interesting point in your post and I'm not sure how to reply to it -- my feeling is that for all the hype neither Java nor C# give you much help in terms of actually turning ideas into computer programs. Lots of typing, lots of boilerplate due to lack of syntactic abstraction (just IDEs that provide ever-more sophisticated ways of rearranging the program text). Even if you use an IDE to automate that stuff, you still have to READ it.

If your program is the sort of thing that makes lots of use of external libraries you will probably find it less onerous, but those names still have to be typed out then read in, and you still have the boilerplate problem.

Writing Java puts me in mind of using an assembler without a macro facility. The gulf between what's in your mind and what you have to type in is similarly vast.

I've not used C# as much, but my favourite test program (a simple compiler) turned out to be only marginally less hassle in C# than the same in C++ (!), so I took the liberty of letting myself feel the same way about C# too. "Higher-level" languages are supposed to be much easier and much quicker to code in than their lower-level counterparts, but it never feels like C# and Java wholly fulfil this promise. I get the impression I'm not alone in this sensation (but I had to learn Python to really appreciate it).

This and this alone says little about the suitability of Java/C# for large-scale "enterprise development" compared to the other posited languages, but that is of course a very different question from why it is that people might not like them. (Borealis's response rather assumes that the two are related -- for my part, I think not -- but I do agree with his point that a rich ecosystem trumps all but the most egregious of technical flaws when it comes to settling on a technology for a large-scale long-lived project.)
Tom_
Sunday, January 07, 2007
 
 
Tom_

Yes, learn Python.  TO test it, I've developped a small 'im-memory' database.

500 lines of clean and readable code (including comments AND full test coverage).

Basicaly, it les's you create/drop table, create/drop fields, add/del/update rows.

Try to do that in c/c++... (And I'm a C/C++ dev since 15+)
anon until my uISV will be ready Send private email
Sunday, January 07, 2007
 
 
"Look at reddit, they went from lisp to python.  I know they probably wont go to java, but if their business was expanded, I bet they would think about.  Also, ebay/walmart same thing.  Ebay started out with C++ libraries and then went to java in 2001(or 99?)."

I have talked with a dot-com that is gradually moving from Perl to J2EE.  They're actually planning on rewriting a working system in Java.  Why?  The answer I got was scalability, as their site handles millions of $ of transactions daily.  Also, as they are actively staffing up, I'm guessing it's hard to find qualified Perl mongers.  They do some really esoteric stuff that goes well beyond simple web scripts.  There is a real advantage for a large business to use a platform like Java in that it's all standard stuff and easy to find developers that are trained in it.

I would imagine this would entail a major shift in company culture in addition to technology.
NPR
Sunday, January 07, 2007
 
 
"Borealis's response rather assumes that the two are related ..."

To clarify:

1) Whatever language is currently popular will be the target of dislike for novel and marginal languages.

2) Substitute technology or methodology for language in #1.  In the case of methodology, it seems a straw man suffices.

3) Advocates will point to the success of toy projects to support claims for their language/methodology/technology (LMT).

4) Eventually either scale matters or nothing matters.  Success brings scale.  An LMT is worthy of consideration only after proving out at scale.

5) Feature velocity matters in early stage Web 2.0 startups with hyperbolic time to market, but that is only a popular topic on the Web for the same reason Hollywood loves to hand out Oscars.

6) Industry success brings baggage.  Purity is the sign of an unpopular LMT.  The volume of participants alone will otherwise muddy the water.

7) Popularity invites scrutiny.  Being unfairly blamed for project failure signals a maturing LMT; unfairly claiming success, immature LMT.  Advocates rarely spend much time differentiating success factors.

8) You can tell whether a LMT is mature by whether it is easier to find a practioner or a consultant.  Or by whether there is more software written *with* or prose written *about* the LMT.

9) If you stick around the industry long enough, the tech refresh cycle will repeat with different terminology and personalities.  The neophytes trying to make their bones will accuse the old guard of being unable to adapt, when really we just don't want to stay on this treadmill.  That's why making statements like "Java is the new COBOL" are ironic; given time, "N+1 is the new N" for all values of N.  It's the same playbook, every time -- but as Harlan Ellison said of fiction, every story has already been told, but nobody was listening the first time.

10) Per #9, I could have written this same post, with little alteration, ten, twenty or thirty years ago.  It seems to take ten years of practise to truly understand the value of any LMT.  Early adopters do play the important role of exploring all the dead ends and limitations, at their cost.  It's cheaper to watch other people fail, just like it hurts less to watch other people get injured.

11) Lisp is older than I am.  There's a big difference between novel and marginal, although the marginal LMTs try to appear novel by inserting themselves into every tech refresh cycle.  Disco will rise again!

12) If an LMT is truly essential, learning it is eventually involuntary.  Early adopters assume high risks; on the plus side they generate a lot of fodder for blogs, books, courses and conferences.

13) I wonder if I can get rich writing a book called Agile Lisp for Web 2.0 SOA.  At least the consulting and course revenue would be sweet.  Maybe I can buy an island.  Or at least afford the mortgage payments on a small semi-detached bungalow in the Bay area.

14) It requires support from a major industry player to bootstrap any novel LMT into popularity.  The marginal LMTs often are good or even great, but lack sponsors.

15) C/C++ remain fundamental for historical reasons.  C is a good compromise between portability and performance -- in fact, a C compiler creates more optimal code than humans on modern machine architectures.  Even if not using C/C++ for implementation, most advocates of new languages must at least acknowledge how much heavy lifting C/C++ does for them.

16) Ditto with Agile and every preceding iterative methodology.  Winding the clock back to waterfall is cheating.  I'm more sophisticated than a neanderthal, but that won't work as a pick up line.

17) Per #13, I don't think so, because writing this post was already a chore, let alone expanding the material to book length.  Me an Yegge both need a good editor.
Borealis
Sunday, January 07, 2007
 
 
Borealis, I'm looking for the mod option "+5 Yes, yes, yes, that's what I've been trying to tell these people!"

What you said makes it really easy to discount you as an old codger who doesn't want to learn the new technology.  The danger -- and I only say this because I've said most of what you just did -- is that I'm afraid it's easy to *become* that old codger.

I see evengelists rave about how much better their LTM is, and I don't know enough about it to fairly criticize.  But I also don't have enough time to learn every new thing that comes along.

I'm tired of people telling me what *I* should do.  Tell me what *you* actually do, and how it works.  Not, theory: practice.
Drew K
Monday, January 08, 2007
 
 

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
 
Powered by FogBugz