Made some ostrich egg omelets over the weekend. They were quite good, and as an added benefit, this picture is now topical.
I really really hope Zombie Feynman becomes a recurring character on XKCD, although I think it's not terribly likely to happen. Still, the idea is so poignant, or maybe pungent, and I think that Ralph is the right guy to pull it off. Please?
I've been working on our new game at work, and it seems to me that I've become strangely aware of my own cognition as I program. I get to thinking about the limits of consciousness and the finite cranial resources that we apply to large problems, as I am working on the problems themselves, which, let me tell you, is a little like trying to run a debugger on your operating system when it's low on RAM, which, let me tell you*, slows things down considerably.
Still, it's interesting stuff, and I've also noticed that my programming style seems to be attempting to make a phase transition. I think I'm moving from writing applications to writing systems. So, from writing game logic to writing game system logic. It's a slow and incomplete transition, and right now I'm in the uncomfortable middle section, but it's interesting. I wonder if, when I grow up (as a systems programmer) I will read specifications instead of guides, and participate in newsgroups and IRC channels. That's what serious programmers do, right?
Truth to tell, I've never been terribly serious about programming. If you knew me in college, I was just not a CS major, and I'm really still not, so I'm developing this whole 'I are serious programmer' thing pretty late for my age. I've always been more of an engineer than a scientist, in that I am much more interested in what I can do than in what one can do. I like makin' stuff. But I find that the more I make stuff, I also like makin' stuff right.
That is another interesting set of concepts, the 'right' way to do things. If we get rid of the moral baggage attached to the word 'right,' we can gin up some metrics like efficiency, maintainability, accuracy, transparency, expressive bandwidth, uniqueness, and scalability. Then, depending on what you want to make, different metrics are important. For instance, when making a product for the commercial market, you want efficiency, expressive bandwidth, and scalability. For the industrial market you want efficiency, maintainability, accuracy, and scalability. Here is a table!
commercial | industry | government | art | |
efficiency | very | yes | meh | no |
maintainability | meh | yes | yes | somewhat |
accuracy | meh | yes | yes | meh |
transparency | no | somewhat | yes | no |
expressive bandwidth | yes | no | no | very |
uniqueness | meh | no | no | very |
scalability | very | yes | yes | no |
My point is, doing something the right way depends very much on context, but there are definitely right and wrong ways within a given context. Figuring out what the metrics are for your context can often get you half way to a solution, and as an added bonus you'll be doing it right. lol. But in all seriousness, I find this stuff fascinating.
* you called my bluff, I've never tried it. but I can imagine.
I think you're crazy for not putting "yes" or even "very" in maintainability in the commercial column.
ReplyDeleteThe commercial market is characterized by fast release cycles of new versions, to compete with the market on features and respond to demands. If your software isn't easy to update and upgrade, and if you can't keep it in a ready-to-ship state, you're sunk.
I don't know if I have pointed you towards Joel Spolsky's article on the 'five worlds' of software development before, but if so, here I am doing it again.
Hah, good point. I guess need to be more specific about my aspects AND my contexts.
ReplyDeletePoint 1, maintainability, process is maintainable VS product is maintainable:
For commercial products, it is in fact important that the process be maintainable, but the product often does not need to be, in that the user doesn't need to be able to fix it. I was using this sense of the word, but I should have made that clear.
Point 2, commercial context, software versus physical product:
software is continuously versioned and released, physical products less so. Therefore process maintainability is paramount for commercial software. Process maintainability is also a factor for physical products, because of manufacturing plant infrastructure costs.
good catch, and good article.