Building on
Peter's entry about RADRace, I wanted to throw out my own experience with those "serious" guys (aka, Java Developers)
First, I want to preface this post with an honest statement. I'm asking a genuine question. I want to know if I was just dealing with a few bad apples, or if the hole barrel sticks of rot. I have no doubt whatsoever that you could
easily round up a bunch of bad .NET programmers.
Over a period of time, I had the opportunity to work with an outside consulting agency that provided a number of ".NET experts" to our development effort. These .NET Experts had strong Java background but very little .NET experience (.NET was relatively new then). Truth be told, they did most of the work and by the time I was brought in, everything was already set in stone (and sinking very quickly) - so maybe I'm just armchair quarterbacking. I've labeled the project a failure many times and have heard that the existing management team is throwing it all out (this isn't where I'm currently working obviously).
Now, there's no doubt that it was a very challenging project, with very difficult clients, users and timelines. Nonetheless, I was appalled at the type of code I saw. We'll set aside the SQL injection vulnerabilities, the lack of viewstate optimization and the fact that all the html was generated dynamically in codebehind (new HtmlTable(), table.Add(new Cell()...).
The developers treated the Database like a dumb filling cabinet - never coming close to taking advantage of what it had to offer (and I'm not just talking about indexes, udfs and stored procedures, but if you're curious, they didn't exist either). Much of the data was stored in a meta-like repository (at an extreme, think of having a single table with two columns "name" and "value"). Calculations were
never cached (either in memory or in the database), but always done on the fly, in the business layer. Want to display the top level total of the 10 root items? Load
thousands of child items into memory and add them up. Instead of caching the sum, those thousands of items were stored in the session (yes, we got a lot of OutOfMemoryExceptions), and if you wanted to recalculate you'd wait another 2 minutes. What took minutes and 20+ megs of memory (per user), could have been achieved in microseconds with a more explicit data model and the powerful SQL
SUM function.
Most ASP.NET applications have far too thick a presentation layer in my opinion. For the first time in my life, I was seeing too heavy a business layer - and it wasn't any better. Sure, storing a cached value in the database is a pain in the ass, because you need to worry about keeping it up to date. But when the system is getting rebooted every 15 minutes 'cuz you've taken up all the memory, you're arguments don't have much of a leg to stand on, right? In essence, the best way to describe it was as programming purism. I'm sure the application would have made a great school paper, but when reality can't handle more than 5 users, you're in trouble.
Is this typical Java development? Is .NET development too presentation-layer focused, Oracle development too data-layer focused and Java development too business-layer focused?
On a side note, the architecture was based on analysis patterns (not to be mixed with design patterns). Pinging architects inside and outside Microsoft, I learnt that analysis patterns aren't overwhelmingly used. Further research indicated that those specific patterns (accountability and observation) are very implicit and come with a lot of drawbacks (they have advantages as well, don't get me wrong!). It's just that you really have to do some deep analysis to figure out if it's right (of course, that wasn't done). If anyone has any experience with this, I'd love to hear it, even though I've thankfully moved on.