Slashdot Mirror


Visualizing the .NET Framework

eldavojohn writes "If you're a Web developer, you should check out a quick post about the number of types, methods, & fields in the .NET framework. This was done using NDepend. The numbers are quite large — e.g. 39,509 types. The blogger went on to generate tree maps and a dependency matrix."

33 of 320 comments (clear)

  1. Wow, that's a big fat ASS^H^HPI by NewbieProgrammerMan · · Score: 4, Insightful
    Seeing that I have no personal experience with .Net, and seeing that this is Slashdot, I feel totally qualified to poke fun at its stupendous complexity with a quote:

    Any third-rate engineer or researcher can increase complexity; but it takes a certain flair of real insight to make things simple. -E. F. Schumacher
    --
    [b.belong('us') for b in bases if b.owner() == 'you']
    1. Re:Wow, that's a big fat ASS^H^HPI by CastrTroy · · Score: 4, Insightful

      Yeah, let's compare .Net to PHP. .Net has a very extensive API. PHP also has a very extensive framework. The .Net framework was very well thought out and is very well organized. The PHP framework is cobbled together piece-meal, with everything in the same namespace (Yes, I'm aware that it still doesn't have namespaces, and won't until PHP6 is out, but that's yet another disadvantage of PHP), and separate functions for each database they support, where all are very similarly named, but not exactly the same.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    2. Re:Wow, that's a big fat ASS^H^HPI by AKAImBatman · · Score: 5, Insightful

      And a stripped-down non-existent API is a way to make things simple?

      Nope. Einstein said it best, I think:

      "Everything should be made as simple as possible, but not simpler."

      It's a given that new features will increase complexity. (Which, surprisingly, is not always true. But stick with me for a moment.) The key is to increase the complexity only as much as necessary. If you increase the complexity any farther, you have failed.

      I can't count how many times I have seen code that is overly complex. e.g. Someone piled up layer upon redundant layer of code, hoping to get simplicity out of each one. Instead, they create more maintenance, more points of failure, and more bugs. Probably one of the most egregious examples was a company that wanted me to use a go-between piece of software on another server to make a real-time request for XML. They had a lot of weak excuses for this decision, not one of which held water. After peeling back the layers of nonsense, I found out that the reason why they wanted it used is because they had already sunk $10,000 into it.

      While not all examples I've seen are motivated by money or CYA, I have certainly seen a lot of examples that were motivated by blind adherence to company standards or existing technologies. Never mind that this particular module doesn't need any of the features of Struts, the company policy says use it, so we use it. Never mind that ADO isn't a good API. We have it, so we should wrap it. Never mind that we could just plug in a lib to do the secure transfer directly, we need to Rube Goldberg it through 5 different machines, protocols, and scripts written in 7 different languages!

      There's a reason why engineers harp on the KISS principle. KISS is all about engineering a solution that will last for a long time to come. A solution that can be understood by others, maintained, is reliable, and exceeds the specs wherever reasonable. As Einstein said, make it as simple as possible and no simpler.
    3. Re:Wow, that's a big fat ASS^H^HPI by MrSteveSD · · Score: 4, Insightful
      I'm not saying that .NET isn't too complex, but having a large number of types does not necessarily increase complexity. In fact having less types often leads to more complexity.

      Creating a new type abstracts away complexity and makes code easier to read. For example, you will often find that business software does a lot of comparing of dates. e.g. Checking whether a date is within a given range. More often than not you will find that programmers have just written things like...

      If (EnteredDate >= StartDate) and (EnteredDate <= EndDate)
      {
      //Do stuff
      }
      else
      {
      //Tell the user they have entered an invalid date.
      }


      The logic of checking that dates are in a range is repeated all over the place and the more you have to type, the more likely it is that you will make mistakes. This is where adding a new type, a "Range" type will help. With a Range type you can just say something like...

      If (AllowedRange.Contains(EnteredDate))
      //blah blah


      So adding a Range class actually reduces complexity rather than increasing it. There are plenty of examples of this sort of thing. Imagine writing a car ordering system without having a Car class to abstract away details about cars. You could do it, but the code would probably be a lot more sprawling and complex.
    4. Re:Wow, that's a big fat ASS^H^HPI by daveime · · Score: 5, Insightful

      It is this level of function (mis)use that makes me cringe.

      So instead of being able to see both the variable AND the range it is being tested against IN THE SAME LINE, I now have to go trawling back through the code looking for the place where you created the Range object to find the low and high boundaries of it.

      So yet more jumping all over the place hunting for stuff, when the original version was completely fit for purpose, clear, and most importantly, IN ONE BLOODY PLACE.

      Of course, it get's even "better" ... not all range checking will use the same ranges ... so then some bright spark will create Range2, Range3, Range4 objects with different ranges in each one. You see how this function does nothing for either readability or speed of debugging, but simply hides information that a programmer NEEDS to know in the context of the line he is looking at ?

      You can keep your Range object thanks.

    5. Re:Wow, that's a big fat ASS^H^HPI by Gutboy · · Score: 2, Insightful

      Yeah, because right clicking on the code and selecting "Go to definition" from the pop-up menu is so difficult and takes so long to do.

      You don't need to know the ranges to know if your code will work. By creating a range tester, you can test that code once, and use it everywhere. You seem to be advocating recreating a range test everywhere you need it, adding to the complexity of your code, making it harder to read and maintain.

    6. Re:Wow, that's a big fat ASS^H^HPI by MrSteveSD · · Score: 5, Insightful

      So instead of being able to see both the variable AND the range it is being tested against IN THE SAME LINE, I now have to go trawling back through the code looking for the place where you created the Range object to find the low and high boundaries of it.

      You seem to be assuming that there would be a hard coded range. The allowable range may be defined in a database or elsewhere. Checking against the same range may occur in many different places, so you certainly would not want to have the range hard-coded in every routine you need to do such checking.

      Imagine that the Date range object was intended to check the date of birth of new employees (e.g. You want prevent mistakes like they were born 200 years ago or 50 years in the future). If you are smart you will have created some kind of Employee class, and this Date Range checking object could just be a static variable of the class itself. It would be pretty easy to see where it was set.

      So yet more jumping all over the place hunting for stuff, when the original version was completely fit for purpose, clear, and most importantly, IN ONE BLOODY PLACE.

      The whole point is to reduce the unnecessary repetition of logic. Imagine if you wanted to do something more complex like check if one date range was contained within another. Suddenly you start repeating quite a lot of logic without a Range object.

      Of course, it get's even "better" ... not all range checking will use the same ranges ... so then some bright spark will create Range2, Range3, Range4 objects with different ranges in each one.

      Of course there will be different ranges. What does that have to do with anything? If anyone names variables "Range1, Range2" etc, they need some quick re-education.

      You see how this function does nothing for either readability or speed of debugging, but simply hides information that a programmer NEEDS to know in the context of the line he is looking at ?

      It's interesting that you think information is being hidden. This would only be the case if you compare it to the situation of hard coding things everywhere, which is generally a very bad practice. The information in a Range object is no more hidden that the case where your limits are two separate variables called "StartDate" and "EndDate" (Variables which might be initialized when the application first starts). What is really being hidden is logic. That's what object oriented programming is really all about, i.e. trying to abstract away complexity into new types.

      You can keep your Range object thanks.

      It's not really mine. Martin Fowler wrote about it in Analysis Patterns, although I'm quite sure it was being used long before it occurred to him.
    7. Re:Wow, that's a big fat ASS^H^HPI by daveime · · Score: 2, Insightful

      Yes, I mean don't get me wrong, there are a lot of useful types out there.

      The danger is "type overload", the obsession with using types for every sundry purpose, i.e. the same logic the parent displayed when automatically thinking that using the Range type was helping him or anyone else.

      Anything that abstracts out the conditional tests you are doing, so that one or even both halves of the tests have to be looked up elsewhere, is a bad thing. But you give someone too many types to play with, and he'll feel obliged to use them whenever the can.

      Give a man a hammer, and watch him build. Give a man 100 hammers, and watch him hit himself on the thumb.

    8. Re:Wow, that's a big fat ASS^H^HPI by Siberwulf · · Score: 3, Insightful

      My two bits:

      With .NET 3.0/3.5, you can create something called an extension method.  This would probably be better than creating a range class, or even the inline code the grandparent of this used... Lets look!

      public static class DateExtensions
      {
           public static bool IsBetween(this DateTime tested, DateTime start, DateTime end)
           {
                return (tested >= start && tested <= end);
           }
      }

      That leads to a great implementation that doesn't hide any variables or values and still allows for easy readability

      DateTime Signup = (Fetch some value here);

      if(Signup.IsBetween(DateTime.Now.AddDays(-1), DateTime.Now)))
      .......

      You get the jist... I know thats picky, but you don't have to give up anything these days, if you try hard enough.

    9. Re:Wow, that's a big fat ASS^H^HPI by Anonymous Coward · · Score: 1, Insightful

      .Net has a very extensive API. PHP also has a very extensive framework Having some thousands of functions in the global namespace doesn't mean it has a very extensible framework.

      Since PHP seems to use simple functions and primitive types for almost everything, and the number of such functions are in the order of thousands (only! ;-p), 39,509 types in .NET probably beats it by a huge margin...

      I don't see the point of making the comparison though :-/ The funny sibling comment might be the more appropriate response ;-p
  2. .NET is OOP gone stupid. by Anonymous Coward · · Score: 4, Insightful

    .NET and Java are both prime examples of object-oriented programming gone stupid. Their class libraries have become so utterly huge that it becomes damn near impossible for an individual developer to suitably grasp anything more than a small portion of them.

    Although they supposedly give more flexibility, something as essential as reading from and writing to a file becomes a hassle with .NET or Java. It's easy to get lost in whether we need a FileInputStream, or whether we should wrap a FileInputReader in a TextInputBuffer, and so forth. Give me fopen() any day.

    OO was supposed to solve the problems of writing applications in languages like C, Pascal and Fortran. All it has done is brought in a new level of complexity that results in monstrosities like the Java and .NET standard class libraries. Meanwhile, the POSIX API offers just as much flexibility, but is far easier to work with. Not to mention that programs using it are far more efficient.

    1. Re:.NET is OOP gone stupid. by NewbieProgrammerMan · · Score: 4, Insightful

      Although they supposedly give more flexibility, something as essential as reading from and writing to a file becomes a hassle with .NET or Java. It's easy to get lost in whether we need a FileInputStream, or whether we should wrap a FileInputReader in a TextInputBuffer, and so forth. Give me fopen() any day.
      The first time I saw what you (supposedly) have to do to read from a file in Java, it pegged my OMGWTF meter. I'm sure there's totally valid reasons for making such simple (and common) tasks so complicated, but apparently I'm not smart enough to understand them. IMHO it's one thing to have the complexity available if it's needed, but it's another to make me endure all that complexity if I don't need it.
      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    2. Re:.NET is OOP gone stupid. by free+space · · Score: 5, Insightful

      I kinda disagree.
      To talk about your example: fopen( ) might be nice and simple, but the capabilities provided by .net and Java are much bigger in scope.

      You can use them to read and write files with different encodings, you can treat a lot of other things as files, and combined with formatters you could serialize your data to binary files or XML almost without writing code.

      Even more, the different classes are orthogonal, so you can mix and match different encodings, formattings, and file operations without the combinatoric explosion of having a separate function for every possible operation. It's an elegant design in my opinion.

      Furthermore, the libraries of Java and .net provide standard interfaces and hooks to link your own code. Want arrays of your new data type to have automatic sorting capabilities? just implement IComparable. A little bit of work would let your new collection class bind automatically to Winforms' data grid control. And many more examples.

      If you remove .net's huge libraries, you get a situation like C++ where there are half a dozen pseudo-standard libraries for encryption, networking, GUI and stuff. You have projects with incompatible dependencies and a lot of wasted effort writing, debugging and maintaining all those libraries. Microsoft may have a lot of problems with their products but .net is one of the most well designed things they've produced.

      To be fair, .net inherited a lot of this from Java, but they improved on it. Java, in turn, adapted/improved the Smalltalk libraries that have helped pave the way for the "language with everything included" paradigm.

    3. Re:.NET is OOP gone stupid. by n+dot+l · · Score: 5, Insightful
      My experiences with Java were painful, but they are out of date, so I'm only going to talk about .NET, which I actually use in my day-to-day work because it's actually the best tool for many of the jobs I do.

      .NET and Java are both prime examples of object-oriented programming gone stupid. Their class libraries have become so utterly huge that it becomes damn near impossible for an individual developer to suitably grasp anything more than a small portion of them. Interestingly enough, an individual developer does not need to grasp anything more than a small portion of them. An individual developer needs to know the basics of the core class library and whatever else he needs to get his job done. The vastness of the ASP.NET (or whatever) libraries is not an impediment to one who does not use them.

      Also, there is documentation, and Intellisense (freely available, now), and a naming convention that actually makes sense after a while. F1 isn't that hard to press.

      Although they supposedly give more flexibility, something as essential as reading from and writing to a file becomes a hassle with .NET or Java. It's easy to get lost in whether we need a FileInputStream, or whether we should wrap a FileInputReader in a TextInputBuffer, and so forth. Give me fopen() any day Seriously? You actually found string[] lines = File.ReadAllLines( string path ); to be difficult? Or are you just talking out your ass?

      Of course, there are more complicated examples, but that's usually because they're either years out of date (.NET 1.0), or just plain doing more.

      OO was supposed to solve the problems of writing applications in languages like C, Pascal and Fortran. All it has done is brought in a new level of complexity that results in monstrosities like the Java and .NET standard class libraries. Meanwhile, the POSIX API offers just as much flexibility, but is far easier to work with. Not to mention that programs using it are far more efficient. Yeah? I find typing File[dot] and hunting through the fairly short list of methods easier than remembering what the valid values were for fopen's mode parameter are, and whether there was a platform-specific one I should be using to get the file-locking behavior I want. And file.Read( ... ) is a lot neater than fread( ..., file ). You can go on all you want about how I'm being lazy, but I have more important things to commit to memory than API entry points and the quirks of their parameters (like, say, the overall structure of my app, or the problem it's being written to solve). YMMV, of course.

      As for plain C applications being more efficient, well, what exactly does that have to do with what methods are named and what namespaces they do (or do not) reside in? Second, that's not the point. Getting a quick GUI app up and running in a hurry is more what you'd use .NET for, something you can't even begin to do in C until you've sat around for a while thinking about fun things like memory management for shared resources.

      Yes, C is valuable and it's still pretty much the best choice for writing tight, high-performance loops that do lots of pointer-manipulating, bit-twiddling evil - that's what I and every other sane programmer I know uses it for. But it's also a damn waste of my time to be using it to write Win32 GUIs for art tools. My time is more valuable than a few CPU cycles.
    4. Re:.NET is OOP gone stupid. by Dilly+Bar · · Score: 2, Insightful

      You may be right, but try another example for .NET. Here are some .NET APIs you can use to read a file:

      byte[] File.ReadAllBytes(string path)
      string[] File.ReadAllLines(string path)
      string FileReadAllText(string path)

      and write to one:

      File.WriteAllBytes(string path, byte[] bytes)
      File.WriteAllLines(string path, string[] contents)
      File.WriteAllText(string path, string contents)

      Oh, and you can still compose types for more complex scenarios.

      Full disclosure - I work for MS on Visual Studio

    5. Re:.NET is OOP gone stupid. by giminy · · Score: 2, Insightful

      I started as a unix developer and switched recently to programming in windows, and use .NET quite a bit (it was the job that was available at the time ;-)). .NET and Java are both prime examples of object-oriented programming gone stupid. Their class libraries have become so utterly huge that it becomes damn near impossible for an individual developer to suitably grasp anything more than a small portion of them.

      Give me fopen() any day.

      There are a lot of things that I don't like about .NET (and particularly visual studio :)), but I think these arguments are invalid. fopen() is fine and good, but opening a file is a lot more complicated than just one posix function -- you have race conditions, concurrency issues, etc, if you're working on anything bigger than an academic project. You can develop your own libraries for safely doing things if you want, but going from job to job that becomes difficult legally (who owns the library?). And, of course, using some extra library to wrap your posix is kind of an argument against posix being the be-all-end-all uncomplicated solution.

      Programmers often have areas of specialization, and not knowing more than a small portion of a gigantic library isn't necessarily a bad thing. I know the '.NET methodology' (and it is quite consistent) well enough that I could use other parts of the library. Quite frankly for my line of work I don't anticipate ever having to, as it's fairly niche.

      Reid

      --
      The Right Reverend K. Reid Wightman,
    6. Re:.NET is OOP gone stupid. by Mongoose+Disciple · · Score: 2, Insightful

      The idea of using a garbage collected language in a production environment for a large project is just plain silly, for the simple fact that garbage collection does not scale well and it introduces nondeterminism in your code - two things which are fundamentally opposed to the proper operation of a large software system.

      Define does not scale well. I worked on an enterprise .NET project a year or two ago that managed a variety of transactions amounting to millions of dollars worth of business every day for a Fortune 100 company. It required a lot less hardware than you'd guess to run. Garbage collection wasn't a problem at all.

      The reality is that for every 100 developers that think they can write non-trivial, say, C++ code that does not leak memory, there's probably around 1-2 that can actually do it. Those people are hard to find and generally not cheap. For most applications, it does not make economic sense to insist on having the "better" software engineers. It's just not cost effective to pay more expensive people to take more time to write the app in the majority of cases where garbage collection vs. manual memory management just doesn't matter.

      Further: the union of the set of developers that can reliably write code with good memory management in a language like that, and the set of developers that can make good architecture decisions for an enterprise-level app approaches the empty set. That second set of skills is ultimately much more important to the success or failure of most sizeable applications.

      You can hate on GC if you want, but the business world moved on more than a decade ago.

    7. Re:.NET is OOP gone stupid. by Anonymous Coward · · Score: 1, Insightful

      > Getting a quick GUI app up and running in a hurry is more what you'd use .NET for, something you can't even begin to do in C until you've sat around for a while thinking about fun things like memory management for shared resources.

      Did you just compare a language C with a framework .NET?
      A quick way to get a GUI up and running in a hurry is to either use GTK+, wxWidget or QT4 for those who want to use c++

    8. Re:.NET is OOP gone stupid. by trezor · · Score: 2, Insightful

      You expect PHP programmers of all people to understand the benefits of a thorough and consistent API with standarized interfaces and object-nesting?

      Good luck with that.

      --
      Not Buzzword 2.0 compliant. Please speak english.
  3. .NET by The+Aethereal · · Score: 3, Insightful

    .NET really is an amazing framework on which to build software. It just needs more OS support and I would use it for programming other than what I do for a living. All those types are there, but they will not be loaded in to memory unless your software needs them.

  4. Re:This is News? by megaditto · · Score: 4, Insightful

    It doesn't suck because it's made by MS or ripped off from something. It sucks because the documentation is piss-poor. And there isn't a single working (i.e. cut-and-paste) example for a single API (someone told me they break them on purpose so that newbies don't cut-paste themselves into security holes without understanding exactly how the thing works, but hell!)

    I noticed the same thing when Apple released their Cocoa framework (with over half of help pages saying "TODO: descrition, example"). Some Quicktime documentation is still that way today!

    How anyone expects the undocumented API stuff to be useful is beyond me.

    --
    Obama likes poor people so much, he wants to make more of them.
  5. If more types is bad, then Java is equally bad. by Anonymous Coward · · Score: 5, Insightful

    Before you impugn Microsoft with your short-sided emotional appeals against the sheer number of classes, use a hint of logic and realize that since MS copied Java shamelessly and ruthlessly (improving on some debacles in the Java classes, such as the crap IO classes that had to be redone from scratch), you'd be blasting Java, KDE, Python, and most any other class library as well.

    Look, in a class library that purports to help most everyone, there's going to be an awful lot of code. Class library implies that classes are used to organize the abstractions provided by the library. Proper OO design favors designing more types with smaller number of features rather than God-objects that do many things. Fine-grained objects are simpler to unit test and are much easier to reuse. The downside is the propagation of types and the verbosity level of the code generally goes up. But that is a fair trade-off in my opinion, since the most important work on the code happens in the maintenance phase, when someone else can come along and at least get a vague idea of what is going on.

    I've used the class libraries in Java, KDE, MFC, and Python, and the .NET class library beats them all easily. It is obvious that the designers did their homework and stole from each library what worked well, while dropping what didn't. If they were smart they'd take Java's excellent concurrency constructs such as the BlockingQueue and put them in (they may already have, I don't program much in .NET lately). Most of my beefs with the class library are the fact that it is huge (footprint size), and I don't agree with some of the modeling. But that is minor.

    There's a reason Miguel wanted to make this happen on Linux. It is close to making programming fun again, instead of squinting at hyper-abbreviated function names like sprintf and mucking around with idiotic string representations such as C's.

  6. Re:The horror! by Lux · · Score: 5, Insightful

    Hallelujah, brother!

    What bugs the snot out of me is that a lot of that stuff is documented really well, but only on developers' blogs. What the hell kind of insulting documentation non-strategy is that? And of course, there's no cross-referencing between msdn and "the blogosphere." So you get to churn away at a search engine until you find a blog entry that's kind of addressing what you want to know.

    That said, I do like a lot of stuff about C#. Delegates, for example rank high on that list. And C# 3.5 offers some pretty cool new stuff as well. I likey the lambda expressions, inferred typing, and LINQ.

    But the documentation does make me cry at night, sometimes. Sometimes.

  7. Re:This is News? by Anonymous Coward · · Score: 1, Insightful

    http://msdn2.microsoft.com/en-us/library/1k20k614.aspx

    I googled for ".net convert string to int" and that came up. The official documentation on Microsoft's site. Anyone who knows anything about developing on .NET knows to check MSDN for stuff. They have TOO much in the way of examples: one for every target .NET language! So you can have a C#, VB.NET, Managed C++, JScript.NET, J#, and XAML examples on some of this stuff.

    You really can't be serious here.

  8. I love every single one of those lines of code. by rice_burners_suck · · Score: 2, Insightful

    I remember JLG (the fearless leader of BeOS fame) once saying something to the effect that Windows has five billion lines of code in it and that he "loves every single one of those lines." I also seem to recall Bill Gates once saying that IBM liked software to be measured in k-locs, while he debated that it should be measured by what it does. He said something that I don't quite remember, but the jist was, "why would we do something in thousands of lines of code if it could be done in just a few?" How ironic. Hmmm... if JLG's comment was made a decade ago, and our dance teacher has 30,000 monkeys adding a k-loc or two to those five billion lines every day, then there are now about 21,500,000,000 lines of code to love, which seems about right, given how many different "please wait" messages there are.

  9. Re:Web developers? by DAldredge · · Score: 2, Insightful

    FTN "ASP.NET is a web application framework marketed by Microsoft that programmers can use to build dynamic web sites, web applications and web services. It is part of Microsoft's .NET platform and is the successor to Microsoft's Active Server Pages (ASP) technology. ASP.NET is built on the Common Language Runtime, allowing programmers to write ASP.NET code using any Microsoft .NET language."

  10. Re:This is News? by thePowerOfGrayskull · · Score: 3, Insightful

    I don't know which is worse - the thought that you're making this comment without having read any of the extensive, working examples on the msdn site; or that you did read them and somehow still feel this way. .Net has plenty of flaws, but lack of documentation ain't one of 'em.

  11. Re:The horror! by DeadlyBattleRobot · · Score: 5, Insightful

    I have mod points, but this deserves about 10 of them so I reply in solidarity.
    The msdn docs are not enough, there are too many useless empty API pages. If it weren't for Google I couldn't do any .net programming work. It's ironic that their worst enemy is essential to working with their system.

    Often the most useful documentation and samples are scattered over a zillion forums (all requiring logins!), newsgroups, blogs, 3rd party books, etc.

    This has always been the case with microsoft development libraries, but it's getting worse because early on (internet time) it was mostly just usenet.

  12. The purpose of this complexity by symbolset · · Score: 1, Insightful

    The purpose of this complexity is to ensure the tool is obsolete before it is mastered.

    Since .NET platforms have an average lifespan of what, 18 months? You could spend that much time in a bootcamp drilling namespaces and methods all day and not get there before it's time to enroll in the next one. 384,000 methods? 12,324 public classes? How many of those are deprecated? How many soon will be? And of course if you use this junk to develop for windows, try to remember not to get uppity and make a market with your product. You don't have a chance because the real tools are not here. These are just toys to keep you occupied. But look! They're shiny!

    Do not invest your time and money learning trash like this when the turnover is this high. It's not worth it.

    --
    Help stamp out iliturcy.
    1. Re:The purpose of this complexity by bladesjester · · Score: 5, Insightful

      I realize that you're one of those "Anything but Microsoft at any cost" people, but I have some news for you.

      1) You don't have to memorize what is in every namespace in *any* language. You just have to have a good enough overview of them to know where to look effectively for something you need. Spending all of your time trying to memorize everything in libraries is a waste of time and usually only done by undergads who think that they know it all.

      2) These are just toys to keep you occupied
      I hate to break it to you, but there is a great deal of business that is done on Microsoft software. There are a number of reasons for that (admittedly, not all of them are good reasons). One of them is that MS has done something Linux and the others haven't - they make software that makes it fairly simple for most businesses and people to do 80% of what they need to easily. In addition, needs which are not met by MS itself, and a number of needs which are, are covered by various 3rd parties.

      As for "toys to keep you occupied", I'm one heck of a lot more productive using C# in Visual Studio for most of the things that I have to do than I was using C or C++ in xemacs. C and C++ are fine tools for doing things closer to the metal. Most applications don't need that.

      In addition, dealing with deprecation in .NET isn't really any worse than when I was dealing with it in C, C++, or any other language that I've used.

      You need to learn to use the right tools for the job. Instead, you want to bash tools on an idealogical basis. It's a sign that you really need to grow up.

      --
      Everything I need to know I learned by killing smart people and eating their brains.
  13. Re:Answer: No Thanks by RobertM1968 · · Score: 3, Insightful

    I hate to say it, but whether "Naughty Bob" is normally a troll or not, I suspect he is correct.

    MS has yet to show the type of design innovation that foregoes bloated code. Instead, when something doesnt work, or wasnt planned out correctly, they just add a bunch more stuff, then a bunch more, then a bunch more... then pat themselves on the back for the "innovation" which they equate with the number of things added.

    Writing an extensible framework - and then extensions (or example extensions) would have been smarter, smaller, faster, and easier for true developers to implement.

    The "Everything - including the kitchen sink" attitude does not work well in the computer world - the fact that their programs and apps are getting far more bloated, barely gain additional functionality (regardless of their claims) and getting far more resource hungry (while not adding significant functionality) is a perfect example - and one I think they are following with .Net

    To me, it looks more like they are trying to prove that they can compete with, and surpass, all their .Net competition by sheer number of "features"/"capabilities" - which does not make it better. Their .Net framework already scaled horrendously to many types of implementations (like the Service/Customer tracking unit CompUSA used to use - as any of you who worked in Tech or Business Sales can attest to - from fond memories of running a rather simple report, going out for coffee and a quick breakfast, coming back, and still having 10 minutes to wait (of a total 30-40 minutes) - nor were the data sets that big, or the front end complex).

    I'm far happier with using ________________ (pick almost anything else used in the non-Windows world), and far happier extending base classes and functions, over using pre-written bloatware versions.

    But then again, besides the competition aspect, I think they are also trying to woo companies that can hire even less expensive "developers" since sooooooooooo many more things have been added making development a matter of point and click (and requiring even less actual development skills)... it seems more like a two prong attack against their competition.

    Great, that's fine... nothing wrong with that - if it's not at the sacrifice of security, performance, and interoperability. But of course, it does sacrifice all of those... and really doesnt seem to do much at all.

    So many of the new methods and classes are all stuff that the originals should have allowed the extensibility for to begin with. And so many should be variants on the same method (SOM anyone? Compare the SOM/DSOM design to just the first few lines listed in the article).

    ...so tell me again, how is "Naughty Bob's" post flamebait? No one who has responded to him has yet said why.

    Feel free to mod this anything you want... doing so wont change reality.

  14. There's just a lot of features by tjstork · · Score: 2, Insightful

    Simplicity? Internal logic?

    Yes, actually. There's a ton of features in Windows at the SDK level and .NET is really designed to be a wrapper around all the different Windows services. A lot of things in Windows are rather difficult to program at the C or even the C++ level. The standard Win32 API isn't too bad to work with in C, but the windowing functions and the messages mechanism is enough to provoke tears. Really, Windows is terrible for programming in C compared to Linux, and so, at least .NET papers over all the crap.

    Right off the wheel, I can think of a couple of things that are easier to do in .NET than in the native C++ in Windows. Writing services in C++ is basically torture. In .NET, services are very easy to write. In C++, cracking messages in Windows forms natively is a tad like pulling teeth. MFC is aweful and ATL/WTL are better, but, I would prefer a native C++ framework like what was done with BeOS. Still, GDI+ in C++ is pretty much the same as using GDI+ in .NET, except that .NET actually gives you more convenient handling of images and fonts. Files are much easier to work with in .NET than in C++. The Path combining classes are entirely welcome and those things are great. .NET String is better than the STL string, by far, and I really like that Microsoft stole the Java idea of a StringBuilder.

    Of course, .NET forms are ugly and slow. The presentation framework looks cool, but, that's now two libraries for user interface, not counting all the web stuff.

    Speaking of Java... I wonder how many lines of code are in THAT framework?

    --
    This is my sig.
  15. So, wait a minute by glwtta · · Score: 2, Insightful

    Having a large class library is a bad thing now? You don't like it when other people do work for you?

    It's all properly namespaced (unlike some languages I could name), having a bunch of classes you don't need to use does not add to your mental footprint.

    --
    sic transit gloria mundi