Hi,
Love4Boobies wrote:
Brendan wrote:
- bad initial design - e.g. the design wasn't very good for "foo" to begin with. Everyone makes bad design decisions sooner or later (the only people who haven't made bad design decisions are people that haven't made design decisions).
I don't see how the fact that everyone makes mistakes is an argument for the fact that requiring a rewrite is not a sign of a good design.
Imagine someone who's never designed or implemented an OS before. Is it sane to expect them to design and implement something perfect on their first attempt?
Excluding "clones" (where an existing OS design is merely copied and no design flaws are possible) I can't think of anything that's actually good which hasn't been through at least 2 rewrites.
Love4Boobies wrote:
Brendan wrote:
- internal scope creep - e.g. the design was perfectly fine for "foo" which is all we cared about at the time; but now we want to do "bar" and the design needs to change. A simple example of this would be saying "it's only a small hobby OS, therefore I don't want to bother with Unicode and proportional fonts" and then 3 years later thinking "it's grown beyond just a small hobby OS, therefore I actually do want Unicode and proportional fonts".
- external scope creep - e.g. the design was perfectly fine for "foo" which is all we could have known about at the time; but now someone else has introduced "bar" and the design needs to change. At the moment there's probably a lot of people looking at their "it was reasonable to assume PC BIOS at the time" boot code.
A good design would have to be flexible enough to allow for the requirements to change over time.
Sounds like a nice theory. Can you think of anything that has actually achieved this in practice? If both Microsoft and Apple can't do it, should we expect random hobbyists to be able to?
In practice, this argument is like saying that the person who designed the first horse-drawn cart was a fool because he should've predicted the invention of combustion engines and designed the horse-drawn cart to easily adapt to unforeseeable changes in technology.
Love4Boobies wrote:
Brendan wrote:
Where we don't agree is that I think these smaller design changes can become a larger collection that does justify a rewrite; while you think that (for an example) it would've made more sense for Microsoft to keep polishing "MS-DOS" until it becomes something like Windows 8 without starting again (twice).
You are starting from the assumption that their designs were good when they actually weren't. They may have seemed good at the time; that's another story.
They were (relatively) good designs at the time they were designed. For example, in the time before MS-DOS was released (before 80286 existed), it would've been unreasonable to expect Microsoft to develop a full multi-tasking OS with GUI, etc. For their next rewrite, Windows 9x was (given the need to support old DOS software that expected full control and no protection) also relatively good.
Should Microsoft have looked deep into their crystal ball, and designed DOS for GUI and 1920*1600 wide screens and systems with 8 or more 64-bit CPUs running at several GHz back when people were pushing just to get their 8 MHz CPU to handle simple (text mode) word-processing?
Love4Boobies wrote:
Also, notice that my main problem with that post was that the poster was advocating rewrites as a good practice.
Rewrites are good practice, when they're justified. Wasting years polishing a turd just because you're not smart enough to recognise the magnitude of design changes and/or because you lack the courage necessary to do what needs to be done, and then ending up with a unmaintainable pile of scar tissue is not good practice.
Of course rewrites are not good practice when they're not justified too; which is what makes it far too easy for people to take what I've been saying out of context.
Cheers,
Brendan