Archive for the ‘Software’ Category

Unobtrusive Metaprogramming Considered Harmful

Tuesday, February 9th, 2010

Diego_Velazquez

Sean O’Halpin did a very nice job with his Unobtrusive Metaprogramming rant/presentation that has been making rounds particularly in the Rails community.  Sean’s suggestions seem thought out, and the ideas he gives for the maturing rails community are sound.  That said, I can see a bunch of folks taking Sean’s thinking as dogma (ala Edgar Dikjstra’s famous letter “Goto Considered Harmful”). I understand the futility of my efforts, but cannot help my urge to fight creativity-bashing dogmatic thinking.
Talks such as Sean’s are about how to be polite.  And for sure politeness is a nice thing to be around. “Politeness is the art of choosing among your thoughts”, wrote Madame de Stael. So while a programmer should certainly choose carefully among the thoughts they offer the rest of the world, should we really care? No, and in fact, I would argue that new languages like Ruby and Go have grown out of the desire of programmers to have power restored to their hands, maybe at the expense of some politeness.
I’m talking here about the difference between Convention and Protocol. Convention helps people get along, if they want to. Protocol prescribes pre-arranged actions and consequences. Woe to those who violate protocol. The protocol of programming has become deep. Don’t use goto, don’t use private data, don’t use globals, don’t monkey patch, don’t put more than one class into a file, don’t return except from the end of a function, yada yada yada. Now I understand protocol is a great way, albeit Maoist, to get along, but convention is really a better choice for many programmers.
The fact that your patient gets well does not prove that your diagnosis was correct.  ~Samuel J. Meltzer.
Many will point out that function calls really did improve the general quality of software from the the spaghetti-coded goto-strewn mess that preceded it. Likewise, it is also true that I see goto often and productively used in device drivers and OS kernels where conciseness and complex control are inevitable. And there lies the rub. Bruised fingers do not argue for outlawing hammers. Though a pneumatic nailer is a nice thing too. I once had a land-lady that insisted the workers replacing her roof use hammers. I understand her feeling.
Sometimes to do great work you need to have full control. Craftsmanship requires being so close to the workpiece that great skill can be distinguished from the damn near inevitable errors. The error has to be as likely as success to expose the skill, and the art. Folks choose Ruby so that they can monkey patch. If that’s a bad thing, maybe Java is a better choice for the project at hand? The agility of a tool like Ruby brings the possibility of getting cut by one’s own knife. And you know, that just might be a good thing.

Sean O’Halpin did a very nice job with his Unobtrusive Metaprogramming rant/presentation that has been making rounds particularly in the Rails community.  Sean’s suggestions seem thought out, and the ideas he gives to the maturing rails community are sound.  That said, I can see a bunch of folks taking Sean’s thinking as dogma (ala Edgar Dikjstra’s famous letter “Goto Considered Harmful”). I understand the futility of my efforts, but cannot help my urge to fight creativity-bashing dogmatic thinking.

Talks such as Sean’s are about how to be polite.  And for sure politeness is a nice thing to be around. “Politeness is the art of choosing among your thoughts”, wrote Madame de Stael. So while a programmer should certainly choose carefully among the thoughts they offer the rest of the world, should we really care? No, and in fact, I would argue that new languages like Ruby and Go have grown out of the desire of programmers to have power restored to their hands, maybe at the expense of some politeness.

I’m talking here about the difference between Convention and Protocol. Convention helps people get along, if they want to. Protocol prescribes pre-arranged actions and consequences. Woe to those who violate protocol. The protocol of programming has become deep. Don’t use goto, don’t use private data, don’t use globals, don’t monkey patch, don’t put more than one class into a file, don’t return except from the end of a function, yada yada yada. Now I understand protocol is a great way, albeit Maoist, to get along, but convention is really a better choice for many programmers.

The fact that your patient gets well does not prove that your diagnosis was correct. Samuel J. Meltzer

Many will point out that function calls really did improve the general quality of software from the the spaghetti-coded goto-strewn mess that preceded it. Likewise, it is also true that I see goto often and productively used in device drivers and OS kernels where conciseness and complex control are inevitable. And there lies the rub. Bruised fingers do not argue for outlawing hammers. Though a pneumatic nailer is a nice thing too. I once had a land-lady that insisted the workers replacing her roof use hammers. I understand her feeling.

Sometimes to do great work you need to have full control. Craftsmanship requires being so close to the workpiece that great skill can be distinguished from the damn near inevitable errors. Error has to be as likely as success to expose the skill, and the art. Folks choose Ruby so that they can monkey patch. If that’s a bad thing, maybe Java is a better choice for the project at hand? The agility of a tool like Ruby brings the possibility of getting cut by one’s own knife. And you know, that just might be a good thing.

Software Idealism, Pragmatism and Elegance

Thursday, January 28th, 2010

GraceKelly

Often when working on projects there are two opposites types of personalities at work: Idealists versus Pragmatists. Often both sides show great animosity for each other. What’s so problematic about battles between idealists and pragmatists is that great solutions to problems are most often combinations of these two approaches. Results come from elegant combinations of pragmatism and idealism. Dogma is the enemy…
Elegance is our best friend. Now before the Dogmatists (Idealists + Pragmatists) claim the elegance of their respective approaches, lets look at the actual definition of elegance: pleasingly ingenious and simple, related to Latin’s eligere, ‘to choose, or select’. Elegance is choosing or selecting a simple and ingenious solution. Nothing more, nothing less. Idealists over-design, in love with excess flexibility.  Pragmatists under-achieve by rushing to action, in love with excess quantity.
Elegance is in finding a fine middle point between these extremes. How to achieve elegance in software design and implementation is not always intuitive or straight forward. One the the best talks on this topic is Jim Weirich’s from Mountain West Ruby Conference 2008. He skillfully combines the approaches of the noble blue collar pragmatists with the space-age white collar idealists. He advocates a path that does not over-design, or over-implement. He points out that a solution must be appropriate to be elegant.
James Joyce said that great writing comes from Wholeness, Harmony and Radiance. I think he meant understanding the problem, creating the right goals, and selecting or choosing the elegant path to meet those goals.  It sounds easy, but simple is much harder than complicated. If one persists, a certain timeless beauty becomes possible. This feeling transcends elegance, and feels like Grace from the constant struggle of the programmers trade.

Often when working on projects there are two opposites types of personalities at work: Idealists versus Pragmatists. Often both sides show great animosity for each other. What’s so problematic about battles between idealists and pragmatists is that great solutions to problems are most often combinations of these two approaches. Results come from elegant combinations of pragmatism and idealism. Dogma is the enemy…

(more…)

Cribbage Multiplayer iPhone App Review

Monday, January 18th, 2010

la_class_submarine

My sister’s in-laws like to visit her home during Thanksgiving.  I don’t blame them, she’s a fabulous cook and host (ess). These occasions stuck in my mind. When my brother-in-law’s family broke out a cribbage board and played into the night, it looked like a ton of fun. But I never learned to play.
Recently I discovered that cribbage is a favorite of the US Navy’s submarine service. This little bit of trivia (thank you Wikipedia) made me think of learning cribbage again. So I downloaded an iPhone app (my preferred solution to almost any problem) and set to work.
My choice was Cribbage Multiplayer.  I absolutely love this app.  It had directions for me to get started and was very intuitive to play.  At the bottom of the screen it prompted me for the next move, so I really don’t have to remember every rule to play easily.  The app allows me to play against the computer, or to use it to play with another.
I think the iPhone app my be good for submariners, if they are allowed such luxuries.  I had a chance to visit the Guardfish once (an amazing evening courtesy of the XO of the Guardfish in 1983).  I can understand how much a cribbage board could brighten a very long cruise.  My thought is that the Navy should issue iPod Touches to the crew of all submarines and include Cribbage Multiplayer.  If I had the means, I would make it so.

My sister’s in-laws like to visit her home during Thanksgiving.  I don’t blame them, she’s a fabulous cook and host (ess). These occasions stuck in my mind. When my brother-in-law’s family broke out a cribbage board and played into the night, it looked like a ton of fun. But I never learned to play.

Recently I discovered that cribbage is a favorite of the US Navy’s submarine service. This little bit of trivia (thank you Wikipedia) made me think of learning cribbage again. So I downloaded an iPhone app (my preferred solution to almost any problem) and set to work.

My choice was Cribbage Multiplayer. I absolutely love this app. It had directions for me to get started and was very intuitive to play. At the bottom of the screen it prompted me for the next move, so I really don’t have to remember every rule to play easily.  The app allows me to play against the computer, or to use it to play with another.

I think the iPhone app my be good for submariners, if they are allowed such luxuries. I had a chance to visit the Guardfish once (an amazing evening courtesy of the XO of the Guardfish in 1983). I can understand how much a cribbage board could brighten a very long cruise. My thought is that the Navy should issue iPod Touches to the crew of all submarines and include Cribbage Multiplayer. If I had the means, I would make it so.

Software Postmortems are Software Management

Thursday, August 13th, 2009

Skeletal_Sections

So having been careful about requirements, prototyping iteratively, testing with real users early on and getting it out the door quickly, what now?  No doubt users are calling, or emailing questions, feature suggestions, raves, rants and some, hopefully occasional, hate mail.  There are some naysayers at this point hollering that it went out the door too soon.  Be calm…

(more…)

Never Design Top Down

Wednesday, August 5th, 2009

bottom-up

I just off the phone with an old High School chum.  We got to talking about Bottom-Up Thinking as a way to set direction when a situation is unclear or changing too quickly. It was in the context of career, so I gave a lot of unsolicited advice … ‘natch.

(more…)

The Best Free Software Books

Wednesday, July 29th, 2009

Behind_The_Green_Curtain

Recently I saw an Ignite Boise presentation from a woman who read 200 books in one year.  Many of these were classics.  You may be interested in some of the classics in computer software. Classics do tend to become free eventually.  Here are some good ones:

What I Want for Christmas: Google Chrome OS

Wednesday, July 22nd, 2009

santa_claus_close

From the Google Chrome OS announcement:

Speed, simplicity and security are the key aspects of Google Chrome OS. We’re designing the OS to be fast and lightweight, to start up and get you onto the web in a few seconds. The user interface is minimal to stay out of your way, and most of the user experience takes place on the web.

Recently, I failed to notice a Google malware notice on some search results.  In a scene straight from the late 90’s, I clicked on my browser, it crashed, followed by Windows crashing too.  Been a while since I’ve seen that blue screen of death.  Kinda missed it…not!

(more…)

Controversy in the Glass Palace of Nerds

Friday, July 17th, 2009

glass_palace_madrid

Recently MIT announced that it would change the programming language used to teach freshmen engineers to program.  The change was from Scheme (a language obscure to many outside MIT) to Python (a language enthusiastically used throughout the world, notably at Google).  To most, this may seem a relatively minor curriculum change, the kind that happen all the time in universities, without fuss, and especially in the technology areas.  Not so.

(more…)

Internet Luddites Attack!

Thursday, July 9th, 2009

self-illumination

Recently I read “The Internet devalues everything it touches..“  While I wantedto dismiss the premise of the article out of hand, I think this will be a popular opinion.  It is also worthy of study.  After all, it is easy to get caught up in the idea that everything Internet is always better.

Looking at the continuing development of IBDTs [Internet-based disruptive business technologies] and their relative low cost of development and nearly free distribution, it is easy to see that once they become widely used and implemented, we will see a massive reduction in the costs of doing business.

We will know when this scenario has occurred, or is occurring because we will see the signs: a strong and continuing deflationary trend. We will see a continual erosion in the value of products and services.

In simple terms, the Internet devalues everything it touches. Anything that can be digitized. I’m using the term “devalues” in a strictly materialistic definition and not in a cultural “values” sense.  And I’m using the term “Internet” to denote a class of distributed technologies and applications.

(more…)

Commentary On The Agile Manifesto

Thursday, June 11th, 2009

ferris_bueller1

I think groups going Agile need the one sheet Principles Behind The Agile Manifesto.  Short and clear, it has a good chance of galvanizing change.  In true contrarian manner though, I’d like to point out why blindly following these principles is a bad idea.

(more…)

Art From Data

Tuesday, June 9th, 2009

einstein_word_art

Designing data into art may be a key web skill in the future. As we get more and more data, companies will need ever more attractive ways to lure information saturated users. While certainly this kind of design has been around for a while, the newest work made for the Internet, visualized using Internet data is cutting edge great.

Deal With It: Retrospectives Are Postmortems

Friday, June 5th, 2009

yin_yang1A common definition of insanity is “to do the same thing again and again, expecting different results”.  Yup, human denial: a common enough survival skill for the social animal in all of us, can lead to failure.  It often does.  To hear the nerd pundits speak, “retrospectives” are the continuous improvement part of today’s Agile methodologies (like Scrum or XP) meant to head off repetitive team failure (group insanity, I guess).

The truth is retrospectives are postmortems.  Whether you call them code reviews, retrospectives or love-ins, the work is now dead.  There is no more time, or money, or energy or fresh ideas to work on.  We are just picking over its bones.  I think people dress up these events with nice names to avoid the connotation, and continuous problem, of postmortems turning into group slugfests. Fair enough.  Anything to keep the team from killing each other…

(more…)

Whoa! Google Unleashes A Tsunami

Wednesday, June 3rd, 2009

surf-wave-water-tube

So I have watched the Google Wave introduction video and demo.  You should too.  If Google is successful at building, attracting developers to, and deploying this system, it very well might be the next HTTP.  Web servers, domain names and all the other cargo of the Internet might just up and float away.

Now Google is capable of accomplishing this.  They might also manage to screw it up.  Google Wave is such a large venture, I doubt seriously if anyone will be able to predict success or failure.  However, Google Wave is so important that to ignore it might just be fatal to an Internet business. That’s something to think about.

(more…)

Innovation: It’s About The Application Stupid

Tuesday, June 2nd, 2009

american_innovative_talking_alarm_clock1For years high technology vendors have been selling been selling us, well, technology.  It’s like being given fire, when you want a stove. What we need is technology thoughtfully applied.  You know, designed.  The Teach Me Talking Alarm Clock is a nice example.

(more…)

Froginstein: Creepy Microcontroller Art

Sunday, May 31st, 2009

hertz-frog1

Garnet Hertz’s ConceptLab has a project with a dissected frog, its legs animated and controlled by a tiny webserver. Yikes…