Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
×
Programming Operating Systems Software Windows IT Technology

How Microsoft Dropped the Ball With Developers 814

cremou writes "As part of an Ars Technica series on how one developer migrated from Windows to OS X (and why), this second article concentrates on how Microsoft bungled the transition from XP to Vista. The author looks at some unfortunate decisions Microsoft made that have made Windows an unpleasant development platform. 'So Windows is just a disaster to write programs for. It's miserable. It's quite nice if you want to use the same techniques you learned 15 years ago and not bother to change how you do, well, anything, but for anyone else it's all pain... And it's not just third parties who suffer. It causes trouble for Microsoft, too. The code isn't just inconsistent and ugly on the outside; it's that way on the inside, too. There's a lot of software for Windows, a lot of business-critical software, that's not maintained any more. And that software is usually buggy. It passes bad parameters to API calls, uses memory that it has released, assumes that files live in particular hard-coded locations, all sorts of things that it shouldn't do.'"
This discussion has been archived. No new comments can be posted.

How Microsoft Dropped the Ball With Developers

Comments Filter:
  • by Anonymous Coward on Monday May 05, 2008 @08:31PM (#23306660)
    I am 'this' close to jumping ship. I use Ubuntu on machines at home and find it fast and clean, even on older hardware.

    I have access to all MS software as our MSDN and Gold Certified Partner plan administrator. I have tried Vista on a couple machines. Even on a brand new Dell dual core laptop with 2 gigs of ram, it was sluggish and still could not use the full aero interface. Yet I installed Ubuntu on a 4 year old 600m with 512MB ram and got a full interface with snappy performance.

    I don't need aero to develop code. The features I was most interested in all got cut from Vista... most notably the filesystem upgrades. Now add frequent updates to the framework that require $1200 software packages to use to the fullest extent. Then add the insane cost of a legit SQL Server license on which to deploy it. Plus as a domain admin, I find the administration to be a drag. And I still don't trust them for a second on security. It all adds up to a monumental drag.

    I am a frustrated .Net developer. I don't know that it is that much better on the other side of the fence frankly, at least as far of the coding environments go. But I KNOW for a fact that I prefer linux to Windows.
  • by crt ( 44106 ) on Monday May 05, 2008 @08:39PM (#23306700)
    Microsoft has dropped the ball in a number of areas, particularly with regard to user-interface APIs which this article focuses mostly on, but in other ways it is far and away the easiest platform to develop for - mainly because of the quality of their development tools. Having done lots of development across Windows, Mac, and Linux with all kinds of editors, IDEs and debuggers, nothing comes close to Visual Studio in terms of functionality, quality, and just being solid. It's not perfect, but it's way better than anything else out there. For that reason alone Microsoft deserves some kudos from developers.
  • "one developer" (Score:5, Interesting)

    by Whitemice ( 139408 ) on Monday May 05, 2008 @08:39PM (#23306702) Homepage
    "how one developer migrated from Windows to OS X"

    That pretty much says it all: "one developer"

    The argument about old krufty code in Windows and the Win32 API has been around since.... the Win16 API! It didn't really seem to slow down Win32.

    On the flip side is the argument that the need for backwards compatibility is holding back Windows - yet developers complain about the migration from XP to Vista?

    All smells like we-will-find-anyway-to-condemn-Windows to me. Note: I do all of my development on LINUX, so I'm not a Windows booster. I think lots about Windows just stinks but there is an issue of credibility here.

    If you want a clean new coherent API and you want to develop on Windows Microsoft has provided an option: .NET
  • Re:"one developer" (Score:3, Interesting)

    by Drishmung ( 458368 ) on Monday May 05, 2008 @08:47PM (#23306762)
    From TFA, he claims that .NET is neither clean nor coherent, i.e., that MS squandered an opportunity.
  • by Adambomb ( 118938 ) on Monday May 05, 2008 @08:47PM (#23306770) Journal
    well, it does indirectly but not as blatantly as the article would have one believe. Don't forget that if the API's were properly designed to begin with, it would have been impossible to give invalid parameters to the function or allow the use memory that has been released.

    I have no idea what hes on about with the hard-pathed file references.

    The problem is so many corporate coders back in the day (and still) would use whatever shortcuts they could within the api including "undocumented features" like the former two issues. If Microsoft were to fix these issues without compatibility for these "features", it would break tons of legacy applications. Therefore, ongoing developing must include these already-incorrectly-designed portions of the API as well as whatever they really want to be working on.

    Just because a company does something poorly to begin with and people adapted to it, doesnt mean the company isnt to blame for the issues.

    Course that doesnt make this article NOT a flaming pile of rhetoric, it just makes it slightly less than complete and utter bullshit.
  • Glory days are here (Score:5, Interesting)

    by icepick72 ( 834363 ) on Monday May 05, 2008 @08:48PM (#23306774)
    Despite what's underneath Windows, programming it through the .NET platform is very slick. Most of what had to classically be linked to in obscure ways is wrapped in the Framework Class Library. Most people complain it's large but after you learn the basic structure you can find immediately what you need using the documentation. Microsoft has also abstracted away the trickyness of DLLs and you can program against mostly any functionality using your language of choice [dotnetpowered.com].

    When articles claim Microsoft dropped the ball I think it's more wishful thinking than anything, because Windows programmers are in their Enterprise glory days right now, no longer restricted to VB and half-assed object models. Not anymore. We now have full OO features and much much more, and Java is playing cathup feature-wise. It's nice for a change.

    I don't care how messy Microsoft's underlying code is, as long as they've tested it and ensure it works enough for me to program against it. The Microsoft security updates help a lot too. They're very frequent which means there are a lot of security flaws but they take care of them quickly (I'm sure I will get numerous examples where they didn't take care of security quickly but if you're on Windows update you see them coming thought all the time).

  • by frank_adrian314159 ( 469671 ) on Monday May 05, 2008 @08:48PM (#23306782) Homepage
    Yes, but making the hardware suck to scrape a couple of pennies off the price didn't help the BIOS. Actually, I blame IBM more for not choosing a better processor than the x86. There were sane architectures out there at the time (e.g., Motorola 68000). A lot of the craptacular nature of the BIOS (not to mention DOS and early Windows programming) came out of that particular decision. But, back then, IBM was a fairly craptacular company anyway. It seems to have improved a bit since then (although, it's hard to tell; with a company the size of IBM, you may be looking at the stern of the oil tanker and everything looks fine, while on the bow, fires are raging).
  • by glebd ( 586769 ) on Monday May 05, 2008 @08:57PM (#23306856) Homepage
    Windows includes myriads of patches to adapt to buggy third-party applications and just make them work. I don't know of any other OS that chooses to silently ignore application bugs or modifies API behaviour to avoid crashing defective applications. So if an application is used or manufactured by a major business entity and is buggy, unsupported, or programmed by lazy/incompetent developers, chances are MS has one or two fixes for its bugs _permanently_ built right into Windows. Because if old and unsupported applications stop working in the next version of Windows, chances are MS will lose customers to other platforms. Application compatibility is the only thing that ensures continuous market share of Windows. MS is prepared to break the OS to support buggy and old third-party code. Now tell me how does all this improve your confidence in the quality of the Windows platform.
  • by TheNetAvenger ( 624455 ) on Monday May 05, 2008 @09:00PM (#23306898)
    No concept of what .NET really is, misleading users.

    No mention or acknowledgement of WPF/WCF or the new APIs that are and 'set' to replace Win32/Win64

    Completely misleads users about API concepts and features of OS X compared to Windows, for example XAML/XPS concepts compared to Display Postscript is a massive difference in display technologies that are part of the new Windows API sets, that Carbon or Cocoa cannot provide to developers. (Go to Channel 10 and watch videos on why XAML/XPS was created and how it trumps every aspect of other display/print technologies. - Let alone how it is an integrated aspect of the video API system in Vista, making programming freaky simple for advanced features and new UI platforms like 3D.)

    The author then jumps into UI consistency with dialog wording, and doesn't mention OS Xs lack of keyboard support, consistency of delete/backspace or 100 other things more important than dialog wording which is also NOT PART of Win32 inherently.

    Author doesn't realize Microsoft and IBM wrote most of the GUI and UI guidelines that OS X even uses today.

    Office 2007 is a new direction in GUI paradigms, and is WELL accepted in the business world. Not something to make fun of when OS X is still using old MENU (textual word lists) concepts. Menus were a hack to make features available in a GUI context, but are a draw back to non-graphical UIs. Vista and Office 2007 moving away from word lists (MENUS) is the right direction, too bad Apple isn't innovating on UI and just keeps throwing the same UI slop at users and telling them it is good. (And don't even mention multi-touch UI, go watch the freaking TED conferences Apple ripped the ideas off from several years ago, let alone the MS multi-touch work that also preceded the TED conference. MS Research has and is doing more with UI than any other think tank in the world.)

    Author also totally ignores Adobe not providing any 64bit support for OS X because Apple dropped the ball on Carbon x64bit support that has been promised forever from Apple. In contrast 64bit development on Windows in both Win32/Win64 and .NET/WPF is easy, transparent and has clear and easy paths for migration. (Let alone OS X is still a hybrid 64bit OS, using 32bit code throughout the OS, unlike Vista x64)

    So for 'real developers' like Adobe (OS X) is a failure, and has failed paths. Which means if you want a 64bit version of Adobe products, you will have to move to Windows for the peformance and benefits. Oh, how brilliant Apple and OS X is...

    This brings up the horrid Carbon/Cocoa platforms and migration paths, and even then not even touching on the development tool constrast between the two platforms.

    I challenge Mr. Bright to a real debate on the topics covered, maybe he can try to justify some of his misleading and outrageous claims.
  • by timmarhy ( 659436 ) on Monday May 05, 2008 @09:04PM (#23306930)
    it's only just better then total bullshit though. using his own benchmarks linux is a piece of crap for dropping features, and we should bash it for each any every poorly coded OSS project (believe me there is a LOT)
  • by ronark ( 803478 ) on Monday May 05, 2008 @09:28PM (#23307128)
    Sorry, but I must disagree with you. I program daily with .NET at work, and the number of times a P/Invoke is required to get advanced functionality is simply shocking. Not to mention the fact that despite the claim of being purely an object oriented framework, many parts of its design spit in the face of OO. I'm not talking about rarely used classes either. File, Directory, Math, Convert, Encoding, to name a few major players, cannot be instanced as they are declared static. How this is different from a simple function in C is beyond me. .NET might have a few things going for it (though the more I use it the harder they are to remember), but slickness is not one of them. Microsoft dropped the ball with .NET.
  • by gfxguy ( 98788 ) on Monday May 05, 2008 @09:34PM (#23307162)
    Because programmers are, you know, just leaving the Windows platform in droves! Because it's annoying to develop on!

    (sarcasm off)

    Windows has always been annoying to develop on; when you've got the lions share of the market, and the customers want "windows," that where most programmers are, annoying or not.

    So maybe they "dropped the ball," I say they never had the ball to drop, and they don't give a crap because if you want to make money, you work on Windows.

    Now... how is this different than last year, or the year before, or ten years ago?
  • by tclgeek ( 587784 ) on Monday May 05, 2008 @09:55PM (#23307368) Homepage
    You are correct and the parent is mistaken. Menus serve a very important function which is to allow the user to easily browse all the available functionality available to them. Note that menus are generally not the fastest way to perform a function, but as you said, it is the most unambiguous.
  • by EmbeddedJanitor ( 597831 ) on Monday May 05, 2008 @09:58PM (#23307394)
    In DOS days, there were often 3 ways of doing things. For example, take writing to the screen:
    You could call the BIOS interrupt function.
    You could call the MSDOS Interrupt function.
    You could detect the hardware and write directly to the hardware address.

    Both the BIOS and DOS mechanisms were slow and broken and did not follow the conventions of any programming language. For example terminating strings with the $ symbol, FFS.

    All commercial programs (and most hobbiest ones) wrote directly to hardware for speed.

    DOS was not really an OS at all. It did very rudimentary memory management. About the only thing you'd really use DOS for was disk access and application launching, otherwise DOS applications were basically "bare metal" applications that managed just about everything (screen, keyboard, serial ports, mouse,...) internally.

  • Re:Long Answer? (Score:5, Interesting)

    by ldhertert ( 833408 ) on Monday May 05, 2008 @09:58PM (#23307396)
    This was modded as funny, but, as a .NET developer, I find it to be exceedingly true. I just made the switch to OSX, because I was unhappy with the stagnancy of windows. But, as we speak, I have windows running in a virtual machine almost solely for the purpose of running visual studio. I find the articles critiques very hard to swallow. The argument that .NET is limited by the attempt to be simplistic is asinine. Just like java, there are high level "simple" functions that may or may not suit your needs. If they don't you have the capability to dig down into much lower level functions to do what you need to do. He states several problems with the UI capabilities of .NET. Before I even get into the technical components of his argument, if he's trying to say that Java is better in this area, then he needs to get his eyes checked. Every single java app I've ever used is ugly as sin, and I've seen a lot. Sure, it's portable across environments, but that's not what .NET development is being used for. Aside from that...not happy with with the windows UI standards? Everyone else seems to be. You can write .NET apps that follow very closely to the common windows UI design standards. Not happy with the limitations on the UI? Write/use another UI implementation like GTK. And how do we not even mention that the UI layer has been completely overhauled with the advent of WCF? I can say with experience that .NET is very powerful and can be very pleasant to work with. The ability to move from desktop apps to web apps to mobile development with very little effort has been great for me and my career. I'm sure that Java does a lot of things right, but as someone who has seen a lot of the terrible things microsoft has done, I honestly think that .NET is a crowning achievement of theirs.
  • by MechaBlue ( 1068636 ) on Monday May 05, 2008 @10:12PM (#23307506)
    MS invents an idea, Apple profits from it. That demonstrates the difference between invention and innovation. MS spends way more than Apple on R&D and, somehow, Apple is able to seem more cutting edge and profits as a result. Marketing plays a role, of course, but it's not the whole story.

    From my experience, .NET feels like a cheap knock off of Java. There are nifty things but API issues, missing features, etc. detract from the experience. Overall, I can sum up my feelings onC# and .NET as "I started with Java 8 years ago. Why do I want to learn it all over again?"

    Mac OS X may not be the most pragmatic route but it is more fun than Windows. If I'm going to study a programming toolset on my own time, it needs to be fun. That's why OS X will draw more enthusiastic programmers than Windows. The only semi-exciting thing .NET has going for it is XNA.
  • by dhavleak ( 912889 ) on Monday May 05, 2008 @10:17PM (#23307530)

    what is the problem with menus? ... unambiguous communication of options ...
    Menu's have their purpose and their limitations. As apps get more functionality, the choice-lists get longer and longer, you get more nesting of menus, sub-menus, sub-sub-menus, until finding stuff becomes hard. Cases in point: Photoshop (and cousins), and MS Office (and cousins). Another side-effect: most feature requests MS gets for Office, are for things that already exist - users just don't know they're there.


    The ribbon is not a new paradigm but it is a significant evolution. Menus do exist in Office 2k7 but the ribbon works so well, you rarely use the menus (in my case, practically never), even for advanced functionality.

    The grouping of functions is very obvious - your eye can pick out options faster. Icon sizes are dramatically larger (when necessary), and are designed to form a visual association with the picture and the action (this is always the idea - but it's embraced completely in the ribbon). Scrolling takes you back/forward through different sections of the ribbon -- so the entire UI is accessible without any clicks/sub-menus, and without taking over the whole screen.

    Template icons are dynamic, making it easier to associate a choice with the effect it has on your doc. Depending on your template, the icons change to reflect the styles - so no guessing what a particular style looks like (this might sound confusing - but when you use it, it even passes the grandma test). When you hover over one of the styles, the active line in the doc changes to that style (just a preview - the change doesn't take effect until you click) - so its super-simple to see what different styles will look like by just moving your mouse over a few icons.

    The idea is to enhance the visual association as much as possible, and to make the options as accessible as possible. Not so different from normal menu design, but (at least) I still experienced a very significant bump in efficiency, and reduction in menu item clicks and searching.

  • by mdarksbane ( 587589 ) on Monday May 05, 2008 @10:31PM (#23307662)
    The difference is that Mac OS X was a cutoff line for all of that backwards compatible crap. A whole lot of stuff broke with Mac OS X, and it sucked for a while.

    Then everyone started using the new shiny API's and it started getting a lot better.

    He's complaining that the windows API's are still hauling along cruft and junk and nastiness from 15 years ago. It hurts MS's ability to improve them, it hurts developers ability to use them, because they have to wade through pages of deprecated functions to find the correct ones, or hit strange inconsistencies that have been hanging around for years. It's also just bad for the general consistency of the experience - see the comment about the system32 on Windows 64.

    He knows that bad developers doing stupid things isn't Microsoft's fault. But how you react to bad developers is. It's a tough decision to make - do you slap the bad developers on the wrist and break things because *they* were doing something stupid, or do you keep letting them have their way until it's their decisions that rule the API and the platform?
  • by Sentry21 ( 8183 ) on Monday May 05, 2008 @10:49PM (#23307768) Journal
    The Motorola 68k was their first choice, but unfortunately it wasn't ready in time for them to use it for their systems. Intel's 8086 processor was their unfortunate second choice.
  • by Theatetus ( 521747 ) on Monday May 05, 2008 @11:00PM (#23307870) Journal
    ...by the crapware "enterprise" software industry that has succeeded mostly in just taking money from companies and giving them products that badly replicate where Lotus was 20 years ago. By itself, that would just be those companies' problems, but in the end other users and developers get held hostage by that same crapware because new versions of Windows have to keep supporting it.
  • by MojoStan ( 776183 ) on Monday May 05, 2008 @11:12PM (#23307960)

    My understanding was that they didn't expect much of the PC market, so they threw together a bunch of cheap parts from other vendors and stamped their name on it.
    Triumph of the Nerds: The Transcripts, Part II [pbs.org]

    According to the guys that created the IBM PC (Bill Lowe and Jack Sams), they did it this way because they thought they were running out of time in an important new market (PCs). The Apple II had been introduced in 1977 and was a runaway success. IBM noticed Apple IIs being used in the engineering departments of their clients.

    IBM's top management met in August 1979 to discuss their "PC crisis." In another year, the PC industry might be too big for even IBM to take on. IBM chairman Frank Carey knew that it took "four years and three hundred people to do anything" at IBM. Bill Lowe, who would lead the IBM PC development team, claimed that his team could provide their product in a year. Carey gave Lowe two weeks to set up a proposal. Two weeks later, Carey bought it.

    From the transcript:

    • [Cringely narrating] He knew the company was in a quandary. Wait another year and the PC industry would be too big even for IBM to take on. Chairman Frank Carey turned to the department heads and said HELP!!!

      Bill Lowe: Head, IBM IBM PC Development Team 1980: He kind of said well, what should we do, and I said well, we think we know what we would like to do if we were going to proceed with our own product and he said no, he said at IBM it would take four years and three hundred people to do anything, I mean it's just a fact of life. And I said no sir, we can provide with product in a year. And he abruptly ended the meeting, he said you're on Lowe, come back in two weeks and tell me what you need.

      [Cringely narrating] An IBM product in a year! Ridiculous! Down in the basement Bill still has the plan. To save time, instead of building a computer from scratch, they would buy components off the shelf and assemble them -- what in IBM speak was called 'open architecture.' IBM never did this. Two weeks later Bill proposed his heresy to the Chairman.

      Bill Lowe: And frankly this is it. The key decisions were to go with an open architecture, non IBM technology, non IBM software, non IBM sales and non IBM service. And we probably spent a full half of the presentation carrying the corporate management committee into this concept. Because this was a new concept for IBM at that point.

    The documentary goes on to describe how Microsoft (a computer language company at the time) ended up providing the operating system after the company that should have provided the OS (Digital Research) blew it when they met with IBM. Interesting documentary with interviews with the key guys involved.
  • by Mongoose Disciple ( 722373 ) on Monday May 05, 2008 @11:30PM (#23308086)
    I think it's just one of those personal preference things, honestly.

    I used Eclipse for years (still do, when I'm on a Java project) and I generally hate it. I can't back that up with any kind of empirical reason for the dislike besides its resource-hogginess -- it's just designed in such a way that whatever feels like the intuitive way to do something to me is wrong. It's like I've stepped into a bizarro world where the knob marked 'H' in the shower makes cold water come out of the nozzle and the knob marked 'C' makes hot water come out, and no matter how many times I do it it always feels confusing and backwards to me. People whose opinions I greatly value think it's the best thing since sliced bread, and more power to them.

    I can almost always get more done with less time with VS, even though I've done Java development and used Eclipse twice as long. Your mileage may (and clearly does) vary.
  • by Nazlfrag ( 1035012 ) on Monday May 05, 2008 @11:31PM (#23308102) Journal
    Yeah, and they have a good point, while not perfect Apple makes an excellent GUI and actively promotes sane and pretty interfaces to third parties, and practices what it preaches. Sometimes they take their philosophy to the point of absurdity, like the single button fetish they still desperately cling to, but overall it's worked a charm.

    A similar GUI could happen on linux, perhaps it hasn't happened due to the roll-your-own nature or independent streak among hackers, perhaps the abundant CLI use still prevalent among the developers, but I'd guess it's far more likely the fact that 99% of us geeks have terrible aesthetics.

  • by HalAtWork ( 926717 ) on Monday May 05, 2008 @11:51PM (#23308218)
    Programmers were forced to take advantage of undocumented API calls in order to compete with the applications MS produced which used those. Also, a lot of API calls were not documented well enough such that the behavior was not questioned by the programmer and so the broken behavior was relied upon to make the application work.
  • Re:Long Answer? (Score:5, Interesting)

    by Metasquares ( 555685 ) <slashdot.metasquared@com> on Tuesday May 06, 2008 @12:38AM (#23308474) Homepage
    Couldn't they even keep backwards compatibility via virtualization? They can have all the new apps run natively, and run the old ones on a virtual OS. It would give new apps a nice degree of isolation from some of the old badness.
  • Re:Long Answer? (Score:3, Interesting)

    by drew ( 2081 ) on Tuesday May 06, 2008 @01:21AM (#23308716) Homepage
    While I mostly agree with you, I have to say that not everything is sunshine and roses in .NET land. Certainly, I think that the class libraries and the C# language itself are exceptionally well done, and the CLR will do wonders for the field. But coming from more of a web development background than a desktop app background, Wow did Microsoft mess up ASP.NET. After all the thought that went into the language, and the runtime, sitting down with WebForms feels about like getting stabbed in the eye. I don't have much experience with Windows Forms, but to the extent that WebForms was based off of it, I really have no interest in even trying. (It's rather outside my field anyway, so it's not that I am actively avoiding it.) For all the appreciation that I have for the .NET runtime as a whole, my impression of ASP.NET in particular was excellently summed up by Douglas Adams: "it is easy to be blinded to the essential uselessness of them by the sense of achievement you get from getting them to work at all. In other words... their fundamental design flaws are completely hidden by their superficial design flaws."

    For as much as I like programming in C#, I just can't see myself using it very often, as it is just not very well suited to the kinds of work that I do most, particularly web development, where I use mostly JavaScript and whatever server side language happens to be convenient, and low level server architecture, which I mostly do in C and occasionally C++. (I have some hope for the latter at least - the biggest thing holding me back is the lack of high performance networking API's to work with in .NET. If they can add something along the lines of Java's NIO, I might be able to start doing at least some of that work in C#.)
  • Re:Long Answer? (Score:5, Interesting)

    by Doctor Faustus ( 127273 ) <Slashdot@@@WilliamCleveland...Org> on Tuesday May 06, 2008 @01:26AM (#23308748) Homepage
    For anyone who has done programming between good languages and MS languages will know he's spot on
    Well, sort-of. He concentrates way too much on the Win32 API, which not too many people are using directly. His big complaint about Windows Forms was threading, which doesn't seem like a big issue (you may have multiple threads once-in-a-while, but will you have more than one working with the UI?) -- otherwise he just kinda says it sucks without suggesting anything better (SWT might be a possible candidate. Swing is not.).

    And the .Net libraries are far from perfect. There are weird versions of a lot of things left over for the VB6-VB.Net porting wizard to use. The selection of functions on the String class has some very strange ommissions (.Right(n) would be nice). The IO libraries need a smooth system to switch between strings and structured objects when dealing with paths and filenames. FTP is still way too difficult. If you don't want to deal with those infernal visual designers, ADO.Net seemed to take several of the bad parts of JDBC without the huge positive that Type 4 drivers let you avoid any local installations. The settings system they push doesn't work with multi-project solutions. Etc. But he lost any credibility trying to hold up Java as a better example.
  • Re:Long Answer? (Score:3, Interesting)

    by JebusIsLord ( 566856 ) on Tuesday May 06, 2008 @01:38AM (#23308800)
    My experience thus far has been with Java (fine unless you try to do some GUI work, then blech!) and .NET (much nicer, IMO - .NET 3.x and WPF go a long way to resolving Windows Forms issues like scaling, portability, and allows for easier implementation of the MVC design pattern.) Interop with win32 IS a pain, but you don't have to do it too often. If you consider modern Windows development as .NET development, I don't really see the big issue here. I do with win32 would go away for good, though.
  • Re:Long Answer? (Score:4, Interesting)

    by VGPowerlord ( 621254 ) on Tuesday May 06, 2008 @01:49AM (#23308860)
    Or you could, you know, press the power button.

    Unless you set Windows to do something other than shut down when you press the power button that is.
  • Re:Long Answer? (Score:1, Interesting)

    by Anonymous Coward on Tuesday May 06, 2008 @01:54AM (#23308884)

    I will delight at what happens if Linux ever manages to get majority market share and it starts getting some of the less-skilled pragmatic developers.
    The difference is -- and this is crucial -- Linux power users are accustomed to being able to demand the source code for malfunctioning applications and fix them (or pay someone else to fix them) if necessary.

    If open-source software ever does make deep inroads into the market for casual users, I think it will be very interesting to see those "less-skilled pragmatic developers" learn that they can't rely on the revenue stream from releasing some binary-only application that only works on one platform.

    (So many half-assed "business logic" applications have been doing this for years on Windows, it's a huge waste of resources to try and interoperate with any of them, and it's simply due to the fact that so few software purchasers realize the importance of source code.)

    When customers expect to be able to get the code for your application, but will pay you to support it with bug-fixes and ports to new platforms, you can't get away with that stuff anymore. I will delight in what happens when we're no longer stuck with crappy applications written by "less-skilled pragmatic developers" because businesses can hire any sharp coder off the street to fix them :)

  • by SuperKendall ( 25149 ) on Tuesday May 06, 2008 @01:59AM (#23308914)
    So maybe they "dropped the ball," I say they never had the ball to drop, and they don't give a crap because if you want to make money, you work on Windows.

    If you knew the demographics of the two systems you might think twice before saying that.

    It's not like a cash register is ever going to buy anything I write, and it's not like a lot of actual PC users will ever do anything but pirate it.

    There are a lot of Mac developers making a good living. And why not, when even though you have a smaller market you have less competition and users more willing to pay you.

  • But I hope we agree that having to use undocumented API calls because it's the only way is the fault of the OS manufacturer, yes?
    Conclusion: Microsoft's greedy and dirty tactics are the very cause of its doom.

    Someone said once (I forgot who) that Bill Gates wasn't a programmer. He was a businessman, and his business was computer programming. A true programmer would of course care if unauthorized copies of his operating system would be one of the main causes for viruses, spyware, spam and whatnot. A true programmer would care about developers not following the design guidelines. A true programmer would care about the darn security holes.

    But neither Gates or Ballmer care about this important stuff. They're not programmers, they're businessmen, and the only thing they care about is the f***ing money.

    No wonder Windows users are in deep sh**. Fortunately for me, I'm using Linux.
  • Re:Long Answer? (Score:2, Interesting)

    by JoshHeitzman ( 1122379 ) on Tuesday May 06, 2008 @03:06AM (#23309188) Homepage
    Sigh, here we go again with the multiple inheritence argument. Multiple inheritence was almost *always* abused in the C++ days whenever it showed up to innapropriately compose unrelated classes for the sake of convenience and the utter violation of abstraction. The few legitimate uses of multiple inheritence, which are rare enough that I cannot think of them off the top of my head, can almost certainly achieved by alternative object oriented means in both Java and .NET in ways which do not carry the same potential for abuse or ambiguity.

    Hmm, maybe like interface implementation inheritance, as I already said. Mixins is another. Every general programming language has features that can be "abused" and crappy code can be written in any language and I've seen plenty of it in C# and VB as well as C and C++.

    Name a feature of C++ templates (other than multiple inheritence) that cannot be done in .NET with generics. I really tried to think of one, but I couldn't come up with a meaningful example.

    I named one in the quote your statement is a response to "policy based design". Another is metaprogramming. If I remember correctly you also can't even do single inheritance through generics (i.e. have a class with its base class being specified by one of its generic parameters).

    Is that your own terminology?

    Nope typo. Should have been RAII rather RIAA.

    There is not a direct comparison because destructors in garbage collected languages, such as .NET languages and Java, do not serve the same purpose as they do in manual memory management languages such as C and C++. In .NET the destructor, if one is implemented, is compiled into the Finalize method which is called by the garbage collector and not manually by the programmer. It is pointless to argue that .NET and Java do not include a feature of manually managed memory languages which is not needed because garbage collection serves the same purpose by different means.

    Sure there is. Memory is only one of many, many kinds of things that is acquired and released, and many of these things can not be allowed to hang around until the gc gets around to finalizing the instance then the client of the instance ends up having to Dispose or Close or whatever to get it done immediately after they are done using it.

    Here it comes, the car analogy: Both a manual transmission and an automatic transmission both shift gears so does it really make sense to argue about the details of *how* that happens as long as the gears get shifted? In most cases the answer is no. nitpick .NET all you want, but name another platform besides Java which includes half as many features or has a standard library which is half as complete.

    By platform I'll assume you mean the runtime since you also mentioned standard library. I'd say the python interpreter has half as many as the .Net runtime. As far as standard library completeness goes I'm not of the opinion that a standard library should be to choke full of features myself. The more important thing to me is what the libraries that are readily available for the language will let me do and the libraries that are readily available for python are quite broad.

  • by Anonymous Coward on Tuesday May 06, 2008 @03:15AM (#23309232)
    Yes, saying you still use 15 year old techniques is retarded.

    15 years ago, I was programming with Turbo Vision/TASM/TP7/TC++. We did clipper, and DBASE IV. Direct hardware access, still mostly in dos (lots were using dos extenders), with computers ranging from 386's to early P1's. Back then (1993), very few people even heard about the internet...

    Now, we're doing WPF apps whose interface was made part in a 3D CAD program, part in illustrator, which is talking to server middleware with a n-tier architecture (with a RDBMS back end), over web services, using WCF. Lots of networked systems are involved. We're also doing web apps, and apps for mobile devices. We're often using things like LINQ and OR/M's, code generation tools and what not... And we're moving to parallel processing for a lot of things. Oh, and there is not one win32 API call in sight in our code base.

    It's radically different than it used to be. If anything, it's changing TOO FAST, it's very hard to keep up with it all.
  • Re:Long Answer? (Score:5, Interesting)

    by OeLeWaPpErKe ( 412765 ) on Tuesday May 06, 2008 @04:04AM (#23309488) Homepage
    So let's hear it ... is xcode a real competitor to visual studio ?

    Because let's be honest, while I use linux all the time, and I contribute every now and then to a number of linux apps. But I don't kid myself that anything that can run on linux (whether kdevelop or eclipse, or *even* vim) is half as good as visual studio.

    And it's still the only real dev platform for smartphones and pda's. I have a maemo device, which is nice. But developing for it is a bitch to say the very least.
  • Re:Long Answer? (Score:3, Interesting)

    by hey! ( 33014 ) on Tuesday May 06, 2008 @06:07AM (#23309962) Homepage Journal
    I always say: a developer who doesn't hate a platform just doesn't know it well enough.

    It follows that programmers that rush to the defense of a platform as being for practical purposes the ultimate one aren't worth listening to on that topic.
  • Re:Long Answer? (Score:5, Interesting)

    by DrPizza ( 558687 ) on Tuesday May 06, 2008 @07:07AM (#23310202) Homepage

    I agree. It sounds to me like this guy used .NET for a year or so around 2002 when it was brand new and then left and hasn't looked again for the last six (6) years. He is the first person that I have heard accuse .NET of being "too simplistic". The .NET class library (and Java class library as well) is the definition of everything and the kitchen sink. These are extremly powerful languages and libraries that are if anything too complex.

    You seem to be confused between broad (.NET supports a lot of things, like sockets and cryptography and distributed transactions and GUIs and XML and oh my!) and powerful.

    .NET does a lot of different things, but .NET doesn't have the greatest underlying abstractions. For example, to name a few:

    • IList requires integer indexing. This makes it unsuitable for some kinds of sequential collection such as linked lists, which have no acceptable way of implementing integer indexing. Consequence? IList, whose documentation proudly claims to be "the base interface of all generic lists" is not, in fact, "the base interface of all generic lists". LinkedList does not implement IList.
    • IList has no ToArray, but List does. Sure, ICollection has Count/CopyTo, but if the convenience method is good enough for List, it's good enough for IList. OTOH, if the convenience method is unnecessary for IList, it's unnecessary for List.
    • Except for to confuse me, why do ICollections have a Count, when arrays have a Length? What's the meaningful semantic distinction that I'm missing here?
    • Why do arrays have LongLength but with no corresponding LongCount for ICollections (3.5 adds LongCount as an extension method, but that gives it inconsistent (method) syntax, and of course it can never work because even if the collection were extended to support long lengths, an extension method can never exploit that fact, because the extension just works on IEnumerable which supports only an int Count)?
    • Why do arrays have LongLength, and not simply have Length be a long? It surely didn't take a whole lot of foresight to figure that one out, did it?
    • Where do I find reverse iteration/enumeration?
    • Where do I find bidirectional iteration/enumeration?
    • Why does the LinkedList expose implementation details such as LinkedListNode to users?
    • Why is there no generalized mechanism for storing my position in a container?
    • Why does HashSet have no ISet interface?
    • Why is there no SortedSet?
    • Why is System.Collections.ObjectModel not System.Collections.Generic.ObjectModel given that it is, in fact, for generic collections?)
    • Why are there no static type-inferencing factories for read-only collections or singleton collections? When you have generics, factory methods are good, because factory methods can infer. Don't make me type IList myReadOnlyList = new ReadOnlyCollection(myList); the double specification of the type is spurious.
    • Why is it named ReadOnlyCollection when it is in fact a IList?
    • Why is there no true ReadOnlyCollection (i.e. that is actually useful for collections)?
    • Why is it named SynchronizedCollection when it is in fact an IList?
    • Why is there no true SynchronizedCollection (i.e. that is actually useful for collections)?
    • Why is there no deque class?
    • Why is there no IStack?
    • Why is there no IQueue?
    • Why do Stack and Queue hardcode their backing store, even though the performance profile may be better off using e.g. a linked list, deque?
    • Why is KeyedByTypeCollection so widely useful as to even exist?
    • Where do I find an equivalent to java.util.concurrent? Anyone suggesting SynchronizedCollection, please punch yourself in the face right now.
    • Why are there new (.NET 2.0) classes that use old (non-generic) types, e.g. System.Net.Mail.MailMessage.Headers, which uses NameValueCo
  • Re:Long Answer? (Score:3, Interesting)

    by Fred_A ( 10934 ) <fred@NOspam.fredshome.org> on Tuesday May 06, 2008 @08:27AM (#23310658) Homepage

    Code first, design later. For example, I note with interest the amount of pain involved in trying to provide server protocol documentation for the EU. Some of the foot dragging is deliberate but some of it is that they don't have quality internal documentation.
    IMO, at heart, Microsoft is still a hobbyist software company that has grown obese. You'll never find the proper documentation that a professional company such as IBM or Sun puts out. Either of those could have drowned the EU under tons of ad hoc docs if they had been in MS's shoes.

    I too believe that Microsoft just doesn't have any docs, it's not in their culture. It feels like they're still a PC (as in "toy computer") company that hasn't upgraded their way of doing things. The others may have moved to the PC as serious platform but a lot came from the big iron or the workstation markets where that kind of sloppiness just wouldn't do.
    It really showed when looking at their documentation site which regularly used to border on the surreal back when I had to use it. Supposedly it improved a bit, although I still believe that this opinion is from people who have never seen a properly documented environment (I might be wrong of course, I'm lucky enough to be able to stay away from MS stuff nowadays).
  • Re:Long Answer? (Score:3, Interesting)

    by mcrbids ( 148650 ) on Tuesday May 06, 2008 @11:55AM (#23312936) Journal
    The problem is they know a lot of people aren't happy with Windows but it runs all their programs. Once the scrap that backwards compatibility and build something solid, despite the fact it may be their best OS ever, it's on a level playing field with the rest which means people have to find an alternative to their old programs and they might just pick something that isn't Windows and MS isn't having that.

    And that is the point of this article. What keeps Windows' market share is inertia, and not much else.

    As a writer/purveyor of work flow management software fitting somewhere between 2 and 3 in their list of programmers, (I write "enterprise" software, I sure give a damn about quality, but I shy away from the cutting edge) I'm not interested in anything specific to either OSX or Windows. I will not adopt a technology that ties me to either. But I deal every day with companies that have XYZ custom program that's written in VB or something and when I mention Mac/Linux/Alternative the first thing from their mouth is "we're Windows-only because of XYZ" with a shrug.

    Here's what Microsoft needs to do to stay relevant:

    1) Be Microsoft. Be OK with design by committee that "mostly works" and embrace the mediocrity therefrom. We don't expect you to be stylish, we expect you to be practical and cheap.

    2) Eat its own dogfood. Why does Microsoft have published UI conventions for Windows that they don't follow? If ".net" is the one true way, why aren't all their new applications not written in it?

    3) Be open. If Microsoft has this handy-dandy ribbon interface, it should be accessible to developers. One of the classic beauties of Windows has been the COM interface. .NET kinda shot that in the foot, and unfortunately, with MS almost abandoning .net, developers don't trust them, anymore. Remember when Microsoft was ABOUT developers? Now it seems that they are ABOUT STEALING as much bread as possible from them!

    4) Make decent products! Ever try to develop for IE in a standards-compliant way? Even IE 7 is riddled with gotchas! How is it that there are three browsers out there developed by little guys (Mozilla, Opera, and Safari) that manage to get it "right" (or at least "right-er") when the Bazillionaire has a product that sucks so badly?

    Sigh.

    The result is that evelopers hedge their best with cross-platform technologies to mitigate the threat of Microsoft as much as possible. No, we can't ignore them. But we sure don't have to bow to them, anymore.
  • Re:Long Answer? (Score:5, Interesting)

    by dossen ( 306388 ) on Tuesday May 06, 2008 @11:59AM (#23312996)
    Damn - what a list.

    My own additions - from doing Sharepoint:
    - Key classes (SPSite and SPWeb) that are IDisposable. That's not too much of a problem, except that the documentation is somewhat vague on how to handle them - calling some methods will e.g. initialize the RootWeb property of SPSite, which you have to dispose, despite never having called RootWeb yourself. And sometimes you have to take care _not_ to dispose, as you are handed a reference to a shared instance of an SPWeb or SPSite.
    - Several nice components are sealed and/or internal - my current pet peeve is a webpart, which has its look and feel defined via XSLT-files (big poorly documented XSLT-files, that do a lot of scary things to dump a lot of ugly HTML), unfortunately these XSLT-files are used by several different webparts, and some of them have neither the ability to subclass the webpart to use another file, nor the option of configuring which file to use. The only way to change that look and feel is to change the standard files.
    - Checking user permissions in some places requires you to call a boolean method and receive true for access (sounds good so far, right...) and an exception for access denied!
    - Not only is the default rendering a load of IE specific crap, if you dig deep enough, you'll find hardcoded strings inside the core libraries that, to the best of my knowledge, are not valid HTML in any contemporary standard. And the only way to get rid of it is to capture the output stream and clean it up by hand, one string pattern at a time.
    - And that reminds me of a .NET one - why can't I do regular expressions on StringBuilder objects? I have to convert one to an immutable string, do my replacement that results in another immutable string. Just seems like an awful lot of copying, if I'm doing a lot of editing.
    - And another Sharepoint gripe - why are all the interesting parts of my code inheriting stuff, that makes unit testing a real pain (I tried to mock my way through it once or twice, but the amount of code needed to test without invoking the database backend is beyond what I could justify even trying).
  • Re:Long Answer? (Score:5, Interesting)

    by AndyCR ( 1091663 ) on Tuesday May 06, 2008 @12:06PM (#23313076) Homepage

    But I don't kid myself that anything that can run on linux (whether kdevelop or eclipse, or *even* vim) is half as good as visual studio.
    I have tried to use Visual C++, and it used to be my IDE of choice, but after using Eclipse 3.3 (they improved the speed dramatically in 3.3, from unusable to usable) for a year or so I simply cannot bring myself to use anything else. I recently tested out Visual C++ 2008, and it really pales in comparison to what I love with Eclipse. About the only thing it did better was debugging, and I would gladly trade excellent debugging support for decent debugging support with SVN, Mylyn, Ctrl+Shift+R to open a resource,and IntelliSense that actually -works- without fail every time (Visual C++'s IntelliSense just fell over after about 2 hours of using it and never came back, and refused to give any information on any library - not even the standard C++ libraries.)

    About the only thing I see VC++ having on Eclipse 3.3 for plain C++ development besides debugging is speed. Visual C++ is comparably fast, but Eclipse isn't slow in the "it takes a while to respond" sense, but rather in the "there is a 7 second splash screen when you start it" sense. I can live with that.
    I was rather disappointed, really. I had thought that I had given up a great IDE (VC++) to go to a great OS (Linux) with a moderately decent IDE (Eclipse); in reality, looking back I have up a decent IDE to go to a great OS with a great IDE. A few years ago I loved Visual C++ 6, and I suppose I'm just sad to see its ancestor thwarted on my desktop so easily by a free program.

    (Disclaimer: The statement above is merely my opinion. Your opinion may not match it.)
  • Re:Long Answer? (Score:4, Interesting)

    by DrPizza ( 558687 ) on Tuesday May 06, 2008 @12:49PM (#23313632) Homepage

    ICollections implement an IEnumerator interface and have an Enumerator object which counts the objects in a collection. Think of an enumerator as an odometer (like the one in your car). If the object implements ICollection, then it has an odometer, which you can get the count from. Arrays just have size.

    Count is not a method; it is not asking "Count how many things are in this object". It is a property, and as such an intrinsic feature of the object (that behind the scenes it might have to do the verb thing is beside the point--it's semantically a property, even if it's actually a verb). And even if one were a verb--why should be it?

    Again, difference between an attribute and a verb. LongLength is an attribute of an object, such as height or width. Whereas Count is like an odometer in your car. Your question is kind of like asking why can you travel tens of thousands of miles along the US highway, but my odometer in my car only goes up to 1000. Well, that's just the way the odometer was made. Length of trip is distance, whereas your odometer is a counter and is only a *measure* of distance. It's simply a distinction the language makes.

    Again, though, the language doesn't make the distinction you are making. Count is a property, just like Length. If Count were a method I could sort of understand the difference (I don't really agree with it, it seems spurious, but I could sort of understand it). But it's not; it's a property.

    Chunking. .NET gets used on both 32 and 64 bit platforms, and the performance penalty for splitting a 64 bit word into two is greater than using two 32 bit words. In the first case, you still have to use 64 bit words, but you pad the first 32 bits with zeros, and convert to 32 bit words. Requires an extra pass through the processor to calculate, whereas adding two 32 bit words into a 64 bit word is trivial. I'm not explaining this concept well, but if you look it up you'll find more info on the question you're asking. The design decision was based on current market saturation of 32 bit processors, and the LongLength was an added conversion for the 64bit programmers.

    But LongLength means we won't have a clean transition, because it means people will have to fix up APIs to take longs where they currently take ints; making everyone pay the price for longs might be a short-term cost (though not a great one), but it'll be a long-term gain.

    Using the odometer analogy as above, the enumerator only goes forward; although you *can* reset it. If you want to do reverse iteration, copy your collection into a new collections backwards, and iterate over that new object. Alternatively, for most reverse or bidirectional iterations, you'll simply want to ditch the 'foreach' loops, and use a simple 'for' loop. Then you can start high and use decrement iterators to count down. I also like to use decrementor collections which get an object removed with each pass of the for loop.

    That really doesn't answer the question. In both Java and C++ I have iterating objects (java.util.ListIterator, C++ bidi/random iterators) that can go forwards and backwards. I use these quite regularly; why can .NET not provide the same?

    You need to get the IEnumerator object from the ICollection, using the GetEnumerator method. It will have a Position field.

    Neither here: http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx [microsoft.com] Nor here: http://msdn.microsoft.com/en-us/library/78dfe2yb.aspx [microsoft.com] So I'm not altogether sure what you mean.

    Probably implemented somewhere else.

    I don't understand what you mean.

    You're splitting hairs here. It's a strongly typed language. It's meant to be explicit, not inferential. In other projects, besides yours, do

He has not acquired a fortune; the fortune has acquired him. -- Bion

Working...