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

You can always detect Java programmers...

I got sucked in to a large scale .Net project somewhat late.  Of course the thing is behind and over budget, what's new these days?

As I dig into this I'm finding tons of really bizarre stuff in the completed codebase.  Lots of wheel reinvention: classes that do stuff the Framework already provides, classes that do stuff that another guy's classes already do, etc.

Tons of junky factory classes emitting wrapper classes calling themselves BlaBlah.DAO all over the place.  It appears to be the result of J2EE design pattern thinking or something.

So much code, so little functionality, so much duplication of effort!

It's starting to remind me of an old joke where the chainsaw customer wore himself out, brought it back to the store complaining.  The salesman pulls the cord and braAAPP braaAPPPP it starts right up.  The customer says "What's that noise??"

Is this what happens when Java programmers get turned loose on a .Net project?  We're drowning in towering class hierarchies.
save the last dance
Wednesday, May 30, 2007
 
 
Man I wish I were as cool as you.
orangutan
Wednesday, May 30, 2007
 
 
I think that you're being a little unfair in singling out java programmers there.

Your more general complaint is about programmers who come to any platform and don't take the time to learn about all the functionality that the new platform provides and to learn the native conventions and approaches of the platform.

I think that the same problem you describe would apply visa-versa as well.
Bill Tomlinson Send private email
Wednesday, May 30, 2007
 
 
Except in the visa-versa situation, the .NET guy is saying "What? That's not built in by default? Which one of these 6 semi-standard libraries is better?"
Grant Send private email
Wednesday, May 30, 2007
 
 
"Is this what happens when Java programmers get turned loose on a .Net project?"

No, it is what happens when a project has inadequate leadership.
OneMist8k
Wednesday, May 30, 2007
 
 
Java is the new COBOL.
Management
Wednesday, May 30, 2007
 
 
This is pretty common when developers start using a new toolkit or language. It would probably happen with .Net programmers starting anew in Java too.

There is always a learning curve with anything new. You can mitigate the effect quite a lot if you have one person who is an expert in the new system, and who can both supervise the design and review code in the first part of the project.
DJ Clayworth
Wednesday, May 30, 2007
 
 
"when Java programmers get turned loose on a .Net project"

In all honesty I would say yes. For some reason, and I don't think it has that much to do with the intrinsic properties of the language and its libraries, Java projects seem to be much more prone to this kind of architecture astronautics that .Net projects.

Zealous over-application of Design Patterns does seem to be a common J2EE anti-pattern.
Arethuza
Wednesday, May 30, 2007
 
 
John Topley Send private email
Wednesday, May 30, 2007
 
 
@save the last dance

So once you noticed this problem how did the team react when you offered to hold some brown bags on .net to share your knowledge?
Michael
Wednesday, May 30, 2007
 
 
To tell you the truth they seem to just shrug.  I suspect they were dragged into the effort just as I was, only earlier and coming from a different background.

I can live with anything if there's a steady paycheck in it.  I just wish there'd been some maps and a little orientation on the architecture they'd built before I got there.  Instead I have to browse the source tree and gradually build mental models of how it all fits together as I go.
save the last dance
Wednesday, May 30, 2007
 
 
"So much code, so little functionality, so much duplication of effort!"

This is a problem with object oriented programming in general.  It just manifests itself most with J2EE projects these days because those are among the most numerous, but I've seen my share of C++ projects suffering from the same thing.

And let's talk design patterns.  While patterns are a useful concept for programmers, the emphasis on it is way out of proportion with its actual utility (IMO).  Often there's a  huge effort-to-functionality mismatch when blindly following patterns.  You end up with a ton of typing and very little to show for it at the other end (as obviously you've seen).
Crimson Send private email
Wednesday, May 30, 2007
 
 
Back in the days when Assembler programming was new, people still managed to duplicate code that already existed, typically reinventing the lopsided triangular wheel.

Even with "modern" functional programming, nothing can stop people reinventing the triangular functional wheel.

Even in the modern days of kitchen-sink frameworks versus small extensible core libraries (or, if you prefer, complete and comprehensive versus tragically incomplete and inadequate systems) there comes a point where no matter which camp you prefer, you'll be whinging and grizzling that the other guys can't see the obvious superiority of your preference.


> Zealous over-application of Design Patterns does seem to be a common J2EE anti-pattern.

Give it a few more years and all the kids who got into C# because it was the hip new thing (rather than because they actually understand what the hell they're doing) will be doing the same thing.

Java isn't the new COBOL. It's the new Visual Basic 6.  ;)


> Is this what happens when Java programmers get turned loose on a .Net project?  We're drowning in towering class hierarchies.

You should let them loose on a Lisp or Haskell project if you want to see true horror.

I'ld bet it's the people, not the language, and their Java code may seem standard when they're talking amongst themselves, but it's probably not actually particularly good. Even if Java had never existed, the same people and the same managers would have been working on the same projects and finding new and interesting ways to abuse their compiler.

Look at it this way: despite the apparantly obvious deficiencies of their development style, they still got a job working on your project. What does that tell you about the hiring manager's grasp of good code style and careful evaluation of their skills? If C# had never existed then he'ld probably be managing the same project using Java, and still think that these guys were good.

Wednesday, May 30, 2007
 
 
"Tons of junky factory classes emitting wrapper classes calling themselves BlaBlah.DAO all over the place.  It appears to be the result of J2EE design pattern thinking or something."

What makes you think this?  Is the team's core competency Java and they got stuck doing .Net instead?
KC Send private email
Thursday, May 31, 2007
 
 
> Your more general complaint is about programmers who come
> to any platform and don't take the time to learn about all
> the functionality that the new platform provides

That isn't their fault, it is the project management's fault.

Thursday, May 31, 2007
 
 
"Tons of junky factory classes emitting wrapper classes calling themselves BlaBlah.DAO all over the place. "

Did they give a reason for this?

Typically I see factories in situations where it is configurable at install or runtime what implementation of some interface will be used.  The factory just encapsulates determining this configuration into one spot.

It makes doing things like plugins and 'service location' more flexible and maintainable, which, at least in Java's configuration-nightmare, jar-hell world, is a blessing.


What would you do instead of what your co-workers are doing?

And yes, of late, I've programmed in Java, but I'm not married to the language.  You are likely correct that many developers are going to work the way they are used to, especially if they are not familiar with the new language they are working with.

Unfortunately, projects don't tend to give enough time to get developers up to speed before they're expected to produce results.  On the other hand, some patterns are useful, done correctly, and should not be casually dismissed because they run counter to the documentation on MSDN.
Dan Fleet Send private email
Thursday, May 31, 2007
 
 
Java is realy getting old... I remember the good old days when I was doing the same thing complaining about VB programmers writting code in java. Good days...
Anon Anon
Thursday, May 31, 2007
 
 
There's an old adage that a good Fortran programmer can write good Fortran in any programming language. Larry Wall once said that you can write Lisp in Perl, or C in Perl, or Python in Perl, or Awk in Perl, etc. However, there is what we consider good Perl practices.

Recently I tried to play a bit with Metasploit, which is an exploiting framework that used to be written mostly in Perl 5 and was rewritten to be in Ruby. I was distressed from the fact that it was dirt-slow on my P4-2.4GHz-with-2.5GB-RAM machine, running a recent Linux, and a recent Ruby. When it did run and I tried to use it to exploit a Windows machine on my home network, it throwed obscure Ruby exceptions.

Having told a Rubyer I know and chat on MSN about it, he downloaded it and posted me some code from there, which was Perl5 code written in Ruby. Bad Perl 5 code written in Ruby. I still don't know if it was the cause of Metasploit's slowness, but it certainly indicated a certain amount of cluelessness.

I recently started learning J and ported a program I wrote to calculate the Mandelbrot Set in Matlab to J. It came out pretty long and non-idiomatic. Some people I talked with on IRC who were much better "J" programmers wrote it much shorter and more idiomatic. (And I'll be damned if I can understand it - J *is* the ultimate ASCII golfing language, and makes bad Perl look like good Python).

So it's really not limited to Java->.NET. As Joel notes, he found out that people who knew C, Scheme and Haskell well, could become better Java programmers, then programmers who only know Java and worked with it for several years.
Shlomi Fish Send private email
Thursday, May 31, 2007
 
 
>Even with "modern" functional programming, nothing can stop people reinventing the triangular functional wheel.


Sometimes it's more like reinventing the flat tire.
frustrated
Thursday, May 31, 2007
 
 
By the way, "Save the Last Dance II" was totally better than "Save the Last Dance".

Friday, June 01, 2007
 
 
"Except in the visa-versa situation, the .NET guy is saying "What? That's not built in by default? Which one of these 6 semi-standard libraries is better?"

I had the same exact response when trying my hand at .net. YMMV, and this was the 1.1 runtime, but still. There's a hell of a lot more stuff out there written to be used with java than with .net.
M1EK Send private email
Monday, June 04, 2007
 
 

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

Other recent topics Other recent topics
 
Powered by FogBugz