Although we built a very simple code manager, it was quite
Knowing that the code was saved gave us the courage to make changes. We knew that we could get back to any previous state with only a little effort. If we had written the tool to roll back to a given point in time, we probably would have used it a few times. If we had needed it more than a time or two, we certainly would have written it.
In short, our code management tool was almost but not quite sufficient for our needs. Thats a pretty good place to position tools. We dont want to work on them too much, to the exclusion of customer needs, but we want them to be strong enough to serve us. Once the tool reliably saved all versions, it was good enough. Had we needed to roll back more frequently, we had the information to do so.
Our coding standard evolved over time as we became more familiar
with C#. We didnt pay much attention to the
standard, since only a few people were involved and only one of
them worked with all the code. Still, we could have done better in
certain areas. In particular, Id point to our
use of properties and
We have not been consistent with properties and methods. On the
one hand, in Smalltalk and in Ruby, we are used to not needing
parentheses or other parameter indicators on methods that
dont need parameters. So we were initially
inclined to use properties whenever they would work. We often got
The bottom line is that we were not consistent, and we never sat down and talked through just what our conventions should be. The code suffers a little because of that, although I hope it doesnt suffer much.
We did little subclassing, either from real objects or from
interfaces. I think we would benefit from more. In the case of our
TextBox, which we did subclass from TextBox, we could have been
I suspect that we would have done well to create a special
collection class for our lines. There are casts to strings
sprinkled around in the code, and we could have avoided many of
these, perhaps all of them. The need to
At one point in the Undo saga, we tried to build one class as a
subclass of another. To do this, we needed to override a couple of