Rob Williams is a probabilistic Lean coder of Java and Objective-C. Rob is a DZone MVB and is not an employee of DZone and has posted 170 posts at DZone. You can read more from them at their website. View Full User Profile

Philosophy/Software: Value Theory

  • submit to reddit

Here‘s a statistic I wonder about: how many programmers have had even an intro course in philosophy, let alone done any serious study that might have included the 20th Century variants of semiotics and literary theory. I bet that‘s a super super small number. Why? Because the people who make math curricula in this country don‘t think liberal arts subjects are worth a damn (and they don‘t care that they disagree on this point with every single prior civilization back to the Greeks, who invented their religion: math (though it wasn‘t a religion for them)). Nevermind also that the state of CS edu in this country is still a complete joke. People come out who can‘t possibly hold down jobs as developers. They need someone to essentially sponsor them while they learn all the things that they weren‘t taught by the people who charged them north of $100K.

Anyway, I have noticed in the last few years that a lot of people have been arguing that The Genealogy of Morals is Nietzsche's greatest book. I don't feel compelled to put one book above the others, but can definitely get with a lot of the arguments. Especially one I saw again last night that said that basically it's because the book is considered one of the most brilliant expositions of what is called value theory. The Genealogy of Morals begins with a discussion of good and bad v. good and evil. But then it goes on to explain the history of morals in a brilliant screed.

What on earth does this have to do with programming? It's so simple. Programming has a huge value theory problem. We've known about it forever. Process-wise, value theory is the central concern in most methodologies. For instance, RUP, the king of the 90s, was the 3 amigos. The most important, longest lasting contribution from that endeavor has been Use Cases. They are a treatise in value theory. They depict what? A value exchange Then the Agile guys showed up. What is the Agile Manifesto? It‘s the most basic type of value theory manifesto. ‘We value people over process..‘ etc. I noticed on the Agile Manifesto page that there is no representative on that page of the Lean group (neither of the Poppendick‘s are in there). How ironic is that, because Lean is really taking over the others now. No one even talks about XP anymore. And Lean, again, is basically a treatise in Value Theory: its central concern is what they call a VSM (value stream map). Kind of a stupid name, but what it is is the steps, elements, components required to produce value.

What do you see when you look around in programming today? I see a huge value theory crisis underway. One of the things Nietzsche argues is that values tend to erode naturally over time, and the people who are following them often lose their ability to a. understand their values, and b. remember their origins. I read the other day that Bob Lee said that what we have in the Java world is the ecosystem we have created around the language. Do we have that? I think Larry Ellison has that. Hudson would seem to indicate that he is the prince of JSF, JPA, etc. Do you care how long it takes to deploy your app? No one in the Java world did, until this past year. Do you care that the component model was a complete joke? That the platform doesn‘t support testing very well? The second release of JSF took what, 7 years? And it‘s not brimming with ambition (it‘s nice)... Go look at the distance between iOS 4 and 5 and those are like one year apart, or Xcode 4 and 4.2.

What I see is something that is very common in communities after a lot of time has passed: people are grasping for what they value. And they don‘t really know. In The Genealogy of Morals Nietzsche tries to explain how values not only get lost but end up actually believing in inverted versions of original values, and while so doing, they don‘t really even understand or remember the origins of their values. My next post is going to be about how the almost 10 year history of eclipse is a treatise in this process. One conclusion I‘ve already drawn is that one of the real problems is that the intelligentsia in the Java world have elongated the process of bringing their solutions to life, and that greatly increases the threat that these things will be born orphans.



Published at DZone with permission of Rob Williams, author and DZone MVB.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)



Mikael Couzic replied on Fri, 2011/08/05 - 5:09am

Very interesting article ! While I don't really see how the last 2 paragraphs and its conclusions relate to the rest of the article, I really like the way you state the problem.

If I could bring my own ingredients to the soup, here would be my personal conclusion :
We need a Value System that is extensive, coherent and time-tested, and even more important we need Consensus over our value system.
Without that, we can't begin to call ourselves Engineers (but will we ever get there anyway ?).
Without that, we're not even proper Code Growers.

It will take some time of iterative refinement, but eventually we'll get there, unless...

- We forget where our values come from :
"Why do you use Hungarian notation in your Java code ?"
"Dunno, I've been using it forever, it's best practice isn't it ?"

- We don't challenge our values, and become fanatics of obscure dogma (they breed fast these days... they always have) :
"We must draw Class and Sequence diagrams before coding, that is The Way and I'm not gonna argue about this"

- We loose sight of our objective, which is (or should be) making this world a better place (happy users, happy customers, happy developers, peace on earth, no more global warming and pizza for everyone)

Aaron Digulla replied on Wed, 2011/08/10 - 2:58am

Programming faces the same dilemma as ethics: We want the "best" but we have only a foggy idea what that might be.

Is it better to encapsulate your data? Or is it better to keep everything extensible? Always?

Is it better to have a compact, specialized language or a generic one?

Is it better to add another layer of abstraction on top of an existing system or rewrite it from scratch? Scrap Java altogether, start with a new API alongside the existing one or break backwards compatibility?

The problem with all these questions: They are very, very hard to answer without a couple of years of experience with both solutions. And by that I mean just that: Do both and see which fares better.

Of course, we can never afford that. Which inevitable leads to the "best" solution to be second best - if we're lucky.

That clashes with our stongest belief: That we know what we're doing. That projects can be planned ahead. If we would let go of this myth, we would render ourselves completely helpless. Not an option. So evolution slipped a solution into our system: A very sloppy memory which allows us to "remember" past decision with the same accuracy as a drunken monkey while being 100% sure that "it happened exactly like that"

This "flaw" allows us to be more flexible than logically possible. It allows us to adjust the foundation of our beliefs on a whim without even noticing that we do. Without that, every change would be too embarassing to even attempt.

On the downside, it allows managers to ruin companies, financial experts to ruin countries and ordinary people the climate.

Books that you may want to read: "The Invisible Gorilla" and "The Lucifer Effect"

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.