Sponsored By Aspose - File Format APIs for .NET

Aspose are the market leader of .NET APIs for file business formats – natively work with DOCX, XLSX, PPT, PDF, MSG, MPP, images formats and many more!

Java vs .NET Developers

Davy Brion has an interesting post discussing his recent interviews with .NET and Java developers. I have to say that I agree with some of his assessments. Much of what we discuss in .NET is far more common in Java as Java has a far healthier community than Microsoft. You will find terrible developers on both side but the terrible developers on the Java side have more mainstream exposure to good ideas than on the Microsoft side.

The majority of the .NET community is fake as well, led by the leash by Microsoft. I remember in particular a discussion with quite a few people in Atlanta just after Katrina when I was there for a while where I was being laughed at and talked down to (the same tired arguments about sprocs)  for suggesting the use of an ORM, these are the same people who today will reiterate the same arguments and push themselves as “ORM experts”.

How to we break out of this? I had great hopes for alt.net doing this but sometimes you feel like the engineer of a freight train who can see that truck 1/2 a mile ahead and has hit the breaks but is not hoping. I believe alt.net has at the least given the small few who were doing such things already a community upon which they can draw support from when they realize just how bleak of an abyss the .NET development world is. Over time new people will continue to populate alt.net and it will grow but because of the dynamics of the general community we will either need a revolution against Microsoft or Microsoft will need to lead the charge.

 

The drag and drop developer

A sub-theme to the post is the putting down of “drag and drop” developers. It is obvious that Davy in his scenarios values highly things like understanding DI and the SOLID principles.  I agree that these things are very important, in some contexts!

“Drag-n-drop of pure visual components is usually not a big deal… drag-n-drop of data sources on pages or forms or whatever is a different matter entirely ;)

The typical arrogant developer viewpoint … likely the same kind of developer who would build DTOs on top of a domain layer to support a simple forms over data web application. There are contexts where dragging and dropping datasources can be extremely effective.

When people are attempting to use DDD one of the first things I tell them is not to, there are simpler ways and most applications do not justify the expense and complexity of DDD. Can we make a similar argument for development as a whole? Think about the systems that sharepoint is replacing today… Are they being “well crafted”? probably not but they are providing near immediate value at extremely low entrance prices. To help us further identify such systems, they are generally low risk and highly volatile.

The big problem with drag and drop development is not inherent within it but when it is applied to situations that it is inappropriate for.

Microsoft has made this possible with the creation and promotion of the drag and drop developer. These developers lack education, they are easy to bring in, they can produce value almost immediately, and cost a fraction of what a true engineer would cost. There is a vast number of systems that these developers can be extremely productive on while carrying little risk to the business as a whole.  They also free up engineers to work on more interesting systems.

If we want to be effective architects one of our main goals should be to isolate these types of scenarios and build bubbles around them so we can use the lower skilled work force (at lower cost) without forcing our entire system to look like this.  Remember that cost and scalability of a team is a non-functional requirement that we should be optimizing as well.

This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.

63 Responses to Java vs .NET Developers

  1. Java is a multi-platform language. Dot Net has various applications and in-built coding compared to Java.Even though Dot Net is easy to use Java will be my choice..

  2. CarolKing says:

    There are those in the group (.Net, Coffee or otherwise) that convert everything into a pissing go with. I know you are effective on the alt.net and ddd categories and it’s excellent to see that you can perform an effective part on those subjects, but still realize that they are not the gold topic.

  3. Sowmya says:

    Though Drag and drop development process is a easy process, personally I feel they lack knowledge on the subject.
    I always support java because the programmers in Java are very perfect and moreover .NET does not provide security for the code as much as java does.
    Java always rules….

  4. Kylie Barry says:

    Being a .NET programmer does not make one any less knowledgeable and does not make one prone to bad design decisions.With .NET I have often wondered if I should research Java materials.

  5. CooperHodges says:

    I believe alt.net has at the least given the small few who were doing such things already a community upon which they can draw support from when they realize just how bleak of an abyss the .NET development world is.

  6. victor says:

    if you have not seen a town in Somalia, it does’nt mean, it does not exist.

    all the concepts, DI, IOC, SOC are existing in .Net.. it deoeneds upon the user how to percieve that.. i have been using proper design patterns for SoC, in .net without a problem and fully testablle code.

  7. Sam says:

    Nice post, I’ve learned a few important things regading .net
    vs java

  8. asa says:

    java rocks

  9. Greg says:

    Matt you are posting over a year later, and yes those things have become more popular over that year. At the time of writing < 5% were using these ideas (remember that whole alt.net thing?)

  10. Matt says:

    It is ridiculous to say that IoC, ORMs etc are not used in the .NET world. Sure the most popular ORM is a port of Java’s HIbernate but it is used a fair bit. There are plenty of IoC options as well and when it comes down to it you can write your own stuff. I’ve yet to use an ORM that convinces me anyway – it is definitely not a silver bullet. I spent 4yrs at Uni doing Java and for the last 5 or so been working with MS stuff. Both have their problems but I would not go back to Java. Having said that though I have no idea what is happening in the Java world these days. I am a WCF fanboy and would be suprised if I could find a java equivalent without sifting through lots of libraries etc and finding a combination that did all the things I need that I get from WCF and .NET without having to trial lots of frameworks.

  11. lambros protopapas says:

    Take a look at this http://lprotopapas.blogspot.com/2009/09/why-java.html where I explain why I use Java (and not .NET)

  12. Najah Talia says:

    To saeedouv:
    Asking which is better Java or .Net is not good question, or which one is open source is again not good question, but asking which one makes the life easier for the mainstream developer is the question, also beside this another one might be which binary is more optimum relative to the hardware (this not easy question), now let us look at the easier one, regarding the easy life for the developer, here definitely is .Net and here are the basic simple reasons:
    1- Both platforms are composed mainly of classes, but their hierarchies are different, yet two solutions can be implemented in both (here the Microsoft team responsible for the most optimum code to use to build their classes seek help from the kernel writers the management dll (sources only available to them), …etc
    2- Both platforms are basically semi-interpretive (Produce opcodes)
    3- Now the main difference and big setback for Java is the IDE that is the cooperative and supportive tool for various phases of the development life cycle (do not forget MSDN)
    4- The supporting libraries and components written for .Net are much more than the once written for Java

    The above 4 points prove without any confusion that .Net platform is easier to use (more productive and less costly per line of code) and also the code produce (for windows only!!!) is more efficient in case of .Net

  13. Afnan says:

    Microsoft provide drag and drop features to help developers concentrate on main problem.

  14. abhishek says:

    @improve…
    Me too…I have added it as favorite to my chrome…

  15. Joe says:

    For whatever it’s worth, I’ve been a Java developer for 12 years. I gotta tell you I’m getting soo tired of the Java world. As one of the previous posts mentioned, it is way too fragmented. Go to Dice.com and check out the requirements for Java jobs compared to .Net jobs. The litany of technologies listed on most Java jobs makes it very difficult to keep up as a contractor. You’re constantly chasing the technology tail – the flavor of the month. To make matters worse, the KISS principle is non-existent. It’s like doing everything with a sledge hammer.

    I’ve read a few books on .NET and have done one job. I love the integrated environment and would like to hear how others transitioned from Java to .Net. Did you do it somehow as a contractor or did you join a company as a newb .Net developer with much Java experience?

    Personally, I’m ready to take the leap if I can figure out how to not lose income in the process (Senior Java developer to newb .Net developer).

    P.S. I think the .NET MVC technology will have great potential. However, WebForms still makes sense for the department level apps IMHO.

    Thanks – Joe

  16. javenet says:

    .net fuck is a fuck

  17. Fresher says:

    Hey people i need ur help.. m done wid my engineering in IT n planin for a certification course … but m confused between .net n java …M intrested in which technology`l provide me better oppourtinities in future … both of the technologies r good but don`t no which which is more in demand in the industry??? hope to get help from u experienced people .. thanx ..Tc..

  18. Kirby L. Wallace says:

    [Davy’s article] sounds like the author is criticizing developers who do not agree with his personal preferences in design methodology. He assumes that if a developer is not using IoC/DI, that there is something fundamentally flawed about their methodology.

    I personally do not care for DI because I have a fundamentally different approach to design. When I’m working on a class or function, I prefer to see everything related to the task at hand….. well… at hand.

    I hate having to run off over here to see what that does, then run off over there to see what that’s gonna do, then attend a meeting with these guys to see what’s gonna happen if I mash the blue button, then come back over here; dodge right, spin left… look over my left shoulder while holding a mirror just so…./i>

    All that is the reason why so much softwre is CRAP, never gets implemented, or if it does, never gets used.

    I write code that reads, in as much as possible, straight from top to bottom with minimal detours. Everything it does is here. It reads almost like English. IoC and DI and such coding methodologies are practices that encourage all kinds of unnecessary stuff. When I write code, it’s more like I’m narrating the code than “coding” it. And I narrate it in pretty much the order that I see it flowing.

    That’s just my opinion, though.

    P.S. LOVE the cool “visual captcha” thingie! Oh, and I like how this article is published on a .NET Webserver.

  19. saeedouv says:

    i have graduated 8 months ago, and have been working on Java platform during study(because java got its chance in my university in comparison to .Net), however, after graduating, i found my self in .Net world, actually there is tons of articles such as java vs .Net, c++ vs. java, python vs. ruby,etc… , i don’t know what is the best choice to pick, but here are some critical points i must mention:

    1- there is NO this better than that, its all the matter of what you like and what you hate, from both sides(in this article are java and .Net) there are huge number of support, releases, articles, and implementations to go through, in my opinion, .Net community is growing larger and better, and YES, MONO project will make .Net more powerful by removing OS dependent programming model.

    2- Java’s open source community is more powerful than .Net’s one, due to Java’s Nature, its open source, but still a hope of the growing .Net open source community, as some posts here mentioned, you will find JUnit and NUnit, Hibernate and NHibernate, Lucene and Lucene.Net, and much more. so its a waste of time to determine which is better than the other !!

    3- for six months, i have been working hard to just get the idea whether to continue on focusing on java or .Net, one month i say ‘java’, another i say ‘.Net’ and thats what wasted 6 months of my effort and knowledge rather than spending them in advancing and mastering any one of them, so, my decision is as the following “buying Mercedes is the same as buying a Honda, 2 are cars, 2 give me my ride, so its only the matter of made-in and some extra here and some extra there :D”

  20. Paul says:

    I am very happy to keep Java runtimes off my machine!

    Java blows. Drag and Drop developer my ass…

    Do you still copy files by typing them out every time or do you drag and drop your files onto your usb.

  21. Danny says:

    @Steve
    I disagree somewhat. I’ve developed in both Java and C# and I’ve met Java developers that were clueless about design principles as well as .NET developers. I don’t think its really the language that matters. There are developers on both ends that just can’t cut it.

    As far as personal preference goes, after getting into .NET, I refuse to even take a passing glance back at Java. The language features are rich and allow you to accomplish much more with less. I definitely think that drag and drop is an advantage that .NET has over Java because it allows you as a developer to spend less time doing the repetitive work of building and debugging the presentation layer of your particular app and more time writing the supporting logic.

    Ultimately, this tends to increase the quality of your code since now you have more time to test and code your business logic. Whereas in a language such as Java you would budget out say half your time on building the UI and the other half on testing and coding for a given feature, in a language such as C# you would spend maybe a quarter of your time on UI work and three quarters on actual business logic. This extra gain in testing/coding time is definitely a plus in languages that support drag and drop development.

    I remember my days pulling my hair out over GridBagLayout settings… I’ll stick with my drag and drop any day.

    As for having your employees spend time in Java before having them learn C#. I’d do the same if the situation was reversed. If I had someone coming to me that worked only in Java, I’d have them learn some C# or C++ or C first. Diversity is always a good thing.

    Being a .NET programmer does not make one any less knowledgeable and does not make one prone to bad design decisions. Bad design exists regardless of .NET vs Java. One just has to be proactive in learning what good design is and isn’t and constantly honing their skills.

    I personally prefer .NET for the added productivity it gives and the wide array of out-of-the-box libraries and frameworks that come with it such as WCF, WF, WPF, WinForms, ASP.NET, etc. To me, it seems like it has the right tool for just about any job I have run into as a developer.

  22. Steve says:

    I have been writing enterprise Java for almost 10 years and recently moved to .NET. I would say that my understanding of OO design principals and core methodologies are more highly tuned than my counterpart .NET developers. The Java Open Source community has become splintered by the slightest disagreement in the most minor of design decisions and this has resulted in a wide array of web frameworks see (http://www.manageability.org/blog/stuff/how-many-java-web-frameworks) for a listing of 54 (yes that’s FIFTY FOUR) Java Web frameworks.
    While choice is nice it can also produce confusion when it comes to deciding what framework best suits your target domain. Before a project starts are you really going to investigate all 54 frameworks to find the best? If you do then good luck explaining the 5 month analysis phase to your PM. I have been down this path once before when it came to selecting an object to xml mapping tool. I spent a month coding under one API only to discover that it did not offer one obscure, low-level feature that I needed for my solution. another detractor from the Open Source community is the flame wars that go on between these splinter groups. There are some pretty large egos involved in these splinter groups and discussions can border on pathetic, which is distracting if you just want the technical specs.

    That being said the process of analysing a selection of frameworks and tools teaches you to appreciate good underlying design principals such as extensibility and ease-of-maintenance. By the time you have run a proof of concept on the 4th option you have a good understanding of what an ORM, for example, should and should not do.

    I am a fan of analogies and a good analogy for the java-.NET comparison is a mechanic. If we have 2 mechanics (lets call 1 Bill Gates and the other James Gosling). Now if Bill only ever works on Toyotas and James works on all other cars then James will get to see the different designs, fuel systems, transmission designs etc. Eventually James starts to form his own opinion of what is and is not a good transmission system, which fuel injector designs are less likely to fail etc. James is the more knowledgable mechanic.

    If I was running a SW development shop I would insist on new developers working in Java for at least 2 years before letting them loose on .NET. Or maybe even make them write C for 6 months first, then C++, then Java then C# … yes, they should all be like me :)

  23. karthikeyan says:

    Hi friends.. I’m from India…I hav finished engg. in comp. science this year..

    I am a newcomer to the IT industry…I had only a little experience and what i felt is…

    .Net (microsoft) should concentrate more on revealing the functionality of drag n drop resources
    And Java people should concentrate on developing a more easy user interface components..

  24. Philip says:

    What kind of moron thinks that a framework is better because they know the secrets of the OS platform they are deploying on. That is living in IBM mainframe days. I don’t want to develop on a platform where functionality is hidden from me.

  25. Shaw says:

    I remember an interesting conversation between a Java dev and a .NET dev. The Java dev asked him why concepts such as IOC (DI) are not used in .NET, and how come there is only one way for everything.

    The ans. from the .NET guy was, whatever MS provides is enough for the solution, and there was never a need for more. In fact, he believed Java has messed up the entire industry by a lot of hype that according to his opinion doesn’t deserve. I was not a Java developer then, but I used to be looked up by the .NET folks as some sort of dirt, while the Java folks were more welcoming to alternatives.

    I’m doing Java development now, and I can’t say how much my thinking as changed by learning Spring & Hibernate. It’s worth it just for the intellectual pursuit, if not for anything else.

    It’s refreshing to see folks like you exist in .NET. I have had a real bad experience with MS devs, they usually come off as arrogant and have some extreme opinions.

  26. Najah Talia says:

    From my experience in the software industry as a developer for more than 15 years in the IT environments, I believe that .NET is becoming more mature and more capable than the JAVA platform.
    In the beginning when JAVA started it was viewed as magic that is to use same sources on different hardware (run on different operating systems). But lot of critics said at that time that JAVA performance was weak compared to other development environments.
    Microsoft came up with different approach with .NET by promoting the concept of using different languages at the same time in the same module and also run time interpretation, same concept as JAVA. But Microsoft did not do what JAVA did, that is the .NET does not run on other operating systems other than windows (Linux with MONO is an exception but is not productive yet!!).
    The real thing to say about the tremendous difference between both technologies is that, .NET is being designed by the experts of the windows kernel (know all secrets), JAVA is weak because it does not use the full capabilities of the Windows family of operating systems (JAVA designer is not exposed to the secrets of the Windows OS!!!).

  27. Najah Talia says:

    From my experience in the software industry as a developer for more than 15 years in the IT environments, I believe that .NET is becoming more mature and more capable than the JAVA platform.
    In the beginning when JAVA started it was viewed as magic that is to use same sources on different hardware (run on different operating systems). But lot of critics said at that time that JAVA performance was weak compared to other development environments.
    Microsoft came up with different approach with .NET by promoting the concept of using different languages at the same time in the same module and also run time interpretation, same concept as JAVA. But Microsoft did not do what JAVA did, that is the .NET does not run on other operating systems other than windows (Linux with MONO is an exception but is not productive yet!!).
    The real thing to say about the tremendous difference between both technologies is that, .NET is being designed by the experts of the windows kernel (know all secrets), JAVA is weak because it does not use the full capabilities of the Windows family of operating systems (JAVA designer is not exposed to the secrets of the Windows OS!!!).

  28. Mike Brown says:

    Greg,
    I honestly think the difference between the two communities is that Microsoft focuses on the tooling around .NET so you’ll see a lot of demos from MS on how to use the tools (IE DnD) to do something very easily.
    I remember watching a demo during the VS2005 launch where the presenter created a full forms over data application (including authentication/authorization) using the designer only.
    Sun hasn’t focused on tooling as much. So their demos have usually been, how do I write code to do X? The documentation around Java and how to use it was sparse and it was up to the community to provide this stuff.
    We can’t even talk about the framework itself as being a cause of the difference, because there have been some stinkers from Sun (EJB anyone)? If Java had a tool similar to .NETs datasets and the dataset designer in Visual Studio, it would have taken a lot longer for a framework such as Hibernate to appear.
    Honestly, I think it comesdown to mainstream appeal. Microsoft has done an excellent job at making sure .NET attracts a large swath of developers. These two factors (mainstream appeal plus tools that do most of the work for you 85% of the time) makes the likelihood of finding a .NET developer who doesn’t know what a WeakReference is a lot higher than finding a Java developer who doesn’t know about NHibernate.

    I would like to know how many of the devs that Davy screened came to him from a “recruiter” vs. were referred by someone he knew.

    That said, the anecdotal evidence is compelling. And there IS a lot that we need to do to get a higher percentage of developers who care about professional software engineering. I think it all begins at the education system. More and more “Computer Science” programs have a trade school mentality with their curriculum.

    Then again, that’s not even the issue because the barrier to entry into IT is as low as “Take this 6 week course to become a certified developer”. And that model will continue as long as the developers are able to make “good enough” software for the businesses hiring them.

  29. Peer Reynders says:

    “When people are attempting to use DDD one of the first things I tell them is not to, there are simpler ways and most applications do not justify the expense and complexity of DDD.”

    Eric Evans made this point back 2003 in “Domain-Driven Design: Tackling Complexity in the Heart of Software”, as part of the Smart UI Anti-Pattern (p.76-78):
    [quote] “Many software projects do take and should continue to take a much less sophisticated design approach that I call the SMART UI. But the Smart UI is an alternate, mutually exclusive fork in the road, incompatible with the approach of domain-driven design.

    A project needs to deliver simple functionality, dominated by data entry and display, with few business rules. Staff is not composed of advanced object modelers. If an unsophisticated team with a simple project decides to try a MODEL-DRIVEN DESIGN with LAYERED ARCHITECTURE, it will face a difficult learning curve. Team members will have to master complex new technologies and stumble through the process of learning object modeling (which is challenging even with the help of this book!). The overhead of managing infrastructure and layers makes simple tasks take longer. Simple projects come with short time lines and modest expectations. Long before the team completes the assigned task, much less demonstrates the exciting possibilities of its approach, the project will have been canceled.
    Even if the team is given more time, the team members are likely to fail to master the techniques without expert help. And in the end, if they do surmount these challenges, the will have produced a simple system. Rich capabilities were never requested.
    A more experienced team would not face the same trade-offs. Seasoned developers could flatten the learning curve and compress the time needed to manage the layers. Domain-driven design pays off best for ambitious projects, and it does require strong skills. Not all projects are ambitious. Not all project teams can muster those skills.
    Therefore, when circumstances warrant:
    Put all the business logic into the user interface. Chop the application into small functions and implement them as separate user interfaces, embedding the business rules with them. Use a shared relational database as a repository of the data. Use the most automated UI building and visual programming tools available.

    In truth, there are advantages to the SMART UI, and there are situations where it works best – which partially accounts for why it is so common.

    Remember, one of the consequences of this pattern is that you can’t migrate to another design approach except by replacing entire applications.” [end quote]

    However it is also true that many successful business applications have very simple beginnings and as a result of their success acquire more complexity over time. Then comes a point where somebody has to stand up (early enough) and put that SMART UI application out of its misery, long before it collapses under its own (complexity) weight and becomes a major business liability. Unfortunately, all too often good money is thrown after bad “in order to preserve the existing investment” or “because it’s too expensive to replace the existing application” (ignoring what it’s currently costing the business in terms of maintenance effort and missed business opportunities).

  30. Peer Reynders says:

    “When people are attempting to use DDD one of the first things I tell them is not to, there are simpler ways and most applications do not justify the expense and complexity of DDD.”

    Eric Evans made this point back 2003 in “Domain-Driven Design: Tackling Complexity in the Heart of Software”, as part of the Smart UI Anti-Pattern (p.76-78):
    [quote] “Many software projects do take and should continue to take a much less sophisticated design approach that I call the SMART UI. But the Smart UI is an alternate, mutually exclusive fork in the road, incompatible with the approach of domain-driven design.

    A project needs to deliver simple functionality, dominated by data entry and display, with few business rules. Staff is not composed of advanced object modelers. If an unsophisticated team with a simple project decides to try a MODEL-DRIVEN DESIGN with LAYERED ARCHITECTURE, it will face a difficult learning curve. Team members will have to master complex new technologies and stumble through the process of learning object modeling (which is challenging even with the help of this book!). The overhead of managing infrastructure and layers makes simple tasks take longer. Simple projects come with short time lines and modest expectations. Long before the team completes the assigned task, much less demonstrates the exciting possibilities of its approach, the project will have been canceled.
    Even if the team is given more time, the team members are likely to fail to master the techniques without expert help. And in the end, if they do surmount these challenges, the will have produced a simple system. Rich capabilities were never requested.
    A more experienced team would not face the same trade-offs. Seasoned developers could flatten the learning curve and compress the time needed to manage the layers. Domain-driven design pays off best for ambitious projects, and it does require strong skills. Not all projects are ambitious. Not all project teams can muster those skills.
    Therefore, when circumstances warrant:
    Put all the business logic into the user interface. Chop the application into small functions and implement them as separate user interfaces, embedding the business rules with them. Use a shared relational database as a repository of the data. Use the most automated UI building and visual programming tools available.

    In truth, there are advantages to the SMART UI, and there are situations where it works best – which partially accounts for why it is so common.

    Remember, one of the consequences of this pattern is that you can’t migrate to another design approach except by replacing entire applications.” [end quote]

    However it is also true that many successful business applications have very simple beginnings and as a result of their success acquire more complexity over time. Then comes a point where somebody has to stand up (early enough) and put that SMART UI application out of its misery, long before it collapses under its own (complexity) weight and becomes a major business liability. Unfortunately, all too often good money is thrown after bad “in order to preserve the existing investment” or “because it’s too expensive to replace the existing application” (ignoring what it’s currently costing the business in terms of maintenance effort and missed business opportunities).

  31. Greg says:

    @Nathan when did OO become part of the “community”?

    The community is getting better, I will be the first to say that but its got a long way to go to catch up to Java. Go to JavaOne or QCon etc … then go to the MS equivalent its night and day.

  32. Nathan says:

    I find these we are better coders because arguments annoying.

    Java and .Net allow developers to do their thing in which ever way you like. Picking one feature of .Net and hacking on it because its bad practise in a scenario it was never designed for is like grabbing a cripple and abusing them for not running 100 meters in 10 seconds or less.

    Java and .Net are two great development technologies, how you use them is purely up to you.

    Greg you opinions are flawed in my own opinion, I find the .Net community to be great, if I have an issue or wish to explore a concept further a quick search will find ample resources to learn from.

    Yes .Net pushes certain technologies but you would be a fool to just accept these as the only options. I’m sure if I looked around the Java community I would find articles from people proclaiming X is the next best this.

    I would suggest the guys who cam off as elitist should get some perspective here or do something else to feel superior.

  33. me says:

    Greg, your blog have become unreadable for me. All these flashy ads, c’mon it’s not 1995 anymore.

  34. DEL says:

    The people who read this post are dedicated subscribers, career developer with a conscious interest in learning and building skills. The people who dont read this post are the ones you eloquently label as shallow.

    To one crew, you are preaching to the choir. The others wont even receive this message. The post is judgemental, and despite your best attempts, you come across as elitist, telling us who sucks and who doesnt.
    It eludes me why you take the time to write about these kind of subjects, it never goes anywhere

  35. varun says:

    Drag and drop behavior sucks indeed perhaps not so much while your prototyping, but things are improving……… however I would still like to make a point that” for simpler issues simpler solutions must exist”…. I mean KISS .

    Of course when the complexity increases then one must Develop rather than drag .

    I still don’t get the view against DDD(not drag and drop ;)), domain driven is good, the idea is to isolate Domain stuff rather than adding all crap on pretext of domain, if the developer can extract the domain related logic and come up with models and smart wrappers, then things make a lot more sence than need based programming, one can argue that if you are too serious about DDD then you kill the KISS aspect of it, but then we come back to the same point that the trick is to extract domain goodness wrap it and perhaps increase more helper methods in your code to handle the rest part.

    btw why should we revolt against MS, just because it came up with an idea of Abstraction and ease(read drag and drop), having a Lotta control is good indeed, but we must remember that there was always legal ways to get back that lost control, one just has to dig deeper, Java is popular, gives people control(by less drag and drop stuff 😉 ) but .NET is wonderful, if your not a hard ass engineer you could still Drag nd Drop and Create…. thats the goodness in things, If you won’t more you gotta dig in more, can’t charge against poor ol’ MS for this ..can we ?????

  36. hde says:

    Alt.NET is not as sacred as you think. Most of the major celebrities in Alt.NET work towards a meaningful approach for themselves. They work on Open source Java ports and then provide better tools over them for a fee!. Think about it, find biggest names and then see what they are doing for money. I am much happier having that control with Microsoft (eventually everybody is after bucks)

    We are using .NET and very happy with it. I don’t get the fuss around trying to push IoC,DI,ORM etc. I will like to know how much of you have used ORM for a complex business application ? I am talking about scenarios like really complex 5 page queries for reports. They do provide Custom SQL but at that point they are in dumb XML anyways. Let’s face it, ORMs not good for eveyrhing. Similary IoC,DI etc not good for everything. People who make major architecture cries are generally who delegate the task and find something to think about. They generally are not the developers themselves.

  37. Jonathan Allen says:

    I’m not sure I want .NET to go in that direction.

    IoC and Dependency Injection often lead to far more complicated applications that necessary. As for ORM, two years ago I talked to someone who’s .NET project was floundering because of the bad performance they were seeing.

    It isn’t just that either. Java developers jump on every fad they see. GoF design patterns, J2EE, xml-based coding, factories for everything, etc. Everything they do seems to needless increase complexity, and that worries me.

  38. terry says:

    “The typical arrogant developer viewpoint … likely the same kind of developer who would build DTOs on top of a domain layer to support a simple forms over data web application. There are contexts where dragging and dropping datasources can be extremely effective.”

    Thanks for this. A simple problem should be reflected by a simple solution like Webforms, Drag & Drop and a complex problem might need a complex solution like ASP.NET MVC, it all depends on the context. Whenever someone says that you must ALWAYS do something one way your BS meter should be pinging…

  39. terry says:

    The typical arrogant developer viewpoint … likely the same kind of developer who would build DTOs on top of a domain layer to support a simple forms over data web application. There are contexts where dragging and dropping datasources can be extremely effective.

    Thanks for this. Drag-&-Drop isn’t inheritently evil it really depends on the project. Simple problems should be reflected with simple solutions like Web Forms, Drag-&-Drop and complex problems are likely to have more complex solutions like ASP.NET MVC, it really all depends on the context. Anytime someone says that you should “ALWAYS” do something a certain way your BS meter should be pinging…

  40. Kim Stevens says:

    I think the only real problem with drag ‘n drop is when it becomes “D&DDD”.

    If you’re building a UI, and you have a library of prefabricated parts which can be dragged and dropped onto a canvas, expose an interface and plug into some form of loosely coupled contract – then great, big time saver from which everyone benefits.

    However, when the implementation of the business and persistence layers is driven by drag ‘n drop behaviour, and the developer puts their faith firmly in the “it just works!” magic motto, without any understanding of the consequences, well that’s when things get ugly. In this regard, WYSIWYG is a big fat sugar-coated cyanide pill.

    Wouldn’t it be great if the IDE actively encouraged separation of concerns, instead of promoting yet another reinvented-for-the-sake-of-profit proprietary wizard-like my-kid-could-build-that-in-a-weekend prescription for “rapid application development”? I believe the later has a LOT to answer for in terms of why software quality and craftsmanship have come to be so greatly devalued.

    I had an experience last year where, unfortunately, I had a PM standing over my shoulder whilst I was coding. He saw me using R# and remarked half-jokingly “Hey! I didn’t know it did it FOR you! What are we paying YOU for?”. If he’d seen someone using drag ‘n drop he’d probably be referring to himself as a dev by now.

    @Jon V: Well said – I should order a half-full cup of what you’re having.

  41. Scott Wojan says:

    Personally, I think Microsoft does a lot more harm than good for its development community. Take a look at all the buzz around MVC. While it is WAAAY better than the page controller architecture they pushed with web forms, it’s still an aging architecture. So instead of doing something nice and modern, there are a LOT of people that will be doing new projects in MVC because MS is promoting it so much. It still does postbacks which suck!! Also, don’t get me started on Linq2SQL or the Entity Framework. I just wish they’d quit trying to reinvent the wheel over and over.

  42. Ricardo Shimoda says:

    As an ex- D&D developer I might say that D&D developers suffer a lot when maintaining code and / or extending D&D functionality (and thus we gain some programming experience – the wrong way).

    I’ve abandoned D&D not because of scalability (resources and / or machine) problems but mainly because I didn’t want the next developer (to maintain that code) to suffer the same amount of pain as me (and, therefore curse me from behind)

  43. Greg says:

    @andrew: yes some people are scheisters.

    @alex: can we call drag and drop D&D not DDD it might get confusing for some people who read this :)

  44. Alex Cavnar says:

    Why can’t DDD be “engineering”? I personally find it easier to lay out a form or website, etc,to get functionality down via DnD, then focus on the backend logic. Once you have that down, then you’re good to to.

    You can still do DDD and make it scalable. If you’re writing a small ad-hoc project, you can include drop-in data sources to lessen development time, so long as you identify points during development where additional scalability may be required, exceedng the capability of the drop-in constructs.

  45. Andrew says:

    Nice post, although I do disagree with this statement:

    “Microsoft has made this possible with the creation and promotion of the drag and drop developer. These developers lack education, they are easy to bring in, they can produce value almost immediately, and cost a fraction of what a true engineer would cost.”

    Granted, you do see a few “Jr. C# Developer” positions on Monster.com, but I’d say that most Drag and Drop developers make the exact same money as the “good” software engineers. The problem comes when those same d&d developers build large systems that need to be maintained, and that maintenance ends up costing the company more and more money due to the lousy design.

    Also, Josh I agree 100% with the pain of setting up a Java environment.

  46. Josh Grenon says:

    I have done a little Java programming and must say that setting up the environment was a my biggestpain. It was much easier to do tat .NET because everything I needed was integrated into Visual Studio. That is just my perception on Java vs .NET.

  47. Hendry Luk says:

    I always love to think about drag-drop platform as McD (as in Joel Spolsky’s). McD has invented a wonderful framework that allows even part time high-school students to create the best-selling burgers in less than 1 minute.. (even though they probably can’t even make their own dinner).
    The burger will never taste as good as gourmet burger, no matter how well they refine their framework. But the expectation is not high. And it’s still best selling!
    Many software shops do the same, creating a drag-drop framework that takes seconds to get the job done.
    Business folks would love working in place like McD. In fact, McD is the pinnacle of the best management practice on the planet. Most succesful food franchise in history.
    But chefs who spent most of their life cooking and love what they do would be disappointed to cook for McD. Yes they will probably sell more burgers than anywhere else, but it’s not the place where they could contribute their skills or learn anything.
    Drag-drop is always good to make a prototype or mediocore burgers. But when the application gets highly complex, the “chefs” frustratingly spend most of their time trying to hack their “highly-automated oven” rather than cooking. The oven is preset to a fixed temperature that always make a the burger wrong. Theymanage to get around it with many ingeneous tricks, adding mud here and there until the oven turns into big ball of mud.
    Drag-drop framework is probably ok in instant shop. But any enterprise-level gormet shops who attempt to automate the job and replace developer brains with machine is a perfect recipe for nightmare.

  48. Nick Gieschen says:

    I’ve been curious of late about what some general criteria might be for recognizing whether an app is better suited to something simpler like forms of data or full bore multi-tier. Related to this, I’ve also been curious about what the various architectural options are. Is it just forms over data vs multi-tier. Or is DDD one step up from a non-hexagonal multi-tier. Is then DDDD one step up from that? Anyway, I’m going to be so bold as to throw it out there as a blog post idea.

  49. Jon V says:

    “They also free up engineers to work on more interesting systems.”

    Don’t forget — it also gives up plenty of opportunities to come in and fix (scrap) it all, too!

    That is why I enjoy being a .NET programmer coming from the Java world. It’s nice to be in a place of ample opportunity. Occasionally, you can mentor other programmers, too, which is also satisfying.

    Nice article!

  50. JDT says:

    Is this really a problem that is inherent to technology? Every principle, from IoC to DDD and TDD is not related to technology. With Spring and Spring.NET, jUnit and NUnt,… there are a great many number of frameworks that perform the same functions and differ only in the language they were implemented in.

    What is lacking is the community. I started off as a java developer when I was studying, but have been working with C# for the past two years in my job. I find myself going to the java discussions when it comes to architecture, design,… Compare the architecture threads in the java spring forums to the spring.NET forums to see what I’m talking about.

    What (new) .NET developers need is exposure. Java developers will find it hard to turn a corner without running into stuff like IoC and DDD. .NET developers are assimilated into The One Way To Develop Software as set forth by Microsoft. Java lacks these ‘formal rules’, and instead has a community that promotes the ideas and principles that are so dear to us.

  51. Gregory says:

    Nicely done. The .NET community would do itself a huge favor if it recognized there are projects for Drag and Drop programming and then there project that merit – have risks/rewards to support a more thoughtfully crafted solution.

  52. Srikar says:

    I do think the awareness will grow as more number of Java developers/architects, and evangelists jumping over to Microsoft technologies.

    To some extent, Microsoft is leading this change. If you look at the their new platforms specially ASP.NET MVC and Silverlight, it is all about going back to the drawing board and coming up with efficient designs and tools.

    Give it some time…

  53. Greg says:

    Evgeny if you think the argument is about “big projects” then you have not understood the argument.

  54. Evgeny Shapiro says:

    There is a constant argument which is repeated from one post to another. “DDD is for astronomically big projects, don’t bother yourself going this way on smaller ones”. I would say that the learning curve and accompanying expenses are rather high, but small and mid projects are a good way to apply the principles and put them all together with real-word requirements.

    With this said, I really dislike the shopping cart/blogs eternal samples. It gives you a false feeling that the concepts are quite simple.

  55. Mike says:

    I’m not sure what the point of this article is. Is it that Java programmers are better on average than .NET programmers, that DDD is not always the right solution or that we should isolate less experienced/skilled programmers so we can be arrogant without offending anyone? Strange mix of topics.

  56. Cy says:

    Greg, this is refreshing. There are those in the community (.Net, Java or otherwise) that turn everything into a pissing match. I know you are active on the alt.net and ddd groups and it’s great to see that you can play an active role on those topics, but still understand that they aren’t the silver bullet.

  57. Greg says:

    @patrice I think thats a cop out

    90% of systems I see advertised as “enterprise” would be better off taken simply and are in fact not very enterprisey at all.

    As for notbeing able to write bad code. Go to enterprise system A that you wrote 3 years ago … how’s the code in it?

  58. Nathaniel Neitzke says:

    Meh this is just an excuse for Microsoft designing really poor frameworks imho. Drag & drop could be done well. There is no reason why drag & drop could not work in say a DDD environment with a really well designed framework.

    To get at any advanced functionality you would need to get down to code level, but there is no reason we could not have drag & drop producing the basic code “well” so that it is not such a massive maintenance nightmare.

  59. Visual Studio should have two sets of templates:
    1) the templates we are used with, for demos and throw away code
    2) enterprise templates where we can’t cut corners and wright bad code/applications!!

  60. Mike says:

    I’m also not suggesting streamlined is drag and drop. I’m talking about alternatives to fluent nhibernate, the wcf stack, or asp.net mvc. I’ve found .NET to be a far more integrated solution with great extensibility points than anything in the Java world.

  61. Mike says:

    I’m a C# developer and looked into using Java as an alternative to .NET. What is available in the Java world that’s more streamlined in the .NET world? What do you suggest using as a platform for development- Spring, Glassfish, JBoss, JSF, Groovy?

  62. Peter Morris says:

    When I used to write code in Delphi I would very often find myself doing things that other Delphi developers weren’t doing, or weren’t sharing their experiences on; so I’d end up scouring C++ resources and translating them.

    With .NET I have often wondered if I should research Java materials. Not because I have any interest in Java at all, but because I have no idea what I am missing out on.

    Any suggested communities / resources?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>