The biggest software delusions of the last decade

… or how Microsoft is trying to lose its dominant position.

It’s not only about Microsoft of course. Other big companies have made mistakes, but Microsoft is surely the company which has made most of them in the last ten years. Surely it’s because they can afford it: others can’t make that many without filing for bankrupcy.

Managed development

This is probably the root of most dumb decisions. When Java came out it was appealing to many. Microsoft was already at that time a follower in its decisions and started its .NET development. .NET itself wasn’t a bad idea. At the time I thought it was going to be a part of the ecosystem just like native applications and replacing the obsolete and buggy Visual Basic 6.

Nowadays the reality which we can see is that Microsoft wants their managed technology to take over and become the preferred solution for Windows. From what I could grasp reading some articles about Windows 8 is their interest forcing Desktop developers to write applications that could easily be run/ported to tablets and phones.

But does this infatuation of managed development make sense? To answer this question, it is first necessary to open a parenthesis.

The big innovator of the last decade has been Apple and not because Apple is so smart, but because the others have been clumsy and dumb. I’m talking from a technology perspective here and not from a business/marketing point of view. Apple is obviously very good at marketing, but also it has had a passion about its products. In my opinion, someone who is the CEO of a big IT company should be able to tell the difference between a computer and a toaster. So, yes, this cuts out Ballmer.

I once had been convinced into buying a Zune MP3 player. It was quite expensive (99 euros) considering my previous MP3 players. After trying it out I discovered it didn’t allow me to play tunes based on the directory they were stored inside. I could only play them based on their tags (artist, album etc.). Microsoft seriously expected me to tag now all my tunes? Years before I had taken many of my CDs and ripped them without filling out the tags. Thus, on their player my music was interrupted by my Swedish lessons! On top of that, it wasn’t even a standard USB memory device, it had its own drivers. Let’s just say it’s the worst MP3 player I have ever had. Afterwards I bought a 30 euros Philips player and lived happily ever since. Why did I write this? Because it says a great lot about the care which goes into products. Which in the case above is zero. How is it possible that no one in the process has raised his hand and said “hey, but it’s missing this and that”? It is a great indicator of how certain things are reviewed in Microsoft.

But wait. You could say that the iPod (which I have never used btw) has the same characteristics and lacks this functionality as well. First off, the iPod targets a certain audience and is practically bundled with its iTunes store. This argument can be reduced to: if I wanted an iPod, I would have bought one. And that’s the first big problem of Microsoft, it can’t come up with ideas of his own and doesn’t understand why people prefer the original to the copy. Apple is far from representing perfection in its products, but what is more imperfect than a mere imitation without any advantages?

This was quite a huge parenthesis but you’ll see that I’ll manage somehow to pull the strings together. And if I fail, hey, I can always do some marketing to compensate.

The point of all this is that Apple has been the technology leader of the last ten years. And which are the leading technologies produced by Apple? iPhone, iPad and iPod Touch which on the software side means iOS.

iOS is a mix of C, C++ and Obj-C. Developers write their applications for iOS with Obj-C or through a layer on top of it. Objective-C is basically C with a front-end for the compiler which allows the embedded smalltalk syntax. Thus, Apple is dominating the market with a programming language which comes from the 70s.

Did that create any sort of barrier or limitation for them? It seems not.

Clearly the technological advantages of managed development do not stand in the results for the user, since hardly someone can argue that the Windows Phone 7 experience is much more nicer and appealing than that of an iPhone.

Which means that the advantages have to be on the development side if they can’t be found in the results (more on that later).

Is it easier and more convenient for a developer to use .NET instead of, say, native C++ or Objective-C. If he is just learning to program and doesn’t understand the concept of pointer it might be, although even that isn’t guaranteed. But even if it is, it is not easier or more convenient for a veteran.

Let’s take, for instance, a company which has developed a nice voice recognition library in C++. After 10 years it has become an advanced product and it has been decided to make it available for embedded devices. It is quite easily ported to iOS or Android in just a few weeks, because both allow for native C++ code to be compiled. Not so for Windows Phone 7. Why should the company invest money into rewriting their library for a device which has only like 7% of the market share? Unfortunately, not all companies are so eager to lose money like Microsoft.

Google did the same mistake with Android, but they almost immediately gave in when developers demanded for native code to be compilable and now they’ve got something which doesn’t make much sense. An official Java API and native modules with also a native API, although minimal compared to the Java one. It would have made more sense to offer directly a C/C++ API and let other technologies be built on top, of course. Google, nonetheless, seems much less stubborn than Microsoft.

So managed isn’t more convenient for companies or developers which already have a product and only need to port it, but what about those who are starting their product only now. Is it convenient for them?

The big advantage of Java which made it so appealing in its days was its multiplatform capability. But plain C/C++ are multiplatform. What is needed by a language to become multiplatform is only the API. There couldn’t be any better example of C++ being multiplatform than the Qt framework. And what is less multiplatform than a technology which is intended to run only on Microsoft products? A great deal of code can be ported among iOS and Android. This doesn’t apply to Windows Phone 7. So, even for brand new products it’s highly inconvenient to use .NET, given that it will preclude porting the code to other devices.

Uhm, it doesn’t reflect in the results and it’s a bad investement. What about the inherent technological advantages? There are some pros. It’s sometimes easier to debug managed applications and it’s way easier to analyze them. Also, most importantly, they are compiled just once for different devices. One more advantage which comes to my mind is that they allow reflection. Dynamism isn’t an advantage inherent to managed languages as Objective-C, Qt and lastly my article about Dynamic C++ can prove.

The first three advantages come at a cost. Debugging managed applications isn’t always easier. It’s easier if the problem is in the application itself, it becomes a nightmare when the problem is inside the framework. If that’s the case, the complexity becomes much bigger than debugging native applications. A friend of mine was affected by the large object heap problem. And I haven’t really understood whether the problem has been addressed in .NET 4 or not. Nor do I care, actually. But in that thread Connor Douglas writes on the 16/08/2011:

“This problem has caused me serval sleepless nights and is currently delaying a project from going into production. I don’t understand why microscoft will not look at this problem. I am dealing with heavy image processing application with large arrays.

The application is meant to run periods of years without being restarted.

Very disapointed to find out that this is an issue so late in our development cylce!”

Please note, the problem has been reported on the 18/12/2009. Two years have passed.

From my experience I can only say that for big projects it’s never a good idea to delegate complexity to others without the possibility to intervene directly. Every managed language (especially if the VM is not open-source) makes the developer completely depend on the owner of the managed technology. What can the developer above do other than knock at the door of Microsoft and demand a fix? It’s not like he can choose another .NET framework or patch the framework himself.

It’s easier to analyze .NET applications indeed. It’s also very easy to reverse engineer them as I have showed years ago in my articles about .NET reversing (part 1, part 2). Thanks to the attributes of managed languages themselves and the amount of metadata and type information, .NET applications are de facto open-source. Anyone can take the .NET Reflector and obtain the original source code from any .NET assembly. If anyone thinks protections will prevent this, please read the two articles I linked above. It’s ironic that this is what the N°1 anti open-source company in the world wants: that all applications should become open-source.

The last argument which often I hear used in favour of managed applications is ‘security’. It’s true that a buffer overflow can’t happen in a managed application, unless of course it happens in the VM itself. But I can probably safely say that 95% of buffer overflows in history were caused by unsafe string functions. The fact that C featured an unsafe API can’t be used as an argument in favour of managed languages. And if we consider the remanining risk in native applications, the solution is to tighten the security of processes and hardware. We have seen many new things during the last 10 years: DEP, ASLR, stack cookies, SafeSEH. Already writing a buffer overflow exploit on Windows 7 x64 is anything but trivial. And much more can be achieved without invoking managed technologies.

Garbage Collection

While this may seem bound to managed and scripting languages, it isn’t. Some native languages have garbage collectors as well and it has been the big trend in the first years of 2000. Garbage collection makes a lot of sense in scripting languages, but there it should be confined. I fully made up my mind years ago about this topic and it boils down to 2 very simple conclusions.

1) A garbage collector doesn’t make sense as long as every memory leak is smaller than the memory wasted by a garbage collector.

2) It’s bad for shaping the mentality of developers. Memory is a resource just like a file or a socket. Would you expect someone else to close a file you opened?

The second point is in my view self-evident and the first one is easy to demonstrate. Just consider the large object heap discussed in the previous paragraph and the quotation of the article related to that:

“You’d have thought that memory leaks were a thing of the past now that we use .NET. True, but we can still hit problems. We can, for example, prevent memory from being recycled if we inadvertently hold references to objects that we are no longer using.”

Which actually would be a leak. Just because the framework will free the memory once the application terminates, doesn’t mean it’s not a leak. Even when one is leaking memory in C the operating system will free the leaked memory once the application is terminated. The only advantage here is that the garbage collector doesn’t allow incremental leaks. A pointer in C can be used several times, leaking memory over and over. With a garbage collector of course this can’t happen.

But hardly an application without GC will waste the amount of memory a GC does. There are two kinds of leaks in an application without GC: those which occur rarely and those which occur often. Only those which occur rarely or just once and leak only a small amount of memory will go unnoticed. All the other will be noticed and debugged by the programmer. The small and rare leaks are just less wasteful of memory than a GC and thus from a practical point of view preferable.

Moreover, the GC in .NET could had been implemented much better by making it optional or by giving the developer the ability to delete objects, instead of forcing dereferences and putting silly .dispose() methods here and there.

XAML

While XML is an ideal solution to represent a hierarchy like a UI, things have gotten out of hand with XAML. First thing: it’s the ugliest thing I have ever seen (if we exclude Italian politics).

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="180,49,0,0" Name="checkBox1" VerticalAlignment="Top" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="303,55,0,0" Name="button2" VerticalAlignment="Top" Width="75" />
        <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="102,79,0,0" Name="checkBox2" VerticalAlignment="Top" />
        <GroupBox Header="groupBox1" Height="100" HorizontalAlignment="Left" Margin="183,28,0,0" Name="groupBox1" VerticalAlignment="Top" Width="200">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="47*" />
                    <ColumnDefinition Width="141*" />
                </Grid.ColumnDefinitions>
                <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="0,27,0,0" Name="button1" VerticalAlignment="Top" Width="75" Grid.Column="1" AllowDrop="True" ClickMode="Press" />
            </Grid>
        </GroupBox>
        <ListView Height="100" HorizontalAlignment="Left" Margin="52,59,0,0" Name="listView1" VerticalAlignment="Top" Width="120" />
    </Grid>
</Window>

And this is an extremely simple snippet. How does one usually modify complex snippets or do things which can’t be achieved through the designer? In a way which is in line with the .NET mentality. In fact, one big problem in the .NET framework is that its API is most of the times incoherent. Thus, it’s impossible for a programmer to just guess the correct method to use. Here’s a simple example:

// integer to string
str = Convert.toString(i);
 
// string to integer
i = Int32.Parse("1");

If you can’t make even a simple int/string conversion coherent in a framework, then I’d say it’s a problem. Let’s take the same code in Qt:

// integer to string
str = QString::number(i);
 
// string to integer
i = str.toInt();

I can assure you that I didn’t need to look up anything the first time I used QString in Qt. Not so for C#. Nobody can just guess the methods.

The developer in this case has to search for a snippet on the internet, which could be called Copy and Paste development. It’s the same with XAML of course. Unless you rely entirely on a designer, but as with HTML pages I rarely see complex ones done with a designer, so that one has to go with the raw XML.

Forcing programmers to be confronted with XML to make their UIs is the worst idea ever. This has root in the typical university way of thinking. Microsoft made big announcements that with XAML finally programmers had no longer to focus on UIs, which could now be left to the graphical people.

What a great idea! I wonder what kind of application is completely separated between its UI and code so that the graphical people can just proceed doing their work without worries. When I try to visualize such an application in my mind I see either an animated presentation which doesn’t do anything or a dialog box with three buttons and an image. Once I start to think about anything more complex than that, I strangely can’t see any longer the separation between UI and code.

UIs are made of complex graphical components, often custom components. Who needs someone meddling with the UI just to redispose some buttons or add some graphical elements? Does this really make it worthwile talking about a separation of UI and code?

And anyway, even admitting there could be a separation between the two, I really wonder how many companies do have dedicated team members just for UIs. Even small companies do exist. And I know this may come as a surprise to you, Microsoft, but even individual developers do exist. Amazing, isn’t it?

A typical academical idea which looks good on paper. For three seconds.

Silverlight

I don’t know whether it is/will be much used. I heard many times of Microsoft pushing it by re-doing important websites for free using Silverlight.

As much as I don’t like Flash, I would never ever invest in Silverlight, much rather in Flash. First off, Flash is much more used than Silverlight and runs on basically every operating system and will surely do so even in the future if Microsoft doesn’t really decide to buy Adobe (and that by the way should be stopped by the antitrust which seems only to be interested in knowing whether Microsoft is imposing Internet Explorer to Windows users).

The new Flash stands in no way behind Silverlight in terms of features for what its purpose is. Also, this is typical of the behavior of Microsoft lately. There’s no place for others on the market, they themselves need to be everywhere. Not that competition itself is bad for Flash, quite the contrary, but it should be left to others!

Why? Because when a company bases its business on a technology like that, it really earns on the product. So it must ensure customers are satisfied and that it works on every platform just as advertised.

I don’t believe that Microsoft really cares about the revenue generated by Silverlight itself. I think it is much more important to them to bind programmers and applications to their core business, which is operating systems.

I believe that in general frameworks should be developed by third parties for these exact reasons, but this is even more true for something which really should work everywhere like a web-embedded technology.

Windows Phone 7

Windows Phone 7 is highly recommended to anyone who wishes to start developing.

On an iPhone.

Yes, precisely. After two hours spent wrestling Silverlight/XAML into displaying a trivial layout on a Windows Phone, any normal programmer will immediately buy an iPhone. Even the odd smalltalk syntax doesn’t look so bad now, does it? Quite the contrary! It seems highly reasonable and elegant. How only could it look bad before?

Apart from that, I don’t know whether they improved things lately, but at the time it came out it lacked an API for practically anything, even the most trivial things like SQLite support. And of course it can’t be added manually, since it can’t run native modules as discussed before.

It doesn’t seem a highly intelligent move to release a smartphone after anybody else, in delay of years and then bring out something so immature. I honestly hope that the Windows Phone crashes and burns. Not only because it would teach Microsoft a humility lesson (if they can actually learn one), but also because it would stop the delusion of forcing desktop developers in rethinking everything for the mobile market, which is the latest Microsoft trend judging by the articles about Windows 8 I have skimmed through these weeks.

For now it’s unsure how it will end. Although Windows Phone has already been declared a failure, Microsoft has launched a partnership with Nokia and will invest even more on it. Like usual. If the product is not bought, then it can only be that we haven’t spent enough on it. Let’s do some marketing!

Cloud computing

This word has acquired so many meanings that if Hegel was still alive he would use it too.

Which also means that it makes no longer sense using it if not for marketing purposes like Apple just did with its iCloud. Which actually is just a service like DropBox with a fancy name.

The range of meanings the word has acquired includes basic server technology, synchronization, distributed computing, web based applications (which probably is the most authentic meaning).

If web based applications are meant, then clearly the idea is stupid. Having every application on a remote computer is not only the worst thing for privacy, but is also slow, costly (for the company), inefficient and a sucky user experience.

Many have written about this topic and I certainly am not the one who can shed additional light on it, but I mentioned it anyway just for completeness.

Simplicity

This paradigm has just got to go.

I have installed Ubuntu on the computer of some extremly unskilled people. And they use it. They browse the web, check their email, watch movies, write documents with Libre Office and even move files to/from memory sticks.

If these people can do it, then I can probably train a penguin to use Ubuntu.

Granted that I’d probably need to find a larger keyboard for his fins; but that’s all.

There’s just no more room for simplifying without removing functionality. On the other hand, Microsoft would simplify my life a great deal if they finally decided to implement a search functionality in the list of installed services (and that’s not the only place where a search functionality is lacking). Or by introducing a file search that actually has any kind of purpose. That would simplify _my_ life a lot, thank you. And I’m pretty sure that after 20 years these improvements can be safely done without the risk of juggling too many things at once. But I might be wrong. Who knows…

Bing, MSN Live, failed Yahoo acquisition

I can’t put it better than Charlie Brooker once did (please read with British accent):

“I suppose, you know, theoretically you could watch the royal wedding on ITV not the BBC, just like you could search for things on Bing instead of Google, or eat Daddy’s ketchup instead of Heinz. It’s possible, but it’s not _normal_. It borders on perversion. You could watch it on Sky News but that’s like searching Hellman’s Ketchup on Yahoo.”

If you don’t get right at once something which was lame from its conception, just give up. Sometimes in life it is very healthy to give up for shaping one’s character. Behaving like a pestering child who stumps on the ground and screams “BUT I WANT IT! I WANT IT!” doesn’t seem to me a winning strategy.

Social networks (Facebook, Google+, Wave, MySpace etc.)

Yes, I know that Facebook is an immense business right now. But I have always seen it as a bubble and I hope for everybody’s sake that it really is. Maybe one day humanity will realize that putting sensitive information in the hands of a corporation is not such a smart idea. Or maybe not. Anyway the topic has deserved to be in the list, because an infinity of money has been invested (by others) into social networks with no results.

Conclusions

As we have seen other companies do mistakes, but no one as much as Microsoft. A company behaving like a retarded giant who is buffled by others passing by him running and who starts its running motion in an attempt to catch them without noticing that the strings of his shoes have been tied together.

More money, more marketing. Never passion or care. It has always to be the latest toy. Then as soon as it has been played with for two seconds it is thrown to the ground and then again focusing on the next toy.

What’s a better example for this behavior than Skype? Was it really necessary to buy it? Couldn’t a partnership suffice? Won’t it more realistically prevent smarter acquisitions in the future for lack of money or intervention of the antitrust?

And can developers really follow Microsoft?

.NET with WinForms, big change. Lot of code needs to be rewritten. But wait what is WPF? XAML needs now to be used for the UIs? Ah. And what’s Silverlight? Should I use WPF or Silverlight? What are the differences? And all the WinForms code? Obsolete??… HEY, WHAT IS METRO?

By the way, is it just me or Metro Apps sounds a lot like Metro Sexual? Sorry, but South Park burned that brand for me.

Anyway it is clear that everything from Microsoft comes out touched by too many people, too fast and without the necessary dedication and care which in my opinion are essential to great products.

Don’t get me wrong, it’s not like I’m saying that Windows 8 will be the end of Microsoft. Of course not. Probably it will be disliked just like Vista and afterwards things will be re-improved like with Windows 7. The problem is that Microsoft is losing time. A lot of time. Sooner or later operating systems such as OSX and Linux will completely catch up with what really matters in a desktop, which apart from its own features, are the applications which run on it.

I wonder when it will be possible to look after a new release on Windows hoping for improvements, instead of hoping that it won’t be worse than the current version.

Moreover, Windows could be improved to an endless extent without re-inventing the wheel every 2 years. If the decisions were up to me I would work hard on micro-improvements. Introduce new sets of native APIs along Win32. And I’d do it gradually, with care and try to give them a strong coherency. I would try to introduce benefits which could be enjoyed even by applications written 15 years ago. The beauty should lie in the elegance in finding ingenious solutions for extending what is already there, not by doing tabula rasa every time. I would make developers feel at home and that their time and code is highly valued, instead of making them feel like their creations are always obsolete compared to my brand new technology which, by the way, nobody uses. I also would like them to believe that I wouldn’t meddle with their business once it becomes interesting enough, be it virtual machines, web applications, search engines, browsers, VOIP etc. Just name one thing Microsoft hasn’t been involed into during the last ten years.

I can’t say how much Microsoft will lose of its dominant position in the years ahead. Certainly it is working very hard on it and hard work sometimes pays off.

This entry was posted in Critique, Programming. Bookmark the permalink.

45 Responses to The biggest software delusions of the last decade

  1. Comments were disable for a problem with the server. Now everything *should* work.

  2. Brisbane Developer says:

    Nice post, glad to hear I’m not the only one who finds .NET hard to work with and quite frankly a little strange. I can really relate to the sleepless nights with implementation as I have just spent a month without sleep and losing hair trying to migrate from .NET 1.1 to 3.5 on a web-site thinking it would be “easy”. ha ha ha.

  3. Mike says:

    I’m really surprised about your genius as you seem to have more knowledge, vision and strategic thinking than Gates and Ballmer together. I hope you accept some words from a small mind like me:

    Managed Development
    ===================
    Your clearly are a UI/Smartphone developer because you don’t get the importance of managed code in server environments. I don’t know any recent Windows-Server application that is written in C++, everything is C# here.

    Apple has no server business, and their iCloud is a joke (heavily relying on Amazon and Azure).

    “since hardly someone can argue that the Windows Phone 7 experience is much more nicer and appealing than that of an iPhone.”. Sorry, but I would argue. I own a WP7 and an iPod Touch. Since I have the WP7 I have no urge to go back to the iPod; in fact, I’m quite unnerved because it’s so slow and boring.

    “It’s easier if the problem is in the application itself, it becomes a nightmare when the problem is inside the framework. If that’s the case, the complexity becomes much bigger than debugging native applications.”. So you can really step inside of all the great Cocoa frameworks ? And what about all those great native libs that you want to use, what if one of them has a problem ? Or debugging the STL ? At least in .NET you can download the framework sources from MS to step into the BCL implementations.

    “I don’t understand why microscoft will not look at this problem. I am dealing with heavy image processing application with large arrays. The application is meant to run periods of years without being restarted.” Haha, I think in this case you should really rethink: first, if .NET is the best choice for your problem (which, in this case, is quite extreme) and second, if you have the right architecture. Why not have a process that starts other processes (like Chrome) as worker processes and shut them down when they are finished. No memory leaks, no large object heap problems. A fool with a tool is still a fool …

    “Every managed language (especially if the VM is not open-source) makes the developer completely depend on the owner of the managed technology.”. What about native libs like the C++-Runtime, MFC, Qt, STL … ? You really want to fix bugs by yourselves, basically making your own code branch ? Then you’re on the road to hell …

    “.NET applications are de facto open-source”. Yeah man, old argument, no one cares. Especially on the server side, it simply doesn’t matter.

    Garbage Collection
    ==================
    “It’s bad for shaping the mentality of developers. Memory is a resource just like a file or a socket. Would you expect someone else to close a file you opened?” No, therefore you have the IDisposable-Pattern in .NET. You cite “You’d have thought that memory leaks were a thing of the past now that we use .NET”. Well, this is simply wrong and again: a fool with a tool is still a fool.
    I’m currently witnessing what happens when a native app grows over the years and you want to fix some memory leaks. Well, it simply breaks. If everybody knows the technique of smart-pointers etc blabla then everything works fine but don’t expect that knowledge from everybody. You will be disappointed …

    XAML
    ====
    What is ugly about that XAML snippet ? Can you pinpoint it ? XAML is just another way to new-up nested objects. Instead of having all this ugly UI-Code folded away in your source code file, why not have it externally ? If you use the MVVM-Pattern with the power of bindings then XAML is really a great thing.

    BTW: why not code that way ?
    string s = 3.ToString();
    int j = int.Parse(s);

    And why do you think it is favorable to have a bunch of toWhatever()-Methods on the String-Class instead of making concrete API-Calls on the target type. If you really want to do this you can write your own Extension-Methods for string.

    Silverlight
    ===========
    This is really a difficult story and I’m also not happy with the way that MS handled Silverlight. I think it could have been a real winner but they destroyed it by themselves.

    Windows Phone 7
    ===============
    “After two hours spent wrestling Silverlight/XAML into displaying a trivial layout on a Windows Phone, any normal programmer will immediately buy an iPhone”. Sorry, this is bullshit. You really think that you can get a decently layed out app in iOS within two hours ? Do you have an App in the Appstore ? I released my first WP7-App in the Marketplace about a month ago and the only thing that really was dragging along was the approval process.

    Cloud Computing
    ===============
    Do you have any idea what Windows Azure actually offers ? Again, think about the managed code story in these environments …

    Easiness
    ========
    You probably mean simplicity. Well, yes, I also love that, but everyone has another “It really can’t be hard to implement feature X”. But if you have such a vast customer base then there are a lot of these features.

    Bing, MSN Live, failed Yahoo acquisition
    ========================================
    Bing isn’t a success yet, but I think it makes sense in the overall MS-Strategy, like Location-Services for WP7, or image processing, or voice recognition, …. they know that they won’t beat Google in search.

    Social networks
    ===============
    Don’ get it, why criticize MS for Facebook, Google+, Wave, MySpace etc.

    Conclusions
    ===========
    I read a lot of misinformations in your article plus the usual MS cliches. “Anyway it is clear that everything from Microsoft comes out touched by too many people, too fast and without the necessary dedication and care which in my opinion are essential to great products.” Man you’re arrogant … what great product did you deliver recently ?

    “Introduce new sets of native APIs along Win32″ … anything read about WinRT lately ?

    I could go on and on. I know that it’s cool and nerdy to criticize everything that comes from MS, but you will see, after you’ve grown up, that MS is beyond the coolness. Mark my words …

  4. Sam Sha says:

    i can’t agree you more about xaml,mxml even better

  5. Sandro says:

    Great post Mike! 100% Agree!

    @Daniel: What is the better approach for GUIs in your mind? Programmatically? I think XML is the correct answer. And XAML is a great implementation. Far better than XIBs in the Apple Development Ecosystem.

  6. @Mike:

    Managed Development
    ===================

    I’m a workstation guy. My experience goes from driver development to UIs. I’ve never said that managed languages should not exist at all, but be part of an ecosystem. Server technologies are written in multiple languages, not just C#. Lots of possibilities: Python, PHP, ruby etc. The article talks about managed development taking over Desktop apps.

    You can’t compare an ipod touch to a windows phone 7, the ipod touch is an inferior category of product. Compare an iphone 4 to a windows phone.

    I’ve got no problems debugging the Cocoa framework or the STL. It’s part of my job. Also a problem in an API is very different than a problem in the VM which was the case presented above. Also, you miss the point of the case presented above, which clearly is not that workarounds exist.

    Have submitted patches or debugged many times a C++ framework. What’s the problem in that? If you have the source code it’s not difficult. And if you work on an application with > 1 million lines of code then it’s quite natural to encounter bugs even in the framework. It happens even with applications above 100k lines of code.

    You say, no one cares that .NET is open source on the server side or that it eats memory or that it’s not portable etc etc. Ok, name me 10 important .NET applications for the desktop not developed by Microsoft. The only one which comes to my mind is Paint.NET. I’m waiting for the other 9. Small/medium applications can be written even in Lua (API provided). Doesn’t mean anything.

    Garbage Collection
    ==================
    You mentioned the IDisposable. I’ve written in the post about the “silly dispose methods here and there”. It’s not like having a delete statement for everything. It is incoherent and ugly to have to inherit from a specifc interface. You say that in native apps there are leaks. So what? No one denies that. The problem here is that managed apps are in no way better under this aspect, although claiming they are. I’m not the only one who wrote about this. I quite vividly remember Mark Russinovich expressing the same thoughts in a blog post before having been hired by Microsoft.

    XAML
    ====
    It is verbose and C++ programmers don’t like to be confronted with XML. If I wanted to be an HTML developer, I would’ve become one. XML is good way to represent a UI, I wrote that in the post which you clearly just skimmed through (Qt does the same btw), but it should be optional.

    @Sandro: if we’re talking about a simple dialogbox, it makes sense to use a designer. But I think it’s much preferrable to use code for a main window with a complex structure (think about a complex main window like Photoshop).

    Windows Phone 7
    ===============
    No, I don’t have an app in the appstore. This clearly proves that I can’t code with Cocoa.

    Here you completely skip the portability issues and the API problems.

    Cloud Computing
    ===============
    Don’t really understand what Windows Azure has to do with it now. What does Bing run on? I don’t know. Probably IIS, even though it’s being reported to run on Linux (?). Google uses Linux and Amazon probably its own thing. All native stuff. So what does mentioning a native cloud technology among many others mean? What can be done in .NET can be done even in Python. But we should talk about performances here. Can you claim that azure has performance benefits over ther others?

    However, this wasn’t the topic of this paragraph, but the fact that running applications remotely isn’t most of the times a good idea.

    Social networks
    ===============
    You clearly haven’t read the title of the post.

    Bing, MSN Live, failed Yahoo acquisition
    ========================================
    It’s lame. If it was just a strategy then they could’ve sticked with msn live instead of changing name every 10 seconds and trying to buy yahoo (which is only a brand). Your point of view really seems to come from a poster boy.

    Conclusions
    ===========
    I read about WinRT, but it’s too soon to judge it. If it will be completely transparent to native applications, then very well, but it still doesn’t explain why it took more than 10 years (in which basically no progress was made) to start to work on a new native API. And again it should have been done in a gradual way, not all at once.

    Ok, Microsoft is doing most things right at the moment. Good that the market agrees with that!

    I actually never mention the market because it doesn’t mean much. Great projects like BeOS die because of stupid business decisions. However, it isn’t even normal to brag about products such as Zune which then die not much time later.

    “ahaha the iphone is the most expensive phone ever [...] it’s not for bussines customers [...] we have great windows mobile devices with keyboard [...] I like our strategy, I like it a lot etc etc” (http://www.youtube.com/watch?v=nXq9NTjEdTo&html5=True). And then do the same 2 years later.
    I now understand what you mean that Microsoft “is beyond coolness”. Indeed, it is.

  7. Mike says:

    Managed Development
    ===================

    I’m a workstation guy. My experience goes from driver development to UIs. I’ve never said that managed languages should not exist at all, but be part of an ecosystem. Server technologies are written in multiple languages, not just C#. Lots of possibilities: Python, PHP, ruby etc. The article talks about managed development taking over Desktop apps.

    => That wasn’t so clear for me because you seemed to ditch managed-code environments completely. I
    => didn’t mention Python, PHP, … but they are also managed environments with great success. Not to forget
    => Java which also has no story on the desktop but is quite successful on the server-side.

    You can’t compare an ipod touch to a windows phone 7, the ipod touch is an inferior category of product. Compare an iphone 4 to a windows phone.

    => Hm, what is the big difference beside being able to phone ? Most apps run on iPod touch and the UI
    => experience is really identical because it’s the same OS.

    I’ve got no problems debugging the Cocoa framework or the STL. It’s part of my job. Also a problem in an API is very different than a problem in the VM which was the case presented above. Also, you miss the point of the case presented above, which clearly is not that workarounds exist.

    => At some point you always depend on something closed-source, if it’s not the VM, then it’s a device driver,
    => firmware, BIOS, whatever. I work with .NET for several years now and I never encountered a problem in
    = the VM that rendered my code useless. Yes there are challenges with large objects but I think in this case
    => you really need to know the platform and its internals you are running on. MS has a lot of information
    => here available (e. g. CLR for C#). So you’re not lost in space.

    Have submitted patches or debugged many times a C++ framework. What’s the problem in that? If you have the source code it’s not difficult. And if you work on an application with > 1 million lines of code then it’s quite natural to encounter bugs even in the framework. It happens even with applications above 100k lines of code.

    => No problem with that, you can do the same with the .NET source code of the BCL (which is basically a
    => giant mega framework with lots of sub-frameworks like WCF). The VM is the barrier where closed-source
    => starts. I have no problem with that. Is iOS completely open-source ? Can you really debug anything ?

    You say, no one cares that .NET is open source on the server side or that it eats memory or that it’s not portable etc etc. Ok, name me 10 important .NET applications for the desktop not developed by Microsoft. The only one which comes to my mind is Paint.NET. I’m waiting for the other 9. Small/medium applications can be written even in Lua (API provided). Doesn’t mean anything.

    => I don’t get your fixation on this memory thing. Yes, when you use a VM it will use additional memory and
    => when you call “new X” then memory is allocated. You always have to take care about memory
    => consumption. But my opinion is: I think that VMs are better than native Server-Apps because they can
    => compact the heap, move objects around for defragmentation and so on. The desktop story is completely
    => different because I think that here the ability to decompile the app is one major problem (like it is with
    => Java, Python, Ruby, …). But in this area I think the domain of in-house apps is more important. A lot of
    => awful VB6-Programs were developed for internal use, now with .NET you have much more possibilites
    => and a better platform.

    Garbage Collection
    ==================
    You mentioned the IDisposable. I’ve written in the post about the “silly dispose methods here and there”. It’s not like having a delete statement for everything. It is incoherent and ugly to have to inherit from a specifc interface. You say that in native apps there are leaks. So what? No one denies that. The problem here is that managed apps are in no way better under this aspect, although claiming they are. I’m not the only one who wrote about this. I quite vividly remember Mark Russinovich expressing the same thoughts in a blog post before having been hired by Microsoft.

    => As I mentioned before you also must be careful with what you do with your memory but real leaks are
    => usually not a problem. The IDisposable-Pattern is just a way to know exactly when a resource is
    => disposed. Usually you don’t care because of the GC but when you have files, network/database
    => connections, GDI resources etc then you better use IDisposable. And the code is very easy to
    => understand:

    using(var f = File.OpenText(“bla.txt”))
    {
    var s = f.ReadToEnd();
    // …
    }

    => It’s basically what you do in C++ with scoped auto-pointers. No magic here and it is a good compromise
    => between totally unmanaged and totally managed.

    XAML
    ====
    It is verbose and C++ programmers don’t like to be confronted with XML. If I wanted to be an HTML developer, I would’ve become one. XML is good way to represent a UI, I wrote that in the post which you clearly just skimmed through (Qt does the same btw), but it should be optional.

    => It’s new information for me that as a C++ programmer you don’t have to work with XML. What’s so
    => bad about it ? As I said, XAML is just another way of building up a tree of .NET objects in a declarative
    => way. You can use it also for a Console app to read some serialized objects from disk. And if you don’t
    => like XAML, then you can do everything in code.

    Windows Phone 7
    ===============
    No, I don’t have an app in the appstore. This clearly proves that I can’t code with Cocoa.
    Here you completely skip the portability issues and the API problems.

    => Yes, WP7 is just a year old. Yes, MS is very late in the game. Yes, they did mistakes in trying to port the desktop to a smartphone device with Windows Mobile 6.5. And yes, I think they made the right decision to start from scratch. And I like their decision to not allow native code because from their point of view the platform must be much more restrictive than 6.5. They think about battery life, about responsiveness of an app, about a common UI style and so on. So better start small and slowly extend the capabilities instead of make everything open for hackers. And for SQLite: the Mango update will have support for SQL-Server CE.

    Cloud Computing
    ===============
    Don’t really understand what Windows Azure has to do with it now. What does Bing run on? I don’t know. Probably IIS, even though it’s being reported to run on Linux (?). Google uses Linux and Amazon probably its own thing. All native stuff. So what does mentioning a native cloud technology among many others mean? What can be done in .NET can be done even in Python. But we should talk about performances here. Can you claim that azure has performance benefits over ther others?

    => Well, I thought you criticized MS for having a Cloud-Offering therefore I wanted to answer in a MS-Context, too. To be honest, I didn’t get the meaning of this paragraph which basically says that not “everything should run in the Cloud”. If this is your claim, then I’m on your side. But combining Cloud-Services (like Location-Services) with a desktop/smartphone app is very appealing.

    Social networks
    ===============
    You clearly haven’t read the title of the post.

    => I think I did. But this paragraph is basically a rant against Social Networks and then I don’t understand what you think MS did wrong in having no such social network. They happily integrate Facebook, Twitter and so on into WP7.

    Bing, MSN Live, failed Yahoo acquisition
    ========================================
    It’s lame. If it was just a strategy then they could’ve sticked with msn live instead of changing name every 10 seconds and trying to buy yahoo (which is only a brand). Your point of view really seems to come from a poster boy.

    => As a poster boy I use the Bing-Maps service for my WP7-App. So I’m glad it’s there.

    Conclusions
    ===========
    I read about WinRT, but it’s too soon to judge it. If it will be completely transparent to native applications, then very well, but it still doesn’t explain why it took more than 10 years (in which basically no progress was made) to start to work on a new native API. And again it should have been done in a gradual way, not all at once.

    => WinRT will gradually grow as it seems to start with about 1800 classes compared to over 10000 classes in .NET

    Ok, Microsoft is doing most things right at the moment. Good that the market agrees with that!

    I actually never mention the market because it doesn’t mean much. Great projects like BeOS die because of stupid business decisions. However, it isn’t even normal to brag about products such as Zune which then die not much time later.

    “ahaha the iphone is the most expensive phone ever [...] it’s not for bussines customers [...] we have great windows mobile devices with keyboard [...] I like our strategy, I like it a lot etc etc” (http://www.youtube.com/watch?v=nXq9NTjEdTo&html5=True). And then do the same 2 years later.
    I now understand what you mean that Microsoft “is beyond coolness”. Indeed, it is.

    => I don’t like Steve Ballmer; I would be happy if he would be replaced. But I think he will never ever underestimate another Apple product. He learned his lesson. And new folks like Sinofsky seem to take over the leadership.

    BTW,thanks for the discussion, we’ll see what the future brings :-)

  8. Yes, we’ll see. :)

    The ipod touch compared to an iphone is more or less the same (4th generation), but it has only half of its RAM. IIRC it has a different touch technology and an inferior display. Less battery life and an inferior camera.

    No, iOS isn’t open source. The difference here was that it’s usually less a problem when an API doesn’t work than when the technology I’m running on has a problem. If you notice I clearly state in the article that I thought that .NET applications would replace VB6 and be part of the ecosystem. My rant was against their ambition of dominance. And in that case if they want to dominate, they _must_ demonstrate that they are better in all cases. To me everyone can write code in the language of his choice as long as he doesn’t want to impose things on others.

    WP7 is imposing. You say things anew for battery life etc. Why should native code be a problem for battery life? The scheduler is still in the hand of the operating system. Either the JIT or native images convert the MSIL code to machine code. There’s basically no difference under this aspect.

    As for Bing etc. If it was just an integration strategy, then there was no reason to try to buy Yahoo. Also, a simple partnership would have been enough. The iPhone has got maps without Apple having created its own search engine.

    The rant was basically on the software things which I think delusional in the last decade. So even social networks are in it. The fact is that among all the things which I could come up with, Microsoft did most of them, but not all. Although myspace had a huge participation of Microsoft IIRC (?).

  9. Victor says:

    Nice debate, you two, I thought I was finished reading then I reached the comments but it was only here that the debate started … reading both points of view get us closer to the truth.

    MS, besides introducing and dropping new technologies, did do a lot of backwards compatibility, for example with Windows API. This helped old apps still work on new Windows versions but also preserved the Windows crap factor up to Win7.

    “Java which also has no story on the desktop but is quite successful on the server-side.”
    => Ever heard of Open Office Suite of Apps, Vuze, NetBeans, Eclipse, DB Management Tools or NetBeans RCP/Eclipse RCP apps? Of course if you use Windows you will see MS Office and Windows-only apps more often but this does not mean that Java Apps / Fat Clients are not successful.

    Again, nice debate !

  10. Thanks. :)

    Yes, I agree Java is still used, but consider that Open/Libre Office has a lot of C/C++ code. Probably most of it is C/C++. I think Java is more or less only the UI, the rest is native code. This doesn’t contradict what you said to Mike, but I just wanted to pontificate further on how much C/C++ is still used. Everywhere.

    Sure, Microsoft has always been very focused on compatibility. I never criticized it for it. I think compatibility is most important and probably should never be dropped unless it is detrimental to security. I don’t want Windows apps to be pretty. They must be functional. Windows can’t be like OSX with a more unified look for all apps etc. The problem is that I see that road to be taken with Windows 8, trying to unify desktop and tablet. But I don’t think that they will be able to drop compatibility even if they wanted, don’t get me wrong. The problem is for me only where the efforts are put. It is only a question of wasted time.

    I’m also reading that there’s a lot of unrest among MS employees as well: http://minimsft.blogspot.com/.
    That blog which I have just discovered identifies the problems in the same things I have mentioned. The difference is only that I try to explain the causes from my point of view. Why has the WP7 joined so late the party? To me because it focused on the wrong things: Silverlight, imitating iPhone etc. If it had been conceived with a native API, a basic win32 compatibility etc. It would have gotten out much sooner and it would have already tons of apps which could have been easily ported from other devices. Skype is mentioned, Bing too. Same goes with all the rewriting of Visual Studio, Office etc. After more than 15 years of Visual Studio it is still impossible to resize the Property window, even with the new XAML UI. Just to name one small thing.

  11. Anon says:

    Well, based on the recent statistics, main usage of the .NET framework is web development, not desktop development:
    http://www.hanselman.com/blog/2010SurveyResultsWhatNETFrameworkFeaturesDoYouUse.aspx
    http://trends.builtwith.com/websitelist/ASP.NET

  12. Anon says:

    Another thing (which is mentioned in your post): Large Object Heap Improvements in .NET 4.5
    http://blogs.msdn.com/b/dotnet/archive/2011/10/03/large-object-heap-improvements-in-net-4-5.aspx

  13. Thanks for the links Anon. About .NET it’s more or less my point: it is not widely used for desktop applications so why force it upon programmers? :)

  14. o_mazz() says:

    Daniel, i missed a post from you a lot

  15. Re. .NET, I remember a couple of years ago, Microsoft was so proud to show off the London Stock Exchange as a prime example of C# software, until it all went down in flames: http://blogs.computerworld.com/london_stock_exchange_suffers_net_crash
    I guess I don’t have to mention what they switched to (those money people got *really* upset when they couldn’t exchange trinkets because the exchange was down).

    Ok, I agree when coding for the iPhone, to get into the proper coding mode, you should watch say the Topgun movie or some episodes of Miami Vice (I believe the bulk of Objective-C was constructed in the early 80′s). But I still prefer it to C#, here’s an example of C# design:

    Declare two integer arrays A and B, both of the same size. Now try this code:

    A[0] = 47;
    A = B;
    B[0] = 11;

    Now what do you think A[0] contains? Of course 11, logical isn’t it?
    If you don’t want this behavior, you have to use B.CopyTo(A);

  16. Thanks for sharing Henry. I didn’t know about the London Stock Exchange. I don’t really follow these things.

    It’s clear that software problems can occur with any language, but in some cases the problem lies in hiding complexity from the programmer. Your example is imho one of those cases. C# isn’t really easier than C++, once you need to do something advanced you face the same number if not more of gotchas.

  17. Arioch says:

    Open Office is C++ core with some optional plugins in Java.
    LibreOffice is trying to eliminate Java at all.
    IBM SmartSuite is really C++ core with Java GUI (Eclipse-based). And it is not too reliable. I am very sceptical towards managed and unmanaged code co-existence. Small fragments, plugins – maybe. But not intermixing them.

    Eclipse/Idea/Netbeans do not count – it i not user tools, it is “eat your own dog foot” thing. Or we can enumerate something like Visual Studio and Delphi for .Net desktop apps.

    Among .Net desktop apps are Linux Beagle and AMD/ATi Catalyst Control Centre. I would not say i like how they work, but they exist. AMong Java – there is also jDownloader, which is more alive than FreeDownloadManager and more flexible than Orbit. There also is SIP Communicator, but it seems to be eternal alpha. Mmm… there is uDig GIS application also, sunno about .Net clones, but it is not mature yet.

    Aaa… if old applications count, then i’d like to enlist IL2 Sturmovik for Java too ;)

  18. I feel that with every new version of Windows my application is obsolete, I need to upgrade manifests, take care of new GUI themes (because now my app looks like old shit compared to native Windows apps), handle new messages, support new APIs (the old ones became obsolete or doesn’t allow me to do that cool stuff), handle new fonts (“hey let’s make them larger by 1pt to piss off every win developer” – an anonymous Microsoft person behind Segoe UI 9pt)… .NET, Silverlight, XAML, Metro to hell with that!

  19. Arioch: thanks for the list. :)

    Bartosz: yeah I agree. First off manifests are a mess themselves: extremely ugly and incoherent with the whole format. Also I understand that resources in the PE allow for infinite storing basically, but important data should be stored somewhere else, like in a dedicated data directory. It’s incoherent with the PE format that UAC directives should be stored inside the resources (which should be resources as the name might suggest) of the PE. They have only used 0×10 directories out of 0xFFFF, I think they could’ve squeezed one more directory in there…

    The font thing is interesting. Didn’t notice that. :)

  20. Rakyth says:

    I’m only here because I liked your CE explorer and noticed that you had a blog. I saw the first post and decided to read on.

    And then I saw you bashing my ‘beloved windows’, as I am an end user ;)

    And then…I heard what Windows did with Windows Mobile 7.

    And then I saw the XAML snippet.

    Then I googled a smalltalk snippet.

    Microsoft, why do you hate money?

  21. Andrei says:

    Hi Daniel,

    Remember me, long time since we talked, I would love to chat again with you.
    We chatted some time ago when I was working in Silverlight, trying to add a resource at runtime to an assembly also generated on the fly. Your great articles on .NET internals were of very much help.

    I have few comments on Silverlight\XAML\.NET:

    While I haven’t read all of what Mike said, I am afraid I have to agree with his initial response on XAML\Silverlight\C#.
    While the examples you posted in C# are not relevant, C# does have some quirky stuff, however I think a perfect dev language doesn’t exist. You might have some preferences of course, but that’s something from coder to coder.

    From what I remember I think you love OOP.
    The concepts behind how the UI in the WPF\Silverlight framework are really nice I think.
    XAML was thought as a clear separation of UI from the code, I find it very similar for example to how HTML and Javascript work together.
    Silverlight\WPF heavily rely on data binding and if you apply ModelViewViewModel pattern in your apps(actually today everybody does that) you will see how nice things lay down and work each-other. Of course, there are some quirks and you might find yourself swearing while learning, but then again, nothing is perfect :)

    I find the way you code in XAML is very easy. You define the namspaces(xmlns:) and then you just lay down all controls there. The Visual Studio is really great here with the auto-complete feature, when writing controls and their properties.

    “How does one usually modify complex snippets or do things which can’t be achieved through the designer? ”

    There’s not much you can’t do in the Blend designer. Actually it has more features then Visual Studio in terms of editing the UI.
    Personally, I rarely use it, I enjoy writing the XAML code, sometimes I feel like Blend might be producing some XAML bloat, not sure. For example, there’s no point to write the XAML code for a property with default values set(Border=”0″). Not sure but I think Blend adds that after you start to edit the property(it doesn’t remove it if you set back the default value).

    Overall however, I think Silverlight\WPF is great, and it’s not only me who says that, there’s lots of people.
    The framework, the tooling, the patterns helps you have great productivity boosts and the performance of the applications is amazing.
    As a proof of performance, the Windows Phone 7 is actually RUNNING a modified version of Silverlight desktop framework!!!!
    But this ‘detail’ is something which I am still amazed it’s not being brought up\well known.
    Remember how many news about the security flaws Flash has? Can you imagine a Flash phone architecture similar to WP7?
    How many security flaws have you heard about Silverlight(both desktop and WP7)?
    Also, remember the battery issues due to using Flash on mobile devices? Again, WP7 is using Silverlight framework built-in the platform!!!!

    I am not a MS advocate nor a fanboy. I am actually not a addict lover\defender of any platform\technology, etc. If I would start being one, I risk to create invisible walls which at one moment I will have to break(because you don’t know in which direction technology goes), and for me(not sure for others), having to break the walls looks mentally consuming.

    Looking forward to chat again with you someday!
    I actually have in mind a crazy idea about a WP7 development, which actually involves some .NET internals stuff :)

    Andrei.

  22. Andrei says:

    Few more things about Silverlight.
    As others mentioned on various places on internet, the change which Microsoft decided to make is somehow funny.
    Google made public a document with their thoughts about Javascript as a language, the problems it has.
    As a conclusion they are now thinking of creating a new language.

    So after Microsoft spent a lot of effort and time creating a very mature and powerful platform and framework, which it happens to be actually quite good, they are not ‘shifting the priorities’, trying to go with what apparently the crowd wants, which is HTML5 and Javascript, the holy grail of cross-platform and cross-browsers.
    Just by looking to the inconsistencies of running HTML4 and Javascript across the web-browsers even on a single platform(let’s say Windows), you can easily see how big the bullshit is with HTML5 and Javascript.
    Here we are in 2011 and web browsers are still not consistent in the way HTML4 and Javascript is implemented.
    Why is there so few people who talk about the practical problems you have if you want to do things like storing data locally, accessing devices, printing, ect how exactly will that work with HTML5 and Javascript?

    My take is, what Microsoft will do is come up with a new platform\framework which is based on HTML5.
    The question is about the language. Here they might be creating something really cool. Or not.
    Maybe they will just create some Javascript extensions which will only work on Windows.
    What that means is it will actually be like current functionality provided by plugins in webbrowser, it’s just that it’s not by a plugin, it will be ‘built-in’ the web-browser.

    Isn’t that hilarious?

  23. Andrei says:

    I forgot to mention that Silverlight does work really well on Mac OS X. It is also working(only a previous version, i think Silverlight 3) on Linux also.

  24. Andrei says:

    About Henry Skoglund’s comment:

    “Declare two integer arrays A and B, both of the same size. Now try this code:

    A[0] = 47;
    A = B;
    B[0] = 11;

    Now what do you think A[0] contains? Of course 11, logical isn’t it?
    If you don’t want this behavior, you have to use B.CopyTo(A);”

    What do you mean by ‘if you don’t want this behavior’ ?
    What exactly in your opinion, is the undesired behavior in this?
    A is an object, like a pointer variable in C++:

    int* A = new int[3];
    int* B = new int[3];
    A[0] = 1;
    A = B;
    B[0] = 11;

    So what exactly is the “C# design” you don’t like?

  25. rizzo says:

    A: .NET is slow, buggy and horrible, it’s no wonder nobody codes in it(Java is just as bad).
    B: Apple may be making the most money, but Win7 is a superior OS to anything they’ve put out in the last decade.
    C: Oh my god iTunes sucks to use.

  26. Andrei: sorry, didn’t have time to answer, I’m always busy lately. :)

    I don’t think you’ll find many C++ devs who like to work with html + javascript. It’s a bad example. Even other frameworks such as Qt and cocoa heavily rely on the MVC pattern, but that has nothing to do with XAML itself. I don’t see why my examples about C# are not relevant. It’s a small thing and exactly because it’s small it shouldn’t be incoherent.

    About security.
    .NET/Silverlight may even be more secure than Flash, but the truth is that for now we can’t really tell for sure. Flash is used everywhere (still) and thus it is a very targetted platform. Silverlight is used scarcely and few care about hacking it (yet). Although I have seen some security issues in Silverlight already.

    “Also, remember the battery issues due to using Flash on mobile devices? Again, WP7 is using Silverlight framework built-in the platform!!!!”

    Well this is not really surprising. Flash is an external framework on top of other systems. It doesn’t enjoy the privilege of having a complete integration with the system. I remember VS 2010 with the new WPA interface being delayed 1 year because being too slow. It’s easy having performance improved when the company making the product and the one making the framework and the OS are one and the same.

    “So after Microsoft spent a lot of effort and time creating a very mature and powerful platform and framework, which it happens to be actually quite good, they are not ‘shifting the priorities’, trying to go with what apparently the crowd wants, which is HTML5 and Javascript, the holy grail of cross-platform and cross-browsers.
    Just by looking to the inconsistencies of running HTML4 and Javascript across the web-browsers even on a single platform(let’s say Windows), you can easily see how big the bullshit is with HTML5 and Javascript.
    Here we are in 2011 and web browsers are still not consistent in the way HTML4 and Javascript is implemented.
    Why is there so few people who talk about the practical problems you have if you want to do things like storing data locally, accessing devices, printing, ect how exactly will that work with HTML5 and Javascript?”

    Sorry, but the inconsistencies with JS and html are in large part Microsoft’s fault. It took until IE8 for Microsoft to support the standard and before that web devs had to test their code with browsers supporting the standard and then with IE6 and also IE7. About the last part, I don’t want web applications being able to access devices or store data locally. Honestly, it’s already bad enough as it is now with the security.

    “My take is, what Microsoft will do is come up with a new platform\framework which is based on HTML5.
    The question is about the language. Here they might be creating something really cool. Or not.
    Maybe they will just create some Javascript extensions which will only work on Windows.
    What that means is it will actually be like current functionality provided by plugins in webbrowser, it’s just that it’s not by a plugin, it will be ‘built-in’ the web-browser.”

    Yes, of course they will. And I honestly hope that project crashes and burns as well. I think we need more standards, not less. I doubt that many would create a webpage which works only for Windows, it’s not 1995 anymore . It is far more realistic that a 3rd party product like Chrome (and I’m not a fan) will create a new standard and support it on all platforms. Microsoft has a completely wrong strategy in my opinion. Time will tell.

    The problem is that MS wants to bind developers to their technology in order to bind them to their OS. This could work 20 years ago. Now it’s simply not working. It doesn’t work for web pages nor for applications. Google practically owns Python if I’m not mistaken. However, most C++ devs love Python and have embraced it. The result is that Python is used in a large number of high profile applications, while new Microsoft technologies often don’t even make it to raise an eyebrow of a C++ dev.

    The right strategy isn’t to try to bind applications through the API/technology, but to bind them by making Windows the best operating system for running applications.

    Just take a look at even the most trivial crap like extending the functionality of explorer. Even for extremely easy cases that most applications would need it requires making an activex(!!) which is loaded by explorer (which is a lot of fun when uninstalling or updating since it requires terminating explorer: a great user experience). Let alone the security of polluting the user space of explorer with dlls. I could make a list with hundreds of cases such as this. That would be the right way to bind applications to an OS: by making them work easily and better than anywhere else.

  27. Assetto says:

    Hello Daniel,
    I see you have good knowledge about programming.
    You should develop a game.
    There are some indie developers who created fantastic games.
    When you see “Amnesia: The Dark Descent” for example, it was programmed by only two people.
    When you are independent, you could make a game with all your ideas and you would earn much money.
    So, some game developers search talented people like you.
    Remember that. I really like games from indie developers.
    Play the demo of Amnesia and I’m sure, you will enjoy it. And you will understand the mechanics workings.
    How things get to work with this engine, it should be really interesting for a programmer.

    Regards
    M.

  28. Hello Assetto,
    you raise an important topic. In fact, I have considered already in the past whether or not to write a game. The problem is that I rarely play at games: it really never goes beyond a tetris-like game on a smartphone/tablet. I don’t have the patience for anything more complicated or less immediate. I much rather prefer coding, reading a book, watching a film, etc. So, the first problem here is that I don’t really like games and thus I don’t think it does make much sense to work on something you’re not passionate enough about. I say this both for the work experience itself and for the outcome. Someone who is really passionated about games will probably make something much nicer than someone who isn’t.
    Of course, I can’t exclude that someday I won’t give it a try. :)
    About being interesting there’s no doubt about that, although I personally am more fascinated about other complex software projects rather than 3d engines or IA engines. :)

  29. Roberto says:

    Ciao,

    ho scoperto da poco il tuo sito ed ho dato un’occhiata in giro fino ad arrivare a questo articolo.
    Che dire? mi hai tolto i pensieri dalla testa, parafrasando il detto delle parole dalla bocca.
    Non sono riuscito a leggere tutto l’articolo, dopo la metà sono passato direttamente alle conclusioni,
    ma condivido pienamente ciò che hai espresso.
    Le tue perplessità sono le stesse che ho avuto quando sono uscite le prime versioni del VS con il supporto al .NET. Ho iniziato la mia carriera con il VS6.0 C/C++ MFC ecc.,quando è uscito il .NET mi sono subito informato su cosa volesse significare e da lì ho capito la direzione che stava prendendo Microsoft era, a mio avviso, poco lungimirante e grottesca.
    Diciamo che Microsoft ha puntato troppo a dare spazio tecnico e commerciale a tutto ciò che gira intorno al .NET dimenticando di sviluppare meglio tutto ciò che gira intorno al C/C++ e supporti vari. Tralascio l’MFC, anche qui l’idea non era male ma fu implementata in modo sbagliato e ancora oggi nel codice interno troviamo magagne vecchie che devono portars dietro per compaitiblità con codice scritto… Infatti alla fine Microsoft ha chiesto l’integrazione delle MFC con l’estensioni scritte dalla BGCSoft. Domani abbandoenrà direttamente lo sviluppo e lo concederà a terzi secondo me.
    Non ho fatto grandi cose in C#.NET e aggiungerei ASP ma mi hanno confermato le mie impressioni iniziali.
    In questo “time lost” di Microsoft si vede lo “smart” di Intel con i suoi compilatori C/C++. Non l’ho mai provato ma dagli articoli/recensioni che ho potuto leggere hanno fatto un buon prodotto.
    Ho letto qualcosa anche sulle novità che sta introducendo con W8 e la UI e mi sono sempre più convinto che sta andando in una direzione non saggia, magari mi sbaglio.
    Un’altra cosa degna di attenzione è questa: qualche tempo fa notati un plug-in del VS implementeava una sorta di analisi del codice, non ricord bene, ma che era implementata solo per C# e managed. Poi leggendo in un blog di msdn relativo al C++ ho trovato una “caterba” di persone che richiedevano, commentando, di poter avere lo stesso tool per il C++ e nativo.
    Una cosa che avrei aggiunto al tuo articolo come “problema” non gestito bene da Microsoft (forse volutamente) è stato quello del DLL hell.

    Penso che alla fine si possa tutto riassumere e così spiegare i vari comportamenti di Microsoft in delle frasi che hai scritto ,cioè la perdita di interesse per i propri prodotti e una voglia sempre maggiore di essere una company fagocitatrice.

    Cercherò di seguire il tuo blog.

  30. Q says:

    Hi,

    thank you for your article — I think that the “Managed Development” part is great, and the rest is quite interesting (along with the later clarifications in the comments).

    Two questions:

    1) could you please comment on the statement “The fact that C featured an unsafe API can’t be used as an argument in favour of managed languages” ? I do not quite get it — do you mean that C now has a string-safe API so it shouldn’t be criticized any more, or there’s something else that I am missing ?

    2) “instead of forcing deferences” — should it be “deferences” or “dereferences” ? I am almost not familiar with .NET, so for me both words may fit well enough )

    Again, I did enjoy reading the first part — which in my opinion can stand for a very good separate blog article )

  31. Hello Q,
    sorry you’re right, I meant “dereferences” (will fix). About C, while it is true that the old API is unsafe (when ‘n’ functions are not used that is, such as strncpy) several enviroments offer safe functions and there are several safe string libraries around. What I meant by that statement is that one can’t blame the language itself, instead of creating a new language, create better libraries.

    Thank you, glad you appreciated the post. :)

  32. gen says:

    Great Read Daniel,

    My concern in all of this is the fact that development (when it comes to managed) is removing alot of responsibility from developers to pay attention to things such as memory management, but at the same time, garbage collecting is kind of a requirement of managed languages, because memory management is a very low level concept, and I dont know about you, but i like to think of VMs as kernels

    Micorosft has this nasty habit as you mention to force its developers to changes dramatically the way they develop, and WinRT seems to be headed in this same direction, I was very disappointed to hear that it will take on the C++/CLI syntax for native coding.(C++/CLI was an abomination IMO). Also is there really a benefit to providing so many different platforms for development? .NET/WinrT/WinAPI. I’m no fan of the Objective-C/Cocoa framework of Apple but I can surely get used to it because its the mainstream option for developing for MAC and iOS(I’m rather new to the Mac world so correct me if i’m wrong.)

    I share your concerns about Cloud Computing, but unfortunately, this is the route that technology is taking us, and whether we like it or not, it will become the very popular solution for data management. It is faster, but security will always be an issue, even in traditional database management world.

    As a developer I dont enjoy having to learn new ways to do things on the same platform..So if Microsoft could stop putting me on this roller coaster ride of development I would be very happy..Extend and improve the Windows API for us C++ devs. I love the Qt framework, but I find it size intimidating, and statically linking at the time i attempted nearly blew my head up..I could try again and see how it goes. BTW, they picked the right man for rewriting the IDA GUI ;)

  33. Thanks gen. I agree with what you wrote. I think I will write a follow up for this post which touches some of the topics you mention. Not that I like to express opinions at every corner, but sometimes I can’t help it.

    Qt is maybe a bit intimidating at the beginning, but if you start dwelwing into it, you will notice that it is very modular and everything has its own place. If you understand the basics of QtCore and QtGui then you will understand anything else as well.

  34. Didier says:

    Ciao Daniel,

    Very good article.

    Just a question,
    what do you think of CLR hosting ?

  35. Pingback: The biggest software delusions of the last decade |hardwarefetish.com

  36. Hey Didier,
    I haven’t looked into it much, but from my understanding of it I don’t see the point. I mean sure useful maybe to run some code which shouldn’t cause security problems maybe, but you could achieve the same by embedding a scripting language and in a cross-platform way.
    Or am I missing some other advantage?
    Sorry for the late reply. :)

  37. Didier says:

    Daniel,

    IMHO , I see CLR hosting as good mean to avoid re-writing libraries and huge part of C++ code fully tested.
    I came up with this solution to avoid trashing a working server app just because the project manager wanted to have some code in C#. After all .NET is a COM server…

  38. ah yes, it can be useful in real life projects to reach certain goals. I wasn’t considering the rewrite of code and such. It’s the same with a scripting language: you’ve got a project in python and need to port it to C++, probably you end up embedding python in order not to rewrite everything. This is of course a real case scenario which makes sense. :)

  39. Shivraj says:

    C/C++ or any unmanaged language is not holy grail of performance.
    Here’s the implementation of ray tracer in F# and C++.
    F# is managed .net language. After compiling it emits the MSIL same as C# so basically no difference between C# and F# MSIL code.

    Now Here’s the stats for F# vs C++
    The 136-line managed F# program runs slightly faster at 17s than the 168-line unmanaged C++ which takes 18s.
    (http://fsharpnews.blogspot.in/2010/03/f-vs-unmanaged-c-for-parallel-numerics.html)

    Developer’s need productivity boost that’s why .net framework provides… And performance is not bad as you thought…

  40. Yeah, I know how .NET works. :)

    I wonder if you have read the comments of the article you posted. I guess not. :) But anyway this is silly. It’s clear that a one can write good code in C# or any .NET dialect, and that one can write slower code in C++. The point is that writing C++ code in the best case scenario will always be faster than the best case scenario in .NET.

    Developers need productivity sure. But this is true for simple applications. I don’t understand what you want to demonstrate, that .NET is ideal to write simple projects? It absolutely is. I said so myself in the past article.

  41. CodeVisio says:

    @Shivraj

    Developer’s need productivity boost that’s why .net framework provides
    This is an interesting topic. I guess you’re saying this comparing it against native programming approach on Windows.
    Would you explain further this concept?

    Thanks

  42. Windows Phone 7 first debuted on devices two years ago with only around 1,000 applications to begin with. Three years after the iPhone, Microsoft rebooted its mobile efforts in a major way. The user interface was completely changed from Windows Mobile, there was no backwards app compatibility and developers had to code against a Silverlight layer rather than natively build apps and games for Microsoft’s new mobile OS. Microsoft launched Windows Phone with a marketing effort designed to minimize the importance of apps — with ads about smartphone addicts — but it now finds itself reversing on that message and focusing on apps with Windows Phone 8.

  43. Pingback: Blog J.Schweiss | Software delusions

  44. Man, thanks for telling things that I would like to think or to say.
    Keep thinking, coding and writing.

Leave a Reply

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


+ nine = 10


*

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