I’ve been spending tremendous amounts of time recently perusing the weblogs of various Microsoft developers, testers, project managers, and other folks. Aside from the fact that they work for Microsoft and some work on the same projects, they all have one thing in common: without exception, every single one of these people comes across as incredibly intelligent, insightful, and knowledgeable. Many of them frequently post long and very well written essays on various programming-related topics, from UI design to security to performance to the intricacies of the .NET common language runtime. They often post from a perspective of educating a user or developer who wants to know more about why things work the way they do and how to write elegant and well thought-out Windows applications.
“Elegant” is a word that floats through my head often. I try to hold myself to a standard of elegance and simplicity in the code I write and the software I design. Sometimes I think I’ve done a good job, other times I know I’ve created a muddled mess. But one thing that struck me about these Microsoft bloggers is that a lot of them design and develop some pretty complex software, and the sheer elegance that shows through in their explanations of how certain design decisions were reached is absolutely mind-bogglingly stunning to me. These folks are good at what they do.
Even more interesting to me is that every single one of these people seems to have a very selfless attitude. These are their personal weblogs, yet personal posts seem to be few and far between compared to coding examples and essays on design practices.
This is strange to me. Most of my software development experience has come from writing and collaborating on open source software. I’ve found that open source software is rarely well designed or elegant unless it has either a huge user base and a very small team of extremely experienced core developers or a small user base and a single developer, although those two things don’t, by themselves, guarantee a good design philosophy. I’ve also come to perceive many open source developers as hostile, which is unsettling. Considering the unselfishness inherent in giving your code away for free, you’d think that all open source developers would be kind, generous, considerate people, but this couldn’t be further from the truth. It’s not uncommon for a bug report, feature request, or support question from a user to result in flames or angrily-worded variants of “RTFM”, which hardly indicates a selfless disposition. And yet, I can certainly sympathize, as I myself have developed a habit of ignoring support requests from users who obviously haven’t read the documentation, or bug reports that aren’t reproducible, or feature requests for features that I would never personally use.
Even worse, the number of badly-written open source projects vastly outnumbers the well-written ones. Even some of the open source software I use every day seems have been designed from the ground up to be unnecessarily complex. It may still be marginally better than the closed-source alternatives, but merely being better than the worst doesn’t make you the best. And from what I’ve been reading, it looks like Microsoft’s closed-source software, at least, is getting a lot better all the time. Open source zealots love to point out how quickly open source alternatives are gaining market share, and I’d love to share their optimism, but if these Microsoft bloggers are any indication, the open source community is going to be facing some pretty daunting competition in the near future.
I’ll tell you a little secret: I’ve always had a deep, dark, guilty inner desire to work for Microsoft one day. That desire just got a little bit stronger.
Comments
nothing dark about it.
Then again, it's scary. Are they really people, or automatons?
I'm kidding, of course. OR AM I?!
Fired for their weblog saying anything bad
As for open source people being nasty, I agree. But I think it is because they take critizim personally. The project they are working on is their baby. Also for many of them their project is their first or second major programming experience, so their code isn't up to par.
Re: Fired for their weblog saying anything bad(oops)
By "G5's" I mean the new top of the line apple models
Re: Fired for their weblog saying anything bad
I worked as an outside contractor at Intel back when I was in high school, and they were very clear about the fact that taking pictures inside or around the building without getting authorization first could result in immediate termination. It was even on the forms I signed when I started working there. From what I've gathered, Microsoft has similar policies, as do many other companies. This is hardly surprising.
The fact that Microsoft uses Macs shouldn't be surprising either, especially since Microsoft develops a lot of Mac software.
Microsoft
On the other hand, getting help from Microsoft is often a waste of time, if you have a real problem. You can spend days looking through the MSDN, searching the MS knowledge base and submitting support requests, and get nothing. What you can't do is email the developer and expect to recieve a response. Unless you pay tens of thousands of dollars a year for the privilege, of course.
The fact about Microsoft is that they hire smart people, write crappy software, and charge through the nose for support. I've known four or five people who got hired by MS. They were all extremely intelligent. Not all of them were good software engineers.
Microsoft interviews are known for their difficult puzzle questions. Often, things entirely out of the field of software engineering are asked. There are entire books published on how to approach a these puzzles in a Microsoft interview.
These puzzle questions test a number of things: How do you approach a problem? What do you do when you don't know the answer? Are you smart enough to figure it out? These questions are very important to Microsoft culture.
These interviews do not (apparently) answer the question of whether or not the person in question can design good software systems.
So, it doesn't surprise me that some of these people can write intelligently and argue their design decisions effectively. It also doesn't surprise me that Microsoft runs a propaganda site disguised as a collection of blogs.
These people are paid to be intelligent, insightful and knowledgeable. Microsoft has lots of talent, and it can afford to pick the face it presents to the world.
Re: Microsoft
As an example, browse through Mozilla's Bugzilla database sometime. Pay very close attention to the number of confirmed, open bugs with working user-submitted patches that have been open for two years or more. And I'm talking about actual serious bugs here, not feature requests or enhancements. Like this one, for example, opened in early 2001, which describes how Mozilla's Linux installer deletes the contents of the
/usrdirectory. The bug was finally marked critical in January of 2002, and a patch was submitted in May, 2002. It is now November, 2003, and the bug is still open, still marked critical, and users are still experiencing it. So far, they've even refused to add a note to the readme file, and the bug still exists in the latest releases.I know this sort of thing isn't indicative of the overall state of open source software, but it is indicative of open source's biggest problem, which is that the developers don't have to do anything they don't want to do. Conversely, this also happens to be its biggest asset, which is kind of a twisted contradiction. Nevertheless, open source software can be brilliant if the right people are behind it and if they can get their hands on the right resources. Microsoft knows this. Browse around the GotDotNet website a bit and tell me it doesn't remind you of a more user-friendly version of SourceForge. The .NET compiler is included in the common language runtime, which is included in Windows now. Microsoft is shipping a free .NET compiler with Windows and running a community site for open source .NET software. I think you can see where I'm going with this.
You say that Microsoft writes crappy software. With this I strongly disagree. Microsoft wrote crappy software. Microsoft writes incredibly good software.
We're really comparing Cadillacs to Hondas. They'll both get you where you're going, but you're probably going to get a smoother ride in the Cadillac, and if your Cadillac breaks down or you get lost, you can call OnStar (which you'll pay handsomely for). On the other hand, your Honda can be tweaked and tinkered with, and you can even install luxury seats and a nice sound system and make it feel like a Cadillac, but no matter how much you whine, Honda's not going to make those options standard because, in their opinion, nobody really needs them. And when your Honda breaks down or you get lost, you're pretty much screwed (unless you bought your Honda from a dealer who offers -- for a price -- their own roadside assistance program).
Some people prefer Hondas. Some people prefer Cadillacs. They're both good cars.
The thing about Microsoft is that the quality of their software has been rising consistently ever since that legendary BASIC compiler that got the company started, in much the same way (although perhaps without the same solid science behind it) that Intel's processors have consistently been getting smaller and faster.
You also imply that Microsoft hires software engineers who are good at solving problems and making excuses but bad at designing software. This makes me incredibly happy, because by your standards I'd make an excellent Microsoft employee. I can solve problems all day long, I can invent excuses for the ones I can't solve, and yet, even if my life depended on it, I couldn't design an operating system that would meet the needs of hundreds of millions of people who all want different things and speak different languages and use different hardware. Hey, you know, by that criteria, I bet you'd make an excellent Microsoft employee too. And so would every other good programmer I've ever known.
Re: Microsoft
As someone who has been using Mozilla on linux as my primary desktop browser since before 0.8, I can truthfully say that I have never run into the above mentioned defect, nor have I ever heard of it. I can easily imagine that it's not a very high priority for the Mozilla developers. Most linux users use package management of some sort, not executable installers.
One must also remember that there are costs to software development other than coding time. Software must be tested. Testing is time consuming and expensive. I know, I do it professionally.
I think Microsoft knows that in order to secure their hold on developer mindshare, they have to compete with opensource. Hence, they build a SourceForge clone (I'm not sure I'm with you on the user-friendly thing). As to shipping a compiler with the OS, it's about time. Any sophmore CS student can tell you that compilers are one of the many important components of an operating system. Selling an OS without a compiler is like selling an OS without a usable shell (Netware, anyone?). Sure, you can bolt one on afterward, and some installations don't need one, but it's just not a complete OS.
I'm willing to admit that Microsoft's product quality has been going up lately. I don't think it's been consistant though. Windows ME for example, was total shit. Windows Server 2003 had security eratta on core services within 6 months of release. And now MS seems to have decided that firewalls are the best way to secure your applications.
You may make comparisons to open source products, but be aware that you paid for Microsoft's bugs, whereas you got the opensource ones for free.
As to the car analogy, you forget that the Honda was free. You pay through the nose for the Caddy, plus your OnStar fees. Honda would also have to be giving away repair manuals for free, along with a complete garage full of tools with which to repair your car.
Plus, Hondas would need to be available as build-your-own kits, so that you can ditch the back seat if you decide you don't need it and make it all-wheel drive, whereas the Caddy only comes in black...
As for designing operating systems: No on does this alone. Even early Unix involved at least four or five guys. But more to the point, no one does this at all; it's been done. There is a perfectly good OS architecture that has been around since practically the dawn of time. It is simple, flexable, and high-performance. Why one would choose an outmoded dinosaur like VMS as the basis of an early 90's operating system instead of Unix is a mystery to me. My guess is it had a lot more to do with politics than engineering.
Microsoft could have built MacOS X (in spirit, if not in ease of use) instead of what we now have as NT. They chose not to. They could have embraced standards, like LDAP, DNS and Kerberos then, instead of doing WINS and a the NT domain system until Win2K. They could have had Corba, but they wrote OLE/COM instead.
There are no good engineering reasons for these choices. There are very good business reasons. Microsoft is about business first, engineering second or third. They always have been and always will be.
This is the strength of open source: By not charging money for the product, we free ourselves to make the best engineering decisions that we can. By displaying our source code to the world, we provide ourselves with incentive to do the best we can. This results in better software. The Many-eyes/shallow-bugs argument is icing. Patches from users are convienient at best. Reading other people's code is occasionally useful (but we would have books with example code in any case). Open source is about freedom to do the right thing.
Re: Microsoft
This is exactly the attitude that irks me about open source developers. "It doesn't affect me, it doesn't affect most people, so it's not a very high priority." That's a very blasé response to a bug that results in severe data loss. You do QA for a living, so I don't need to tell you this, but a data loss bug like this one is critical even if it only affects users named Bill on Christmas Day in a leap year. Not only has this bug gone unfixed for several years in a released product labeled as stable, it has also gone unmentioned in the documentation. At the very least, there should be a warning in the readme saying, "The Linux installer has been known to delete files it shouldn't, so you may want to install a package instead."
Imagine if the Microsoft Office 2000 installer deleted your
C:\Program Filesdirectory, but only when it was run from a network installer hosted over a Windows domain. You could argue that this isn't a critical issue, since most users install it from the CD or from a network installer on a workgroup. But if the same issue still existed in the Office XP and 2003 installers, would you still be so forgiving?Excusing a multi-year delay for a critical bug fix by saying that the testing would be time consuming and expensive doesn't make any sense, especially when the majority of your testing is done by users, for free, and especially when it was that free testing that turned up the bug in the first place. In any case, unless you're an open source project that doesn't have revenue to lose when users stop using your program, it's always more expensive to delete a user's data than it is to fix a bug and test the fix.
This was my point; it illustrates that Microsoft is learning. The keynote presentation at this year's PDC featured two Microsoft developers demonstrating the new Avalon GUI framework in Windows Longhorn by using vi, Emacs, and Visual SlickEdit to write XAML and C# demo code onstage, compiling it with the compiler that comes with Longhorn. The Microsoft of three years ago would have maybe gone so far as to run a pre-compiled demo, and they definitely would never have used any non-Microsoft software to demonstrate source editing. They may be learning slowly, but they're learning.
Agreed. Windows ME was the last in the dying DOS-based consumer Windows line. It was a piece of shit just like Windows 98 before it, and just like Windows 95 before that, and Windows 3.1 before that. Windows didn't get even marginally good until Windows 2000, when it suddenly took an enormous leap forward and actually became an OS I didn't mind using. I like Windows XP even more than I like Windows 2000. I've even played with a Longhorn alpha briefly, and I found myself liking it too.
Lacking an actual car manufacturer who gives away free cars, I chose to use a manufacturer of practical, reliable, and inexpensive cars for the purposes of the analogy. Like any analogy, it's meant to paint a picture, and like any painting, the paint will peel off when you chip at it. Hopefully it served its purpose to communicate my point, though.
I agree with you on everything except "This results in better software." Whether the source is open or closed has nothing to do with how good the software is. Good design, good code, good testing, and good project management are what make good software. Name any good software project, open or closed, and I guarantee you it has all those elements. Unfortunately, most software has only one or two of those elements, and some software has none. It's just as possible to build an excellent piece of closed source software as it is to build an excellent piece of open source software, and the converse is true as well.
While open source has the advantage of developer freedom and large numbers of diverse contributors, closed source has the advantage of revenue-based motivation (i.e., "The Office 2000 installer deletes files, which results in loss of revenue, so the bug will be fixed in Office XP and 2003") and funding for expensive resources such as distributed build systems, large testing labs, etc. However, in both cases, these things can be disadvantages as well.
Neither open source or closed source is better than the other. They're just different. Neither one automatically results in better software.
The opinions I expressed in my post were my own personal, metaphysical musings based on my experiences and observations over several years of writing and using both open and closed source software. You obviously have had different experiences than I have, and we don't share the same opinions. I hope you don't take this as an indication that I prefer closed source to open source or vice versa.
To be honest, the only thing I prefer is "free", and the software I use is the stuff that best meets my needs and that I can get for free. I also happen to have a very liberal definition of "free", if you catch my drift.
Re: Microsoft
Now if it was microsoft, you wouldn't be able to even KNOW that bug is there because their bug lists aren't public. There could be 50 rare bugs that are 10 years old in their software, but because it doesn't affect many users and we can't see what bugs are there, we don't know.
Re: Microsoft
I have no doubt that Microsoft doesn't publicly announce every bug in their software, but security issues and significant bugs are reported here and here, respectively.
Re: Microsoft
So every known bug in every supported distro of Windows is reported there?
A couple of thoughts...
Re: Microsoft
I have no doubt that Microsoft doesn't publicly announce every bug in their software, but security issues and significant bugs are reported here and here, respectively.
Re: Microsoft
So in other words you could have said, "Yes, you are right, because Microsoft doesn't make every bug publicly avaible there could be many outstanding and serious, but rare bugs in Microsoft's software, just like mozilla."
Re: Microsoft
"Could" is a wonderful and versatile word, but it merely implies a possibility, not a certainty. When you find one of these super-secret Microsoft bugs you speak of, let me know.
Re: Microsoft
My point is, if mozilla never tould you about that one rare bug you quoted, you would have never known about it. I am saying the same is true about microsoft. We have access to mozilla's bug database, but we don't have acess to microsoft's internal bug datebase.
Re: Microsoft
Either way, a bug's a bug and bad software is bad software. I'm not sure what point you're trying to make.
Re: Microsoft
I'm not at all concerned or bothered by the fact that the installer bug is unfixed. I'm sure the developers have a good reason for not applying the fix. Since most of the Moz developers don't get paid, you have to prioritize (they would have to even if they were paid). Since the affected group is apparently miniscule, why waste the time?
I think the parent is right to point out that we don't know how many bugs are in MS products (which I would argue are still bloated, insecure, shoddy piles of garbage). Take for instance, the web site that listed a myriad of critical bugs in IE that have been unfixed for a significant amount of time (the site was recently taken down. I can't find the URL). One poster on /. even reported a remote exploit in IE that exists on machines that are completely patched. How many known security holes are there in Mozilla (or Linux), and how quickly was the last one resolved. Now compare that to Microsoft. I don't expect you'll find MS compares favorably.
Yes, they've gotten better. Yes, they have smart people working there. No, that doesn't make me want to use their software any more. I don't like the bloat and the holes that come standard in every MS product...
Re: Microsoft
That's pretty much the bottom line for me. My virulent hatred of MS subsided after I stopped using a MS OS daily (now that I'm back on it at work, we shall see). However, I still find their software crappy to the extreme. I used Mac OS X for over a year. 90% of freezes and crashes were created by Microsoft Office. I used to be a linux user. Now I'm saving my money to become a Mac user, because using their product won me over. I am just an advanced user -- I don't code regularly, and I like things to run smoothly without a lot of tinkering. When it comes down to it, the open source/closed source thing isn't that important to me. I have tried Windows, Linux, and Mac OS X, and I am going with Mac OS X, which is, I do believe closed source. It's solid, it's pretty, it's easy to figure out how to solve problems, and so I'm willing to pay umpteen dollars for it. There are no Microsoft products for which I can say that. The point of this ramble? There are two: A) Matt's right -- the problems with Microsoft are not the problems with closed source. They are problems with Microsoft. B) I don't like Microsoft's products, so I'm not giving them my money, and I'm giving my money to someone in direct competition -- I highly recommend this course of action, which I call "Capitalism WHEEEEEE!" Simple points, but it took me this long to get around to saying them.
OS X
MacOS X has a few very big, important things going for it (from a programmer's perspective):
1. It is Unix-based. This provides a solid, proven system API on which to build applications and libraries. The API is simple, versitile and (mostly) elegant.
2. It has a modern GUI api. Cocoa is natively object-oriented. The same can be said of GTK and Swing, but Cocoa is closer to the core system than those two, so high performance is easier. The MS Windows GUI APIs are procedural, as are the xlib apis. Unless you're working with straight C, they don't make any sense.
3. Apple is not afraid of change. The Wintel world is. Apple has very successfully managed two major migrations: the first from the 68k processor to the PowerPC, the second from Classic to OS X.
Wintel can't cut the cruft. We still have f*cking DOS and 8086 binary compatability. Our ISA is old enough to drink, vote, and die for its country. It has processor instructions for binary-coded decimal arithmetic. Simple batch files from the early 80's will still run on Windows XP, despite the fact the shell they were written for is total worthless sh*t.
OS X also has a major liability: dependency on Apple. Apple has made some stupid mistakes in its history. It's not necessarily going to be here forever, and it may decide to change direction one day. This is a problem with all closed-source software. If the owner deviates from his path, you must follow him, or be left behind. Forking the project is not an option.
Look at, for example, Be. Be made quite possibly the finest OS of their time. It was years ahead of everyone else. Be is gone now; so is their OS. It was closed source, so when the owners closed up shop, the OS disappeared (actually, I think it got bought by Palm, but they don't seem to have done anything with it). Had it been open source, we would probably have a dedicated user community making improvements and keeping it up to date.
Re: OS X
Regarding the BeOS source: It did indeed get sold to Palm, and Palm rejected a massive petition to release it as open source. However, a company named yellowTAB, which had been in negotiations with Be to distribute the next version of the BeOS just before Be sold their assets to Palm, is now selling Zeta, an OS based on the unreleased BeOS R6 (which they had gained the rights to) and extended with new code and a few pieces from the OpenBeOS project. Unfortunately, yellowTAB has been extremely vague about whether they're just tacking things onto the core R6 binaries or whether Zeta is actually based on the R6 source code.
There are lots of free, modified distributions of the BeOS R5 release with updated drivers and other tweaks, but BeOS isn't getting any younger, and it definitely shows. Nevertheless, OpenBeOS continues to look promising. With any luck, we'll one day have a completely open source BeOS clone with R5 binary compatibility.
Re: Microsoft
I think their problem is they have given up on the public, and have just been marketing to multimedia people. Thus, once they got a product that the public could use, it is now out of the price range for that public.
Re: Microsoft
True. Publishing bugs does not mean that the software or the development process is superior in any way. In the end, it is the actual resolution of those bugs that matters. While the security community has thrived on published (or publicized) vulnerabilities, closed source software has actually improved in quality over the years...a stimulus that open-source players might be missing out on.