March 24, 2005
Although you eventually outgrow them, any developer worth his or her salt bears the scars of a thousand tiny religious wars. It's an occupational hazard, as Steve McConnell notes in Thou Shalt Rend Software and Religon Asunder:
Religion appears in software development in numerous incarnations-- as dogmatic adherence to a single design method, as unswerving belief in a specific formatting or commenting style, or as a zealous avoidance of global data. Whatever the case, it's always inappropriate.
Blind faith in one method precludes the selectivity you need if you're to find the most effective solutions to programming problems. If software development were a deterministic, algorithmic process, you could follow a rigid methodology to your solution. But software development isn't a deterministic process; it's heuristic, which means that rigid processes are inappropriate and have little hope of success. In design, for example, sometimes top-down decomposition works well. Sometimes an object-oriented approach, a bottom-up composition, or a data-structure approach works better. You have to be willing to try several approaches, knowing that some will fail and some will succeed but not knowing which ones will work until after you try them. You have to be eclectic.
I think it's great that we are passionate enough about what we do to have these kinds of discussions. As long as everyone retains their sense of humor. However, I can't imagine the fire and brimstone that results when you mix software religion with.. that old time religion, as FellowshipChurch.com has:
Microsoft continues to improve in this area, and there is always a new version just around the corner that will make everything better, but this is a fact of life. Microsoft products, from the server to the development environment, will inexplicably stop working with no outside interference. Each of our development machines begs to be rebuilt after six months of use. Servers that haven't been rebooted for a couple of weeks begin to have issues. Code that has worked for months stops working for no apparent reason.
I built a number of Linux servers a couple of years ago and nine months later I had to be reminded that they existed as they hadn't been touched or rebooted since they went live.
Could it be.. satan?
Posted by Jeff Atwood
It's quite common for linux afficionados to relate stories of how they'd built Windows machines that were unstable. They forget the obvious cause: they they don't have the skill it takes to create a stable, secure Windows machine.
On the flip side, a Windows afficionado could hardly be expected to ensure that a fresh installation of Linux is secure and stable.
There's a double standard in effect:
Windows is expected either be stable and secure out-of-the-box after a default install or it's crap.
Linux is expected to be installed by a knowledgeable, experienced professional or it's your own damned fault it's not stable and secure.
The standard could easily be applied in reverse, but it simply is not. That would be fair and who wants to be fair to Microsoft? It's not "kewl" among the "1337 h4xx0rz".
I own stable and secure examples of both, but at least the Microsoft examples less frequently drive me to physical violence.
I frequently find my XP development machine "slowing down" over time, generally due to odd random memory leaks that don't go away when programs are terminated (or, at least, when it looks like programs are terminated, even through a good task manager). My commit charge will gently rise as usage happens. I'm sure that I could track down the offenders, but in some areas it is still true that the UNIX-based systems just seem a little more... predictable is the best word that I can come up with.
This may have more to do with the support that the various OSs provide to people writing system utilities, but its still a pattern.
The production web server I use for the intranet applications I've built went 6 months until it was last rebooted and it was only rebooted because it's scheduled, not because of any issues. Also, there's no way I could get our PC Services staff to rebuild my machine every 6 months even if I did need it (which I haven't yet). Sounds like their development staff doesn't know how to use a PC. Sigh..
Kind of funny how just the topic of religious wars starts one.
As it is with all things in life, software is not perfect, and many aspects of it complete the rest. As it is with Unix and Windows, where some things are easier to be done on one or the other, yet a skillfull programmer will do them equally fine on both.
Windows is a lot easier to be used by novices than Linux, and a part of that is `sheltering` them from breaking sensitive parts of the system. A skilled user will manage just fine, and one can find that many aspects of the system are indeed accessible, just well hidden from a novice.
Linux, on the other hand, is not so novice-friendly, but appears more powerful out-of-the-box. Its power lies in the ability for the user to modify and fiddle with about everything.
But - in the end - it takes an experienced technician to do amazing things on both. And I think that we all can agree on that. :-)
Software = tool = A mean to an end = To Get the job done = Getting pay
Why do people worship tool is beyond me. If MS's software doesn't work for you or give you the creativity that you need or not stable enough. Switch to *nix or Mac and vice versa.
If you work at the shop where they use tool that you don't like...well, either take it like a adult or whine about it at slashdot.
Us Windows developers just don't give a damn about tool. it's not like I'm going to get a cut of MS's cash if i act like Apple/Linux fan boys and Bill Gates sure ain't the second coming of Jesus like Steve Job.
The double standard goes both ways. Windows users are supposed to pay money for a product that they must then accept, as-is, sight unseen, and in some cases they must even keep secret what they learn about the product after they purchased it. Linux users are not obligated to pay money for a product at all, but even if they choose to do so, they can have the product's internals inspected by a professional of their choice before purchase, and can publish the results of such inspection whether they purchase or not.
Which would you be less satisfied with:
1. Purchasing a mysterious box that promises everything, but cannot be easily modified and only delivers a realistic engineering compromise, or
2. Receiving a free box that obviously contains a realistic engineering compromise, with the option of hiring someone to help you make it work or even make it work better?
Frankly after 15 years of smacking both Windows and Linux systems senseless, it seems to me that the real problem is more the applications that are available for the systems, not the systems themselves.
Just about all software ultimately behaves in ways that reveal the intentions of its vendor. At one extreme are viruses, which provide no benefit to the user of the computer and often a lot of harm. At the other are excellent software packages which provide huge benefit to the user at almost no cost.
In between are several familiar examples of software that tries to strike a balance, but fails:
* programs whose user interface designs are better at promoting the vendor's branding than whatever it was that the software is ostensibly supposed to do
* programs which were obviously rushed to market with half-working new features that are useful only to people who previously bought the competitor's product
* programs which scatter pieces of themselves all over the less-visible parts of the system not because of malicious intent, but because their developers just didn't know what they were doing, and their managers and project leaders were even more clueless.
The products in between the extremes are often the most offensive to me, because they are the product of a lack of pride in workmanship during the development process, and that affects my entire emotional state whenever I use the software, in the same way that shoddy craftmanship would affect me every day if I lived in a poorly built house. I can feel the presence of the software's developers in the room with me, but I only know them by reputation, and that reputation comes from the behavior of their software; therefore, using half-assed software is like having my personal space invaded by clueless, uncaring morons, while using well-designed high-quality software is like surrounding myself with pleasantly intelligent people.
The social process that leads to mediocre software is not OS-specific. People who produce bad software can produce bad software on any platform. There is more bad software for Windows because there is more software for Windows, not because any special property of Linux weeds out bad software developers. The thing is, how do we get *rid* of the bad software without affecting the good?
We do want to get rid of bad software. Bad software costs us money, consumes human, machine, and environmental resources, and is a pain to use and maintain. Bad software should all go away as soon as the good software can be installed, our legacy data converted, our users retrained, and our costs recovered.
Most if not all of us, if handed a magic wand of logistical omnipotence, would wave it vigorously without a second thought (well, actually most of us would probably not believe it was truly omnipotent, but acknowledging that fact ruins an otherwise perfectly good argument). This idea is common in religions throughout the world. The difference between one religion and another is the definitions of words like "bad", "good", "converted", "retrained", and "recovered." If we use wildcards for those, most religions tend to be very similar.
Software platform differences in particular are like isolated islands where evolution occurs in a sheltered environment. Good software on one island can't occupy the ecological niches on other islands, so bad software flourishes wherever there's no good software on the same island; therefore, as a user, we want to live on a large island where hopefully a lot of good software has evolved.
This was how Microsoft got its start: find a whole lot of users who don't know good software from bad and/or have access to no software at all, sell them something marginally better than nothing, use the funding to improve the product, then sell them something marginally better than what they just bought. For a while Microsoft provided a very useful function, so it thrived.
Evolution in isolation was also how Linux got its start: find a whole lot of users who want software with a particular license over all other criteria, give them something marginally better than nothing, then collect their patches and criticisms as quickly and cheaply as possible, and give back something marginally better than what they all have individually. Linux quickly outgrew its niche and stomped on a few competitors along the way, not all of whom survived. Hopefully the competitors were all the bad-software kind...
The wars start when the religions meet, because the groups need resources to thrive--especially new members who increase the wealth (not just money, but talent, time, working code, etc) of the group, as software developers do among populations of computer users. Imagine how far Linux development would have progressed until today if Microsoft's products were consistently good software at a fair price, or if the Unix vendors hadn't dropped the ball so badly in the 90's that they nearly destroyed themselves. Who would do the serious work on Linux if they already had access to an adequate operating system with acceptable licensing terms? (see the GNU Hurd or the BSD's for an answer to that question) Or, if you prefer, look at the changes in Microsoft's behavior in the past few years, and the potential competitive consequences Microsoft avoided as a result.
The wars will go on as long as the conditions required to end the wars are not met, because each of the opinions in the religious wars is basically right, or at least not wrong, and groups who follow the religions are essentially functional and self-sustaining, so they can continue having their opinions for a lifetime as long as the parts of the ecosystem that keep them alive don't change. Those religions which truly are wrong usually die quickly, sometimes spectacularly.
Ironically enough, the fact that the religions have nothing to fear other than themselves means that the only credible threats to the survival of the religious groups are the groups themselves: since the groups are large enough to form self-sustaining ecosystems, one might absorb or destroy the other, or even change the local environment to their own advantage. This is probably why some members of each group see converting or recruiting as many new members as possible as such a high priority--if all other factors are equal, the religion with the most believers wins.
I frequently find my XP development machine slowing down over time, generally due to odd random memory leaks that don't go away when programs are terminated (or, at least, when it looks like programs are terminated, even through a good task manager). My commit charge will gently rise as usage happens. I'm sure that I could track down the offenders, but in some areas it is still true that the UNIX-based systems just seem a little more... predictable is the best word that I can come up with.
Admittedly, Microsoft OSes do have a bad reputation, but a lot of that has been taken care of with XP and Server 2003. The last company I worked with had several problems with boxes running Server 2000, that had to be rebooted periodically. However, the 2003 machines ran smoothly and rarely needed a reboot.
I can take out an XP box with a poorly written program, but they are very stable overall. Just don't try to load a 1GB file into memory, and you'll be okay.