Dungeons & Dragons Creators both gone now
Very grateful for their contributions. Where would we be without their ideas I wonder.
Gary Gygax
Dave Arneson
Very grateful for their contributions. Where would we be without their ideas I wonder.
Gary Gygax
Dave Arneson
I just love this write-up:
http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html
This talk given by Kent Beck at Agitar Software offers some great suggestions into being at ease in the work place.
1 of 7
2 of 7
3 of 7
4a of 7
4b of 7
5 of 7
6 of 7
7 of 7
Great insight into the various physiological effects of stress.
http://video.google.com/videoplay?docid=1877467554618436978
The trend toward greater transparency to wider audiences will continue. It may be hard to unlearn habits and beliefs, but in a world of wide and free flowing information, keeping secrets is a position of weakness. You never know when you are going to be found out. Transparency is the new strength.
If software development is lean manufacturing, software
development should aim to produce decisions at the same rate as it
consumes them. If software development is lean product development,
software development should strive to retain and disseminate learning.
Here is a paper by Arlo Belshee that I found interesting:
I also saved it locally here:
This form of pair-programming has incredible promise for so many reasons. Hopefully I will encounter an opportunity to practice promiscuous pairing in the near future. The concept of beginner’s mind is something I practice alone, attempting to distrust the auto-solution I’ve learned before in favor of what the problem tells me the solution should probably be today. I trust the problem to communicate far more than myself or anyone else for that matter. I’m probably only about 40% effective by myself though.
I found the paper in a blog post by Steve Freeman:
This pattern is probably my most favorite. The inherent value of small, manageable, legible, understandable, and easily over-ridable methods is perhaps unmatched. How many times has a subclass and a couple of over-ridden methods provided the simple and elegant solution we were after. Or, how many times have we been in the position of having to either copy and paste a “one off” of these methods or completely rewrite the methods, spiking our software stability and test values in the negative direction?
The latter is the position I find myself in most as of late, working on legacy code with no pattern to be found. I attempt to make small improvements and slowly right the ship but the design is so poor that I often feel frustrated and incapable of achieving any real accomplishment through my efforts. I persist however, because I believe in the beauty of this pattern. Testability is of primary concern with this system as it is incomplete, incorrect, and non-repeatable at best. Again I forge through, making the methods smaller, observing the Law of Demeter, using Type Suggesting Parameters, et al.
A system rewrite is in the near future and so my efforts are further daunted by the realization that they don’t matter value-wise as much as I would like to believe they do. I must continue though. I am slowly communicating the brilliance of Kent Beck’s software patterns and even presented a few today.
I love what I’ve learned despite the frustration of my environment. Thanks a bunch Kent.
I really want an Apache module that will allow me to script in Smalltalk instead of having to use Php. This would support my goal of making Smalltalk the language of choice and get folks more exposure to life without curly braces (oh and what a grand life it is). With that accomplished, forums, blogs, you name it can be realized through pure OO scripting. Ruby doesn’t quite cut it for me. It’s inconsistent approach to it’s version of “pure OO” makes me nuts. I think this would be the first grand step with lots of little steps in between. If I could somehow incorporate Newspeak into the mix when it becomes available, life may be grand indeed. Beyond that, it will be necessary to engineer application server clusters for scaling applications, and load balancing controllers. I believe in the beauty of this dream, I really really do.
Design up-front is the most established and practiced design discipline in my experience. Most experienced developers/engineers assert that designing system architectures up-front is essential to ensuring that the finished overall application or suite of applications is architecturally sound, stable, inter-operable, extensible, secure, and efficient. The arguments for this design approach are fairly sound and straight-forward. I would argue however, that going this route is detrimental to each of the anticipated attributes listed above. In other words, design up-front ensures instability, quirky interfaces, difficult to extend object models, in-efficient system designs, and hackish end-results. Soundness is a product of all of these and security is a subjective exercise that requires less attention than it normally gets. Assuming that I am correct with this assertion that design up-front is bad for overall system design, what alternative exists that can better it, how does it accomplish this, and what benefits overall can be realized?
Organic or evolutionary software design bucks the trend to figure everything out up front. It follows, in identical fashion, the processes found in nature and in the improvement of all things that are ever built in any field. The idea is simple, build what you need, amend what you need, alter to fit what you need. Every component of new features and enhancements to existing features is based on current AND past needs. Foresight does not come into play. This is an extreme because there are certainly differing levels of foresight that go into building all the mini black boxes that compose a system, but overall, the governing architecture does not exist.
In nature, small incremental changes are introduced. Some of these changes result in no change to the success of the species, other times small improvements are noticeable, and then once every nth thousand iterations, a breakthrough appears that lends considerable advantage to that particular version of the species. The small improvements that lend no real current advantage eventually serve as the basis for this rare breakthrough. The activity that is occurring is called probing; dipping one’s toe in the water to check the temperature before committing oneself to the pool; constructing a prototype to illuminate the merits and detriments of the new design component. The success of mother nature cannot be argued. Evolutionary design is the best design approach available, bar none. Everywhere in the universe, this approach to design may be found. In human terms, our products continue to improve or get worse, but overall the progress is forward. Mother nature and software development learn from probing space and discovering the best form to create or to mutate to.
When developing software, the design up-front approach serves up a pair of hand-cuffs for the duration of the system’s existence, a barrier to becoming what it needs to become. The costs are undeniable to anyone who has ever maintained a legacy system. Business continually presents new needs to us and we continue to hack away solutions to satisfy their requests, never stopping to quantify the costs of not evolving the design three years ago to make adaptation simpler, faster, and more elegant. The costs of barely discernible logic to learn (guess at), modify (break), and enhance (hack) can and do become rediculous and unacceptable. Enter the system re-write in some popular (traditional), established (marketed), and widely used technology like Java or C#.NET.
Why is the rewrite necessary? Because the system never became what it needed to during it’s development. Instead, while the system worked, it became too difficult to amend, too expensive to improve, and too far behind current best practices, frameworks, protocols, and the like.
Test Driven Development, Test First Development, Prototyping, White-board Discussions, et al., are all probing activities that enable us to incrementally evolve our object designs to fit the current picture of the system. The activities we must employ to achieve success with this design paradigm include refactoring, spikes (prototyping), drawing pictures, carding sessions, and many more. The idea is to slowly discover the best design approach today, always understanding that contexts and requirements will alter that design going forward, in incremental fashion. The blockades of cost up-front must be removed. A case for this design approach must be communicated to the business as an eventual cost savings.
There are many benefits that naturally emit from such practices:
It’s not easy to convince most folks about this approach but I guarantee that following organic design practices will leave traditional design up-front systems far far behind.
A couple of organizational suggestions: