<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8738230087002446758</id><updated>2012-02-04T18:27:06.402-05:00</updated><category term='ontologies'/><category term='case study'/><category term='disclaimer'/><category term='existential programming'/><category term='tools'/><category term='introduction'/><category term='movies'/><category term='POSTSCRIPT'/><category term='origins'/><category term='types'/><category term='quantum'/><category term='schema mediation'/><category term='mind-body'/><category term='bank'/><category term='namespaces'/><category term='frameworks'/><category term='savant'/><category term='species'/><category term='roles'/><category term='polymorphism'/><category term='rose'/><category term='parts'/><category term='semantic network'/><category term='rant'/><category term='database'/><category term='humor'/><category term='taxonomy'/><category term='knowledge'/><category term='vector space'/><category term='programmers teach philosophers'/><category term='logic'/><category term='programming'/><category term='definitions'/><category term='views'/><category term='language'/><category term='philosopher&apos;s toolkit'/><category term='philosophy'/><category term='accidental/essential'/><category term='integration'/><category term='fuzzy'/><category term='identity'/><category term='abstraction'/><category term='history'/><category term='mathematics'/><category term='components'/><category term='epiphanies'/><category term='testing'/><category term='project'/><category term='equals'/><category term='test driven'/><title type='text'>Existential Programming</title><subtitle type='html'>A personal research journal-cum-blog for my general project of introducing computer software developers to Philosophy and how it can apply to day-to-day programming and design. It is named after my &lt;a href="http://existentialprograming.com/"&gt;special project&lt;/a&gt; of applying Existentialism’s motto “existence precedes essence”, generating a common theoretical approach to a diverse range of programming topics.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2430870623895503856</id><published>2010-08-10T17:35:00.009-04:00</published><updated>2011-09-09T11:37:00.572-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Not All Properties Are Created Equal (Part I: Essentials)</title><content type='html'>&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;Just a few years ago, I started reading “Philosophy 101” type books and I was immediately surprised at how relevant the ideas were to day to day software development.&amp;nbsp; So relevant, in fact, that an even bigger surprise is that these ideas are not part of the basic computer science curriculum, nor mentioned in technical books &amp;amp; magazines (&lt;i&gt;with the possible exception of graduate level artificial intelligence&lt;/i&gt;). The following idea was the first I encountered that made it clear to me that programmers need to know what philosophers already know. It was also my first clue that philosophy has a whole body of knowledge about developing data &amp;amp; object models that computer science books leave up to intuition.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Did you know that 2500 years ago, philosophers like Plato and Aristotle were doing Object-Oriented Analysis and Entity-Relationship Modeling? More surprisingly, they were already more sophisticated than software developers are now!&amp;nbsp;&amp;nbsp; Why?&amp;nbsp; Well, for one thing, they already understood that the properties of an object are not all created equal.&amp;nbsp; Whereas programmers today basically think that a property is a property, even ancient philosophers understood that there are several different categories of properties. And most importantly, only some properties define WHAT something is; the other properties merely describe HOW it is. Embracing this distinction will change the way you carve up the world into classes and relationships, and which attributes you assign to which entities.&amp;nbsp; I have come to feel that creating data models without this distinction is like wearing glasses so out of focus that distinct objects blur together into indistinguishable blobs.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;The properties that something &lt;i&gt;must&lt;/i&gt; have, in order to be what it is, Philosophy calls &lt;b&gt;Essential&lt;/b&gt; properties. Those properties that something may &lt;i&gt;optionally&lt;/i&gt; have are called &lt;b&gt;Accidental&lt;/b&gt; properties. For example, for you to be a human, you &lt;i&gt;must&lt;/i&gt; have human DNA; it is an Essential property. Being named Smith, however, is an Accidental property because you would still be human even if you had a different name or even no name.&amp;nbsp; So, our everyday meaning for “essential” is different than the philosophical meaning. If a client says that the address is an essential part of the customer data, that doesn’t mean that it is Essential in the philosophical sense. In fact, it is not Essential because whatever a “customer” is, it will still be that same kind of thing even if its address changes.&amp;nbsp; The distinction between essential and accidental properties is even embedded into some human languages like Irish where there are two different “is” verbs; “Tá” is used for accidentals like “He is hungry”, but the verb they call &lt;i&gt;The Copula&lt;/i&gt; is used for essentials like “He is Hungarian”.&lt;br /&gt;&lt;br /&gt;A hallmark of Essential properties is that they are unchanging. An object’s Essential properties can not change without that object becoming a different &lt;i&gt;kind&lt;/i&gt; of thing. There is an ancient philosophical paradox of how something can change and yet remain the same. You are different than you were as a child, and yet you are still the same you. As Heraclitus said, "You can’t step into the same river twice because the water is always different."&amp;nbsp; The solution the Greeks came up with was that Accidental properties may change but Essential properties must remain the same (&lt;i&gt;otherwise, a metamorphosis has occurred!&lt;/i&gt;).&amp;nbsp; This philosophy is known as &lt;i&gt;Essentialism&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Socrates taught that everything has an “essential nature” that makes it the kind of thing that it is. His pupil, Plato, taught that these essences are manifest in ideal “Forms” of which all objects are mere copies. Plato’s pupil, Aristotle, taught that Essential properties were those that defined a Form, and Accidental properties were those which distinguished one individual object from another of the same kind.&amp;nbsp; Our object-oriented programming notion of Class is analogous to Plato’s Forms. Like a Class, a Form is unchanging and it pre-exists any objects which instantiate it. Naturally, Entity tables are the database equivalent of Forms with their records being the objects.&lt;br /&gt;&lt;br /&gt;So, what is using this idea supposed to buy me? I think a case can be made for at least the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Better definitions of entities, classes, and relationships result because it forces you to weed out all the non-essentials (&lt;i&gt;pun intended&lt;/i&gt;). By striving to understand entity essentials, and not just normalizing data tuples, you will be more likely to accurately model the world. &lt;/li&gt;&lt;li&gt;Better specifications result because there will now be a place to put all those unwritten (even unspoken) assumptions about the nature of the problem domain. &lt;span style="color: #660000;"&gt;Ironically, when gathering requirements and doing analysis, the &lt;/span&gt;&lt;i style="color: #660000;"&gt;essential&lt;/i&gt;&lt;span style="color: #660000;"&gt; properties of things are often given short shrift&amp;nbsp; because they mostly don't get stored in databases, because.…that's right, they don't change!&amp;nbsp; It is the changeable &lt;/span&gt;&lt;i style="color: #660000;"&gt;accidental&lt;/i&gt;&lt;span style="color: #660000;"&gt; properties that get stored, with the unchanging essential properties getting buried as hardwired assumptions in the programming logic.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Better system interoperability results because universal essential data is separated from local accidental data. The integration of data between a customer system and a patient system and an employee system would be much easier if they had modeled the essential entity, which is Person. When customer and patient and employee are recognized as merely accidental roles of a Person, there is an immediate common entity type to synchronize on rather than widely divergent data tables.&lt;/li&gt;&lt;li&gt;Better identity systems result because life-long identifiers will no longer be confused with changeable properties like names, addresses, and phone numbers.&lt;/li&gt;&lt;/ol&gt;Examples of using Essentialism&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Imagine a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt; table where we already understand that using the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Name&lt;/span&gt; column as the primary key is a bad idea, simply because names are not unique.&amp;nbsp; Some are tempted to create a compound key using name plus some other column(s) like address, phone, etc.&amp;nbsp; With an Essentialism perspective it is clear that, while the compound key may be unique for the moment, it is composed of &lt;i&gt;accidental&lt;/i&gt; properties and hence can change at any time!&amp;nbsp; Stored references to previous keys will fail. Current keys won’t match future keys.  &lt;br /&gt;&lt;br /&gt;We want keys using &lt;i&gt;essential&lt;/i&gt; attributes that remains fixed for the life-time of the Person. A unique, fixed, objective, essential attribute like the person’s complete DNA sequence would do the trick! However, a government issued tax ID like SSN can be a practical substitute, plus it’s better than a proprietary “customer ID” because it is something that is effectively universal, and therefore can be used to integrate databases from multiple sources.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Lest you think this example is contrived, I witnessed a Top-5-in-the-USA bank design a customer identity system using a key composed of accidental properties rather than SSN because “we have not traditionally collected SSNs” (despite government “know your customer” security laws requiring it!)&amp;nbsp; They had to continually fix their ever-changing data because they only focused on having a “unique key”.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In tutorials for any technology that uses entities, the example of a “customer” entity is almost cliche. The design of databases, XML schemas, UML diagrams, SOAP messages, Java Classes, etc, etc, have all used it.&amp;nbsp; But when we ponder the essential nature of a “customer”, there is an immediate problem…  &lt;br /&gt;&lt;br /&gt;Philosophers have devised many systems for organizing “what exists”, and one of the first of their “&lt;a href="http://en.wikipedia.org/wiki/Twenty_Questions"&gt;20 questions&lt;/a&gt;” is: Is its essence physical or abstract? Customers can either be a person (&lt;i&gt;a physical thing that exists in time and space&lt;/i&gt;), or a corporation (&lt;i&gt;an abstract thing that doesn't exist in space&lt;/i&gt;), so, which is it?&amp;nbsp; This is our clue that it isn’t an entity at all.&amp;nbsp; With some thought (&lt;i&gt;and benefit of reading more philosophy&lt;/i&gt;), it becomes clear that “customer” is really just a role that different entities can play.&amp;nbsp; It is part of the relationship between that entity acting as customer, client, buyer and that entity acting as vendor, seller, provider.&lt;/li&gt;&lt;/ul&gt;Whatever interpretation you would give about the essential-ness of this or that property, the main point is that it is worth knowing that there IS a distinction. And more generally, Philosophy has some ideas to which we programmers need to be exposed.&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1848311699&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=184831177X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=184046853X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1405125861&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0756668611&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2430870623895503856?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2430870623895503856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/08/not-all-properties-are-created-equal.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2430870623895503856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2430870623895503856'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/08/not-all-properties-are-created-equal.html' title='Not All Properties Are Created Equal (Part I: Essentials)'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1507256217972337489</id><published>2010-08-08T18:57:00.031-04:00</published><updated>2011-05-24T02:15:21.536-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>Neural Nets, Vagueness, and Mob Behavior</title><content type='html'>&lt;i&gt;In response to the following question on a philosophy discussion board, I replied with the short essay below and reproduce it her&lt;/i&gt;&lt;i&gt;e. &lt;/i&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: #990000;"&gt;"It was then that it became apparent to me that these dilemmas – and indeed, many others – are manifestations of a more general problem that affects certain kinds of decision-making. They are all instances of the so-called ‘Sorites’ problem, or ‘the problem of the heap’. The problem is this: if you have a heap of pebbles, and you start removing pebbles one at a time, exactly at what point does the heap cease to be a heap?"&lt;/span&gt;&lt;/blockquote&gt;VAGUE CONCEPTS&lt;br /&gt;This leads to the entire philosophy of "vagueness". i.e. are there yes/no questions that don't have a yes/no answer? Are some things like baldness vague in essence, or, is our knowledge merely incomplete? e.g. we don't know the exact number of hairs on your head, and/or, we don't know/agree on the exact number of hairs that constitutes the "bald" / "not bald" boundary?&lt;br /&gt;&lt;br /&gt;NEURAL NETS&lt;br /&gt;My personal conclusion is that there ARE many vague concepts that we have created that are tied to the way our brains learn patterns (and, as a side effect, how we put things into categories). In contrast to rational thought (i.e. being able to demonstrate logically step by step our conclusions), we "perceive" (ala Locke/Hume/Kant) many things without being able to really explain how we did it.&lt;br /&gt;&lt;br /&gt;In Artificial Intelligence, there are "neural network" computer programs that simulate this brain-neuron style of learning. They are the programs that learn how to recognize all different variations of a hand-written letter "A" for example. They do not accumulate a list of shapes that are definitely (or are definitely not) an "A", but rather develop a "feel" for "A"-ness with very vague boundaries. They (like our brains) grade a letter as being more or less A-like. It turns out that this technique works much better than attempting to make rational true/false rules to decide. This is the situation that motivates "fuzzy logic" where instead of just true or false answers (encoded as 1 or 0), one can have any number in-between, e.g. 0.38742 (i.e. 38.7% likely to be true).&lt;br /&gt;&lt;br /&gt;WISDOM OF THE CROWD?&lt;br /&gt;Because each person has their own individually-trained "neural net" for a particular perception (e.g. baldness, redness, how many beans are in that jar?), we each come up with a different answer when asked about it. However, the answers do cluster (in a bell-curve-like fashion) around the correct answer for things like "how many beans".&amp;nbsp; This is &lt;a href="http://en.wikipedia.org/wiki/The_Wisdom_of_Crowds"&gt;what led Galton to originally think that there was "wisdom in the crowd"&lt;/a&gt;. &amp;nbsp; This idea has been hailed as one of the inspirations for the new World Wide Web (aka Web 2.0). The old idea was that McDonalds should ask you if "you want fries with that?" to spur sales. The new Web 2.0 idea is that Amazon should ask you if you want this OTHER book based on what other people bought when they bought the book you are about to buy. I.E. the crowd of Amazon customers know what to ask you better than Amazon itself.&lt;br /&gt;&lt;br /&gt;The problem is that there are many failures of "crowd wisdom" (as mentioned in that Wikipedia page in the link above). My conclusion is that most people advocating crowd wisdom have not realized that it is limited to "perceptions". Many Web 2.0 sites are asking the crowd instead about rational judgments, expecting them to come up with a better answer than individuals. The idea of democracy (i.e. giving you the right to vote) has been confused with voting guaranteeing the best answer, no matter the question. In fact, Kierkegaard wrote "&lt;a href="http://www.hebrew4christians.com/Articles/Crowd/crowd.html"&gt;Against The Crowd&lt;/a&gt;" almost 200 years ago where he recognized that individuals act like witnesses to an event, whereas people speaking to (or as a part of) a crowd, speak what we would now call "&lt;a href="http://en.wikipedia.org/wiki/Bullshit#Distinguished_from_lying"&gt;bullshit&lt;/a&gt;" because they are self-consciously part of a crowd. We can see this in the different results of an election primary (a collection of individuals in private voting booths) versus Caucuses where people vote in front of each other.So, Web 2.0 sites (Facebook, MySpace, blog Tag Clouds, etc) that allow people to see the effect on other people of what they are saying, are chronicling mob mentality rather than collecting reliable witness reports.&lt;br /&gt;&lt;br /&gt;BTW, I have written several blog posts related to vagueness, for example:&lt;br /&gt;&lt;a href="http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html"&gt;http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - May 16th, 2011&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;There is a new study that shows science catching up with 150+ year old philosophy with regard to the (lack of) wisdom of the crowd. Kierkegaard's observation about people (who are consciously a part of a crowd) acting differently than individuals has been verified in new studies reported &lt;a href="http://www.wired.com/wiredscience/2011/05/wisdom-of-crowds-decline/"&gt;here in Wired Magazine&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0385721706&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0691122946&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0262611457&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B0030BF0YM&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B0023ZLHMA&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;foo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1507256217972337489?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1507256217972337489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/08/neural-nets-vagueness-and-mob-behavior.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1507256217972337489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1507256217972337489'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/08/neural-nets-vagueness-and-mob-behavior.html' title='Neural Nets, Vagueness, and Mob Behavior'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8577878701681312043</id><published>2010-06-06T15:27:00.035-04:00</published><updated>2011-03-14T00:33:59.856-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='test driven'/><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Fuzzy Unit Testing, Performance Unit Testing</title><content type='html'>&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Because of the topic of testing coming up in my recent post "&lt;a href="http://existentialprogramming.blogspot.com/2010/05/morality-is-eating-your-own-dogfood.html"&gt;Is Morality Eating Your Own Dogfood?&lt;/a&gt;", it made me finally publish the following notebook entry from 2007...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In reading Philosophy 101, about Truth with a capital "T", and the  non-traditional logics that use new notions of truth, we of course  arrive at &lt;a href="http://en.wikipedia.org/wiki/Fuzzy_logic"&gt;Fuzzy Logic&lt;/a&gt; with its departure from simple binary true/false  values, and embrace of an arbitrarily wide range of values in between.&lt;br /&gt;&lt;br /&gt;Contemplating  this gave me a small AHA moment: Unit Testing is an area where there is  an implicit assumption that "Test Passes" has either a true or false  value.&amp;nbsp; How about Fuzzy Unit Testing where there is some numeric value  in the 0...1 range which reports a degree of pass/fail-ness? i.e. a &lt;i&gt;percentage  pass/fail&lt;/i&gt; for each test.&amp;nbsp; For example, testing algorithms that  predict something could be given a percentage pass/fail based on how  well the prediction matched the actual value.&amp;nbsp; Stock market predictions,  bank customer credit default prediction, etc come to mind.&amp;nbsp; This sort  of testing of predictions about future defaults (&lt;i&gt;i.e. credit grades&lt;/i&gt;)  is just the sort of thing that the BASEL II accords are forcing banks  to start doing.&lt;br /&gt;&lt;br /&gt;Another great idea (&lt;i&gt;if I do say so  myself&lt;/i&gt;) that I had a few years ago was the notion that there is  extra meta-data that could/should be gathered as a part of running unit  test suites; specifically, the performance characteristics of each test  run.&amp;nbsp; &lt;b&gt;The fact that a test still passes, but is 10 times slower than  the previous test run, is a very important piece of information that we  don't usually get.&lt;/b&gt;&amp;nbsp; Archiving and reporting on this meta-data about  each test run can give very interesting metrics on how the code changes  are improving/degrading performance on various application  features/behavior over time.&amp;nbsp; I can now see that this comparative  performance data would be a form of fuzzy testing.&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - July 6th, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;I have recently come across several types of meta-data that APPLE should have been tracking during their testing.&lt;br /&gt;1) CPU Temperature&lt;br /&gt;2) Battery Drainage Rate&lt;br /&gt;3) Antenna Receiver Strength&lt;br /&gt;I have just had to deal with iMac and iPod and iPhone issues with each of those respectively. Software updates caused new behavior overheating old iMacs, draining iPod batteries, and everyone now knows about the iPhone antenna issues. Had APPLE used the proposed techniques above, they would have caught these problems.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - Aug 11th, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;While Apple has not addressed the CPU overheating in older Macs, they have had to replace overheating iPods (in Japan)&lt;br /&gt;See &lt;a href="http://news.yahoo.com/s/nm/20100811/tc_nm/us_japan_apple"&gt; http://news.yahoo.com/s/nm/20100811/tc_nm/us_japan_apple&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - Sep 21st, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;It wasn't obvious to me how a change in software could have such a dramatic effect on temperature until I started seeing all the hoopla about new browsers being faster because they have been rewritten to take advantage of GPU (graphic processing unit) processing power instead of just CPU circuitry. The GPU would be a major piece of chip real estate to change from cold and idle to hot and bothered. As described &lt;a href="http://www.sdtimes.com/GUEST_VIEW_LET_S_GO_BEYOND_THE_CPU_TO_THE_GPU/By_MARGARET_LEWIS/About_MULTICORE/34637"&gt;here in SD Times&lt;/a&gt;, Apple's new O/S is one of the riders on this bandwagon, which would explain the overheating of old Macs and iPods.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1584885262&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B00186Z0L4&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1932394850&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1933988274&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0974514012&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&amp;lt;p&amp;gt;&amp;amp;lt;p&amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;gt;&amp;amp;lt;/p&amp;amp;gt;&amp;lt;/p&amp;gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8577878701681312043?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8577878701681312043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/06/fuzzy-unit-testing-performance-unit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8577878701681312043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8577878701681312043'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/06/fuzzy-unit-testing-performance-unit.html' title='Fuzzy Unit Testing, Performance Unit Testing'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2024926357275905635</id><published>2010-05-19T16:16:00.004-04:00</published><updated>2011-04-14T11:34:48.415-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>A hole for every component, and every component in its hole</title><content type='html'>&lt;div style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;span style="font-size: small;"&gt;Amongst the surprisingly simple ideas that aren't so simple when thought about Philosophically are holes.&amp;nbsp; There is a small library of publications on what exactly holes are.&amp;nbsp; A summary can be found online in this Stanford Encyclopedia of Philosophy &lt;a href="http://plato.stanford.edu/entries/holes/"&gt;article on the metaphysics of holes&lt;/a&gt;.&amp;nbsp; One of the viewpoints it cites is: ‘There is no such thing as a hole by itself’ (Tucholsky, 1930).&amp;nbsp; This reminded me of one of my very first blog posts from 2000 which I reprint here...&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;There is no such thing as a Component&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I maintain that there is no such thing as a Component in the same way  that there is no such thing as a donut hole. Just as the donut hole  doesn't exist without a donut to define it, a Component doesn't exist  without a Framework to define it. Using a printed circuit board as a  metaphor for a framework, it's the "sockets", into which IC chips are  meant to be plugged, that define components. So called universal or  standalone components are meaningless (and certainly useless) without  some framework that expects components of the same purpose and  interface.&lt;br /&gt;&lt;br /&gt;Ok, so what's your point? The point is that  too many developers (and books on the subject) think about components as  standalone chunks of functionality that can be "glued together" after  the fact. They don't realize that the framework has to come first and  foremost in conception and design. Szyperski doesn't get around to  talking about frameworks until chapter 21 of his &lt;a href="http://www.amazon.com/Component-Software-Beyond-Object-Oriented-Programming/dp/0201745720?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;Component  Software book&lt;/a&gt; for heaven's sake.&lt;br /&gt;&lt;br /&gt;Even physical  components are like this. The prototypical component, the IC chip,  always was designed within a family of chips that were meant to work  together. They all needed the same voltage levels for zeroes and ones  and tri-states, the same amperage levels, the same clock rates, etc,  etc. Other families used other voltage levels. The first reusable,  interchangeable parts in history were for rifles. They were meant to be  easy and quick to replace (as opposed to the hand crafted muskets they  were replacing) but they were meant specifically to make rifles!&lt;br /&gt;&lt;br /&gt;Rummaging  around a garage, you could find all sorts of "widgets" and "gizmos"  that you might guess are components of something, but unless you know  what framework they were meant to be a part of, they are not good for  anything but door stops or paperweights. In other words, random  components don't tend to fit together or work together.&lt;br /&gt;&lt;br /&gt;Too  many people are trying to make "universal" components without realizing  that those components still work within some framework that allows them  to be put together and communicate with each other. The problem is that  other people doing the same thing have defined other "generic"  frameworks that are none the less incompatible.&lt;br /&gt;&lt;br /&gt;For  example, the toys that baby boomers played with when they were young  abounded with generic frameworks of universal components: &lt;a href="http://www.amazon.com/The-Classic-Tinkertoy-Construction-Set/dp/B002SFBMAW?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;Tinker  Toys&lt;/a&gt;, &lt;a href="http://www.amazon.com/Knex-Bicentennial-Edition-Lincoln-Logs/dp/B00171YA3E?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;Lincoln  Logs&lt;/a&gt;, &lt;a href="http://www.amazon.com/Erector-Multi-Model-Construction-Set/dp/B000A10Z4U?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;Erector  Sets&lt;/a&gt;, &lt;a href="http://www.amazon.com/LEGO-Ultimate-Building-Set-Pieces/dp/B000NO9GT4?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;LEGOs&lt;/a&gt;.  They all had universal components within a generic framework that let  you build anything. BUT, you couldn't mix Tinker Toy parts with Erector  Set parts (without glue or duct tape).&lt;br /&gt;&lt;br /&gt;Ah, you say.  That's why I like duct tape, weakly typed, languages like Perl that lets  me glue together parts. Also, what about &lt;a href="http://www.amazon.com/Play-Doh-24-Pack-of-Colors/dp/B000V64HZ2?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;Play-doh&lt;/a&gt;?!  You could stick anything together with that! Yes, but there was a  reason you made bridges out of Erector Sets instead of Play-doh, and the  same reasons apply to software systems (but Strong versus Weak typing  is another discussion).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objects versus Components&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Until  I had this epiphany about components as donut holes, I didn't have a  good answer to the question "what's the difference between an object and  a component?". I now understand that all objects ARE components, but  not all components are objects. The framework that defines a set of  components does not have to be an object oriented framework. But all  object oriented languages define an object framework. They are generic  enough frameworks that any objects programmed in that language may inter-operate with each other. Unfortunately though, as with Tinker Toys  and Lincoln Logs, Java objects typically can't interact with Smalltalk  objects.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #20124d;"&gt;In the  Java language there are at least two levels of object framework. There  are plain old Java objects (POJOs) and there are so-called JavaBeans.  Whereas any property of a POJO can be accessed (&lt;i&gt;assuming its not  protected by the "private" keyword&lt;/i&gt;) via a &lt;b&gt;&lt;i&gt;foo&lt;/i&gt;Object.&lt;i&gt;bar&lt;/i&gt;Property&lt;/b&gt;  syntax, only special properties may be accessed via the JavaBeans  framework. JavaBeans are those objects that have defined special  property accessor and mutator methods of the form: &lt;b&gt;get&lt;i&gt;Bar&lt;/i&gt;Property()&lt;/b&gt; and &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;set&lt;i&gt;Bar&lt;/i&gt;Property()&lt;/span&gt;&lt;/b&gt;.  "JavaBean" is the name given to any component that works within that  specialized framework. To make matters confusing however, it turns out  that Javasoft called more than one framework "JavaBeans" (arrgh!). There  are even more specialized versions of JavaBeans that are made to work  with fancy GUI toolkits.&amp;nbsp; &lt;span style="color: #660000;"&gt; And of course, they caused even further confusion by calling yet another (different) "widget", from yet another (different) framework, a JavaBean: The &lt;a href="http://www.javaworld.com/javaworld/jw-10-1998/jw-10-beans.html"&gt;Enterprise JavaBean&lt;/a&gt;! So, without clearly focusing on frameworks, even Javasoft confuses different component types with each other!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;The moral? Don't fret that there is no such  thing as a truly "universal" component. Don't spend energy trying to  build them, or building "single universal" frameworks. Focus on what is  needed for your situation and design a well crafted framework first and  foremost. If it needs to work with other frameworks (&lt;i&gt;like whatever  Microsoft builds that won't integrate with anybody else&lt;/i&gt;), understand  that framework bridges will be needed. It is the rare case that a mere "socket adapter" will suffice.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0201745720&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B003HS5JOE&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0321547993&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0782120970&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B00004TFRN&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2024926357275905635?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2024926357275905635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/05/hole-for-every-component-and-every.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2024926357275905635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2024926357275905635'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/05/hole-for-every-component-and-every.html' title='A hole for every component, and every component in its hole'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-560143820957782010</id><published>2010-05-16T17:26:00.005-04:00</published><updated>2010-08-12T13:48:47.133-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test driven'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Is Morality Eating Your Own Dogfood?</title><content type='html'>There are two schools of thought about whether programmers should have to write tests to verify their own code (in addition to writing the code itself).  The philosophy of economics, and psychology, and morality, all overlap in studies that show how people will readily abandon moral responsibilities if they are given ways to avoid the stigma of doing so.  This leads me to feel more justified in my belief that programmers do a poorer job of reading, understanding, and implementing a specification when someone else has the responsibility of verification.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Changing the rules changes people’s attitudes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There is a 1998 experiment&lt;span style="font-size: x-small;"&gt;[1]&lt;/span&gt; that keeps popping up in the new “&lt;a href="http://www.amazon.com/Freakonomics-Economist-Explores-Hidden-Everything/dp/0060731338?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;freakonomics&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0060731338" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;”-type literature&lt;span style="font-size: x-small;"&gt;[2][3]&lt;/span&gt; (e.g. &lt;a href="http://www.amazon.com/Economics-2-0-Minds-Teach-Business/dp/0230612431?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Economics 2.0&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0230612431" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; &lt;span style="font-size: x-small;"&gt;[4]&lt;/span&gt;), where a controlled subset of Israeli day-care centers started charging a fine for parents who came late to pick up their children.  To everyone’s surprise, the number of people showing up late almost doubled. Additionally, when the fine was later dropped, the number of late parents stayed at the high level.  It is theorized that the moral responsibility parents felt to be on time was much stronger than the economic cost of paying a fine, which was rationalized by the parents as a fee, thus removing the stigma of being late.  The fee made it “&lt;span style="color: #4c1130;"&gt;just business&lt;/span&gt;”. As Professor Michael Sandel summarized&lt;span style="font-size: x-small;"&gt;[5]&lt;/span&gt;…&lt;br /&gt;&lt;blockquote&gt;“So what happened? Introducing the fine changed the norms. Before, parents who came late felt guilty; they were imposing an inconvenience on the teachers. Now parents considered a late arrival a service for which they were willing to pay. Rather than imposing on the teacher, they were simply paying her to stay longer. Part of the problem here is that the parents treated the fine as a fee. It’s worth pondering the distinction. Fines register moral disapproval, whereas fees are simply prices that imply no moral judgement.”&lt;/blockquote&gt;&lt;b&gt;&amp;nbsp;Don’t make “not my job” “just business”&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/Blind_experiment"&gt;blind experiment&lt;/a&gt; is a well established doctrine in science requiring that people should not know too much about something they are testing, otherwise the results are often biased. Scientists gathering their own raw data (&lt;i&gt;not to mention interpreting their own data&lt;/i&gt;) often get the results they &lt;i&gt;expected to get&lt;/i&gt;, where objective outsiders don’t.  With that theory, it is argued that software development projects should engage external, objective, “QA testers” to develop and administer test suites against the code produced by the “programmers”.  Since many programmers don’t like to eat their spinach, ahem, write their own tests (&lt;i&gt;or documentation for that matter&lt;/i&gt;), there are not usually arguments against the idea.&lt;br /&gt;&lt;br /&gt;From my experience though…&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Programmers will suffer peer pressure and social costs if they fail their own tests (&lt;em&gt;which is a good thing&lt;/em&gt;).&lt;/li&gt;&lt;li&gt;Programmers who understand that they are obligated to deliver &lt;em&gt;testable&lt;/em&gt; components, will do so more often if they must actually produce the  tests themselves, compared to those where testing is “not my job”.&lt;/li&gt;&lt;li&gt;The act of writing a test forces a clearer understanding of both  the interface and the implementation of the tested component compared to just programming it.&lt;/li&gt;&lt;li&gt;Programmers who fail their own tests will be much more likely to  change that component’s implementation if needed, rather than obstinately  maintaining that the externally-produced test is wrong.&lt;/li&gt;&lt;li&gt;Writing your own tests is the most systematic method of “&lt;a href="http://en.wikipedia.org/wiki/Eating_one%27s_own_dog_food"&gt;eating your own dogfood&lt;/a&gt;”&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Belt and Suspenders&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I say, both independent testers AND the original programmers should &lt;i&gt;each&lt;/i&gt; write independent test suites.  This way you get the power of both perspectives.  This is an old lesson from the days of computer punch-cards; two different people key-punch the same data so that they can later be compared, thus eliminating most typos.&lt;br /&gt;&lt;br /&gt;[1] A Fine is a Price, URI GNEEZY and ALDO RUSTICHINI,  Journal of Legal Studies, vol. XXIX ( January 2000)&lt;br /&gt;&lt;a href="http://rady.ucsd.edu/faculty/directory/gneezy/docs/fine.pdf"&gt;http://rady.ucsd.edu/faculty/directory/gneezy/docs/fine.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] Brain food: when does a fine become a fee?, Aditya Chakrabortty, The Guardian, Tuesday 23 February 2010 &lt;br /&gt;&lt;a href="http://www.guardian.co.uk/science/2010/feb/23/brain-food-fines-and-fees"&gt;http://www.guardian.co.uk/science/2010/feb/23/brain-food-fines-and-fees&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[3] Why an L.A. Times wikitorial effort went wrong, Clay Shirky, O'Reilly Media Gov 2.0 Summit, 2009-09-09&lt;br /&gt;&lt;a href="http://itc.conversationsnetwork.org/shows/detail4411.html"&gt;http://itc.conversationsnetwork.org/shows/detail4411.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[4] pg 7, Economics 2.0, Norbert Haring, Olaf Storbeck, Palgrave Macmillan, 2009&lt;br /&gt;&lt;br /&gt;[5] Michael Sandel, The Reith Lectures 2009, BBC,  9th JUNE 2009&lt;br /&gt;&lt;a href="http://www.bbc.co.uk/programmes/b00kt7rg"&gt;http://www.bbc.co.uk/programmes/b00kt7rg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0230612431&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0672327988&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0060731338&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0060889578&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-560143820957782010?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/560143820957782010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/05/morality-is-eating-your-own-dogfood.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/560143820957782010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/560143820957782010'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/05/morality-is-eating-your-own-dogfood.html' title='Is Morality Eating Your Own Dogfood?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3806833200855079325</id><published>2010-05-11T17:54:00.013-04:00</published><updated>2011-07-04T19:35:33.694-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='species'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><title type='text'>The purpose of a thing is in US as well as in IT</title><content type='html'>In an &lt;a href="http://existentialprogramming.blogspot.com/2010/04/class-constructors-considered-harmful.html"&gt;earlier post&lt;/a&gt;, I advocated adopting Philosophers' practice of considering the purpose of a thing when creating a definition for that thing.&amp;nbsp; Plato and Aristotle would have said that one of the things that made an acorn, an acorn, was that it had the "goal" or "purpose" of becoming an oak tree.&amp;nbsp; In defining a domain model (&lt;i&gt;aka business objects model&lt;/i&gt;), document the "purpose" of a class in order to get at its true attributes and behavior. But, as I was recently reminded, not only can the purpose of a thing be "&lt;i&gt;in the thing itself&lt;/i&gt;", it can also be solely in &lt;i&gt;our&lt;/i&gt; minds.&amp;nbsp; I.E. it begs the question: if we are defining a class of things, what is &lt;i&gt;our&lt;/i&gt; purpose in caring if we know that something &lt;i&gt;is&lt;/i&gt; one of those things?&lt;br /&gt;&lt;br /&gt;I had this AHA moment after reading the article "Unclassified" in the June 2010 issue of &lt;a href="http://www.amazon.com/Discover-1-year/dp/B00005N7PT?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Discover magazine&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B00005N7PT" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, where I was surprised to learn that there is no accepted universal definition of a biological species; there are at least 20+ competing definitions.&amp;nbsp; I had thought that "being able to breed fertile offspring" was the definition, but that is only one (and of course it leaves out the vast majority of living things on earth that reproduce asexually).&lt;br /&gt;&lt;br /&gt;After having read about all the conflicting ways to organize and cluster individuals into species, each one with its own way of looking at things, it begged the question: Why do you want to know? I.E. What is the purpose of knowing which species something is?"&amp;nbsp; Depending on &lt;i&gt;why&lt;/i&gt; you want to know, you &lt;i&gt;choose&lt;/i&gt; one definition over all the others.&lt;br /&gt;&lt;br /&gt;But of course as Darwin thought, this would mean that species are not "real". Instead of &lt;i&gt;discovering&lt;/i&gt; pre-existing forms, we would merely be &lt;i&gt;inventing&lt;/i&gt; arbitrary sets of attributes-in-common. Therefore, unlike the "&lt;a href="http://en.wikipedia.org/wiki/Teleology"&gt;teleology&lt;/a&gt;" of Plato and Aristotle where the "purpose" or "goal" of a species is internal to itself, it would seem that a possibly more important purpose is the one that WE have in wanting to place a particular &lt;i&gt;into&lt;/i&gt; that species.&lt;br /&gt;&lt;br /&gt;For example, Ponder all of the various shapes, sizes, forms, etc of things that you would want to call a "chair" [&lt;i&gt;and do a &lt;a href="http://www.google.com/images?q=chair"&gt;Google image search of "chair"&lt;/a&gt;&lt;/i&gt;]. Now, ponder coming up with a universal definition of chair (&lt;i&gt;such that all chairs would be recognized as such, and nothing else would&lt;/i&gt;), and you will see that it will be much easier if you can refer to the purpose we have for them; i.e. being able to sit (comfortably?) on them.&amp;nbsp; Without that, it is hard to distinguish between a storage box (not a chair) and a storage bench (a chair).&amp;nbsp; [&lt;i&gt;Try it. Do a Google image search for &lt;a href="http://www.google.com/images?q=storage+box"&gt;storage box&lt;/a&gt; and then &lt;a href="http://www.google.com/images?q=storage+bench"&gt;storage bench&lt;/a&gt;.&lt;/i&gt;]&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;In this sense, a species would be more like a Java &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Interface&lt;/span&gt;&lt;/b&gt; than a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Class&lt;/span&gt;&lt;/b&gt;.&amp;nbsp; Classes usually embody the pre-existing forms viewpoint, i.e. the notion that attributes and behavior are really "in the thing" rather than merely "how we want to look at it".&amp;nbsp; And while in practice Interfaces are often just wrappers around class definitions, ideally, each Interface defines a standard socket into which an object of any "form" may fit, as long as it can perform a certain "role" and participate in a certain "protocol" (see &lt;a href="http://existentialprogramming.blogspot.com/search/label/components"&gt;my definition of component&lt;/a&gt;). &lt;/div&gt;&lt;br /&gt;SO, the lesson to learn is: When considering the purpose of a thing as a part of its definition, "purpose" is both &lt;i&gt;its&lt;/i&gt; purpose, and &lt;i&gt;our&lt;/i&gt; purpose for wanting to recognize one in the first place.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - July 4th, 2011&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Once again, I see that I've come to a brilliant insight that someone else did a long time ago. In the new &lt;a href="http://www.amazon.com/Philosophy-Book-DK-Publishing/dp/0756668611/"&gt;"The Philosophy Book"&lt;/a&gt;, I just found the following apropos quote: &lt;a href="http://en.wikiquote.org/wiki/William_James"&gt;"Every way of classifying a thing is but a way of handling it for some particular purpose"&lt;/a&gt;- William James.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0451529065&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B00005N7PT&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B001IDYQ3K&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B002EZYXVQ&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0756668611&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3806833200855079325?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3806833200855079325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/05/purpose-of-thing-is-in-us-as-well-as-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3806833200855079325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3806833200855079325'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/05/purpose-of-thing-is-in-us-as-well-as-in.html' title='The purpose of a thing is in US as well as in IT'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8277826778105229385</id><published>2010-04-21T17:24:00.003-04:00</published><updated>2010-05-11T18:02:26.011-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='species'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Class Constructors considered harmful</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;PREFACE:  There is a school of thought in computer programming that &lt;a href="http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html"&gt;Classes  are harmful in certain ways&lt;/a&gt;, but the basis for those arguments are  very programming-technique specific.&amp;nbsp; This essay is about a much more  general, mind-set oriented, objection. &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;My  basic project these days is to learn Philosophy 101 and contemplate  what impact that knowledge should have on software development  practices.&amp;nbsp; After reading topics like the &lt;a href="http://www.radicalacademy.com/prcminicourseontology4.htm"&gt;Philosophy  of "becoming"&lt;/a&gt;, and &lt;a href="http://plato.stanford.edu/entries/aristotle-causality/"&gt;Aristotle's  "four causes"&lt;/a&gt;, it is clear that Philosophers spend much more time  trying to define the circumstances of an entity's creation than do  system analysts and programmers. While Philosophers have long been  concerned with WHY did WHO do WHAT to cause an object to come into  being, programmers are mostly concerned with the mechanics of HOW an  object should be constructed.&amp;nbsp; It strikes me that this is due to the  tunnel vision encouraged by the class constructor method.&amp;nbsp; [And, due to  destructors and automated garbage collection, an even worse situation  applies to object “death”.] So, to &lt;a href="http://en.wikipedia.org/wiki/Considered_harmful"&gt;paraphrase a  famous title&lt;/a&gt;, I (&lt;i&gt;albeit tongue-in-cheek&lt;/i&gt;) consider Class  Constructors harmful.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;CASE STUDY: At a recently defunct Top-5 bank, I uncovered the fact that there were major incompatibilities in data being used to produce credit scores for borrowers and their loans.  The scores depended on a grade generated for a "facility".  The problem was that the very concept and definition of "facility" was not the same in various parts of the bank.  If they had answered the following simple questions, they would have realized that they were not talking about the same thing: When and why does a new facility come into existence, and when/why does it cease to exist.&lt;/blockquote&gt;&lt;/div&gt;In the course of analysis and  requirements gathering, a major goal is to identify and define the  various &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;business  domain entities&lt;/a&gt;. But, in a vicious cycle, the &lt;a href="http://en.wikipedia.org/wiki/Essence"&gt;definition of an entity&lt;/a&gt;  is often too shallow with regard to its birth and death because “&lt;a href="http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html"&gt;causal&lt;/a&gt;”  information often stagnates as merely background text in some  requirements document.&amp;nbsp; This is because programmers have no standard  place to put that logic into the code.&lt;br /&gt;&lt;br /&gt;Object oriented  practice has one put "all" the properties and behavior associated with  an entity into its Class definition, where "all" for &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dog&lt;/span&gt;&lt;/b&gt; means  "the dog, the whole dog, and nothing but the dog"[1].&amp;nbsp; However the  "nothing &lt;i&gt;but&lt;/i&gt; the dog" constraint means that, the logic involved  in deciding whether an instance of class X &lt;i&gt;should&lt;/i&gt; be created, is  not normally a method &lt;i&gt;of&lt;/i&gt; class X.&amp;nbsp; Since the "cause" of X's  instantiation usually involves other classes, that logic lies outside of  X proper, thus, standard development methodologies leave the analysis  of causation and purpose out of the design of class X.&amp;nbsp; Even &lt;a href="http://en.wikipedia.org/wiki/Factory_method_pattern"&gt;Factory  classes&lt;/a&gt; are focused on object construction, rather than &lt;i&gt;why&lt;/i&gt;  it should be constructed, and &lt;i&gt;why now&lt;/i&gt;, and &lt;i&gt;by whom&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;The  &lt;a href="http://en.wikipedia.org/wiki/Mediator_pattern"&gt;Mediation  pattern&lt;/a&gt; comes to mind as a place to put this sort of logic because  it involves multiple classes.&amp;nbsp; The logic that decides it is time for a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Sculptor&lt;/span&gt;&lt;/b&gt; to  use a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Chisel&lt;/span&gt;&lt;/b&gt;  to carve a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Statue&lt;/span&gt;&lt;/b&gt;  out of a block of &lt;b&gt;Marble&lt;/b&gt; doesn’t belong solely in  any of those classes.&amp;nbsp; A programmer would be tempted to put a “carve”  method in Sculptor since that is a “behavior” of the sculptor, but  Philosophy considers it an &lt;a href="http://plato.stanford.edu/entries/essential-accidental/"&gt;essential&lt;/a&gt;  part of the definition of the statue itself.&amp;nbsp; And that is a problem  with Mediator classes in the first place; the desire to have everything  relevant to X be “&lt;a href="http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29"&gt;nearby  in the source code&lt;/a&gt;” (a raison d'être for classes) is defeated when  some of it is off in various Mediators.&amp;nbsp; Having the &lt;a href="http://en.wikipedia.org/wiki/Teleology"&gt;teleology&lt;/a&gt; of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Statue&lt;/span&gt; off in  some &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;CarveMediator&lt;/span&gt;  isn’t much better than it residing in Sculptor.carve().&lt;br /&gt;&lt;br /&gt;With  &lt;a href="http://en.wikipedia.org/wiki/Event-driven_architecture"&gt;event-driven  systems&lt;/a&gt; (e.g. &lt;a href="http://en.wikipedia.org/wiki/Message-oriented_middleware"&gt;MOM&lt;/a&gt;,  &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA&lt;/a&gt;),  the series of &lt;a href="http://en.wikipedia.org/wiki/Complex_event_processing"&gt;events that  trigger&lt;/a&gt; the creation of an entity instance may be complex. And  whether event-driven, or "&lt;a href="http://en.wikipedia.org/wiki/Batch_processing"&gt;batch processing&lt;/a&gt;",  the sub-systems are often &lt;a href="http://en.wikipedia.org/wiki/Distributed_system"&gt;distributed&lt;/a&gt;,  increasing the value of encapsulating this logic in a single place. With  &lt;a href="http://java.sun.com/javaee/"&gt;Java EE&lt;/a&gt; and service oriented  designs, there would be value in having the &lt;a href="http://www.infoq.com/news/2007/06/entity-services"&gt;entity services&lt;/a&gt;  include this logic.&lt;br /&gt;&lt;br /&gt;In any event, I believe that there  is a need to learn from Philosophy that their concept of "&lt;a href="http://en.wikipedia.org/wiki/Theory_of_Forms"&gt;form&lt;/a&gt;" (which is  the equivalent of OOP's &lt;b&gt;class&lt;/b&gt;) has always included the &lt;a href="http://en.wikipedia.org/wiki/Telos_%28philosophy%29"&gt;purpose&lt;/a&gt;  of a thing as well as its blueprint.&lt;br /&gt;&lt;br /&gt;[1] Object  Oriented Analysis and Design, Grady Booch,&amp;nbsp; 1991&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1840467592&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=020189551X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1598638688&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0201633612&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596529554&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&amp;amp;amp;lt;p&amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;lt;/p&amp;amp;amp;gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8277826778105229385?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8277826778105229385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/04/class-constructors-considered-harmful.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8277826778105229385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8277826778105229385'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/04/class-constructors-considered-harmful.html' title='Class Constructors considered harmful'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6817160001816874732</id><published>2010-04-19T14:50:00.001-04:00</published><updated>2010-04-19T15:01:35.895-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Silver Bullet: Model the world, not the app</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;DISCLAIMER: Ok, I admit it...this is cut/pasted directly from  my brain fart notebook, i.e. not ready for prime time...but dammit Jim,  its just a blog!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;In the arsenal needed  to fight unsuccessful software development projects, it will take a  whole clip full of silver bullets.&amp;nbsp; One of those silver bullets, I  believe, is more accurately modeling the world using knowledge of  Philosophy.&lt;br /&gt;&lt;br /&gt;There is a great struggle between getting  everything "right" up front,&amp;nbsp; versus, doing "just enough" specification  and design.&amp;nbsp; When trying to balance "make it flexible" in order to  support future re-use, versus &lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;XP&lt;/a&gt; mandates  like "don't design what isn't needed today", it is hard to know (or  justify) where to draw the line.&amp;nbsp; Due to "changing requirements", those "&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.92.5404&amp;amp;rep=rep1&amp;amp;type=pdf"&gt;flexible  reuse&lt;/a&gt;" features (that were merely &lt;i&gt;contingent&lt;/i&gt; at design time)  are often &lt;i&gt;mandatory&lt;/i&gt; before the original development cycle is  even complete.&lt;br /&gt;&lt;br /&gt;WELL, lots of requirements don't change  THAT much if you are modeling correctly in the first place.&lt;br /&gt;&lt;br /&gt;Humans  haven't changed appreciably in millennia, even if the roles they play  do.&amp;nbsp; So, if "humans" are modeled separately from "employees", it is that  much less work when you later need to integrate them with "customers".&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: #660000;"&gt;[Theme here is "&lt;/span&gt;&lt;a href="http://existentialprogramming.blogspot.com/2007/04/isa-and-asa-relationships.html" style="color: blue;"&gt;promote roles programming&lt;/a&gt;&lt;span style="color: #660000;"&gt;",  the justification of which is made more obvious when taking &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Essentialism" style="color: blue;"&gt;essentialism&lt;/a&gt;&lt;span style="color: #660000;"&gt; to heart.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In general, the  foundation of one's data/domain/business/object/entity-relationship  model is solid and unchanging, if all "domain objects", "business  objects", etc are modeled based on a clear understanding of the &lt;a href="http://plato.stanford.edu/entries/essential-accidental/"&gt;essential  versus accidental&lt;/a&gt; aspects of the "real world", and NOT based on the  requirements description of a particular computer system or  application.&amp;nbsp; Modeling based on "just what is needed now according to  this requirements document today" is too brittle, both for future  changes, and especially for integrating with other systems and data  models.&lt;br /&gt;&lt;br /&gt;After all, adding properties and relationships  to entities is fairly easy if the entities themselves are correctly  identified.&amp;nbsp; It is much harder to change the basic palette of entities  once a system design is built upon them.&amp;nbsp; Also, all the more reason to  be sure and not confuse entities with roles they can take on.&lt;br /&gt;&lt;br /&gt;Example:  I don't have to wonder who I might have to share employee data with if I  realize that an "employee" is actually just a role that a person takes  on.&amp;nbsp; If I model the essentials of the person separately from the  attributes of the employee role, it will be much easier to integrate  that data with, say, a "customer" database later.&amp;nbsp; If the customer data  model recognizes that "customer" is just a role that a person takes on,  its &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt;  table is much more likely to be compatible with my &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt; table  than would be the case with my naive &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Customer&lt;/span&gt; and their &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Employee&lt;/span&gt; tables  (and still other &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Patient&lt;/span&gt;  tables, etc, etc.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6817160001816874732?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6817160001816874732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/04/silver-bullet-model-world-not-app.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6817160001816874732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6817160001816874732'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/04/silver-bullet-model-world-not-app.html' title='Silver Bullet: Model the world, not the app'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-7409609056991803868</id><published>2010-04-13T18:08:00.005-04:00</published><updated>2010-04-19T11:45:24.205-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='origins'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Do Objects Have Souls?</title><content type='html'>While writing the article, &lt;a href="http://www.developer.com/lang/jscript/article.php/3657486"&gt;Implementing  "Real" Classes in JavaScript&lt;/a&gt; for Developer.com, I was tempted to  add a sidebar with the provocative title "Do Objects Have Souls?".&amp;nbsp; The  article itself demonstrated a technique for simulating Java-like classes  in JavaScript, and as introductory material, it explained the  difference between Java's "class"-based semantics versus JavaScript's  "object prototype"-based semantics.&lt;br /&gt;&lt;blockquote style="color: purple;"&gt;&lt;i&gt;For Java programmers:&lt;/i&gt; In a nutshell, Java creates object instances that have all, and only, the properties of its Class, and the property list is fixed over the life of the object. In JavaScript, object instances have no "real" class, however, each object is free to add and delete properties at any time.&amp;nbsp; Because of this, JavaScript &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Object&lt;/span&gt; objects are pretty empty compared to Java &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Object&lt;/span&gt; objects at birth because they can become anything after they have already been instantiated [hence Existential Programming!].&lt;/blockquote&gt;In trying to understand the  language differences myself, I began musing on the  parallels between  philosophical notions of "the soul" and JavaScript's  empty shell of an  "object" that is generated by &lt;b style="color: red;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;obj&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Object;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Souls  as property containers&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In western philosophy there  has been a 2500 year old school of thought that "things" (aka objects)  have properties, some of which can never change (i.e. &lt;i&gt;essential&lt;/i&gt;  properties) versus those which may change over time (i.e. &lt;i&gt;accidental&lt;/i&gt;  properties).&amp;nbsp; One concept of "soul" is that it is the &lt;a href="http://en.wikipedia.org/wiki/Personal_identity_%28philosophy%29#The_bundle_theory_of_the_self"&gt;bundle of  essential properties&lt;/a&gt; that constitute a thing.&amp;nbsp; This idea has also been  equated with "identity".&amp;nbsp; Attached (non-permanently) to the &lt;a href="http://en.wikipedia.org/wiki/Bundle_theory"&gt;attribute  bundle&lt;/a&gt; are the various accidental properties.&amp;nbsp; This sounds a lot like  the "empty" JavaScript object which is ready to add and update and  delete [accidental] properties, while all the time keeping constant the  essential, unchanging, object identity (as referenced by &lt;b style="color: red;"&gt;obj&lt;/b&gt; !).&lt;br /&gt;&lt;br /&gt;When  medieval alchemists distilled liquids into their &lt;i&gt;essences&lt;/i&gt; they  called them &lt;i&gt;spirits&lt;/i&gt; because they were the "soul" of the grape,  herb, flower, etc. To insure removing all of the accidental properties,  they distilled things 5 times to produce the &lt;i&gt;quintessential&lt;/i&gt;  spirit.&amp;nbsp; &lt;i&gt;Distilled spirits&lt;/i&gt; in the alcohol sense often have names  that reflect the notion that they have a life essence captured in them. &lt;a href="http://en.wikipedia.org/wiki/Whisky"&gt;Whiskey&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Akvavit"&gt;Aquavit&lt;/a&gt; are both names  that translate into "water of life" in their original languages.&amp;nbsp; In the  movie &lt;a href="http://www.amazon.com/Perfume-Story-Murderer-Ben-Whishaw/dp/B000QUCNOK?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Perfume&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B000QUCNOK" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, a villain  repeatedly attempts to distill the essence of pretty women using the  same techniques as distilling flowers into perfume. [Spoiler Alert:  flowers don't survive the process...]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;When the Well  of Souls runs out of RAM&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Another aspect of souls  that rhymes with JavaScript is the ancient lore that newborns are given a  soul at birth which is plucked from a "well of souls" (aka &lt;a href="http://en.wikipedia.org/wiki/Guf"&gt;the chamber of Guf&lt;/a&gt;).&amp;nbsp; In  JavaScript, as empty objects are created and given an identity, they are  plucked from a heap of available memory (i.e. &lt;a href="http://en.wikipedia.org/wiki/Dynamic_memory_allocation"&gt;dynamic  memory allocation&lt;/a&gt;). In both cases, bad things happen when there are  none left.&lt;br /&gt;&lt;br /&gt;When the well of souls runs dry, the Messiah  will come and reboot the world; when your browser runs out of heap  space, your JavaScript will gag and someone will have to come and reboot  the browser (or at least the web page).&amp;nbsp; The plot of the 1988 Demi  Moore film, &lt;a href="http://www.amazon.com/Seventh-Sign-Demi-Moore/dp/0767817737?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Seventh Sign&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0767817737" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, is based on  the Guf mythology. Demi's baby is due to be born on February 29 which  is the date on which the last soul will leave the Guf and it will be  empty.&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596517742&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0767817737&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B000OLAMDA&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0789497107&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B000QUCNOK&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-7409609056991803868?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/7409609056991803868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/04/do-objects-have-souls.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7409609056991803868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7409609056991803868'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/04/do-objects-have-souls.html' title='Do Objects Have Souls?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3276826227036912105</id><published>2010-03-30T17:48:00.007-04:00</published><updated>2010-04-27T10:14:21.543-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Moore's Paradox... I'm just saying!</title><content type='html'>The popular phrase "I'm just saying" has been around long enough for  most people to have heard it, but not long enough for it to be  well-documented as to where it originated.&amp;nbsp; I heard a great stand up  comic bit about it in the 1980's by Paul Reiser. There are several blog  sites that muse over its origin and solicit theories:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://prestwickhouse.blogspot.com/2010/01/plain-english-im-just-sayin.html"&gt;http://prestwickhouse.blogspot.com/2010/01/plain-english-im-just-sayin.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://painintheenglish.com/?p=958"&gt;http://painintheenglish.com/?p=958&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.urbandictionary.com/define.php?term=i%27m%20just%20sayin%27"&gt;http://www.urbandictionary.com/define.php?term=i%27m%20just%20sayin%27&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;It turns out that the most common definition of the phrase exhibits a  logical paradox from Philosophy.&amp;nbsp; The book "&lt;a href="http://www.amazon.com/This-Sentence-False-Introduction-Philosophical/dp/1847062202?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;this sentence is false&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1847062202" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;" is a  collection of philosophical paradoxes, and it describes Moore's Paradox  (as developed by &lt;a href="http://en.wikipedia.org/wiki/G._E._Moore"&gt;G.E.  Moore&lt;/a&gt;).&amp;nbsp; I summarize it as follows: &lt;br /&gt;&lt;blockquote&gt;Normally, everything that can be said about the world can be said  by anyone. I can say the moon is made of green cheese, and you can say  it.&amp;nbsp; The state of the world described by me can equally be described by  you with no logical paradox...EXCEPT... I can say that the moon is made  of green cheese, and I can say that you do not believe that the moon is  made of green cheese, but YOU can not say the same thing.&amp;nbsp; I.E. you can  not say that X is true and at the same time say that you do not believe  that X is true.&amp;nbsp; Note that you are not saying that you could be wrong in  your belief, you are saying that you both, believe X is true, and X is  not true, at the same time. A logical contradiction.&lt;/blockquote&gt;However, whenever you use the phrase "I'm just saying!", you are in  effect performing Moore's paradox.&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1847062202&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0812695933&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3276826227036912105?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3276826227036912105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/moores-paradox-im-just-saying.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3276826227036912105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3276826227036912105'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/moores-paradox-im-just-saying.html' title='Moore&apos;s Paradox... I&apos;m just saying!'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2334684228002532223</id><published>2010-03-22T19:40:00.390-04:00</published><updated>2011-03-14T22:01:03.551-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Don't Call Names...It IS polite to point!</title><content type='html'>Mom always said "Don't call names!" and "It's not polite to point!".&amp;nbsp; Ok, so how am I supposed to refer to "you know who" over there?&amp;nbsp; Too late! I already "pointed" verbally when I said "over there".&amp;nbsp; But, not only is that ok for programmers, it is actually preferable to point rather than to use names. And a half-century before computers even existed, Philosophers already knew this.&amp;nbsp; So why are programmers still calling names? &lt;br /&gt;&lt;blockquote&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;A bit of background first for programmers...&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;The &lt;a href="http://plato.stanford.edu/entries/reference/"&gt;philosophical use of the word "reference"&lt;/a&gt; (and hence "refer") has a subtle technical meaning that, luckily for us, corresponds with the object-oriented technical term "reference".&amp;nbsp; In Philosophy, the only way words can say something about the real world is via "reference". In Java programs, the only way to say something about an object is via an "&lt;a href="http://www.rajeshpatkar.com/articles/javarefpnt.htm"&gt;object reference&lt;/a&gt;".&amp;nbsp; In other programming languages it is via a "&lt;a href="http://cslibrary.stanford.edu/106/"&gt;pointer&lt;/a&gt;".&amp;nbsp; Interestingly, according to the 20th century philosopher Bertrand Russell, the &lt;b&gt;&lt;i&gt;only&lt;/i&gt;&lt;/b&gt; way one can truly refer to a thing (&lt;i&gt;using language&lt;/i&gt;) is via a "&lt;a href="http://en.wikipedia.org/wiki/Demonstrative"&gt;demonstrative&lt;/a&gt;" (i.e. &lt;i&gt;pointer&lt;/i&gt; words like "this", "that", "those", "these").&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;Contrary to previous thinkers, &lt;a href="http://philosophybites.com/2009/12/ac-grayling-on-bertrand-russells-theory-of-descriptions.html"&gt;Russell held&lt;/a&gt; that proper names (&lt;i&gt;e.g. Joe Blow&lt;/i&gt;) do not "refer".&amp;nbsp; OOP programmers can relate to this because a &lt;a href="http://en.wikipedia.org/wiki/Reference_%28C%2B%2B%29"&gt;reference (&lt;i&gt;or pointer&lt;/i&gt;)&lt;/a&gt; to a &lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; object can access that object's properties, but the string &lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"Joe Blow"&lt;/span&gt;&lt;/span&gt; can not...&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #274e13; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;Person p = new Person("Joe Blow");&amp;nbsp;&amp;nbsp; // get an object reference "p"&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: #274e13; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;p.weight = 175; // THIS WORKS!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b style="color: #274e13;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;"Joe Blow".weight = 175; // THIS DOESN'T WORK!&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="color: #cc0000;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;Now, the string/name "Joe Blow" &lt;i&gt;could&lt;/i&gt; be used in a query that &lt;i&gt;describes&lt;/i&gt; a Person object and returns a reference to it. And WAAAY before computers, Russell said the same thing.&amp;nbsp; Names are a &lt;i&gt;description&lt;/i&gt; of something and not a &lt;i&gt;reference&lt;/i&gt; to it.&lt;/div&gt;&lt;/blockquote&gt;(Descriptivist) Philosophers declared that names were not references because there are a number of problems in logic that arise if they are.&amp;nbsp; I have written about several of these in &lt;a href="http://existentialprogramming.blogspot.com/search/label/rose"&gt;earlier blog posts&lt;/a&gt;, but in a nutshell:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;names can change even though the object doesn't (e.g. maiden names)&lt;/li&gt;&lt;li&gt;names can have meaning over and above referencing an object (e.g. Superman vs Clark Kent)&lt;/li&gt;&lt;li&gt;objects can have more than one name (e.g. Morning Star vs Venus)&lt;/li&gt;&lt;li&gt;names can be given to objects that don't actually exist (e.g. Unicorn)&lt;/li&gt;&lt;li&gt;not every object has a name (e.g. that piece of paper over there)&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;While OOP programmers may know that a pointer or reference to an object is different than a "name",&amp;nbsp; many database designers haven't absorbed that yet.&lt;/b&gt;&amp;nbsp; Of course, they can be forgiven somewhat because the relational database model does not really give them references or pointers.&amp;nbsp; The only way to access the properties of an object (&lt;i&gt;aka entity&lt;/i&gt;) is via a query (and hence a description).&amp;nbsp; This has led to the common practice of creating an artificial property (aka &lt;a href="http://en.wikipedia.org/wiki/Surrogate_key"&gt;surrogate key&lt;/a&gt;) that can be made to have a unique, unchanging value for every different object/entity, and is a close substitute for a "reference".&lt;br /&gt;&lt;br /&gt;On the other hand, there is also the practice of using the name property of an object (or any other real world properties) as a reference mechanism (aka &lt;a href="http://en.wikipedia.org/wiki/Natural_key"&gt;natural key&lt;/a&gt;), and so naturally there is &lt;a href="http://stackoverflow.com/questions/337503/whats-the-best-practice-for-primary-keys-in-tables"&gt;great debate&lt;/a&gt; about whether this is ok or not, and &lt;a href="http://www.agiledata.org/essays/keys.html"&gt;when to use one or the other&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Philosophy would counsel (as would I) to not call names (i.e. don't use natural keys), and don't use &lt;a href="http://en.wikipedia.org/wiki/Unique_key"&gt;artificial keys&lt;/a&gt; that the world knows about (like Social Security Numbers because &lt;a href="http://en.wikipedia.org/wiki/Unique_key#cite_note-0"&gt;even those have duplicates&lt;/a&gt;!). Below are a few case studies of problems arising from name calling rather than pointing.&amp;nbsp; They share a base problem that the natural key data is almost never "&lt;a href="http://en.wikipedia.org/wiki/Essential_property"&gt;essential&lt;/a&gt;" in the philosophical sense; i.e. the data is capable of changing over time even though the object is considered to be the same object.&lt;br /&gt;&lt;br /&gt;Case Study: Yahoo Bookmarks&lt;br /&gt;&lt;br /&gt;It turns out that once a bookmark is created on the Yahoo Bookmarks site, there is no way to change the URL associated with that bookmark.&amp;nbsp; Someone decided to use the URL as a natural key (which by definition should never change), so, the URL can't be edited.&amp;nbsp; The problem is that a "bookmark" (by my thinking) is not synonymous with a URL.&amp;nbsp; It is a marker that enables me to return to a web page.&amp;nbsp; With web sites being revamped all the time, and most URLs not being "&lt;a href="http://en.wikipedia.org/wiki/Permalink"&gt;permalinks&lt;/a&gt;", the same page can have it's URL change over time.&amp;nbsp; If I need to update the URL, Yahoo makes me delete the old bookmark, create a new one, and re-enter the name, comments, etc from scratch.&lt;br /&gt;&lt;br /&gt;Case Study: Qlubb site names&lt;br /&gt;&lt;br /&gt;There is a &lt;a href="http://www.qlubb.com/"&gt;web portal&lt;/a&gt; where one can create free web sites for small organizations (i.e. clubs aka qlubbs).&amp;nbsp; To create a site, you select a club name and then customize the generic site created for you.&amp;nbsp; However, in the &lt;a href="http://www.qlubb.com/qlubbs/help"&gt;help page&lt;/a&gt;, they warn that there is no way to change the name of your club once it is created because&lt;br /&gt;&lt;blockquote&gt;"We currently do not support the ability to change the Qlubb name as there may be database consistency risks. However, if your Qlubb really want to change the name, please have a Qlubb administrator send a note to help at Qlubb with your request. We will evaluate each request and perform the change manually, if it is safe to do so."&lt;/blockquote&gt;Obviously someone mistook a name for a unique and unchanging key.&lt;br /&gt;&lt;br /&gt;Case Study: Semantic Web&lt;br /&gt;&lt;br /&gt;For all those programmers groaning at the last example, asking how anyone can still make that old mistake in this day and age, the same thing goes on in the new frontier of the Semantic Web.&amp;nbsp; In most &lt;a href="http://www.obitko.com/tutorials/ontologies-semantic-web/resource-description-framework.html"&gt;tutorials on the Semantic Web&lt;/a&gt;, or &lt;a href="http://kti.mff.cuni.cz/%7Ebartak/prolog/genealogy.html"&gt;tutorials for logic programming languages like Prolog&lt;/a&gt;, and yes, even in my &lt;a href="http://existentialprogramming.blogspot.com/2007/09/savant-semantic-network-database.html"&gt;youthful whack at a semantic network database&lt;/a&gt;, names of things are confused with references to those things.&amp;nbsp; As I wrote about &lt;a href="http://existentialprogramming.blogspot.com/2007/09/savant-semantic-network-database.html"&gt;the flaw in my SN database&lt;/a&gt; back in 2007, this causes real problems in all the ways that Philosophers recognized a century ago.&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=3540006788&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1590597699&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596153813&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0415472385&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0415957524&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2334684228002532223?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2334684228002532223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/dont-call-namesit-is-polite-to-point.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2334684228002532223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2334684228002532223'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/dont-call-namesit-is-polite-to-point.html' title='Don&apos;t Call Names...It IS polite to point!'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-5156314840009776127</id><published>2010-03-11T17:30:00.027-05:00</published><updated>2010-03-12T10:23:18.558-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bank'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='parts'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>Some Parts have a (sex) life of their own</title><content type='html'>In heeding &lt;a href="http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html"&gt;my earlier post&lt;/a&gt; which advocates that "wholes" be analyzed and modeled, rather than just their "parts", there is the danger of swinging to the opposite extreme of not considering parts as "individuals".&amp;nbsp; After all, if one can model an entire &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Car&lt;/span&gt;&lt;/b&gt; as having a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;paintColor&lt;/span&gt;&lt;/b&gt; property, with a simple value of &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Red&lt;/span&gt;&lt;/b&gt;, then there is no need to model &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Paint&lt;/span&gt;&lt;/b&gt; as an entity on its own, much less &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PaintMolecule&lt;/span&gt;&lt;/b&gt; or &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Atom&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;When the parts of X are considered &lt;a href="http://www.journalofvision.org/4/8/510/"&gt;"stuff" instead of "things"&lt;/a&gt; (&lt;i&gt;e.g. paint versus wheels&lt;/i&gt;), or, when their abstraction level is so low that they are interchangeable (&lt;i&gt;like WHICH carbon atoms are in the paint&lt;/i&gt;), it is usually concluded that they are outside the scope of X’s model because they make no difference at the level of the whole X.&amp;nbsp; And certainly, if a &lt;i&gt;whole&lt;/i&gt; has a property, there is no need to have each &lt;i&gt;part&lt;/i&gt; redundantly carry the same property just to parrot the value of the whole.&amp;nbsp; For example, the case study in that earlier post chronicled the “BigBank” database, in which the record for each &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;obligation&lt;/span&gt;&lt;/b&gt; in a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;facility&lt;/span&gt;&lt;/b&gt; redundantly recorded the same single “facility grade”, even though they were always graded as a whole facility.&lt;br /&gt;&lt;br /&gt;The problem, of course, is knowing which parts are relevant at the level of the whole (i.e. the &lt;a href="http://en.wikipedia.org/wiki/Granularity#Data_granularity"&gt;granularity&lt;/a&gt; of the model). In &lt;a href="http://news.bbc.co.uk/2/hi/uk_news/scotland/edinburgh_and_east/8561814.stm"&gt;recent science news&lt;/a&gt;, an example of this quandary has arisen which illustrates how parts that were considered “stuff” are really individual things. It turns out that the rare chicken who grows up half-male and half-female does so in a way that is different from humans and other mammals.&lt;br /&gt;&lt;br /&gt;Until now, it’s been assumed that body parts (and hence their constituent cells) always grew up male or female because external hormones told them to, and told them to as a whole.&amp;nbsp; &lt;a href="http://www.nature.com/news/2010/100310/full/news.2010.114.html"&gt;The Nature paper&lt;/a&gt; announced the discovery that each cell in a half-and-half chicken has maleness or femaleness as an intrinsic property from birth. In mammals, if you transplant a formerly “male” cell into a “female” organ, it will start working as a female, whereas in chickens it will keep acting male.&amp;nbsp; To switch metaphors: It turns out that the car wasn’t painted red and green after the fact; each car part was already red or green ever since its manufacture, and each is resistant to change. So, cells/parts have to be modeled individually if you are building chickens/cars.&lt;br /&gt;&lt;br /&gt;Of course, if you are only collecting (and not building) cars, you might still think of color as a property of the car as a whole. But here is the sticky part…a painful situation occurs when the car collector later needs spare parts, but their inventory database was never designed to track part colors.&amp;nbsp; I have often encountered this situation in corporate/enterprise systems that are &lt;a href="http://en.wikipedia.org/wiki/Brittle_%28software%29"&gt;too brittle&lt;/a&gt; because their data models were overly simplified.&amp;nbsp; Sometimes the problem is that the designs were based on short term goals. [&lt;i&gt;This mistake is exacerbated by some development “&lt;a href="http://www.extremeprogramming.org/rules/early.html"&gt;methodologies&lt;/a&gt;” that advocate only designing for today’s needs.&lt;/i&gt;] Other times, problems result from making &lt;a href="http://en.wikipedia.org/wiki/Na%C3%AFve_realism"&gt;quick assumptions about the nature of things&lt;/a&gt; being modeled rather than taking a deep look (i.e. using the fruits of Philosophy’s “best practices” as developed over 2500 years). The case study ahead illustrates this scenario.&lt;br /&gt;&lt;br /&gt;This case study comes from another BigBank project where there was an enterprise-wide project to revamp systems to use a single standard ID number for each customer.&amp;nbsp; Their (&lt;i&gt;initial&lt;/i&gt;) proposal was published after over a year of analysis and requirements gathering. But, from the very beginning, a Customer was intuitively defined as synonymous with “legal entity”, where a legal entity has only one government Tax ID (e.g. SSN, EIN).&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #20124d;"&gt;Because only the &lt;i&gt;whole&lt;/i&gt; was modeled, all the other systems that needed &lt;i&gt;parts&lt;/i&gt; granularity balked, and the project had to take another year to rework its proposal.&lt;/b&gt;&amp;nbsp; Many systems and business processes needed to work with individual stores, branches and managers, and they depended on having a separate “customer ID” for each location.&amp;nbsp; While many companies have separate corporations (i.e. tax IDs) for each branch, some very large companies (e.g. Walmart) do not.&amp;nbsp; Because many systems and business processes required a single bank officer to service a single customer, it would have forced thousands of branches onto a single virtual desktop.&amp;nbsp; It also turned out that, while cities have a single tax ID, some parts (e.g. the City of Atlanta) are not legally liable for the debts of other parts (e.g. the Atlanta airport) even though they all share the same single tax ID. &lt;br /&gt;&lt;br /&gt;So, without sufficient analysis, things that seem like  wholes, can really be collections of parts.&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0195382897&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0321278658&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&amp;lt;iframe src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;amp;o=1&amp;amp;amp;p=8&amp;amp;amp;l=bpl&amp;amp;amp;asins=0582832489&amp;amp;amp;fc1=000000&amp;amp;amp;IS2=1&amp;amp;amp;lt1=_blank&amp;amp;amp;m=amazon&amp;amp;amp;lc1=0000FF&amp;amp;amp;bc1=000000&amp;amp;amp;bg1=FFFFFF&amp;amp;amp;f=ifr" style="padding-top: 5px; width: 131px; height: 245px; padding-right: 10px;" marginwidth="0" marginheight="0" align="left" frameborder="0" scrolling="no"&amp;gt;&amp;lt;iframe src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;amp;o=1&amp;amp;amp;p=8&amp;amp;amp;l=bpl&amp;amp;amp;asins=0582832489&amp;amp;amp;fc1=000000&amp;amp;amp;IS2=1&amp;amp;amp;lt1=_blank&amp;amp;amp;m=amazon&amp;amp;amp;lc1=0000FF&amp;amp;amp;bc1=000000&amp;amp;amp;bg1=FFFFFF&amp;amp;amp;f=ifr" style="padding-top: 5px; width: 131px; height: 245px; padding-right: 10px;" marginwidth="0" marginheight="0" align="left" frameborder="0" scrolling="no"&amp;gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0582832489&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=3884050532&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-5156314840009776127?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/5156314840009776127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/some-parts-have-sex-life-of-their-own.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5156314840009776127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5156314840009776127'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/some-parts-have-sex-life-of-their-own.html' title='Some Parts have a (sex) life of their own'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2490958865950032207</id><published>2010-03-04T13:32:00.019-05:00</published><updated>2011-07-22T00:07:36.308-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='views'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><category scheme='http://www.blogger.com/atom/ns#' term='equals'/><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='parts'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Model Entities, not just their parts</title><content type='html'>One of the oldest puzzles in Philosophy is the paradox of how something can change and yet still be considered the same thing. After all, if “same” is defined as “identical; not different; unchanged”, then how can it “change”?&amp;nbsp; On the other hand, even if I lose that hand (&lt;i&gt;pun intended&lt;/i&gt;), I am still the same me. In chapter 5 of Peter Cave’s new book, “&lt;a href="http://www.amazon.com/This-Sentence-False-Introduction-Philosophical/dp/1847062202?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;this sentence is false&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1847062202" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;”[1], there is a collection of example &lt;a href="http://www.philosophytalk.org/pastShows/Paradoxes.htm"&gt;paradoxes&lt;/a&gt; that illustrate how our intuitions about “sameness” are inconsistent.&amp;nbsp; Some paradoxes involve entities (or properties) whose definition is "vague", as in “How many cows make up a herd?” or “At what weight does adding a pound change you into being ‘fat’?”&amp;nbsp; However, here I will be focusing on the change paradoxes involving things with a well defined set of parts. They illustrate the problem with defining something as merely the collection of its parts (unless of course “it” is truly only a collection, and not an entity in its own right).&lt;br /&gt;&lt;blockquote&gt;&lt;b style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;George Washington's axe&lt;/b&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; Harry: I have here the very axe with which George Washington chopped  down the cherry tree. It’s been used by my family for generations.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; Sally: But this says “Made in China”!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; Harry:&amp;nbsp; Well, over the years, the handle was replaced each time it wore  out. Oh, and the blade’s been replaced a couple of times too.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; Sally: But those are the only two parts…that’s not the same axe at all  then!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Ship of Theseus&lt;/b&gt;&lt;br /&gt;&lt;i style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;(original paradox by Plutarch)&lt;/i&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; Theseus had a ship whose parts were replaced over time such that, at a  certain point, no original pieces were left.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; How can the latter ship be said to be the same ship as the original if  they have no parts in common?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;(sequel paradox by Hobbes)&lt;/i&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; Suppose that those old parts were stockpiled as they were being  replaced, and later they were reassembled to make a ship.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt; NOW, which ship is the same as the original ship; the one with the  original parts, or, the one with the replacement parts?&lt;/span&gt;&lt;/blockquote&gt;At the bottom of these paradoxes is the question of whether a thing-made-up-of-parts is the same as the collection of all its parts.&amp;nbsp; I.E. can everything that can be said of the whole thing be equally said of the collection of all its parts, and vice-versa? For 2500 years, western philosophers including &lt;a href="http://www.amazon.com/Introducing-Philosophy-Graphic-Guide-Icon/dp/184046853X?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Socrates&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=184046853X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, &lt;a href="http://www.amazon.com/Plato-Parts-Wholes-Metaphysics-Structure/dp/019927844X?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Plato&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=019927844X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, and &lt;a href="http://www.amazon.com/Introducing-Aristotle-New-Icon/dp/1840467592?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Aristotle&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1840467592" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, right through to the 21st century, have been debating this question, generating whole libraries of book and papers.&amp;nbsp; In fact, &lt;a href="http://plato.stanford.edu/entries/mereology/"&gt;&lt;b&gt;Mereology&lt;/b&gt;&lt;/a&gt; is an entire field of study that is just about the relationship between parts and their respective wholes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What does it mean to be an individual?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As discussed (at great length) in the book &lt;a href="http://www.amazon.com/Parts-Study-Ontology-Peter-Simons/dp/0199241465?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Parts&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0199241465" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;[2], there is a whole spectrum of things in between “individuals” and “groups”, and they are referred to in everyday language by singular terms (e.g. person), plural terms (e.g. feet), and some words that could mean either (e.g. hair). There are individuals (say, a car), parts of individuals that are themselves individuals (say, a wheel), parts of individuals that are NOT themselves individuals (say, the paint), collections that do not form an individual (say, “the wheels of that car”), collections that DO constitute an individual (say, the car parts that comprise the engine where the engine is itself an individual), and so on, and so on.&lt;br /&gt;&lt;br /&gt;A key to distinguishing whether a thing being referred to is truly a thing in its own right &lt;i&gt;(and not just a plural reference masquerading as a single thing)&lt;/i&gt; is what sorts of things can be said about it.&amp;nbsp; Orchestra is an ambiguous term because it can be used as a singular or a plural as in “the orchestra IS playing” vs the equally grammatical “the orchestra ARE playing”.&amp;nbsp; If it is considered an individual then we can say things about its creation, its history, etc, whereas the plural use simply denotes a collection of players where not much can be said about “it” apart from the count of players, their average age, etc.&amp;nbsp; &lt;span style="color: #660000; font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Relational Database programmers will recognize individuals as those that get their own record in some entity table, and plurals/sets/collections as equivalent to the result set from some arbitrary query.&amp;nbsp; SQL aggregate functions (like count, average, minimum, maximum, etc) are the only things that can be said about the result set as a whole. Result sets do not get primary keys because they are not a “thing”, whereas real individuals do (or should!) get their own personal identity key.&amp;nbsp; Even when an arbitrary query is made to look like an entity by defining a “view”, it is not always possible to perform updates against the search results because the view is not a real entity.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What does it mean to be the same?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A big problem is that there are many different flavors of “sameness” when we say that A is the same as B. Right off the bat there is a difference between &lt;a href="http://en.wikipedia.org/wiki/Identity_%28philosophy%29#Qualitative_versus_numerical_identity"&gt;&lt;b&gt;Qualitative identity&lt;/b&gt;&lt;/a&gt; versus &lt;a href="http://plato.stanford.edu/entries/identity/"&gt;&lt;b&gt;Numerical identity&lt;/b&gt;&lt;/a&gt;. Two things are qualitatively identical if they are duplicates, like a pair of dice. Two things are numerically identical if they are one and the same thing, like the &lt;i&gt;Morning Star&lt;/i&gt; and the &lt;i&gt;Evening Star&lt;/i&gt; (both of which are, in fact, really the planet &lt;i&gt;Venus&lt;/i&gt;).&amp;nbsp; They are “numerically” identical in that when counting things they only count as one thing.&amp;nbsp; Another complication is that there is a difference between identity (right this second) versus &lt;a href="http://plato.stanford.edu/entries/identity-time/"&gt;&lt;b&gt;Identity over time&lt;/b&gt;&lt;/a&gt; which deals with the whole question of how something can be different at two different times and yet still be considered the same thing.&amp;nbsp; For example, you are still considered numerically identical to the you of your youth even though you have clearly changed…although this gets into the even more involved topic of &lt;a href="http://plato.stanford.edu/entries/identity-personal/"&gt;&lt;b&gt;Personal Identity&lt;/b&gt;&lt;/a&gt; [&lt;i&gt;which may or may not apply to an axe&lt;/i&gt; ;-) ] Traditionally, if x was identical to y, and y was identical to z, then x had to be identical to z. &lt;a href="http://plato.stanford.edu/entries/identity-relative/"&gt;&lt;b&gt;Relative Identity&lt;/b&gt;&lt;/a&gt; has been proposed such that this need not be true, thus allowing both the morning and evening stars to be identical to Venus but not to each other.&lt;br /&gt;&lt;br /&gt;When specifically asking whether the paradoxical ships and axes are &lt;i&gt;numerically&lt;/i&gt; identical, as Peter Cave points out, two of our usual criteria for being “one and the same thing” are in conflict.&amp;nbsp; They are (a) being composed of largely the same set of parts, and (b) being appropriately continuous through some region of space and time.&amp;nbsp; The continually refurbished ship meets (b) but the reassembled original parts meet (a).&lt;br /&gt;&lt;br /&gt;In traditional logic, as formulated in&lt;b&gt; &lt;a href="http://plato.stanford.edu/entries/identity-indiscernible/"&gt;Leibniz’s Law&lt;/a&gt;&lt;/b&gt;, two things are the “same” only if everything that can be said about one thing can also be said about the other. In other words, all the properties of each object/entity need to be equal if they are one and the same.&amp;nbsp; By this token, the two axes and the various ships are not the same.&amp;nbsp; Of course, this means that ANY change to ANY property causes the new thing to not be “the same” as the old. To avoid this, others have said that only &lt;a href="http://plato.stanford.edu/entries/essential-accidental/"&gt;&lt;b&gt;essential&lt;/b&gt;&lt;/a&gt; and not &lt;a href="http://en.wikipedia.org/wiki/Accident_%28philosophy%29"&gt;&lt;b&gt;accidental&lt;/b&gt;&lt;/a&gt; properties should be compared.&amp;nbsp; This means that the definitions of “ship” and “axe” should distinguish between those properties that must remain the same throughout the lifetime of the object versus those properties that may change over time.&lt;br /&gt;&lt;blockquote style="color: #660000; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Java Programmers can relate to the philosophical meanings of  “essential” and “accidental” in the following way. &lt;i style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;[To keep this sidebar  simple, think of “entity beans” where only one bean/object/instance is  allowed to represent a particular real world entity (e.g. {name=Joe  Blow,ssn=123456789})…i.e. there are never multiple object instances in  RAM simultaneously representing Joe.]&lt;/i&gt;&lt;span style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp; Class definitions could have  “essential” properties implemented via constants (i.e. &lt;span style="font-size: small;"&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;final&lt;/b&gt;&lt;/span&gt; instance  variables initialized in the constructor ala the Immutable design  pattern). And, “accidental” properties are implemented via normal  instance members.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;The essential properties must be &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;final&lt;/b&gt; because if  their values were different then they would have to be a different  individual.&amp;nbsp; E.G. If an instance of &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class Person&lt;/b&gt; has a constant &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt; &lt;b&gt;DNA_Fingerprint_Code&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; with value of &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;1234567890&lt;/b&gt;, it would not be correct  to change that value on that same object because a person’s DNA both defines them and never changes; i.e. “essential” in the Philosophy sense. The  correct procedure would be to create a new instance of Person because it  must truly be a different person if it has different DNA.&lt;/span&gt; &lt;i style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;[Of course,  this brings up the whole separate topic of the difference between  changing a property’s value because it has a truly new value versus  merely correcting a mistaken value.&amp;nbsp; Normally, computer software has not  been designed to make this distinction even though it would make some  systems much more robust, and able to reflect reality better if they  did.]&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;The putative method &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;IsTheSame(Object o) &lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;would compare either all  properties, or only essential properties, of &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;this&lt;/b&gt; and &lt;b style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;o&lt;/b&gt; depending on  your philosophy.&lt;/span&gt;&amp;nbsp; &lt;i style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;[This also brings up the whole separate topic of the  Java &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;equals()&lt;/span&gt; method, and the &lt;a href="http://existentialprogramming.blogspot.com/search/label/equals?updated-max=2010-03-04T13%3A32%3A00-05%3A00"&gt;many potential meanings of “equals”&lt;/a&gt;  apparent when thinking Philosophically.]&lt;/i&gt;&lt;/blockquote&gt;&lt;b&gt;More than the sum of its parts&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So, the particular individual parts of a thing need not all be “essential” properties of that thing, and hence they may change without affecting that thing’s identity.&amp;nbsp; (You are still you even if you lose a leg or lung, but not a head). Well then, what are some potential essential properties of an individual thing?&amp;nbsp; Many advocate taking a look at &lt;a href="http://plato.stanford.edu/entries/aristotle-causality/"&gt;&lt;b&gt;Aristotle’s “four causes”&lt;/b&gt;&lt;/a&gt; of a thing, where he defined “cause” as anything that was involved in the creation of that thing.&amp;nbsp; His two main varieties of causes were &lt;b&gt;intrinsic&lt;/b&gt;, for causes that are “in the object”, and &lt;b&gt;extrinsic&lt;/b&gt;, for those that are not.&amp;nbsp; The two sub-varieties of intrinsic causes were &lt;b&gt;material cause&lt;/b&gt; (the &lt;i&gt;material&lt;/i&gt; the thing consists of) and &lt;b&gt;formal cause&lt;/b&gt; (the thing’s &lt;i&gt;form&lt;/i&gt; &lt;span style="color: #660000;"&gt;[OOP programmers think &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Class&lt;/span&gt;]&lt;/span&gt;).&amp;nbsp; The two sub-varieties of extrinsic causes were &lt;b&gt;efficient cause&lt;/b&gt; (the “who” or “what” that made it happen, or “how”) and &lt;b&gt;final cause&lt;/b&gt; (the goal, or purpose, or “why”).&lt;br /&gt;&lt;br /&gt;By analyzing the paradoxes using Aristotle’s causes it can be argued that the Ship of Theseus is the same ship, because the &lt;i&gt;form&lt;/i&gt; does not change, even though the &lt;i&gt;material&lt;/i&gt; used to construct it may vary with time. Also, the Ship of Theseus would have the same &lt;i&gt;purpose&lt;/i&gt;, that is, transporting Theseus, even though its &lt;i&gt;material&lt;/i&gt; would change with time.&amp;nbsp; The builders and tools used may, or may not, have been the same, therefore, depending on how important the &lt;i&gt;efficient cause&lt;/i&gt; is to you, it would make more or less of a difference.&amp;nbsp; So, giving priority in definitions to some causes over other causes can answer riddles like these.&lt;br /&gt;&lt;br /&gt;Further more, analyzing the “causes” of a thing’s creation, forces one to agree on when a thing actually comes into and out of existence, how to tell it apart from other similar things, how to count them, how to recognize it again in the future, and so forth.&amp;nbsp; Circularly, Causes also provide justifications for those agreements.&amp;nbsp; These &lt;a href="http://plato.stanford.edu/entries/identity/#4"&gt;&lt;b&gt;criteria for identity&lt;/b&gt;&lt;/a&gt; help define the &lt;a href="http://plato.stanford.edu/entries/sortals/"&gt;&lt;b&gt;sortal&lt;/b&gt;&lt;/a&gt; definition of the thing (i.e. knowing how to sort these sorts of things from other sorts of things, and being able to count them on the way).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Case Studies: BigBank “Facilities” and &lt;/b&gt;&lt;b&gt;“&lt;/b&gt;&lt;b&gt;Customers&lt;/b&gt;&lt;b&gt;”&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I worked on some projects at "BigBank&lt;i&gt;"&lt;/i&gt; (a recently defunct Top-5-in-the-USA bank) where these Philosophy-inspired techniques would have really helped.&amp;nbsp; Here are two case studies that illustrate the problems of modeling the parts but not the wholes.&lt;br /&gt;&lt;br /&gt;In the first case study, BigBank (&lt;i&gt;in order to meet new international banking standards&lt;/i&gt;) needed to retrofit its computer systems to record and report on their track record in guessing whether loans would be paid off eventually.&amp;nbsp; Each guess took the form of a “default grade” for a package of loans, each known as a “facility”.&lt;br /&gt;&lt;br /&gt;A major problem was that their various systems did not agree on the basic definition of “facility”.&amp;nbsp; This was because the definition of a “facility” went &lt;b&gt;&lt;i&gt;so&lt;/i&gt;&lt;/b&gt; without saying that no one actually said (&lt;i&gt;in a rigorous way&lt;/i&gt;) what it was.&amp;nbsp; Everyone interviewed knew intuitively what one was but couldn’t quite put it into words, and when pressed, it turned out that they all had different definitions from each other.&amp;nbsp; As a result, the various systems around the bank were built with different &lt;i&gt;ontologies&lt;/i&gt; (i.e. models of the world).&amp;nbsp; &lt;b style="color: #20124d;"&gt;A key problem was that many of BigBank’s systems assumed that Facilities were no more than the collection of their parts, and so only the parts were recorded with no standard place to say things about each Facility as a whole.&amp;nbsp; As a result, it came as a surprise to everyone that there had never been any agreement as to when which parts belonged to which wholes, nor even when any particular whole Facility came into or out of existence. Consequently, BigBank had several different “Facility ID”s, none of which agreed which each other, hence, no way to definitively report on the history of any particular Facility.&lt;/b&gt;&lt;br /&gt;&lt;blockquote style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;CASE STUDY:&amp;nbsp; At BigBank, credit grades are calculated for "facilities". A  facility is a collection of "obligations" (i.e. loans, lines of credit)  that are being considered together as a single deal and graded as a  whole. &lt;span style="color: #4c1130;"&gt;The particular set of obligations grouped into each "facility"  changes over time as individual obligations get paid off or expire.&lt;/span&gt;  Plus, changed or not, the facilities are supposed to be re-graded from  time to time.&amp;nbsp; Unfortunately, some key BigBank databases only had records  for individual obligations. &lt;b&gt;There was no Facility entity table.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So, for  example, whenever a "facility" was (re)graded, in reality, only a set  of obligation records were updated, all with the same single  “facility-grade”. In fact, other than the loan officer's neurons, there  was no record of which obligations had been associated with which  "facility" over time.&amp;nbsp; So, when there was a new requirement to store for  each facility all its grading documents, there was no place to put  them. Even worse, since a Facility entity had never been formally  defined, the analysis had never been done to make sure everyone had the  same definition of a "facility" (which they didn't). &lt;/span&gt;&lt;b style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;There was no  agreement on what the thing being graded actually was!&lt;/b&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt; For some, each  individual grading event was considered a "facility" (along with its own  "facility ID") because "the grading sheet is what is graded".&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;A second case study (&lt;a href="http://existentialprogramming.blogspot.com/2006/06/ontology-mismatch-case-study-customers.html"&gt;which I detailed back in 2006&lt;/a&gt;) involves BigBank's treatment of customer information. Some BigBank systems defined &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Customer&lt;/span&gt;&lt;/b&gt; entities and assigned a single ID for each one, but other systems gave the  same person or corporation a different ID in each state and called them &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Obligors&lt;/span&gt;&lt;/b&gt;. &lt;b style="color: #20124d;"&gt;Once again, some systems modeled only the wholes (i.e. &lt;i&gt;customers&lt;/i&gt;) and other systems only modeled the parts (i.e. &lt;i&gt;obligors&lt;/i&gt;). &lt;/b&gt;&lt;b style="color: #20124d;"&gt;And once again, because the systems working at the parts level did not tie them together as a whole, there was disagreement about which obligors belonged to which customers.&lt;/b&gt;&lt;b style="color: #20124d;"&gt;&amp;nbsp; It had become so bad that the data model had to be changed to allow multiple customers to be tied to a single obligor, lest conflicting data feeds go unprocessed. It was like having &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt; records and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;BodyPart&lt;/span&gt; records, but needing to kludge in the ability to have multiple people associated with the same particular foot!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;[1] chapter 5, this sentence is false, Peter Cave, 2009, Continuum, ISBN: 9781847062208&lt;br /&gt;[2] Parts, Peter Simons, 1987, Oxford University Press&lt;br /&gt;[3] Introducing Aristotle, Rupert Woodfin and Judy Groves, 2001&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - April 19th, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;I almost said that a person's DNA was unique until I remembered twins, triplets,etc. So, I started to add a reference to DNA+&lt;a href="http://en.wikipedia.org/wiki/Epigenetics"&gt;epigenetics&lt;/a&gt; in order to be able to say "unique", except that the "never changes" bit would no longer be true.&lt;br /&gt;&lt;br /&gt;Interesting "paradox" that epigenetics is needed to uniquely define/identify someone but it is ever-changing. This gets at the heart of the notion of essential versus accidental...it is unique to something but not essential to that same something.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596004273&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0199241465&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1847062202&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1840467592&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596523068&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2490958865950032207?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2490958865950032207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2490958865950032207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2490958865950032207'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html' title='Model Entities, not just their parts'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1779358466575291970</id><published>2009-09-16T21:44:00.015-04:00</published><updated>2010-03-26T10:54:31.100-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmers teach philosophers'/><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><title type='text'>Counting Intentional Non-events</title><content type='html'>In &lt;a href="http://existentialprogramming.blogspot.com/2009/09/why-did-action-philosopher-cross-road.html"&gt;writing earlier&lt;/a&gt; about a programmer’s take on the debates in the Philosophy of Action, there was a particular philosophical argument that I wanted to delve into separately because I have a suggested solution. [Notice how my intention was to &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; write about this while writing earlier.]&lt;br /&gt;&lt;br /&gt;Recall that in Action Theory, loosely speaking, &lt;span style="font-style: italic;"&gt;Events&lt;/span&gt; are general cause &amp;amp; effect “things that happen”, and &lt;span style="font-style: italic;"&gt;Actions&lt;/span&gt; are things that someone (aka the &lt;span style="font-style: italic;"&gt;Agent&lt;/span&gt;) does on purpose, usually involving some “bodily movement” to get things rolling. One of the debates is whether Actions are, in fact, Events or not. [For object-oriented programmers, the question is whether “&lt;span style="font-size: 100%;"&gt;&lt;span style="color: #006600; font-family: courier new;"&gt;class Action extends Event&lt;/span&gt;&lt;/span&gt;” or not.]    Jennifer Hornsby[1] argues that the “standard story of action”, with its focus on body movements, and its claims that all actions are events, is off-track because it leaves out NOT moving (e.g. &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; eating that ice cream because of a desire to be thinner, spoiling the party by &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; turning up, etc.).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000099;"&gt;There is a subtle philosophical point here&lt;/span&gt;: Events are considered &lt;span style="font-style: italic;"&gt;particulars&lt;/span&gt;, i.e. individual things that “exist” in the sense that each is associated with a span of time and a region of space (&lt;span style="font-style: italic;"&gt;when and where the event occurred&lt;/span&gt;), and one can (figuratively) “point” to it, and count it, and tell it apart from other events.  Additionally, it is common in philosophy to maintain that a “hole” (&lt;span style="font-style: italic;"&gt;the lack of something&lt;/span&gt;) doesn’t exist as a particular. After all, I can’t count how many green things are &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; in this room, nor point to each of them, nor tell them apart from each other. So, the argument goes that since you can intentionally “not wink at me” (by definition, an action), Action can’t be a subtype of Event.&lt;br /&gt;&lt;br /&gt;However, in thinking about what it would mean for a computer program to “not do some action”, I realized there &lt;span style="font-style: italic;"&gt;was&lt;/span&gt; a way to pinpoint those occasions. For example, in special game playing programs, moves are considered, compared with other moves, and ultimately one is chosen with the rest being rejected.  It seemed to me that the rejected moves are "not done" in an "intentional" fashion, in contrast to moves that were never even considered. Game programs are a particular form of the general class of programs that generate "plans" to reach some goal not unlike humans.  Actions are considered or rejected as the plan is being put together.  Also, in everyday programs, the logic decides to call a subroutine or not, thus the routines are intentionally &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; called sometimes, in contrast to not doing things that aren't even in the program.  It makes sense to say that routine A was "not called" &lt;span style="font-style: italic;"&gt;x&lt;/span&gt; number of times, but no answer other than zero seems to make sense when asking how many times did the program &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; go to Mars.&lt;br /&gt;&lt;br /&gt;So,  I came up with a theory of how one can count, for a given situation, actions that are not a &lt;span style="font-style: italic;"&gt;positive performance&lt;/span&gt; (i.e. that are not “doing something”). By “given situation” I mean a particular period of time and an area of space (for example, the duration of time we were together at this table for lunch today).  To count how many times an event A did &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; occur in a given situation (e.g. you not winking at me during lunch):&lt;br /&gt;1) establish the minimum time span that actually doing A once would take, including any time needed to separate one occurrence from another. Dividing the situation duration by the minimum action duration would establish a maximum potential count. (e.g. lunch was an hour, a wink takes a second plus a second in between, therefore a potential maximum 1800 winks over lunch)&lt;br /&gt;2) establish what conditions are required for A to occur once (e.g. we both must be at the table with eye contact), and eliminate all the time spans where the conditions did not hold (e.g. I was in the restroom for 10 mins, you were talking to the next table for 15 minutes, so a tighter maximum would be 1050 winks)&lt;br /&gt;&lt;br /&gt;But, &lt;span style="color: #990000;"&gt;to count how many times the &lt;/span&gt;&lt;span style="color: #990000; font-style: italic;"&gt;action&lt;/span&gt;&lt;span style="color: #990000;"&gt; A did not occur in a given situation, there must be &lt;/span&gt;&lt;span style="color: #990000; font-style: italic;"&gt;intention&lt;/span&gt;. In order for “not doing something” to be an intentional action, the agent must consider doing A and decide not to. And, the required conditions have to be met otherwise the action couldn’t have taken place anyway (i.e. motive &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; opportunity).&lt;br /&gt;3) So, the actual number of occurrences of “not doing something” is how ever many times the agent considered doing it, and didn’t, when they could have. E.G. you thought about winking 5 times while we had eye contact but only did once…the 3 times you thought about it while I was in the restroom don’t count, so, you didn’t wink at me 4 times.&lt;br /&gt;&lt;br /&gt;Interestingly, the time it takes to consider and reject doing something may take much less time than the doing of it, so, the maximum potential number of times something wasn’t done may be much more than the max. potential times that it was.  One might get-pregnant twice a year but not-get-pregnant 3 times a week.&lt;br /&gt;&lt;br /&gt;Finally, because one must consider (not) doing something in order for it to count as an action, one can say confidently that some things did not occur &lt;span style="font-weight: bold;"&gt;zero&lt;/span&gt; times. There were zero times that I did not give you a unicorn (because there are no such things, hence no opportunity).  There were zero times that I did not stand on your shoulders because it never even entered my mind.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] Jennifer Hornsby, Agency and Actions,  Cambridge Univ Press, 2004&lt;br /&gt;&lt;a href="http://eprints.bbk.ac.uk/95/"&gt;http://eprints.bbk.ac.uk/95/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] Jennifer Hornsby,  &lt;a href="http://www.amazon.com/Actions-International-Library-Philosophy-Jennifer/dp/0710004524?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Actions (International Library of Philosophy)&lt;/a&gt;, Routledge, 1980&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0198751753&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0674005635&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0199217149&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1779358466575291970?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1779358466575291970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/counting-intentional-non-events.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1779358466575291970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1779358466575291970'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/counting-intentional-non-events.html' title='Counting Intentional Non-events'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6010373097542651215</id><published>2009-09-15T18:06:00.024-04:00</published><updated>2010-01-23T12:43:40.023-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmers teach philosophers'/><category scheme='http://www.blogger.com/atom/ns#' term='mind-body'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>Why did the Action Philosopher cross the road?</title><content type='html'>“Why” is such an ambiguous question; it asks about an event…&lt;br /&gt;&lt;ol&gt;&lt;li&gt;what were the “causes” (&lt;span style="font-style: italic;"&gt;i.e. the physical producers of effects&lt;/span&gt;)&lt;/li&gt;&lt;li&gt; what were the “actions” (&lt;span style="font-style: italic;"&gt;i.e. who did what&lt;/span&gt;) &lt;/li&gt;&lt;li&gt;what were the “reasons” (&lt;span style="font-style: italic;"&gt;i.e. thoughts, motivations by someone that led to their (in)actions&lt;/span&gt;). &lt;/li&gt;&lt;/ol&gt;And to make things worse, each of those categories of questions can be answered at many different levels of abstraction. “Why did Y die?” could be answered with:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;causes: “Y’s car crashed” or more specifically “Y’s brakes failed”&lt;/li&gt;&lt;li&gt;actions: “X sabotaged Y’s car” or more specifically “X cut the brake line”&lt;/li&gt;&lt;li&gt;reasons:  “X wanted revenge” or more specifically “X wanted Y dead”.&lt;/li&gt;&lt;/ol&gt;And still worse, each of those categories exist in a chain such that each answer to “why” produces a new “why” question. Each cause has its own cause, actions occur in ordered sequences, and reasons are triggered by previous events. So, “why did X want revenge?” because “Y intentionally ruined X’s wedding”, “well WHY did Y do that?”, and so on.  “What is happening” is an equally ambiguous question because it can also be answered in terms of causes or actions or reasons.&lt;br /&gt;&lt;br /&gt;The Chicken crossing the road joke is so old, with so many new punch lines, that people sometimes don’t get the original joke anymore. It, of course, is that the answer &lt;span style="font-style: italic;"&gt;“to get to the other side”&lt;/span&gt;  is too much of a HOW rather than a WHAT (i.e. confusing proximate and ultimate goals). In the Philosophy of Action, which seeks to differentiate things done on purpose from things that merely happen, many philosophers have difficulty in separating &lt;span style="font-style: italic;"&gt;what&lt;/span&gt; a person is doing from &lt;span style="font-style: italic;"&gt;how&lt;/span&gt; they are going about doing it (not to mention, where their concept of “intention” fits in).  Distinguishing what from how is so central to writing specifications, programs &amp;amp; documentation, that we Programmers &lt;span style="font-style: italic;"&gt;should&lt;/span&gt; have something useful to pass along to Philosophers. I would teach them about our knowledge of: levels of abstraction, the difference between top-down and bottom-up views of the world, and the difference between the “intention” of the logic versus an instruction trace. Not that programmer’s have no problems in this regard…&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Top Down:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; Good Grief! Why don’t you move this code out into subroutines? There are fifty pages of code in one switch statement here! I can’t see the forest for the trees. &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Bottom Up:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; Good Grief! How can I tell what the program is doing when it is ten levels deep in function calls!&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Top Down:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; At the very least, put some comments in here to say what the program is doing. &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Bottom Up:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; I don’t believe in comments because the source code tells you exactly what the program is doing. &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Top Down:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; Ok, so what does this part of your program do?&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt; Bottom Up:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; Well, “i” is set to zero, and then it gets incremented each time through this loop here, and… &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Top Down:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; No, really. Put comments in English telling &lt;span style="font-style: italic;"&gt;what&lt;/span&gt; the program was &lt;span style="font-style: italic;"&gt;supposed&lt;/span&gt; to be doing. &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;Bottom Up:&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; Ok….&lt;/span&gt;   &lt;span style="color: #003300; font-family: courier new; font-weight: bold;"&gt;++i; /* Increment i */&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Events &amp;amp; Causes vs Actions &amp;amp; Reasons&lt;/span&gt;     &lt;br /&gt;&lt;blockquote&gt;“What is left over if I subtract the fact that my arm goes up from the fact that I raise my arm?" - Ludwig Wittgenstein, Philosophical Investigations §621&lt;br /&gt;&lt;/blockquote&gt;Human Agency, Intention, Actions, and Events are topics in Philosophy of Action and Philosophy of Mind. &lt;span style="font-style: italic;"&gt;Events&lt;/span&gt; are simply “things that happen”[2] in a chain of causes and effects. &lt;span style="font-style: italic;"&gt;Agency&lt;/span&gt; is a philosophical term for what programmers call “a thread of control”. &lt;span style="font-style: italic;"&gt;Human Agency&lt;/span&gt; is the capacity of human beings to make choices and act upon them. In Action Theory, if an AGENT A has the DESIRE for X plus the BELIEF that doing Y will result in X, then A will have the INTENTION of doing the ACTION Y.  If A actually does Y, then that desire and belief should be considered CAUSES of the EVENT of Y happening (…or not: &lt;span style="font-size: 85%;"&gt;“There has been a notable or notorious debate about whether the agent's reasons in acting are causes of the action”[3]&lt;/span&gt;). Unless specifically noted as unintentional, actions are only those that an agent does intentionally, so &lt;span style="font-style: italic;"&gt;falling&lt;/span&gt; off a cliff would not be an “action” but &lt;span style="font-style: italic;"&gt;jumping&lt;/span&gt; off would. Actions usually involve “bodily movements” that effectively translate mental intentions into physical events. (&lt;span style="font-size: 85%;"&gt;“Actions are bodily movements that are caused and rationalized by an agent’s desire for an end and a belief that moving her body in the relevant way will bring that end about.”[5]&lt;/span&gt;) Further, there is a certain moral component to human (in)actions that doesn’t apply otherwise. One can ask “should this have happened” about human actions (&lt;span style="font-style: italic;"&gt;say, not pre-evacuating New Orleans&lt;/span&gt;), which would make no sense for events &amp;amp; actions that involve no human decisions (&lt;span style="font-style: italic;"&gt;e.g. Katrina hits New Orleans, or, the spider killed the fly&lt;/span&gt;). Finally, in the Identity Theory of Mind[4], it is held that mental states, processes, and events (like desiring to eat ice cream) are mirrored by brain states, processes, and physical or physiological events (like this and that neuron firing).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000066;"&gt;Background: philosophers/metaphysicians are interested in figuring out what is “really real” versus just a story our mind made up in trying to interpret all those real-world inputs we get from our senses. They have decided that a way to prove that a thing is “real” is to show that it can affect an event happening or not: &lt;span style="font-size: 85%;"&gt;&lt;span style="font-weight: bold;"&gt;“a test of the reality of a property is that it can be causally efficacious”&lt;/span&gt;[6]&lt;/span&gt;. So, that is why there is so much interest in the relationship between actions/reasons/intentions and the scientifically measurable physical events/causes.  If one can’t show how the &lt;span style="font-style: italic;"&gt;intention&lt;/span&gt; to perform the &lt;span style="font-style: italic;"&gt;action&lt;/span&gt; of eating an ice cream cone somehow translates into a synapse &lt;span style="font-style: italic;"&gt;causing&lt;/span&gt; a tongue muscle contraction &lt;span style="font-style: italic;"&gt;event&lt;/span&gt;, then maybe actions and intentions aren’t really real.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So! All settled then! Well no. Here is just a sampling of technical disagreements between philosophers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Is the “action” of moving a body part the same as the actual movement of the body part? Or is the action just the “intention” bit.&lt;/li&gt;&lt;li&gt; Contrary to the Identity Theory of Mind, some say[5] that you can’t map intentions onto brain states because intentions aren’t events, so you won’t find any corresponding physical events to map to. That’s why, explanations in everyday conversation, even by pro-ITOM philosophers and scientists, are in terms of intentions (&lt;span style="font-style: italic;"&gt;“she crossed the road to catch the bus”&lt;/span&gt;) rather than mental and brain states. Still others say that “intention” isn’t real, it is only a story we tell to explain the world.&lt;/li&gt;&lt;li&gt;Some say “that which causes an action constitutes the agent’s reason for it.”, others say that you can’t explain the “reason” why somebody did something by just looking at what “caused” it.[5]&lt;/li&gt;&lt;li&gt;Causal Fundamentalism says that everything can be explained at the “physics” level of causes and effects, others say no.[5]&lt;/li&gt;&lt;li&gt;Some say actions are a subclass of events; others say actions are a relationship between an agent and an event, i.e. actions are instances of the relation (agent, “bringing about”, event). [Programmers think: difference between “&lt;span style="color: #003300; font-family: courier new; font-weight: bold;"&gt;class Action extends Event&lt;/span&gt;” versus “&lt;span style="color: #003300; font-family: courier new; font-weight: bold;"&gt;create table BringingAbout(ActionID,AgentFK,EventFK)&lt;/span&gt;”]&lt;/li&gt;&lt;/ul&gt;So, does the action of “turning on a light” include “the light illuminating”, or does it stop at “flipping the switch”, or at “the hand movements that flip the switch”, or at “trying to move the hand”?  Does it include the firing of the neurons? the muscles contractions? the moving of the bones? Are they all separate actions, or not actions at all? Are they the &lt;span style="font-style: italic;"&gt;only&lt;/span&gt; actions with no overarching “flip the switch” action?&lt;br /&gt;&lt;br /&gt;As I wrote about the &lt;a href="http://existentialprogramming.blogspot.com/2009/09/programmer-what-mindbody-problem.html"&gt;mind/body problem&lt;/a&gt;, I think we have a levels of abstraction problem here.&lt;br /&gt;&lt;br /&gt;Programmers understand that systems are built in layers where each layer exposes WHAT it can do on top, hiding the HOW it does it underneath. The &lt;span style="font-style: italic;"&gt;how&lt;/span&gt; of one layer uses the &lt;span style="font-style: italic;"&gt;what&lt;/span&gt; of the layers below it. There are layers &lt;span style="font-style: italic;"&gt;on top of&lt;/span&gt; layers, and there are layers &lt;span style="font-style: italic;"&gt;within&lt;/span&gt; layers. Computer software forms a layer on top of computer hardware, but there are multiple layers within each.  Within software there are layers for programs on top of High Order Languages on top of Assembly language. Within hardware there are layers for processors &amp;amp; memory on top of logic circuits &amp;amp; amplifiers on top of transistors &amp;amp; resistors on top of literally layers of silicon dioxide &amp;amp; gallium arsenide. Some of these layers are so complete and versatile that they form their own independent paradigm such that events can be completely described at their level with no reference to layers above or below it.&lt;br /&gt;&lt;br /&gt;Another way to look at levels of abstraction is in the way that the same series of events can be interpreted in a hierarchy of meaning. For example, this text has meaning as a series of sentences, but it can also be interpreted as just a series of words, which are just a series of letters, which are just a series of ASCII codes, which are just a series of hex digits, which are just a series of binary digits, which are just a series of alterations between zero and five volts on a chip.  Same universe but simultaneous multiple levels of interpretation into events.&lt;br /&gt;&lt;br /&gt;The WHAT defines the intention to do some action, and The HOW is the planned (in advance or on the fly) set of more detailed actions to accomplish it.  One can describe and explain the action at any level, but &lt;span style="color: #660000;"&gt;confusion occurs when jumping around from one level of abstraction to another&lt;/span&gt;.  This is a problem when programmers or philosophers do it. Intermixing instructions at one level with more detailed instructions from lower levels makes it hard to follow the logic at either level. &lt;span style="font-family: times new roman; font-weight: bold;"&gt;Non-programmers can understand this by imagining a cake recipe that goes into the instructions for growing wheat in the section that “desires” a cup of flour&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;SO, human agency is equivalent to the “top level of abstraction” that is deciding WHAT ultimate goal state is desired, and it entails all the lower levels.  And like a software process (&lt;span style="font-style: italic;"&gt;i.e. agent&lt;/span&gt;), there is a “thread of control” that threads through the call stack, traversing down through the levels of HOW, returning back up through layers of WHAT.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intention&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What is it for a person to “will” or “intend” an action? Does the intention to raise one’s arm manifest itself as a brain state that can be seen in some scanner, as distinct from the actual activity of raising that arm? Jennifer Hornsby rejects “the physicist’s Fundamentalism”, because it lacks “intentionality”[5].  As described earlier, &lt;span style="color: #660000;"&gt;each level of abstraction can simultaneously tell the story in its own terms, BUT, that doesn’t mean being able to see “intention” at &lt;span style="font-style: italic;"&gt;any&lt;/span&gt; level just from looking at “what happened”&lt;/span&gt;. In the first place, it is hard to translate upward in the abstraction layer cake. Secondly, looking only at the events that occur leaves out the intentional logic paths not taken.&lt;br /&gt;&lt;br /&gt;Even though programmers &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; that there is “intention” in programs (because that’s how we write them!), in programs written by someone else it is often difficult to divine what it is.  To translate back up to the “WHAT was intended” from the “HOW it was implemented” is so hard that we tell programmers to write it explicitly in comments in the code. When faced with fixing a flawed program whose intention isn’t clear, programmers will prefer to rewrite it from scratch rather than trying to figure out what it was doing.&lt;br /&gt;&lt;br /&gt;Programmers know that when analyzing an ICE instruction trace (&lt;span style="font-style: italic;"&gt;think flight data recorder for programs&lt;/span&gt;), it will not show all the “intention” in a program because it will not show the paths in the program logic that were not taken. You might infer that a decision was being made by the code when it executed certain test and branch instructions, but you won’t see the “road not travelled”.  That’s why in debuggers it is crucial to have access to the source code to see the complete logic, whether it was executed or not, otherwise one could not diagnose and correct any incorrect translations of “intention” at one level of abstraction into a “plan of action” at the next lower level.&lt;br /&gt;&lt;br /&gt;Also, with regard to looking for intention in brain (&lt;span style="font-style: italic;"&gt;or computer memory&lt;/span&gt;) states, it is in the program logic, not the “state data” nor the instruction trace. BUT, intentions are not mystical nor abstract, they are physically embodied somewhere.  With computer programs, it is in the encoded logic which sits side by side with state data in memory hardware. Because, &lt;span style="color: #660000;"&gt;at the right level of abstraction, the encoded intentional logic IS just data&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now, like action theory rules, workaday &lt;span style="font-style: italic;"&gt;computer programs&lt;/span&gt; lay out the “intentions” in designed plans of explicit rational language. In artificial intelligence programs, the intentions are often implied via weighted scoring of alternative actions.  And, the &lt;span style="font-style: italic;"&gt;brain&lt;/span&gt; may act more like the ant colony example of emergence. The “purposeful” behavior of the colony as a whole “emerges” out of the actions of all the individual ants who presumably have no clue about the “intentions” of the colony.  So brain/colony intentions may not be “designed” as much as “evolved”. On the other hand, programmers are painfully aware of inexplicable behavior by programs that they designed. And, lest non-programmers assume that rationally designed program behavior can’t mindlessly evolve, there are many times when bugs get fixed by making a local logic change with no idea of the global consequences; and if that band-aid causes a new bug over there, then another band-aid is placed over there, and so on, until the behavior has evolved just enough to pass inspection. However, in all those cases, while the intentions at one level may be hard to map to those at another, they are, in fact, all there at once.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #000066;"&gt;SO, why DID the chicken cross the road?  Well, because the muscles in the left leg contracted causing it to move forward, then the muscles in the right leg…&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;[1] Philosophy Bites podcast on agency &lt;br /&gt;&lt;a href="http://philosophybites.com/2008/06/jennifer-hornsb.html"&gt;http://philosophybites.com/2008/06/jennifer-hornsb.html&lt;/a&gt;&lt;br /&gt;[2] Casati, Roberto, Varzi, Achille, "Events", The Stanford Encyclopedia of Philosophy (Fall 2008 Edition)&lt;br /&gt;&lt;a href="http://plato.stanford.edu/archives/fall2008/entries/events/"&gt; http://plato.stanford.edu/archives/fall2008/entries/events/&lt;/a&gt;&lt;br /&gt;[3] Wilson, George, "Action", The Stanford Encyclopedia of Philosophy (Fall 2009 Edition)&lt;br /&gt;&lt;a href="http://plato.stanford.edu/archives/fall2009/entries/action/"&gt; http://plato.stanford.edu/archives/fall2009/entries/action/&lt;/a&gt;&lt;br /&gt;[4] Smart, J. J. C., "The Identity Theory of Mind", The Stanford Encyclopedia of Philosophy (Fall 2008 Edition)&lt;br /&gt;&lt;a href="http://plato.stanford.edu/archives/fall2008/entries/mind-identity/"&gt; http://plato.stanford.edu/archives/fall2008/entries/mind-identity/&lt;/a&gt;&lt;br /&gt;[5] Jennifer Hornsby, Agency and Actions, Cambridge Univ Press, 2004&lt;br /&gt;&lt;a href="http://eprints.bbk.ac.uk/95/"&gt; http://eprints.bbk.ac.uk/95/&lt;/a&gt;&lt;br /&gt;[6] Jacob, Pierre, "Intentionality", The Stanford Encyclopedia of Philosophy (Fall 2008 Edition) &lt;br /&gt;&lt;a href="http://plato.stanford.edu/archives/fall2008/entries/intentionality/"&gt;http://plato.stanford.edu/archives/fall2008/entries/intentionality/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0262101149&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1405125861&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0135678196&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0199264791&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6010373097542651215?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6010373097542651215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/why-did-action-philosopher-cross-road.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6010373097542651215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6010373097542651215'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/why-did-action-philosopher-cross-road.html' title='Why did the Action Philosopher cross the road?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-967480929824914845</id><published>2009-09-12T11:42:00.008-04:00</published><updated>2010-05-01T11:47:57.728-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmers teach philosophers'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Prestigious Programmers Process Persons Philosophically</title><content type='html'>&lt;span style="font-size: 100%;"&gt;Like the “mind/body problem” &lt;a href="http://existentialprogramming.blogspot.com/2009/09/programmer-what-mindbody-problem.html"&gt;discussed  earlier&lt;/a&gt;, I think Programmers have interesting input for  Philosophers on another perennial topic of theirs: “personal identity”  and the side topics of teleportation and duplicating people (&lt;span style="font-style: italic;"&gt;“persons” in philosophy speak&lt;/span&gt;). In  addition to a perspective on whether the transported person is the same  as the original (which is the normal focus of attention), programmers  also have an insight into an oft overlooked aspect: Why would a  duplicate ever act differently than the original?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Beam Me Up, Scotty&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In [Western] Philosophy, “personal identity” is the thing that links a  past, present, and future “you” such that it is right to hold “present  you” accountable for the acts of “past you”, and “present you” cares  about what happens to “future you”. In many philosophical discussions of  “what is a person”, and “what is consciousness”, the topic of  teleportation (aka &lt;span style="font-style: italic;"&gt;teletransportation&lt;/span&gt;)  comes up. To the non-philosopher, it is probably surprising that  science fiction is discussed in scholarly debates about what is “really  real”. The Star Trek transporter (and many variations of it) &lt;span style="font-style: italic;"&gt;are&lt;/span&gt; discussed because it stops  participants from getting away with shallow “common sense” answers. It  presents problems with simplistically defining a person as the  collection of atoms that embody that person, or as an unbroken series of  memories, or as a soul (of the Judeo-Christian type).&lt;br /&gt;For example:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When you re-materialize from transporting, if you are made up of different atoms than constituted you before you left, are you really you? Or, are you a clone with the original you having died?&lt;/li&gt;&lt;li&gt; When you re-materialize, are you still you because you are made up of the same unbroken series of memories? But, if you say yes, what happens if the transporter fails to destroy the original? If the one now on Mars is you then who is the person still standing on the transporter pad here on Earth?&lt;/li&gt;&lt;li&gt; If you consider teleportation as constituting a “break” in memory/consciousness, and therefore you would not be the same person, then why are you considered to be the same person after being unconscious with no memories for 8 hours each night?&lt;/li&gt;&lt;li&gt; If you have/are a soul then what happens to it? Does the re-materialized you get it? What if the original you wasn’t destroyed?&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-weight: bold;"&gt;Artie Deco and 4-Q-2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A variant on transporter discussions is simply around duplicating a  person, and it is here that I would acquaint philosophers with the Unix  system call: &lt;span style="font-family: courier new; font-weight: bold;"&gt;fork()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In the Unix operating system, there are “processes” that run  (apparently) simultaneously, and are analogous to persons.  Like a  person, each process has its own memories, its own intentions, and its  own “location in space-time”.  And, via the fork system call, processes  can be duplicated. In fact, the fork scenario is even stranger than a  transporter…&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: 100%;"&gt; Imagine a  special small room, and inside is a black vending machine with a single  button. If you enter the room and push the button, a cell phone is  dispensed. Except that when you pushed that button, a copy of you was  created in another dimension, and to both you and the copy, it seems  like nothing has happened. It appears to each that &lt;span style="font-style: italic;"&gt;they&lt;/span&gt; are the one who just pressed the  button and was given a phone.  When each copy leaves the room, they are  back in the same original dimension, and each may encounter and  interact with the other.&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size: 100%;"&gt; Now, how would you know if you are the original or the copy? Does  “original” and “copy” even have meaning here? Most people would try to  answer in terms of “who has the original atoms” and the like, and if one  copy &lt;span style="font-style: italic;"&gt;did&lt;/span&gt; have them then the  situation is the same as the broken transporter scenario.  So, imagine  further that until either copy does something to cause its body to  diverge from the other, the copies even share the same atoms. On an atom  by atom basis, each copy only gets its own as either copy does  something to diverge on that particular atom.  And, it is effectively  random which copy keeps any particular atom as they diverge over time.   SO, which one is the original, and which one is the duplicate? I.E.  which one is the “same” person as the one that originally hit the  button?&lt;br /&gt;&lt;br /&gt;As contrived as that scenario sounds, that’s what happens when Unix  forks a process (&lt;span style="font-style: italic;"&gt;with the help of  copy-on-write virtual memory&lt;/span&gt;). And programmers have an answer as  to which one is the “same” as the original.  …drum roll please… ahem…&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-family: trebuchet ms;"&gt;“It is so arbitrary that God has to  tell each whether they are the original or the copy!”&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;What do you think the cell phone is for? Actually, the cell phone serves  two purposes (to keep the analogy really strict); each phone has a text  message with either the phone number of the copy (meaning that YOU are  the original), or a zero, meaning that you are the copy.  The original  is free to call the copy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But I Don’t Want To Be The Copy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here is the part that Star Trek, et al, usually gets wrong, and  Philosophers don’t seem to ponder: Why do the copies act differently  than each other?  One mitigating factor is that each copy is usually  materializing in a different location, or a different time, or with  special defects (like milquetoast Capt. Kirk versus Mr. Hyde Capt.  Kirk), so they can be forgiven for not having each copy act in lock  step.  But in the fork scenario, they exist in the same situation, and  therefore would do exactly the same thing as each other.  Whoa! What  about Free Will and all that stuff?  Well, given the same location,  environment, memories, “programming” if you will, why shouldn’t they do  exactly the same thing as each other?&lt;br /&gt;&lt;br /&gt;With Unix processes, unless the programming takes note of whether it is  the original or not, and unless it does different things based on that  information, each copy will attempt to do the same things.  They will  only diverge as they both attempt to do something that only one will be  allowed to do. For example, locking a file, or reading the very next bit  of data from an already open file.  The Unix operating system (aka  God), will arbitrarily pick one of the copies to succeed when both try  simultaneously. [Think multiple CPUs all you geeks shouting that they  don’t really do things simultaneously.]  So, the copies begin to  fitfully diverge as one succeeds then does what it planned to do upon  success, and the other one fails then does what it was planned to do  upon failure.&lt;br /&gt;&lt;br /&gt;Now, programmers know that to be productive, they must decide what they  want each copy to do, and write the program in such a way that each does  what it is supposed to.  With people, you must know what will happen  when you press that vending button, and &lt;span style="font-style: italic;"&gt;why&lt;/span&gt; you are pressing it, and &lt;span style="font-style: italic;"&gt;what&lt;/span&gt; you want each copy to do, AND HAVE THE WILLPOWER TO  DO IT!&lt;br /&gt;&lt;br /&gt;It does no good to have a plan about what the “copy” is supposed to do  if you have the personality that is going to decide after it’s too late  that you don’t want to be the copy!  If your "programming" is such that,  after pressing the button, you decide to not look at the text message  because now you don't really want to know...well then the OTHER copy is  going to do the exact same thing!  [If you &lt;span style="font-style: italic;"&gt;do&lt;/span&gt; look but decide to ignore it then, unlike a program,  it gets to be a psychological issue of whether you really &lt;span style="font-style: italic;"&gt;can&lt;/span&gt; ignore it.]&lt;br /&gt;&lt;br /&gt;There is a wonderful exploration of all these aspects in the movie “&lt;a href="http://www.amazon.com/Prestige-Christian-Bale/dp/B000LC55F2"&gt;The  Prestige&lt;/a&gt;”. I would point out each scenario, but I so want you to see  it if you haven’t already, and I don’t want to spoil all the twists and  turns at the end.&lt;br /&gt;&lt;br /&gt;[1]  http://www.amazon.com/Hardware-Wars-30th-Anniversary-Collectors/dp/B001OTSFE4/&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B001OTSFE4&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B000LC55F2&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B001DHXT6G&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=063123442X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0133315622&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-967480929824914845?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/967480929824914845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/prestigious-programmers-process-persons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/967480929824914845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/967480929824914845'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/prestigious-programmers-process-persons.html' title='Prestigious Programmers Process Persons Philosophically'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3830627263012669238</id><published>2009-09-02T18:00:00.008-04:00</published><updated>2010-01-23T13:22:55.185-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programmers teach philosophers'/><category scheme='http://www.blogger.com/atom/ns#' term='mind-body'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>Programmer: What Mind/Body Problem?</title><content type='html'>&lt;span style="font-size: 100%;"&gt;While my general project these days is trying to teach programmers the many things they can learn from Philosophy, I am once again struck by how many philosophers get confused by things that programmers understand quite well.  In today’s particular case, it is while reading "Which Physical Thing Am I?"[1], and once again, it is related to the "mind/body problem".  That essay ends &lt;span style="color: black;"&gt;“if this philosophic hypothesis seems implausible to you, you try to formulate one that is less implausible.”&lt;/span&gt;  Well, my reply is "let me teach you about levels of abstraction and RAID drives”.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mind/Body Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Thinkers over time have recognized that a person remains the “same person” even though their body undergoes changes over time, even to the extent of losing parts; say, an arm, or a leg.  In 1954, it was discovered that "98% of the atoms in the human body are renewed each year"[2]. This has led many to conclude that what makes a person a person, must be different and separate from their body. For some, this different thing is a "soul".  For others, it is a "mind" or “consciousness”.  In general, this is often called mind-body dualism.&lt;br /&gt;&lt;br /&gt;Others have concluded that, because nothing exists outside of physical reality, the mind &lt;span style="font-style: italic;"&gt;can't&lt;/span&gt; be different from the body, but since the body &lt;span style="font-style: italic;"&gt;does&lt;/span&gt; change over time, there must therefore be some subset of the body (say, the brain) that is identical to the mind.  Jews and Muslims believe[4] that there is a bone in the spine, called the "Luz", that doesn't decay, and from which the entire body will be rebuilt during resurrection. Dr. Roderick Chisholm, thinks that, while it probably isn't the Luz bone, it likely &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; something microscopic within the brain. In "Which Physical Thing Am I?"[1] he writes, &lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: 100%;"&gt;"I am literally identical with some proper part of this macroscopic body, some intact, nonsuccessive part that has been in this larger body all along."&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size: 100%;"&gt; [By "nonsuccessive", he means something that is NOT a series of different parts over time.  By contrast, an army regiment &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; successive in that it can exist for hundreds of years even though no individual soldier does.]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Software/Hardware Non-problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now keep in mind that the Stanford Encyclopedia of Philosophy[3] describes Chisholm as "widely regarded as one of the most creative, productive, and influential American philosophers of the 20th Century", and that Chisholm published the above in 1989 (not 1889), and it is included in anthologies[1] as recently as 2008 (not 1908). It is not just ancient philosophers who get confused over this topic.  What are they confusing that programmers know?&lt;br /&gt;&lt;br /&gt;Programmers know that software (like the mind) runs on hardware (like the body), but it isn’t synonymous with the hardware.  That doesn’t make software mystical or beyond physical reality; it is just at a higher level of abstraction. At that more abstract level, software exists as an information process whose data state at any given point in time is embodied in some set of physical components.  But it would be the same software even if running on other equivalent hardware.&lt;br /&gt;&lt;br /&gt;In fact, there are several layers of abstraction between your typical program and hardware, what with Java code compiled into virtual machine code, interpreted in a VM written in C code, that compiled to Intel assembly code, that assembled into &lt;/span&gt;&lt;span style="font-size: 100%;"&gt;hexadecimal&lt;/span&gt;&lt;span style="font-size: 100%;"&gt; machine code,… And we haven’t even made the leap to electrons flowing through transistors yet!  The point being that software doesn’t care which transistors, even though every &lt;span style="font-family: courier new;"&gt;i+=1&lt;/span&gt;; statement runs in lock step with some transistors somewhere doing something specific to implement them. If that flip-flop didn’t flop then that bit wouldn’t change, and that auto-increment instruction wouldn’t increment, and so on. But, a programmer understands that it isn’t the electrons running through the NAND gate that “makes” a program DO what does, any more than some &lt;span style="font-family: courier new;"&gt;x=0;&lt;/span&gt; statement makes a &lt;span style="font-family: courier new;"&gt;Square.draw()&lt;/span&gt; method DO what it does.  They all happen simultaneously at different levels of abstraction.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;RAID fights bugs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To Chisholm’s particular point that continuous personhood requires (at least some) continuous body bits, programmers know that the “life span” of any particular set of data, is not tied to any particular physical component. Information is independent of the media used to record, or embody, or carry a copy of, that information.  A perfect example is a RAID device containing multiple disk drives.  Data in a RAID is kept in multiple physical locations such that any particular location can be destroyed without losing the data.  So, an arbitrary set of data (say, a file) can exist unchanged over time, even though the hardware storing it has completely changed.  With a “hot swap” RAID, a system using that file would have no idea that a drive died, was removed, replaced with a new drive, and that new drive re-populated with data.&lt;br /&gt;&lt;br /&gt;And, just like a mind’s constantly changing data set, that file’s contents on the RAID device can be constantly changing.  And those constant data changes are totally independent of the constant drive changes that might be taking place inside the RAID.&lt;br /&gt;&lt;br /&gt;The point here is not “the brain is a RAID drive”; the point is that a RAID drive is an existence proof that ongoing software processes do not require “intact, nonsuccessive” hardware. And the larger point is that Mind and Body can both be understood as simultaneous lock-step processes at different levels of abstraction in the same way that C++ method calls are in lock-step with CMOS chip voltage changes.&lt;br /&gt;&lt;br /&gt;[1] Metaphysics, the big questions, 2nd Ed., 2008, chap 35&lt;br /&gt;[2] Time Magazine, Oct 11, 1954 quoting Dr. Paul C. Aebersold of Oak Ridge&lt;br /&gt;&lt;a href="http://www.time.com/time/magazine/article/0,9171,936455,00.html"&gt;http://www.time.com/time/magazine/article/0,9171,936455,00.html&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://plato.stanford.edu/entries/chisholm/"&gt;http://plato.stanford.edu/entries/chisholm/&lt;/a&gt;&lt;br /&gt;[4] &lt;a href="http://en.wikipedia.org/wiki/Luz_%28bone%29"&gt;http://en.wikipedia.org/wiki/Luz_%28bone%29&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1405125861&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0199264791&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0006895441&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0321247256&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0812694287&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3830627263012669238?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3830627263012669238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/programmer-what-mindbody-problem.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3830627263012669238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3830627263012669238'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/09/programmer-what-mindbody-problem.html' title='Programmer: What Mind/Body Problem?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3168539102932647813</id><published>2009-08-11T08:55:00.009-04:00</published><updated>2010-01-23T12:55:42.166-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic network'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Faces with je ne sais quoi</title><content type='html'>&lt;span style="font-size: 100%;"&gt;A couple of years ago, I &lt;a href="http://existentialprogramming.blogspot.com/2007/05/rationalism-of-semantic-web-flaw.html"&gt;mused&lt;/a&gt; on the (possibly fatal) limitations of having &lt;a href="http://en.wikipedia.org/wiki/Rationalism"&gt;Rationalism&lt;/a&gt; as the fundamental basis of the Semantic Web.  Recently in the Communications of the ACM, an article added another example to the list of things that can be "known" but can't reliably be put into words.  In &lt;a href="http://portal.acm.org/citation.cfm?id=1536616.1536623"&gt;Face Recognition Breakthough&lt;/a&gt;[1], a new technique was presented that performed significantly faster and with more accuracy than traditional face-recognition techniques.  The basis of the technique was so surprising and counter-intuitive that, as recently as 2007, papers about it were rejected by mainstream computer vision conferences.&lt;br /&gt;&lt;br /&gt;In very simplistic terms, the new technique finds the most compact way to represent the pixels of a picture (of say a face) by throwing them at a random set of numbers and seeing what sticks. That compressed data is compared directly with compressed versions of other face pictures to find the closest match.  (If you really want the gory math details, see this &lt;a href="http://content.digitalwell.washington.edu/msr/external_release_talks_12_05_2005/15994/lecture.htm"&gt;video lecture&lt;/a&gt;.[2]) What is DOESN'T do is all the traditional  figuring out of where eyes and mouth and nose and ears are, and calculating the relationships between their locations, distances, etc.  In other words, it doesn't work by analyzing a face into words/concepts (eye, nose, mouth, etc) and specifying relationships between them.  It DOES do weird math using random numbers that is irrational in the literal sense of the word. And apparently this weird math not only works, it works &lt;span style="font-style: italic;"&gt;better!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The 2007 rejection of the papers as presenting outlandish claims was based on the same bias as rationalism has; if you can't put something into words, much less rational arguments, its not true, and its not knowledge.  Just as neural-nets do, the mechanics of sparse representation and compressed sensing encode "knowledge" in a form that is completely unintelligible to us humans when we look at the "raw data".  And while techniques that DO use more human-reason-friendly ideas are available, they often don't work as well.&lt;br /&gt;&lt;br /&gt;[1] http://portal.acm.org/citation.cfm?id=1536616.1536623&lt;br /&gt;[2] http://content.digitalwell.washington.edu/msr/external_release_talks_12_05_2005/15994/lecture.htm&lt;br /&gt;Note: use IE browser; also you can skip forward past 46 minutes of theory to go directly to applications.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0123735564&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1405109092&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0833033026&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0819405345&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3168539102932647813?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3168539102932647813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/08/faces-with-je-ne-sais-quoi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3168539102932647813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3168539102932647813'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/08/faces-with-je-ne-sais-quoi.html' title='Faces with je ne sais quoi'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1950667435022848340</id><published>2009-06-10T14:01:00.017-04:00</published><updated>2011-03-14T21:59:01.219-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><title type='text'>An Adjective is a Noun is a Verb</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;In my &lt;/span&gt;&lt;a href="http://existentialprogramming.blogspot.com/2008/03/scott-is-scott.html"&gt;&lt;span style="font-size: small;"&gt;earlier blog entry&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;"&gt; about Russell's Theory of Descriptions, it gave the example of rewording "The present king of France is bald" into a special descriptive form.  You may have noticed in that discussion that the phrase "X is kingly" was used instead of a more natural sounding "X is a king".  This is because Russell was attempting, via his special form of making statements, to remove all implicit claims that X exists, to be replaced with mere descriptions of X.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-size: small;"&gt;Programmers should think of this as the difference between:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;"(x&lt;/span&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="color: #003300;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: #003300;"&gt;&lt;span style="font-size: small;"&gt;instanceof&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #003300;"&gt;&lt;span style="font-size: small;"&gt; King) &amp;amp;&amp;amp; x.bald &amp;amp;&amp;amp; x.french&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;versus&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;"&lt;/span&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="color: #003300;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;select&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt; * &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;from&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt; AllThingsTable &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;where&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt; french='Y' &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;and&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt; bald='Y' &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;and&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt; kingly='Y'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;"&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-size: small;"&gt;The former would blow up in Java with a null pointer exception if X didn't exist, whereas the latter in SQL would not blow up; it would merely return zero results meaning that none exist.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span style="font-family: georgia;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;In philosophy, nouns are reworked into adjectives and even verbs all the time to make statements more precise.  In Russell's template, nouns are reworked into adjectives.  In process philosophy (where everything is considered a "process" rather than a "thing"), a "king" would really be considered the process of "kinging".&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Lest all this awkward wordsmithing seem too artificial, a quick look at McWorter's video introduction to linguistics[1] will show that what seems natural to us, is English specific.  He gives the example of "I like Pam", where "like" is a verb, but in Japanese, the equivalent "Pam ga suki" literally means "Pam likeableness".  So, a concept in one language may naturally be an activity, but in another language, it's a noun form of an adjective.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;[1] Understanding Linguistics: The Science of Language, John McWhorter&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;-&lt;a href="http://www.teach12.com/ttcx/CourseDescLong2.aspx?cid=2270&amp;amp;pc=Social%20Sciences"&gt; http://www.teach12.com/ttcx/CourseDescLong2.aspx?cid=2270&amp;amp;pc=Social%20Sciences&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: small;"&gt;- &lt;a href="http://www.amazon.com/Understanding-Linguistics-Science-Language-Guidebook/dp/1598034774?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Understanding Linguistics: The Science of Language (Parts 1-3) DVDS &amp;amp; Guidebook&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1598034774" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0415963648&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0415472385&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=006052085X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0955676304&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1950667435022848340?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1950667435022848340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/06/adjective-is-noun-is-verb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1950667435022848340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1950667435022848340'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/06/adjective-is-noun-is-verb.html' title='An Adjective is a Noun is a Verb'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-4500935024895715022</id><published>2009-05-28T14:32:00.001-04:00</published><updated>2010-09-28T14:46:28.543-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>XistP is the abbreviation for Existential Programming</title><content type='html'>After having written many blog posts, essays, emails, etc, etc using the phrase "Existential Programming", it is getting pretty tedious to keep spelling it out.&amp;nbsp; An official abbreviation is needed!&lt;br /&gt;&lt;br /&gt;Unfortunately for me, XP is already taken for "Extreme Programming".&amp;nbsp; XSP is taken TWICE!&lt;br /&gt;Once by Apache for eXtensible Server Pages, and also for an ASP.Net server implementation. XIST is the name of an RNA gene, XSTP is the &lt;span id="search" style="visibility: visible;"&gt;eXtended Satellite Transport Protocol, xISP/XISP/Xisp is used for all sorts of things, ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...so, the not so short (&lt;i&gt;but shorter than the whole phrase&lt;/i&gt;) &lt;b style="color: red;"&gt;XistP&lt;/b&gt; is my choice for the official abbreviation for &lt;b&gt;Existential Programming&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-4500935024895715022?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/4500935024895715022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/05/xistp-is-abbreviation-for-existential.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4500935024895715022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4500935024895715022'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/05/xistp-is-abbreviation-for-existential.html' title='XistP is the abbreviation for Existential Programming'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1933332654439332866</id><published>2009-04-07T02:06:00.010-04:00</published><updated>2011-03-14T21:59:58.995-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><title type='text'>A rose is a rose is (not) a rose</title><content type='html'>&lt;div&gt;In several of my &lt;a href="http://existentialprogramming.blogspot.com/search/label/rose"&gt;earlier blog entries&lt;/a&gt;, there was discussion as to whether words like "rose" have meanings, or are only references to things.  Shakespeare thought they were only references to things when he wrote "A rose by any other name would smell as sweet".  My &lt;a href="http://existentialprogramming.blogspot.com/2008/01/word-matters-words-matter.html"&gt;conclusion to the contrary&lt;/a&gt; (based on "salt") has been given empirical evidence, as described in &lt;a href="http://www.npr.org/templates/story/story.php?storyId=102518565"&gt;a story on National Public Radio&lt;/a&gt;[1].&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.amazon.com/Whats-Next-Dispatches-Science-Vintage/dp/0307389316?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://www.amazon.com/Whats-Next-Dispatches-Science-Vintage/dp/0307389316?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Lera Boroditsky&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0307389316" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0307389316" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;, an assistant psychology professor at Stanford University, had conducted experiments in which people were shown to be unconsciously affected by the language they spoke when they described things.  In languages like German and Spanish that have "gender", each noun (unlike English) is either male, female, or neuter. However, languages aren't consistent with regard to the gender of any particular word. In German, the word for &lt;b&gt;bridge&lt;/b&gt; is feminine, and in Spanish it is masculine. When test subjects were asked to provide words describing a picture of a bridge, the Germans came up with&lt;i&gt; fragile, elegant, beautiful, peaceful, slender, and pretty&lt;/i&gt;, whereas the Spaniards came up with&lt;i&gt; strong, dangerous, long, sturdy, big, and towering&lt;/i&gt;.  Even when the test subjects were taught a completely made up language that had gender, they chose descriptions of things that matched the gender of the made up word for that thing.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, when doing the business and technical analysis of systems, be aware of attached connotations and concept interrelationships before translating rich natural language words like &lt;i&gt;&lt;a href="http://existentialprogramming.blogspot.com/2008/01/word-matters-words-matter.html"&gt;Salary&lt;/a&gt;&lt;/i&gt; into antiseptic variable names like &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&lt;b&gt;Foo&lt;/b&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[1] "Shakespeare Had Roses All Wrong", Robert Krulwich&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.npr.org/templates/story/story.php?storyId=102518565"&gt;http://www.npr.org/templates/story/story.php?storyId=102518565&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0307389316&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1933332654439332866?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1933332654439332866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/04/rose-is-rose-is-not-rose.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1933332654439332866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1933332654439332866'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/04/rose-is-rose-is-not-rose.html' title='A rose is a rose is (not) a rose'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3796238715136093268</id><published>2009-01-22T17:19:00.001-05:00</published><updated>2010-04-21T17:23:34.989-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Class Constructors considered harmful</title><content type='html'>My basic project these days is to learn Philosophy 101 and contemplate what impact that knowledge should have on software development practices.&amp;nbsp; After reading topics like the &lt;a href="http://www.radicalacademy.com/prcminicourseontology4.htm"&gt;Philosophy of "becoming"&lt;/a&gt;, and &lt;a href="http://plato.stanford.edu/entries/aristotle-causality/"&gt;Aristotle's "four causes"&lt;/a&gt;, it is clear that Philosophers spend much more time trying to define the circumstances of an entity's creation than do system analysts and programmers. While Philosophers have long been concerned with WHY did WHO do WHAT to cause an object to come into being, programmers are mostly concerned with the mechanics of HOW an object should be constructed.&amp;nbsp; It strikes me that this is due to the tunnel vision encouraged by the class constructor method.&amp;nbsp; [And, due to destructors and automated garbage collection, an even worse situation applies to object “death”.] So, to &lt;a href="http://en.wikipedia.org/wiki/Considered_harmful"&gt;paraphrase a famous title&lt;/a&gt;, I (&lt;i&gt;albeit tongue-in-cheek&lt;/i&gt;) consider Class Constructors harmful.&lt;br /&gt;&lt;br /&gt;In the course of analysis and requirements gathering, a major goal is to identify and define the various &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;business domain entities&lt;/a&gt;. But, in a vicious cycle, the &lt;a href="http://en.wikipedia.org/wiki/Essence"&gt;definition of an entity&lt;/a&gt; is often too shallow with regard to its birth and death because “&lt;a href="http://existentialprogramming.blogspot.com/2010/03/model-entities-not-just-their-parts.html"&gt;causal&lt;/a&gt;” information often stagnates as merely background text in some requirements document.&amp;nbsp; This is because programmers have no standard place to put that logic into the code.&lt;br /&gt;&lt;br /&gt;Object oriented practice has one put "all" the properties and behavior associated with an entity into its Class definition, where "all" for &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class&lt;/span&gt;&lt;/b&gt; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Dog&lt;/span&gt;&lt;/b&gt; means "the dog, the whole dog, and nothing but the dog"[1].&amp;nbsp; However the "nothing &lt;i&gt;but&lt;/i&gt; the dog" constraint means that, the logic involved in deciding whether an instance of class X &lt;i&gt;should&lt;/i&gt; be created, is not normally a method &lt;i&gt;of&lt;/i&gt; class X.&amp;nbsp; Since the "cause" of X's instantiation usually involves other classes, that logic lies outside of X proper, thus, standard development methodologies leave the analysis of causation and purpose out of the design of class X.&amp;nbsp; Even &lt;a href="http://en.wikipedia.org/wiki/Factory_method_pattern"&gt;Factory classes&lt;/a&gt; are focused on object construction, rather than &lt;i&gt;why&lt;/i&gt; it should be constructed, and &lt;i&gt;why now&lt;/i&gt;, and &lt;i&gt;by whom&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/Mediator_pattern"&gt;Mediation pattern&lt;/a&gt; comes to mind as a place to put this sort of logic because it involves multiple classes.&amp;nbsp; The logic that decides it is time for a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Sculptor&lt;/span&gt;&lt;/b&gt; to use a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Chisel&lt;/span&gt;&lt;/b&gt; to carve a &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Statue&lt;/span&gt;&lt;/b&gt; out of a block of &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Marble&lt;/span&gt;&lt;/b&gt; doesn’t belong solely in any of those classes.&amp;nbsp; A programmer would be tempted to put a “carve” method in Sculptor since that is a “behavior” of the sculptor, but Philosophy considers it an &lt;a href="http://plato.stanford.edu/entries/essential-accidental/"&gt;essential&lt;/a&gt; part of the definition of the statue itself.&amp;nbsp; And that is a problem with Mediator classes in the first place; the desire to have everything relevant to X be “&lt;a href="http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29"&gt;nearby in the source code&lt;/a&gt;” (a raison d'être for classes) is defeated when some of it is off in various Mediators.&amp;nbsp; Having the &lt;a href="http://en.wikipedia.org/wiki/Teleology"&gt;teleology&lt;/a&gt; of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Statue&lt;/span&gt; off in some &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;CarveMediator&lt;/span&gt; isn’t much better than it residing in &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Sculptor.carve()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://en.wikipedia.org/wiki/Event-driven_architecture"&gt;event-driven systems&lt;/a&gt; (e.g. &lt;a href="http://en.wikipedia.org/wiki/Message-oriented_middleware"&gt;MOM&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA&lt;/a&gt;), the series of &lt;a href="http://en.wikipedia.org/wiki/Complex_event_processing"&gt;events that trigger&lt;/a&gt; the creation of an entity instance may be complex. And whether event-driven, or "&lt;a href="http://en.wikipedia.org/wiki/Batch_processing"&gt;batch processing&lt;/a&gt;", the sub-systems are often &lt;a href="http://en.wikipedia.org/wiki/Distributed_system"&gt;distributed&lt;/a&gt;, increasing the value of encapsulating this logic in a single place. With &lt;a href="http://java.sun.com/javaee/"&gt;Java EE&lt;/a&gt; and service oriented designs, there would be value in having the &lt;a href="http://www.infoq.com/news/2007/06/entity-services"&gt;entity services&lt;/a&gt; include this logic.&lt;br /&gt;&lt;br /&gt;In any event, I believe that there is a need to learn from Philosophy that their concept of "&lt;a href="http://en.wikipedia.org/wiki/Theory_of_Forms"&gt;form&lt;/a&gt;" (which is the equivalent of OOP's &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;class&lt;/span&gt;&lt;/b&gt;) has always included the &lt;a href="http://en.wikipedia.org/wiki/Telos_%28philosophy%29"&gt;purpose&lt;/a&gt; of a thing as well as its blueprint.&lt;br /&gt;&lt;br /&gt;[1] Object Oriented Analysis and Design, Grady Booch,&amp;nbsp; 1991&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1840467592&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=020189551X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1598638688&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0201633612&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596529554&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3796238715136093268?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3796238715136093268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2009/01/class-constructors-considered-harmful.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3796238715136093268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3796238715136093268'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2009/01/class-constructors-considered-harmful.html' title='Class Constructors considered harmful'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-601515361930507678</id><published>2008-12-14T11:06:00.009-05:00</published><updated>2010-02-01T15:31:28.615-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><title type='text'>Does data have velocity?</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;While reading &lt;a href="http://www.amazon.com/Am-Strange-Loop-Douglas-Hofstadter/dp/0465030793?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;I am a Strange Loop&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0465030793" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;[1]&amp;nbsp;&lt;/span&gt;by Doug Hofstadter, where he is trying to come up with an appropriate metaphor to explain his notion of a single human "mind/soul" being distributed over multiple human brains (somewhat like a country is distributed over its many scattered embassies), it made me muse on the boundary between an actual distributed mind/soul and other mind/souls that are merely affected/influenced by that mind/soul. &amp;nbsp;This is of course a particular instance of the general problem of determining the boundary of a diffuse object. &amp;nbsp;The boundary of a solid asteroid is easy to determine whereas the borderline between one planetary ring and an adjacent ring is harder. &amp;nbsp;Any individual "rock" residing in the region where two rings overlap could be a part of either ring.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;A data example of this problem is the one where lots of individual names/addresses need to be clustered into identities even though there is variation in the various names/addresses. &amp;nbsp;There are cases where it is ambiguous which identity "owns" a particular name/address when the fuzzy blob of one identity cluster overlaps the fuzzy blob of another identity. How to tell which one it belongs with? Why do we even think that there are two overlapping blobs instead of just one oddly shaped blob?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AHA - Look at velocity!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The problem of determining which points belong to which overlapping fuzzy regions is hard when looking at a static picture, however it is easy when there is movement. &amp;nbsp;When looking at which stars belong to which of two colliding galaxies, we look at the velocity of the star to see which galaxy it is moving with.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;So, can this be applied to data? &amp;nbsp;Is there some "velocity" that can be determined for each data point such that it can be associated with the "proper" data cluster? &amp;nbsp;Is there a velocity associated with a name/address instance?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;[1] "I am a Strange Loop",2007, Hofstadter, Basic Books&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0465030793&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B000RR65W8&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0471469661&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-601515361930507678?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/601515361930507678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/12/does-data-have-velocity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/601515361930507678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/601515361930507678'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/12/does-data-have-velocity.html' title='Does data have velocity?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-4368720923583657230</id><published>2008-10-22T13:27:00.049-04:00</published><updated>2010-04-19T14:47:48.580-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>Silver Bullet: Model the world, not the application</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;DISCLAIMER: Ok, I admit it...this is cut/pasted directly from my brain fart notebook, i.e. not ready for prime time...but dammit Jim, its just a blog!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;In the arsenal needed to fight unsuccessful software development projects, it will take a whole clip full of silver bullets.&amp;nbsp; One of those silver bullets, I believe, is more accurately modeling the world using knowledge of Philosophy.&lt;br /&gt;&lt;br /&gt;There is a great struggle between getting everything "right" up front,&amp;nbsp; versus, doing "just enough" specification and design.&amp;nbsp; When trying to balance "make it flexible" in order to support future re-use, versus &lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;XP&lt;/a&gt; mandates like "don't design what isn't needed today", it is hard to know (or justify) where to draw the line.&amp;nbsp; Due to "changing requirements", those "&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.92.5404&amp;amp;rep=rep1&amp;amp;type=pdf"&gt;flexible reuse&lt;/a&gt;" features (that were merely &lt;i&gt;contingent&lt;/i&gt; at design time) are often &lt;i&gt;mandatory&lt;/i&gt; before the original development cycle is even complete.&lt;br /&gt;&lt;br /&gt;WELL, lots of requirements don't change THAT much if you are modeling correctly in the first place.&lt;br /&gt;&lt;br /&gt;Humans haven't changed appreciably in millennia, even if the roles they play do.&amp;nbsp; So, if "humans" are modeled separately from "employees", it is that much less work when you later need to integrate them with "customers".&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: #660000;"&gt;[Theme here is "&lt;/span&gt;&lt;a href="http://existentialprogramming.blogspot.com/2007/04/isa-and-asa-relationships.html" style="color: blue;"&gt;promote roles programming&lt;/a&gt;&lt;span style="color: #660000;"&gt;", the justification of which is made more obvious when taking &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Essentialism" style="color: blue;"&gt;essentialism&lt;/a&gt;&lt;span style="color: #660000;"&gt; to heart.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In general, the foundation of one's data/domain/business/object/entity-relationship model is solid and unchanging, if all "domain objects", "business objects", etc are modeled based on a clear understanding of the &lt;a href="http://plato.stanford.edu/entries/essential-accidental/"&gt;essential versus accidental&lt;/a&gt; aspects of the "real world", and NOT based on the requirements description of a particular computer system or application.&amp;nbsp; Modeling based on "just what is needed now according to this requirements document today" is too brittle, both for future changes, and especially for integrating with other systems and data models.&lt;br /&gt;&lt;br /&gt;After all, adding properties and relationships to entities is fairly easy if the entities themselves are correctly identified.&amp;nbsp; It is much harder to change the basic palette of entities once a system design is built upon them.&amp;nbsp; Also, all the more reason to be sure and not confuse entities with roles they can take on.&lt;br /&gt;&lt;br /&gt;Example: I don't have to wonder who I might have to share employee data with if I realize that an "employee" is actually just a role that a person takes on.&amp;nbsp; If I model the essentials of the person separately from the attributes of the employee role, it will be much easier to integrate that data with, say, a "customer" database later.&amp;nbsp; If the customer data model recognizes that "customer" is just a role that a person takes on, its &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt; table is much more likely to be compatible with my &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Person&lt;/span&gt; table than would be the case with my naive &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Customer&lt;/span&gt; and their &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Employee&lt;/span&gt; tables (and still other &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Patient&lt;/span&gt; tables, etc, etc.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-4368720923583657230?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/4368720923583657230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/10/silver-bullet-model-world-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4368720923583657230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4368720923583657230'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/10/silver-bullet-model-world-not.html' title='Silver Bullet: Model the world, not the application'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6142187916047017462</id><published>2008-04-30T12:04:00.004-04:00</published><updated>2011-03-19T16:53:59.613-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Your Pipe Inventory Record is not a Pipe</title><content type='html'>&lt;div style="font-family: Times, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;span style="font-size: small;"&gt;In this blog, I recently posted: &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://existentialprogramming.blogspot.com/2008/04/reality-is-system-of-record.html"&gt;Reality is the System of Record&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;. Unfortunately, I just found&lt;/span&gt;&lt;span style="font-size: small;"&gt; a lost reminder to myself about a really good introductory example to use. Even though it didn't make it into the original post, it seems worth mentioning here anyway...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Times, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;&lt;b&gt;&lt;a href="http://www.amazon.com/Trahison-Images-Magritte-x25-25-Poster/dp/B0035GEMLE?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;La trahison des images&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B0035GEMLE" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; margin: 0px; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;" width="1" /&gt;&lt;/b&gt;&lt;/i&gt; is a famous painting by &lt;a href="http://en.wikipedia.org/wiki/Ren%C3%A9_Magritte"&gt;Magritte&lt;/a&gt; which seems to pose a riddle.&amp;nbsp; It contains nothing but a pipe and the phrase, "This is not a pipe". However, it only seems enigmatic because the solution is too obvious.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_JWiCz7S_rac/TAPmwckfynI/AAAAAAAAAEU/e_Kt1p7zpWE/s1600/MagrittePipe.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://2.bp.blogspot.com/_JWiCz7S_rac/TAPmwckfynI/AAAAAAAAAEU/e_Kt1p7zpWE/s320/MagrittePipe.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As Art critic Robert Hughes explains in &lt;a href="http://www.amazon.com/Second-Printing-Hundred-Year-History-Modern/dp/B002ZFWOKM?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Shock of the New&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B002ZFWOKM" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; margin: 0px; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;" width="1" /&gt;, "This, indeed, is not a pipe. It is a painting; a work of art; a sign that denotes an object and triggers memory". As Magritte himself once remarked, "Of course it's not a pipe. Just try to fill it with tobacco".&lt;br /&gt;&lt;br /&gt;In other words, it is a &lt;b&gt;&lt;i&gt;representation&lt;/i&gt;&lt;/b&gt; of a pipe, not to be mistaken for an actual one. And as obvious as that seems, computer system developers make the same mistake all the time. They do so when they forget that their &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Customer&lt;/span&gt;&lt;/b&gt; data table &amp;amp; business domain objects are not actual customers, but only &lt;i&gt;representations&lt;/i&gt;, i.e. &lt;i&gt;memories&lt;/i&gt;, i.e. &lt;i&gt;copies&lt;/i&gt; of information.&amp;nbsp; So, as with all cached copies of external data, it is the duty of your so-called "system of record" to keep in sync with the real customer, in the real world, because &lt;a href="http://existentialprogramming.blogspot.com/2008/04/reality-is-system-of-record.html"&gt;Reality is the System of Record&lt;/a&gt; ...&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B00260ZIAY&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0679728767&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1933045930&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6142187916047017462?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6142187916047017462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/04/your-pipe-inventory-record-is-not-pipe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6142187916047017462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6142187916047017462'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/04/your-pipe-inventory-record-is-not-pipe.html' title='Your Pipe Inventory Record is not a Pipe'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPmwckfynI/AAAAAAAAAEU/e_Kt1p7zpWE/s72-c/MagrittePipe.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-301605293791079349</id><published>2008-04-17T13:03:00.927-04:00</published><updated>2011-03-19T16:43:21.441-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Reality is the System of Record</title><content type='html'>&lt;blockquote style="color: blue;"&gt;&lt;div style="color: #660000;"&gt;"The system of record is the place where there is a definitive value for some unit of data... If you have no system of record for your bank account or if you have multiple systems of record for the same account, something is fundamentally wrong."&lt;/div&gt;&lt;span style="color: #660000;"&gt;Bill Inmon, father of the data warehouse.&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: #660000;"&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;Over my years of consulting in large &lt;a href="http://en.wikipedia.org/wiki/Enterprise_Information_System"&gt;enterprise&lt;/a&gt; environments, I've heard arguments over whose system is the "system of record" for some particular piece of data.&amp;nbsp; I have seen programmers officially acknowledge another system as the SOR, all the while building their own system as if &lt;i&gt;it&lt;/i&gt; were.&amp;nbsp; I've also heard corporate developers say that something is a customer if and only if it has a record in the SOR (never mind what the customer thinks, nor if the record literally has the name "Donald Duck").&amp;nbsp; I've seen that same customer information system built with so little regard for mirroring the real world that it defined &lt;a href="http://existentialprogramming.blogspot.com/2006/06/ontology-mismatch-case-study-customers.html"&gt;Frankenstein customers&lt;/a&gt;, some of whom were composed of parts from multiple actual people.&amp;nbsp; Owning an SOR seems to breed a certain lack of humility which (IMHO) could benefit from learning a little Philosophy.&amp;nbsp; It will teach you that you are &lt;i&gt;never&lt;/i&gt; the system of record, and instead, merely a "faint copy" of one of many &lt;a href="http://www.philosophytalk.org/pastShows/Kant.html"&gt;idiosyncratic conceptions&lt;/a&gt; of the world. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Representationalism&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In modern &lt;a href="http://plato.stanford.edu/entries/cognitive-science/"&gt;Cognitive Science&lt;/a&gt;, there is the assumption that "&lt;a href="http://plato.stanford.edu/entries/cognitive-science/#RepCom"&gt;the mind has mental representations analogous to computer data structures&lt;/a&gt;". The idea in Philosophy that "&lt;span bps-owner="" class="owner " type="INSERT"&gt;the mind perceives only mental images (representations) of material objects, not the objects themselves"&lt;span style="font-size: small;"&gt;[2]&lt;/span&gt;&lt;/span&gt; is called &lt;a href="http://sharp.bu.edu/~slehar/Representationalism.html"&gt;Representationalism&lt;/a&gt; (&lt;i&gt;and more generally &lt;a href="http://en.wikipedia.org/wiki/Indirect_realism"&gt;indirect realism&lt;/a&gt;&lt;/i&gt;), and it can trace its roots across 2400 years of &lt;a href="http://consc.net/guide.html"&gt;Philosophy of Mind&lt;/a&gt;.&amp;nbsp; Socrates says (in Plato's &lt;a href="http://en.wikipedia.org/wiki/Allegory_of_the_Cave"&gt;Parable of the Cave&lt;/a&gt;) that most people only see shadows of puppets instead of reality. Aristotle said thoughts are likenesses of things, and words refer to things indirectly through thoughts.&amp;nbsp; Rene Descartes proposed that all sensory information is transmitted by the nerves to a central "theatre", where the soul makes contact with the physical body and watches it.&amp;nbsp; John Locke said, "The mind represents the external world, but does not duplicate it."&amp;nbsp; David Hume thought that ideas were "faint copies" of physical sensations. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://plato.stanford.edu/entries/skepticism/"&gt;Skepticism&lt;/a&gt; (&lt;i&gt;i.e. the notion that we don't know what we think we know&lt;/i&gt;) is one of the oldest ideas in Philosophy, and the raison d'être for the entire branch called &lt;a href="http://plato.stanford.edu/entries/epistemology/"&gt;Epistemology&lt;/a&gt; (&lt;i&gt;which asks how can we be sure we know what we think we know?&lt;/i&gt;).&amp;nbsp; They were born from the ancient realization that our formation of ideas, concepts, and representations out of our &lt;a href="http://plato.stanford.edu/entries/sense-data/"&gt;sensory input&lt;/a&gt; (&lt;i&gt;hidden behind a "&lt;a href="http://plato.stanford.edu/entries/perception-problem/"&gt;veil of perception&lt;/a&gt;"&lt;/i&gt;) is a very inexact process, complete with optical illusions, dreams, hallucinations, color-blindness, double vision, etc, etc.&amp;nbsp; In Immanuel Kant's "Critique of Pure Reason", he argues that because our minds are hardwired to perceive the world in certain ways, they actively shape experience rather than passively record perceptions.&amp;nbsp; His claim was that our sense perception is effectively a pair of tinted glasses that we can't take off.&amp;nbsp; Because we've never seen the world without them, it takes effort to see the world as it is really is.&amp;nbsp; One of the very reasons to practice Philosophy is to understand the true nature of things and avoid the "&lt;a href="http://www.philosophyprofessor.com/philosophies/naive-realism.php"&gt;naive realism&lt;/a&gt;" of "&lt;a href="http://existentialprogramming.blogspot.com/2006/04/there-is-no-such-thing-as-common-sense.html"&gt;common sense&lt;/a&gt;". Guides to this understanding are found in the branches of &lt;a href="http://en.wikipedia.org/wiki/Metaphysics"&gt;Metaphysics&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Ontology"&gt;Ontology&lt;/a&gt; which explore how to understand and model the world respectively.&amp;nbsp; One of the tactics of Epistemology to aid in this effort is the doctrine of &lt;a href="http://en.wikipedia.org/wiki/Verificationism"&gt;Verificationism&lt;/a&gt; which says that a statement has no meaning if there is not a way to verify its truth. &lt;br /&gt;&lt;br /&gt;&lt;div style="color: #660000; text-align: justify;"&gt;For programmers, the big epiphany here should be that their business database is really just one particular &lt;b&gt;&lt;i&gt;representation&lt;/i&gt;&lt;/b&gt; of reality, not reality itself.&amp;nbsp; &lt;b style="color: red;"&gt;Reality is the System of Record&lt;/b&gt;&lt;span style="color: red;"&gt;.&lt;/span&gt; A developer should be humble, and realize that it is difficult to &lt;a href="http://existentialprogramming.blogspot.com/2010/04/silver-bullet-model-world-not-app.html"&gt;accurately model the world&lt;/a&gt; such that it integrates with the data models of other systems.&amp;nbsp; They also should be skeptical that their actual data is both accurate and up-to-date, developing ongoing mechanisms to actively verify each.&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;b&gt;Syncing the Systems of Record&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;When any system keeps copies of data for which it is not the system of record, that system is actually just a &lt;a href="http://en.wikipedia.org/wiki/Cache"&gt;cached copy&lt;/a&gt; of that external data.&amp;nbsp; And like any cache, it has the responsibility to keep track of whether its copy is "&lt;a href="http://stackoverflow.com/questions/1563319/what-is-stale-state"&gt;stale&lt;/a&gt;", and to implement mechanisms to insure "&lt;a href="http://en.wikipedia.org/wiki/Cache_coherency"&gt;cache coherence&lt;/a&gt;". Once one realizes that reality is the system of record, it becomes clear that it is not enough to keep databases in sync with each other; they ALL must chase after the ever-changing state of the world. &lt;br /&gt;&lt;br /&gt;In a large organization, each database is just one of many competing representations. In the same way that different people have different mental representations of their shared reality, different databases will each have their own slightly (or largely) incompatible data models, and sets of data values, for the same domain entities.&amp;nbsp; A side-effect of this is that many systems keep copies of external data that they've transformed in some way for their own use.&amp;nbsp; When systems don't realize that their SOR data represents the same real-world entities as other SORs do (e.g. patient DB versus employee DB), the eyesight of the entire enterprise goes out of focus as each data-set drifts apart.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CASE STUDY: ChoicePoint&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ChoicePoint was an independent company prior to being bought out by Reed Elsevier in 2008.&amp;nbsp; It collected and combined data about businesses and individuals from a wide variety of sources, selling access to both private and public (i.e. government) clients.&amp;nbsp; While consulting there, I saw first hand how data was effectively only verified if someone phoned in to complain about inaccuracies. I also was informed by management that no access control mechanisms were to be included in the design of a new system, despite Congress exploring adding requirements for such.&amp;nbsp; They said that ChoicePoint wanted to be able to protest at the cost of adding the controls after the fact in the hope that it would defeat the requirements in the first place. There have been a whole series of lawsuits and government actions against ChoicePoint for &lt;a href="http://en.wikipedia.org/wiki/ChoicePoint#Out-of-date_data"&gt;out-of-date data&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/ChoicePoint#Florida_voter_file_contract"&gt;inaccurate data&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/ChoicePoint#Major_security_breaches"&gt;selling data to unauthorized buyers&lt;/a&gt; which cost it so much money that it had to be sold.&lt;br /&gt;&lt;div style="font-family: Times, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;[1] &lt;span style="font-family: Times, &amp;quot;Times New Roman&amp;quot;, serif;"&gt;The System of Record in the Global Data Warehouse, Bill Inmon, Information Management Magazine, May 2003&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.information-management.com/issues/20030501/6645-1.html"&gt;http://www.information-management.com/issues/20030501/6645-1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[2] Representationalism, Encyclopædia Britannica&lt;br /&gt;&lt;a href="http://www.britannica.com/EBchecked/topic/498476/representationism"&gt;http://www.britannica.com/EBchecked/topic/498476/representationism&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span bps-owner="" class="owner " type="INSERT"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=019514581X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0764599445&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1557864772&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0534949657&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0415125987&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-301605293791079349?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/301605293791079349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/04/reality-is-system-of-record.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/301605293791079349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/301605293791079349'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/04/reality-is-system-of-record.html' title='Reality is the System of Record'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8204206163488621189</id><published>2008-03-20T13:59:00.020-04:00</published><updated>2011-03-19T15:29:13.262-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test driven'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>The Logical Positivists were Test-Infected(Is that a good thing?)</title><content type='html'>&lt;div style="font: 10px Helvetica; margin: 5px 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'times new roman';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;While reading &lt;a href="http://www.amazon.com/Looking-At-Philosophy-Unbearable-Heaviness/dp/0073407488?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Looking at Philosophy&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0073407488" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, I came across the section about Logical Positivists&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; whom I immediately recognized as "test infected"[&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;3]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;! The Logical Positivists (circa 1910s-1930s) promoted the idea British philosopher, A. J. Ayer, named "the principle of verification"&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[8][9]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; i.e. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;"the meaning of a proposition is its method of verification"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. In other words, a statement is meaningless if it can't be objectively tested. This is the same big idea of Test Driven Development&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[5]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; and more specifically Test Driven Specifications&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[6]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; (aka Test Driven Requirements&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[7]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;); namely, don't create a requirement (or interface definition) that is so vague, subjective, or contradictory that an automated computer program can't be written to test for compliance.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;In other words, all that verbage&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[12]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; that usually passes for a specification/requirements document is really just commentary to the REAL specification which is encoded in a comprehensive compliance test suite.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #6633ff;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; [BTW, this isn't just a software concept since IC chips have long had not only "testbed" circuit boards to test chips, but also ICE (in circuit emulators) to test circuit boards via simulated chips (which software copied with "mock objects").]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; The goal of both Logical Positivists and test-driven engineers is to weed out statements that are so poorly conceived and worded as to be effectively meaningless. The way to ensure this is to submit each statement to this rigorous method and rework any statements that come up short.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;What did Logical Positivists have to say about "how" to do tests?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;My whole excitement about finding philosophy movements that parallel aspects of software engineering is the notion that "top men"[11]  have already thought and argued long &amp;amp; hard about this stuff, and therefore we programmers can benefit from what they've already learned the hard way. So, what method did they advocate? Basically, it is the idea that all statements should be broken down into "protocol sentences" plus logical conclusions built on top of them. Protocol Sentences were to be simply observation reports (based on first hand direct sensory experience). This was ultimately unworkable for humans, but everything in a computer test is based on its first hand direct sensory experience &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(of electrical signals anyway)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Karl Popper, among the most influential &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;philosophers of science&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; of the 20th century, said that claims could only be considered "scientific" if they were &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;falsifiable&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, meaning that there should be some observation or experiment specified that, if it were verified, would prove the claim &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Logical Positivists claimed that unverifiable statements were LITERALLY meaningless, and therefore they dismissed entire disciplines like metaphysics, morality, and ethics. Other, more moderate philosophers held that untestable propositions were merely unproductive to work with.  Popper claimed that his demand for falsifiability was not meant as a theory of meaning, but rather as a methodological norm for the sciences.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Uh oh, Logical Positivism was considered a failure...Will Test Driven be too?!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I was all happy about a philosophical foundation to being test driven (since I was test infected years ago), until I got to the part where Lo&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;gical Positivism has been so devalued by other philosophers that one wrote "Logical positivism is one of the very few philosophical positions which can be easily shown to be dead wrong, and &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;that&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; is its principle claim to fame."&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;a href="http://www.amazon.com/Prolegomena-to-Philosophy/dp/1111734186?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;[10]&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1111734186" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #660000;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;OUCH!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;By saying that so-called metaphysical claims were meaningless, they unwittingly said that the very claim "&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;metaphysical claims are&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt; meaningless&lt;/i&gt;" was itself meaningless! I.E. there was no way to prove the statement that "only provable statements had meaning".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Lessons for the Test Driven Approach&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Luckily, Logical Positivism was only an extreme position in the spectrum of ideas under the &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Verificationism&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[4] &lt;span class="Apple-style-span" style="font-family: Helvetica;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;umbrella. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;I&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;n the conclusion of "&lt;a href="http://www.amazon.com/Verificationism-History-Prospects-Philosophical-Science/dp/0415125987?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Verificationism: Its History and Prospects&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0415125987" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[8]&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, some points were noted...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;one can't reduce every statement to be a logically equivalent statement about sensory experiences. (i.e. not every thought comes under the umbrella of "natural science")&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;one can say that "a statement lacks legitimacy or objectivity if there would be no evidence for or against it; if it is insulated from reason, where reason is linked to the possibility of public evidence for or against the statement from other, already established statements"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;one must admit that some more abstract statements are understandable even if not testable.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="color: #660000; font: 12px Helvetica; margin: 0px;"&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;So, the bottom line seems to be that the Test Driven approach is a good one if you...&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol&gt;&lt;li style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;concentrate on testing what &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;can&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; be tested,&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;create tests that would actively prove statements to be &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, and&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;know that you probably can't prove (with tests) that the test driven approach itself is correct.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[1] Looking at Philosophy, Donald Palmer, 4th Ed. 2005&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://www.amazon.com/Looking-At-Philosophy-Unbearable-Heaviness/dp/0072828951/ref=ed_oe_p"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.amazon.com/Looking-At-Philosophy-Unbearable-Heaviness/dp/0072828951/ref=ed_oe_p&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[2] ibid, pg 327&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[3] &lt;/span&gt;&lt;/span&gt;&lt;a href="http://c2.com/cgi/wiki?TestInfected"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://c2.com/cgi/wiki?TestInfected&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[4] &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Verifiability_theory_of_meaning"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://en.wikipedia.org/wiki/Verifiability_theory_of_meaning&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[5] &lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://en.wikipedia.org/wiki/Test-driven_development&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[6] Acceptance Tests and the Test Driven Specification&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://www.theweightlesseconomy.com/?p=12"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.theweightlesseconomy.com/?p=12&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[7] Test Driven Development or Test Driven Requirements?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://www.infoq.com/news/2007/11/tdd-or-tdr"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.infoq.com/news/2007/11/tdd-or-tdr&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[8] Verificationism: Its History and Prospects, C. J. Misak, 1995&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://books.google.com/books?id=e8hZ64yWG_EC"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://books.google.com/books?id=e8hZ64yWG_EC&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[9] Language, Truth and Logic, Alfred Jules Ayer, 1952&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://books.google.com/books?id=2CSkYN2KGjQC"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://books.google.com/books?id=2CSkYN2KGjQC&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[10] Prolegomena to Philosophy, Jon Wheatley, 1970&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://worldcat.org/wcpa/top3mset/83152"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://worldcat.org/wcpa/top3mset/83152&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[11] "top men", Raiders of the Lost Arc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://www.youtube.com/watch?v=yoy4_h7Pb3M"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.youtube.com/watch?v=yoy4_h7Pb3M&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px; min-height: 14px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[12] verbage vs verbiage&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;a href="http://foldoc.org/verbage"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://foldoc.org/verbage&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font: 12px Helvetica; margin: 0px;"&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B0014Z4OMU&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0415125987&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0141186046&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1932394850&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0073407488&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8204206163488621189?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8204206163488621189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/03/logical-positivists-were-test-infected.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8204206163488621189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8204206163488621189'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/03/logical-positivists-were-test-infected.html' title='The Logical Positivists were Test-Infected&lt;br/&gt;(Is that a good thing?)'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-4081400145187093475</id><published>2008-03-11T23:37:00.016-04:00</published><updated>2011-03-14T21:58:12.474-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Scott is Scott</title><content type='html'>&lt;div&gt;While reading &lt;a href="http://www.amazon.com/Looking-At-Philosophy-Unbearable-Heaviness/dp/0073407488?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969"&gt;Looking at Philosophy&lt;/a&gt;[1], I came across its discussion of Bertrand Russell's Theory of Descriptions[2]. It was a proposed solution to several problems that occur when logic propositions are made about an entity's existence or identity. One of the problems being solved was that a statement like "Scott is the author of the novel Waverley", if it is true, reduces to the statement "Scott is Scott". This is because in traditional logic, two terms that denote the same object can be interchanged without affecting the meaning or truth of a statement. But since "Scott is Scott" doesn't seem to be equivalent to "Scott is the author of Waverley", Russell proposed that a better way to state the latter was using the template:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;There is an entity C, such that the sentence "X is Y" is true, iff X=C.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This would produce the sentence "There is an entity C, such that "X wrote Waverley" is true, if and only if X=C; moreover, C is Scott". What Russell was getting at was that there was a problem with the traditional view that a &lt;em&gt;definite description&lt;/em&gt; could be exchanged with a &lt;em&gt;proper name&lt;/em&gt;. A phrase describing something (e.g. "the author of Waverley") means something different than a name (e.g. Scott) because while it is true that "George IV wanted to know if Scott was the author of Waverley", it is false that "George IV wanted to know if Scott was Scott". Russell's template solved this problem along with others like making claims about non-existent things. E.G. "The present king of France is bald" is problematic because there is no present king of France. If it were considered false then "The present king of France is not bald" would have to be considered true. This is avoided by saying instead: There is an entity C, such that the sentence 'X is French, bald, and kingly' is true iff X=C. THAT statement is false (because there is no entity that fits that description), and its opposite is true (i.e. There is NOT an entity...).&lt;br /&gt;&lt;br /&gt;[1] pg 322, "Looking At Philosophy: The Unbearable Heaviness of Philosophy Made Lighter", 2005, Palmer&lt;br /&gt;[2] Existence and Description, Bertrand Russell from "Metaphysics: an anthology" by Jaegwon Kim, Ernest Sosa - 1999&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=063120279X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&amp;nbsp;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0073407488&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&amp;nbsp;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0262650495&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-4081400145187093475?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/4081400145187093475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/03/scott-is-scott.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4081400145187093475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4081400145187093475'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/03/scott-is-scott.html' title='Scott is Scott'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-7074179510007749439</id><published>2008-02-07T20:44:00.007-05:00</published><updated>2010-03-12T16:09:12.044-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphism'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Is there anything left after all the roles are stripped away?</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-width: 0px; font: 100% Georgia,serif; margin: 0px; padding: 3px; text-align: left; width: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span style="font-size: 85%;"&gt;While reading &lt;a href="http://www.amazon.com/Looking-At-Philosophy-Unbearable-Heaviness/dp/0072828951"&gt;Looking at Philosophy&lt;/a&gt;[1], I came across&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/_JWiCz7S_rac/R6u2bVJQyPI/AAAAAAAAAB8/z5SG6cpSmo4/s1600-h/strippedRoles.jpg"&gt;its discussion of Kierkegaard&lt;/a&gt;&amp;nbsp;saying that there is some existential being that is left when all the "roles" of that being are stripped away. &amp;nbsp;With my advocation in&amp;nbsp;&lt;a href="http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html"&gt;Existential Programming&lt;/a&gt;&amp;nbsp;that "roles" be promoted over "is-a subclassing", it begs a deep question. If we have factored out all state and behavior from a class, moving them into various roles, when do we know that it is time to create a new instance of a "thing" to which roles will be attached?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font: 100% Georgia,serif; margin: 0px; padding: 3px; text-align: left; width: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5279697992121953154" src="http://2.bp.blogspot.com/_JWiCz7S_rac/SUVBWc3Fq4I/AAAAAAAAACk/8wc4Rfj2HyM/s320/strippedRoles2.jpg" style="cursor: pointer; height: 320px; width: 294px;" /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font: 100% Georgia,serif; margin: 0px; padding: 3px; text-align: left; width: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span style="font-size: 85%;"&gt;For example,&amp;nbsp;in a language like Javascript, one can create an empty object instance and dynamically add in attributes and methods later. &amp;nbsp;This capability can be used to implement "&lt;a href="http://en.wikipedia.org/wiki/Mixin"&gt;mixin&lt;/a&gt;" classes that each encapsulate the properties and behavior associated with some role.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font: 100% Georgia,serif; margin: 0px; padding: 3px; text-align: left; width: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span style="font-size: 85%;"&gt;While it is true that we can&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;program&lt;/span&gt;&amp;nbsp;the operations of instantiating an empty (i.e. essence-less) object and graft in the mixin classes for each role we expect to fulfill, the Philosophical question is, how could we know that a new blank instance is needed if we didn't have a particular "thing" in mind in the first place?&amp;nbsp;I.E. doesn't a thing still have to start as a particular "kind" of thing in order to know when it is time to create a new one?&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font: 100% Georgia,serif; margin: 0px; padding: 3px; text-align: left; width: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span style="font-size: 85%;"&gt;In still other words, is there an actual case of a "thing" that consists only of roles? Are we sure that one of those roles isn't a thing itself? &amp;nbsp;Does the technology give us the capability to do something that makes no ontological sense?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font: 100% Georgia,serif; margin: 0px; padding: 3px; text-align: left; width: auto;"&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;[1] "Looking At Philosophy: The Unbearable Heaviness of Philosophy Made Lighter",2005, Palmer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=020169946X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0073407488&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Times;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-7074179510007749439?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/7074179510007749439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/02/is-there-anything-left-after-all-roles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7074179510007749439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7074179510007749439'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/02/is-there-anything-left-after-all-roles.html' title='Is there anything left after all the roles are stripped away?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JWiCz7S_rac/SUVBWc3Fq4I/AAAAAAAAACk/8wc4Rfj2HyM/s72-c/strippedRoles2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-4612757646701745420</id><published>2008-01-25T01:16:00.011-05:00</published><updated>2011-03-14T21:33:44.578-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Word Matters: Words Matter</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;In my &lt;/span&gt;&lt;/span&gt;&lt;a href="http://existentialprogramming.blogspot.com/2007/12/clark-kent-is-not-superman.html"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;earlier blog entries&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;, I noted the debate over whether words had meanings, or were only references to things. It was noted that while "rose" and "gulaab" work equally well for speakers of English and Urdu, "Superman" was not interchangeable with "Clark Kent". This was because Superman and Clark Kent both referenced different aspects of the same entity instead of both referencing the same entity as a whole.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;However, the actual words still didn't matter in that discussion. While Clark Kent was different than Superman, the actual word "Superman" didn't matter...it could have been "Clark Kent is different than Foo" (if everyone called the man of steel "Foo" instead of Superman).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;After reading &lt;a href="http://www.amazon.com/Salt-World-History-Mark-Kurlansky/dp/0142001619"&gt;&lt;/a&gt;&lt;a href="http://www.amazon.com/Salt-World-History-Mark-Kurlansky/dp/0142001619?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Salt: A World History&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0142001619" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0142001619" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;[1], I've decided that words DO have their own meaning because of all the connotations, and rich web of connections with history, culture, and language, that go along with each.  The book is chock full of nuggets like the following (paraphrased):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, fantasy; font-size: 12px;"&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;The first of the Roman roads, the &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;Via Salaria&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt; (i.e. Salt Road), was built to bring salt not only to Rome but across Italy. It was important because at times the Roman soldiers were paid in salt which was the origin of the word &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;salary&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt; and the expression "worth his salt" and "earning his salt".  The latin word for salt (&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;sal&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;) became the French word for pay (&lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;solde&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;) and that was the origin of the word &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;soldier&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="color: #000099;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, -webkit-fantasy; font-size: 100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;The book makes it obvious that the word &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Salt&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt; couldn't really be much different given its linguistic lineage. Words DO matter because each has a whole slew of connections to other things, and a past history, because each is part of a naturally evolved language.  Words evolve from other words; they were not picked out of the air.  There is a family tree of related words just like there is a family tree of organisms with related DNA.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: 100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Knowing the rich set of interconnections of words, their origins, history, etc makes a word like &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Salary&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt; carry many connotations that "foo" would not.  A whole semantic network of related concepts lights up in my mind with the word Salary that would not have if the word for &lt;i&gt;salt&lt;/i&gt; was &lt;i&gt;foo&lt;/i&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;[1] &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;span class="Apple-style-span" style="font-family: georgia;"&gt;Salt: A World History, by Mark Kurlansky, 2002&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0142001619&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0195387074&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0198611129&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-4612757646701745420?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/4612757646701745420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2008/01/word-matters-words-matter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4612757646701745420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4612757646701745420'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2008/01/word-matters-words-matter.html' title='Word Matters: Words Matter'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-7748261861116498671</id><published>2007-12-25T14:38:00.015-05:00</published><updated>2011-05-17T11:41:01.927-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Shakespeare is (not) Shakespeare</title><content type='html'>&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: small;"&gt;In the early part of the book &lt;a href="http://www.amazon.com/Stuff-Thought-Language-Window-Nature/dp/0143114247?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Stuff of Thought&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0143114247" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; by Steven Pinker, the problem of what-a-name-names, is explored with the example of Shakespeare. Pinker distinguishes between Shakespeare: the historical figure, and Shakespeare: the author of numerous plays like Hamlet &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;attributed to Shakespeare&lt;/span&gt;&lt;span style="font-size: small;"&gt;.&lt;br /&gt;&lt;br /&gt;In my earlier post, it was somewhat easy to see that there were multiple aspects to Superman because each aspect already had its own name; Superman vs Clark Kent.  With  Shakespeare however, it is much more subtle because the different aspects have the same name: Shakespeare.  Additionally, we are not used to thinking that they are different aspects that can be independent of each other, any more than we think of Cher-the-person and Cher-the-singer as being independent things.  But, as discussed in the book, many people over the centuries have debated whether the author of Hamlet, et al was really Francis Bacon, Christopher Marlowe, Queen Elizabeth, etc.&lt;br /&gt;&lt;br /&gt;The interesting thing is that because Shakespeare is SO ingrained as the name of the playwright that even if Sir Francis were to be proven the author, the headline will be "Bacon is the REAL Shakespeare!" which is absurd because clearly, Shakespeare-the-historical-figure is the "real" Shakespeare.  Changing the human associated with the author-of-Hamlet concept will not change the concept's name; it will remain "Shakespeare's Hamlet (written by Bacon)" and not "Bacon's Hamlet".&lt;br /&gt;&lt;br /&gt;So, when assigning ID#(s) to putatively single entities, flexibility should be built in to allow ad-hoc collections of attributes of any entity to be grouped and named and referenced separately.  Otherwise, the system would not be able to represent the statement:  &lt;span style="color: #990000;"&gt;Shakespeare is not Shakespeare, Bacon is.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - March 30th, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;In addition to the attributes of one aspect not being identical to the aspects of another (e.g. clark vs super), different aspects of a person may hold different beliefs. As described in the 2010 book, "this sentence is false", there is the paradox of the person who, in their role as a physician, believes in high cigarette taxes, but in their role as a smoker, does not.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - May 17th, 2011&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The Shakespeare-the-author identity is STILL producing plays and sonnets as described in &lt;a href="http://www.studio360.org/2011/may/06/arthur-phillips-takes-bard/"&gt;this story and listener challenge in recent Studio 360 broadcasts&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B000EOU3MC&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0143114247&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0954538943&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1847062202&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-7748261861116498671?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/7748261861116498671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/12/shakespeare-is-not-shakespeare.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7748261861116498671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7748261861116498671'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/12/shakespeare-is-not-shakespeare.html' title='Shakespeare is (not) Shakespeare'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-5818549111397348078</id><published>2007-12-19T08:33:00.018-05:00</published><updated>2011-06-17T16:37:39.045-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rose'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Clark Kent is (not) Superman</title><content type='html'>&lt;span style="font-size: 85%;"&gt;&lt;span style="font-style: italic;"&gt;It delights me to find out that what I thought had been a particular nugget of wisdom, specific to building &lt;/span&gt;&lt;a href="http://www.identitysystems.com/freebook.htm" style="font-style: italic;"&gt;Identity matching&lt;/a&gt;&lt;span style="font-style: italic;"&gt; computer systems, actually has a deep principle at work. W&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-style: italic;"&gt;hile working on &lt;/span&gt;&lt;a href="http://www.choicepoint.com/products/identity_matching.html" style="font-style: italic;"&gt;one of these systems&lt;/a&gt;, &lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-style: italic;"&gt;I learned th&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-style: italic;"&gt;e strategy of NOT merging all variations of an individual identity's name/address/phone/etc into a single canonical version&lt;/span&gt;&lt;span style="font-style: italic;"&gt;. It turns out that the need to keep, and assign a unique key to, every variation of identity data (as opposed to only the "canonical" one) has deep roots in language itself...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While reading the &lt;a href="http://www.amazon.com/Intellectual-Devotional-Complete-Education-Confidently/dp/1594865132?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Intellectual Devotional&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1594865132" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; margin: 0px; padding-bottom: 0px !important; padding-left: 0px !important; padding-right: 0px !important; padding-top: 0px !important;" width="1" /&gt; &lt;span style="font-style: italic;"&gt;(which I highly recommend)&lt;/span&gt;, I came across &lt;a href="http://1.bp.blogspot.com/_JWiCz7S_rac/R21L42BeHUI/AAAAAAAAABs/9UtTIxkDG8c/s1600-h/clark.jpg"&gt;its page about "Philosophy of Language"&lt;/a&gt; and it had an immediate resonance with a project at my current client. The page describes the "&lt;a href="http://en.wikipedia.org/wiki/Philosophy_of_language#Reference"&gt;problem of reference&lt;/a&gt;" where ideas about what a name "means" have been debated and changed over time.&lt;br /&gt;&lt;br /&gt;One theory says that "names" don't have any meaning, in and of themselves, they merely refer to some &lt;/span&gt;&lt;span style="font-size: 85%; font-style: italic;"&gt;thing &lt;/span&gt;&lt;span style="font-size: 85%;"&gt;that has meaning. Hence, Shakespeare's quote &lt;span style="color: #990000;"&gt;"A rose by any other name would smell as sweet"&lt;/span&gt; summarizes the position that the &lt;/span&gt;&lt;span style="font-size: 85%; font-style: italic;"&gt;word &lt;/span&gt;&lt;span style="font-size: 85%;"&gt;"rose" is not meaningful, and could be exchanged with any other word that refers to the &lt;span style="font-style: italic;"&gt;thing &lt;/span&gt;"rose". That is why "gulaab" (the Urdu word for rose) can work just as well for speakers of Urdu.&lt;br /&gt;&lt;br /&gt;Another more modern theory though, says that names not only refer to some thing, they also carry the connotation of "in what sense" is the thing being referenced. The book illustrates the example of Superman and Clark Kent both being names for the same &lt;span style="font-style: italic;"&gt;thing &lt;/span&gt;(the being Superman), but they are not interchangeable. Clark Kent (mild mannered reporter) has a work address of the Daily Planet whereas Superman (superhero able to leap tall buildings) does not. It &lt;span style="font-weight: bold;"&gt;matters&lt;/span&gt; which name is used when talking about Superman.&lt;br /&gt;&lt;br /&gt;So, in the same way that Clark Kent and Superman both refer to different aspects of the same entity, and are thus not interchangeable, a computer system managing legal entity identity data can not translate name/address variations into a single entity ID# when those variations actually refer to different aspects of the entity. For example, if there is data that is specific to a particular store branch, that branch needs its own well-known ID# even though it is only a &lt;span style="font-style: italic;"&gt;portion &lt;/span&gt;of a single legal entity. Further, since legal entity names are not unique &lt;span style="font-style: italic;"&gt;(for example, I personally own two different corporations with the identical legal name)&lt;/span&gt;, the entire name/address/phone/etc combination needs managing rather than separate "alternate name" lists. It is also not sufficient to support alternate name/address records merely as search aids that still ultimately result in the ID# of the entity-as-a-whole. Otherwise one would loose track of the fact that we were talking about Clark Kent, not Superman.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1594865132&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B000EOU3MC&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=185326895X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0143114247&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-5818549111397348078?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/5818549111397348078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/12/clark-kent-is-not-superman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5818549111397348078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5818549111397348078'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/12/clark-kent-is-not-superman.html' title='Clark Kent is (not) Superman'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6589229010581369891</id><published>2007-12-02T15:31:00.000-05:00</published><updated>2010-03-12T15:58:19.973-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='views'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Cubist Programming?</title><content type='html'>&lt;span style="font-size:85%;"&gt;In &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.amazon.com/Stuff-Thought-Language-Window-Nature/dp/0670063274"&gt;The Stuff of Thought&lt;/a&gt; by Steven Pinker, the book talks about human minds being able to hold multiple viewpoints simultaneously about the same event, and that resonates with my ideas for &lt;a href="http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html"&gt;Existential Programming&lt;/a&gt;. It also reminded me of my thoughts that &lt;a href="http://en.wikipedia.org/wiki/Cubism"&gt;Cubism&lt;/a&gt; tried to illustrate the same idea.  Cubist paintings simultaneously attach different viewpoints of something to the same single "object" (as Existential Programming would have different viewpoints/models of the same "data entity" kept together in the same object).&lt;br /&gt;&lt;br /&gt;&lt;img alt="http://www.tate.org.uk/collection/T/T06/T06928_9.jpg" src="http://www.tate.org.uk/collection/T/T06/T06928_9.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;So, Existential Programming might well have been named Cubist Programming!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6589229010581369891?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6589229010581369891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/12/cubist-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6589229010581369891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6589229010581369891'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/12/cubist-programming.html' title='Cubist Programming?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1703868050591800606</id><published>2007-11-10T12:49:00.002-05:00</published><updated>2010-03-12T18:33:39.428-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Subjective, Objective, Relative, Existential</title><content type='html'>&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;In the imposing, but handy, &lt;/span&gt;&lt;span style="font-size: 85%;"&gt;Oxford Companion to Philosophy&lt;/span&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;[1], there are entries about &lt;/span&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;"objectivism and subjectivism"[2], and "relativism, epistemological"[3] that lead to the following observations:&lt;/span&gt;&lt;span style="font-size: 85%;"&gt; &lt;/span&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: trebuchet ms;"&gt;&lt;li&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Objectivity_%28philosophy%29#Objectivism"&gt;Objectivism&lt;/a&gt; says that some statements are objective, in that they are true independent of anyone's opinion. &lt;span style="color: #663366;"&gt;&lt;span style="color: #cc33cc;"&gt;e.g. This ball is red.&lt;/span&gt; &lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;Alternatively, values assigned to properties can be &lt;a href="http://en.wikipedia.org/wiki/Dependent_variable"&gt;dependent&lt;/a&gt; on other factors and be described by a &lt;a href="http://en.wikipedia.org/wiki/Function_%28mathematics%29"&gt;function&lt;/a&gt; rather than a simple value.&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="color: #663366;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #cc33cc; font-size: 85%;"&gt;e.g. The color of &lt;a href="http://en.wikipedia.org/wiki/Uluru#Description"&gt;Ayer's Rock&lt;/a&gt; is &lt;a href="http://www.shutterstock.com/cat.mhtml?search_cat=&amp;amp;searchterm=ayers+rock&amp;amp;search_group=photos&amp;amp;anyorall=all&amp;amp;color=&amp;amp;searchtermx=&amp;amp;orient=all&amp;amp;photographer_name=&amp;amp;sortby=popular&amp;amp;rows_per_page=10&amp;amp;thumb_size=small"&gt;F(time-of-day, weather)&lt;/a&gt;.&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="color: #663366;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Subjectivism"&gt;Subjectivism&lt;/a&gt; says that (potentially all) statements are subjective, in that they are dependent on the opinion of the person making the statement. &lt;span style="color: #cc33cc;"&gt;e.g. This cake is delicious.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Relativism"&gt;Relativism&lt;/a&gt; says that statements are always subjective even when &lt;a href="http://politicalhumor.about.com/b/2006/04/20/im-the-decider.htm"&gt;the decider&lt;/a&gt; thinks he's made an objective evaluation. I.E. no evaluations are objective because man is always biased by his particular cultural, historical, religious, etc viewpoint, and no particular viewpoint is "the right one". &lt;span style="color: #cc33cc;"&gt;e.g. This society is primitive.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 85%;"&gt;&lt;a href="http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html"&gt;Existential Programming philosophy&lt;/a&gt; says that even if something is supposedly &lt;a href="http://en.wikipedia.org/wiki/Scalar_%28computing%29"&gt;scalar&lt;/a&gt; &amp;amp; objective, and even if one does not subscribe to relativism (thus implying that there is no need to ascribe to values a particular data source), &lt;span style="font-weight: bold;"&gt;the reliability of any particular data source is never perfect, and thus one needs to model data as if relativism were true&lt;/span&gt;. I.E. keep track of "says who" for each "fact" and therefore be prepared to simultaneously handle/store multiple values for everything, tagging them with "says who", "said when", etc.  So, in effect, there are no scalar values, only functions with at least a data source as a parameter.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;[1] &lt;/span&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;&lt;a href="http://www.oxfordreference.com/pages/Subjects_and_titles__t134"&gt;Oxford Companion to Philosophy&lt;/a&gt;,   2nd Ed, 2005&lt;br /&gt;[2] &lt;span style="font-style: italic;"&gt;ibid&lt;/span&gt;, pg 667&lt;br /&gt;[3] &lt;span style="font-style: italic;"&gt;ibid&lt;/span&gt;, pg 800&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms; font-size: 85%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0199264791&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1703868050591800606?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1703868050591800606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/11/subjective-objective-relative.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1703868050591800606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1703868050591800606'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/11/subjective-objective-relative.html' title='Subjective, Objective, Relative, Existential'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-5433812111356509164</id><published>2007-11-04T08:27:00.000-05:00</published><updated>2010-03-12T15:58:19.974-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>"Strong" typing not so strong?</title><content type='html'>&lt;span style="font-size:85%;"&gt;I've been in debates about the wisdom of defining web services with "strongly" typed messages (with specific fields of "specific" types) versus more general messages with, say, fields containing XML content.  I have argued that so-called strong types like integer and string are no more "strong" than a segment of XML. This is because the string (and to a lesser extent integer, float, etc) data types are so broad that they can't really be called "strong".  Strings are almost always further interpreted by the software and people on both ends of a message.&lt;br /&gt;&lt;br /&gt;This notion is embodied by the testing technique known as &lt;a href="http://en.wikipedia.org/wiki/Equivalence_Partitioning"&gt;Equivalence Partitioning&lt;/a&gt;. [A good summary is in the article "&lt;a href="http://stpmag.com/issues/stp-2007-10.pdf"&gt;Make Child's Play of Equivalence Class Partitioning&lt;/a&gt;".] It says that there is more detailed structure to data than string and integer and to only test at that level is to miss many crucial test cases.  It defines subranges and such to guide what to test, in effect, defining more granular data types. Languages like Pascal and Ada had more refined data types like subranges but those ideas were lost when C-like languages (including C++ &amp;amp; Java) came into vogue.&lt;br /&gt;&lt;br /&gt;Existential Programming would change the way data types are defined to get away from simply defining a structure that is an aggregation of "primitive data types". It would let data types define a function that computes whether (or how closely) a putative value meets the requirements for that data type.  While one could put that logic in a "setter" method of a class, that doesn't work with direct assignments (via assignment operators) of values (at least in Java-like languages).&lt;br /&gt;&lt;br /&gt;To see where even subrange definitions like Pascal/Ada allowed (e.g. 3..27) are not sufficient, look at the logic required to validate the month/day/year values of a date as detailed in the ECP article. Only an algorithm can encode what is required for legal values, not simple declarations of string and integer properties.&lt;br /&gt;&lt;br /&gt;So, "strong" typing is a relative  term.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-5433812111356509164?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/5433812111356509164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/11/strong-typing-not-so-strong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5433812111356509164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5433812111356509164'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/11/strong-typing-not-so-strong.html' title='&quot;Strong&quot; typing not so strong?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-9007882695440196612</id><published>2007-10-21T20:59:00.003-04:00</published><updated>2010-03-12T15:58:19.975-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>atonal versus pantonal</title><content type='html'>&lt;span style="font-size: 85%;"&gt;While reading the &lt;a href="http://www.amazon.com/Intellectual-Devotional-Complete-Education-Confidently/dp/1594865132?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Intellectual Devotional&lt;/a&gt;[1], I came across &lt;a href="http://4.bp.blogspot.com/_JWiCz7S_rac/R5VUEmBeHVI/AAAAAAAAAB0/MIplebRgXQg/s1600-h/pantonal.jpg"&gt;its page about the composer Arnold Schoenberg&lt;/a&gt; that described how his new musical composition technique (12-tone serialism) was described as "atonal" but he preferred the term "pantonal". This resonated with my desire that &lt;a href="http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html"&gt;Existential Programming&lt;/a&gt; be recognized as multi-type programming rather than "type-less".&lt;br /&gt;&lt;br /&gt;The analogy here is between the key signature of a piece of music, and an ontology of classes used in a program.&lt;br /&gt;&lt;br /&gt;A key signature (e.g. C-major, d-minor) defines which notes are to be used, and the special relationships between different notes.  To be "tonal" is to follow the rules of a particular key signature. To be "atonal" is to NOT follow the rules of any key signature. To be "pantonal" is to simultaneously follow the rules of multiple key signatures.&lt;br /&gt;&lt;br /&gt;An ontology defines which types/classes are to be used, and the special relationships between different classes.  To be  "strongly-typed" is to follow the rules of a particular ontology.  To be "type-less" is to NOT follow the rules of any ontology. To be "multi-typed" (i.e. existential programming) is to simultaneously follow the rules of multiple ontologies.&lt;br /&gt;&lt;br /&gt;[1] "The Intellectual Devotional",2006, Kidder, Oppenheim&lt;br /&gt;&lt;a href="http://www.theintellectualdevotional.com/index.shtml"&gt;&lt;u&gt;http://www.theintellectualdevotional.com/index.shtml&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1594865132&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-9007882695440196612?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/9007882695440196612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/atonal-versus-pantonal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/9007882695440196612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/9007882695440196612'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/atonal-versus-pantonal.html' title='atonal versus pantonal'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3626351273187243936</id><published>2007-10-17T20:35:00.001-04:00</published><updated>2010-03-12T16:11:37.105-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosopher&apos;s toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>What is redundant?</title><content type='html'>&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;In the handy Philosopher's Toolkit book[1], there  is a section[2] explaining the difference between "analytic" statements and  "synthetic" statements, and in another section[3], "a priori" versus "a  posteriori".  They are both similar in that they are trying to distinguish  between what is known about X just from its definition versus things that would  have to be thought through or experiments done to discover them. E.G. "all  triangles have 3 sides" and "Joe, the bachelor, is unmarried" are obvious just  from the definition of triangle and bachelor.  Other statements like "water  boils at 212 degrees Fahrenheit" and "Joe, the bachelor, has red hair" are not  "entailed by" or "contained within" the definitions of water and  bachelor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;There are arguments by  philosophers, however, about what IS entailed by a concept or contained within a  definition.  Some would argue that the boiling point of water *is* contained  within the concept of water whether a particular person happens to know that or  not.  Similarly the statement "all triangles have 180 degrees as the sum of  their internal angles" is true independently of whether we know about it, (but a  lot of people *wouldn't* know that).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;So, in general, there will not be agreement from one ontology/model to  another about which statements (i.e. data/attributes/relationships) are  redundant. Should the "age" of an applicant for a job be stored because it was a  field in the application form? Or, should it always be calculated from the birth date  and the date of the application? Should a "short cut" relationship between 2  distantly related entities be explicitly supported by a model, or should it  always be "calculated" by traversing all the intermediate links through the &lt;a href="http://en.wikipedia.org/wiki/Six_degrees_of_separation"&gt;"six  degrees of separation"&lt;/a&gt;?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;Even though  E/R models will normalize data to an objective standard, different modelers will break  normalization for "performance reasons" on a subjective (and thus inconsistent) basis. Existential Programming counts this lack of agreement on "what is redundant" as yet another reason to embrace/support  multiple ontologies simultaneously.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;[1] &lt;u&gt;&lt;a href="http://www.amazon.com/Philosophers-Toolkit-Compendium-Philosophical-Concepts/dp/0631228748?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Philosopher's Toolkit&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=existenprogra-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0631228748" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;/u&gt;, Julian Baggini and Peter S. Fosl,  Blackwell Publishers, 2003, ISBN: 0631228748&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;[2] ibid, section 4.3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;[3] ibid, section 4.1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: sans-serif; font-size: 85%;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0631228748&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3626351273187243936?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3626351273187243936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/what-is-redundant.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3626351273187243936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3626351273187243936'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/what-is-redundant.html' title='What is redundant?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6187345672344338366</id><published>2007-10-16T20:01:00.001-04:00</published><updated>2010-03-12T18:33:39.617-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='philosopher&apos;s toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Relativism, Absolutism, and Existential Programming</title><content type='html'>&lt;span style=";font-family:sans-serif;font-size:85%;"&gt;In the handy Philosopher's Toolkit book&lt;span style="font-size:78%;"&gt;[1]&lt;/span&gt;, there  is a section&lt;span style="font-size:78%;"&gt;[2] &lt;/span&gt;explaining the difference between relative statements and  absolute statements (and similarly relativism and absolutism).  As a  prototypical example, it explains how before Einstein, the "time" an event  occurred was considered an absolute statement.  In other words, the whole  universe would know what it meant because time was the same everywhere (just  different time zones). However, Einstein revealed that time is  relative to the location and speed of the observer and can't be the same everywhere.  Plus, since there is no place and speed that could/should be  considered the "official" one, all "times" are equally valid.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"&gt;Because there are many aspects of reality  and opinion that are considered relative by some number of people, Existential  Programming counts this as yet another reason to embrace/support multiple  ontologies simultaneously.  Absolute vs Relative points of view are yet another  aspect of modeling the world that traditional &lt;a href="http://existentialprogramming.blogspot.com/2007/10/object-orientations-ontological.html"&gt;object-oriented and relational  database modeling make assumptions about&lt;/a&gt;.&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"&gt;[1] &lt;a href="http://books.google.com/books?id=E-cLWu0QNIoC&amp;amp;dq=fosl+baggini&amp;amp;printsec=frontcover&amp;amp;source=web&amp;amp;ots=4C07XdNWBk&amp;amp;sig=86V65qowKN1XCnxs_FPYjFMIzQ4"&gt;&lt;u&gt;The Philosopher's Toolkit&lt;/u&gt;&lt;/a&gt;, Julian Baggini and Peter S. Fosl,  Blackwell Publishers, 2003, ISBN: 0631228748&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"&gt;[2] ibid, section 4.2&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6187345672344338366?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6187345672344338366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/relativism-absolutism-and-existential.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6187345672344338366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6187345672344338366'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/relativism-absolutism-and-existential.html' title='Relativism, Absolutism, and Existential Programming'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6542671044948947396</id><published>2007-10-12T07:24:00.000-04:00</published><updated>2010-04-19T11:45:24.215-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movies'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='accidental/essential'/><title type='text'>A Scanner Darkly: Identification via Accidental Properties</title><content type='html'>&lt;span style="font-size:85%;"&gt;It is the case that while it is "essential" properties that (by definition) define something, people very often identify types and individuals via a collection of "accidental" properties.  For example, in a computer system, accidental (i.e. changeable) properties like name, address, phone number, etc are used to find/recognize/identify people even though they all can change thus producing the age-old problem of "&lt;a href="http://plato.stanford.edu/entries/identity-time/"&gt;identity over time&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Visually, people normally identify/recognize other people from their accidental attributes like face/hair/sex/etc.  These can all be altered and not change their DNA or soul but that's what people normally use.  If these change over time people use other attributes, or in the cliche science fiction scenarios where someone has been completely changed / possessed / transferred-essences-with-an-alien / etc, a shared set of secret shared knowledge is used. "Jim, it's really me, otherwise how would I know the name of your pet hamster on Rigel Seven?!" [Banks, Credit Cards, etc have recognized this and have started asking questions like "what's your favorite movie?" before letting you change your password.]&lt;br /&gt;&lt;br /&gt;But for visual only recognition, say, for tracking someone through a crowd via a security camera, you are dependent on those accidental attributes not changing in real time. That is the premise for the "camouflage" in the movie "&lt;a href="http://wip.warnerbros.com/ascannerdarkly/"&gt;A Scanner Darkly&lt;/a&gt;". There is a cloak that constantly changes the appearance of every piece of the face/clothes, and this is illustrated via the rotoscoping and animation used in the movie. This would confuse automated tracking software and you would get lost in a crowd.&lt;br /&gt;&lt;br /&gt;In thinking about this, though, I realized that people could still actually recognize the people in these cloaks BECAUSE WE DO IT WHILE WE ARE WATCHING THE MOVIE!  A *real* cloak would be much more effective if it didn't change *pieces* of faces, but rather change whole faces at a time.  It is easy to pick out the person in the funny changing cloak unless *everyone* is wearing one.  Even then, humans can still keep track of who is who (short of a big crowd) because we track the various individuals at a "thing" level.  I.E. I can see that there are some "things" in the room and when they move I can still tell who's who because despite their constantly changing "skin", they are still contiguous space-time blobs of matter (that walk a lot like people!).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6542671044948947396?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6542671044948947396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/scanner-darkly-identification-via.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6542671044948947396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6542671044948947396'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/10/scanner-darkly-identification-via.html' title='A Scanner Darkly: Identification via Accidental Properties'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8401549624799376581</id><published>2007-09-26T22:24:00.006-04:00</published><updated>2010-04-21T09:35:25.788-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Introduction to Existential Programming Blog</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;This first entry for "Existential Programming" is meant to act as an introduction to the topic and an explanation for the backdated entries to be added over time. Around May, 2006 I had a &lt;a href="http://existentialprogramming.blogspot.com/2006/06/original-epiphanies-of-existential.html"&gt;series of brain farts (ahem, epiphanies)&lt;/a&gt; about computer software engineering that led to a theory I decided should be called "Existential Programming". Because I have now collected about a year and half of unedited notebook entries, and I now have enough of an idea of what I mean by Existential Programming to write it up, but because I don't yet have the time to polish a Manifesto into a magazine article, much less an academic paper, I have decided to start this blog and back fill it with my notebook contents, as well as, putting future entries here. The goal is to plant my flag on the topic and its ideas now, even if I can't write "Existential Programming, the Book" yet. [BTW, see my &lt;a href="http://existentialprogramming.blogspot.com/2007/09/my-blog-disclaimers.html"&gt;std blog disclaimers&lt;/a&gt;.]&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;A meta-idea above Existential Programming itself, is the more general notion that there should be much more explicit cross fertilization between ideas from Philosophy (with a capital "P") and ideas from software engineering (as practiced in industry). I call this "&lt;a href="http://philosophicalprogramming.com/"&gt;&lt;b&gt;Philosophical Programming&lt;/b&gt;&lt;/a&gt;". Early on during my epiphanies, I had the intuition that Philosophy probably had something to say about my topic (even though I'd never taken a philosophy class). So, at age 50, I started reading Philosophy 101 books. It quickly became obvious that Philosophy has SO MUCH to say about data/class modeling topics that it is criminal how little explicit reference to it there is in the software practice literature. I distinguish between industry practice (and their books, blogs, magazines oriented towards tools and "best practices") versus academia. After I learned enough terminology to search for papers covering ideas similar to mine, I found that there is a whole subculture writing academic conference papers that don't really bleed over into industry conferences for things like Java or AJAX or SOA. So, my general &lt;a href="http://existentialprogramming.blogspot.com/2007/03/philosophers-project.html"&gt;"project"&lt;/a&gt; these days is to try to come up with practical application techniques based on otherwise esoteric topics.&lt;/span&gt;&lt;/blockquote&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: #993399;"&gt;What is "&lt;a href="http://existentialprogramming.com/"&gt;Existential Programming&lt;/a&gt;" and what are the central ideas associated with it?&lt;/span&gt; In a nutshell, it means to embrace the notion that &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Existence_precedes_essence" style="font-weight: bold;"&gt;"existence precedes essence"&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;I.E. develop data models, object models, programming frameworks, etc. without imposing a single E/R model, OO class hierarchy, ontology, etc. By using techniques where "objects" and "entities" exist independently of a single "strong type", they can integrate multiple "strongly typed" data models by letting objects simultaneously reflect all those models. This differs from weakly typed programming, or completely type-less programming, as can be found in scripting languages like &lt;/span&gt;&lt;span style="font-size: small;"&gt;JavaScript&lt;/span&gt;&lt;span style="font-size: small;"&gt;. Ironically, it takes a "type-less" foundation to really seriously do strong types in a "multi-cultural" world.  [And actually, JavaScript is not a bad platform to implement these ideas precisely because of its class-less orientation.]&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;The ZEN thought here is that until one can create a&amp;nbsp;type-less&amp;nbsp;object, one can not create an object which can be all types simultaneously.&lt;br /&gt;&lt;br /&gt;The ideas that flow from this general notion (or more correctly, caused me to refactor the general notion out of these specific ideas), fall into general categories like:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;mixins&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;data integration using semantic mapping&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;code integration of uncooperative APIs and Frameworks&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;promoting "roles" over "is-a subclassing"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;open classes and external methods&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;ontology mediation&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;object evolution and class/API versioning&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8401549624799376581?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8401549624799376581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8401549624799376581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8401549624799376581'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html' title='Introduction to Existential Programming Blog'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2210091065852957908</id><published>2007-09-26T22:19:00.011-04:00</published><updated>2011-03-19T14:18:16.176-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='disclaimer'/><title type='text'>My Blog Disclaimers</title><content type='html'>&lt;span style="font-size: small; font-weight: bold;"&gt;The following are my standard disclaimers that apply to this entire blog...&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size: small; font-weight: bold;"&gt;Disclaimer 1:&lt;/span&gt;&lt;span style="font-size: small;"&gt; my usual mode of operation is to "discover" something for myself and then later search the literature to discover that someone else, (say Plato) has already had that brain storm. Thus my intuition that &lt;a href="http://www.imdb.com/title/tt0075860/quotes"&gt;"this means something, this is important"&lt;/a&gt; only provokes a &lt;a href="http://en.wikipedia.org/wiki/Duh"&gt;"DUH"&lt;/a&gt; if you &lt;/span&gt;&lt;span style="font-size: small; font-style: italic;"&gt;already&lt;/span&gt;&lt;span style="font-size: small;"&gt; know that it was first written by a philosopher twenty-five hundred years ago, or in a &lt;a href="http://folk.uio.no/trygver/1997/EgilAndersen/ConceptualModelingOO.pdf"&gt;Norwegian PhD thesis 10 years ago&lt;/a&gt;. Have patience with the wide eyed innocence which will eventually be made wise. These entries are a journey.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-size: small; font-weight: bold;"&gt;Disclaimer 2: &lt;/span&gt;&lt;span style="font-size: small;"&gt;in transcribing my notes a year and a half after the fact, I will sometimes use a philosophical term (e.g. essential/accidental) that I did not know at the time, in order to make it more clear what I was trying to say at that time.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-size: small; font-weight: bold;"&gt;Disclaimer 3:&lt;/span&gt;&lt;span style="font-size: small;"&gt; having just started teaching myself Philosophy 101, I know just enough to be dangerous. However, I have 30+ years of hands-on software engineering knowledge and experience, so I feel qualified to recognize gaps in today's state of the art (&lt;i&gt;as practiced in the real world, i.e. corporations, not academia&lt;/i&gt;) which can be filled with concepts developed in Philosophy.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - March 1st, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;I found a quote that echoes my disclaimer number one. From "Corporate Entity" by Jan Dejnožka: "It is usual to say that in studying philosophy of X, that we do best to acquire a pre-philosophical understanding of X before philosophizing about it. The more we know about X pre-philosophically, the better our philosophy of X will be." &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2210091065852957908?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2210091065852957908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/my-blog-disclaimers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2210091065852957908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2210091065852957908'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/my-blog-disclaimers.html' title='My Blog Disclaimers'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-7794713628464956338</id><published>2007-09-21T22:35:00.005-04:00</published><updated>2011-03-14T00:39:45.540-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='savant'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic network'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='case study'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>The Savant  Semantic Network Database</title><content type='html'>&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Back in 1983, when "&lt;a href="http://en.wikipedia.org/wiki/Expert_system"&gt;expert systems&lt;/a&gt;" where just starting to be all the rage, I had a contract (and was later hired as Chief Scientist) with a startup company that wanted to develop several microcomputer based "business" applications.  I realized that they were all essentially database applications with a forms-centric user interface. &lt;span style="font-style: italic;"&gt;[Mind you, this was back before there were real databases on PCs, and 80x24 color text was the state of the art for user interfaces.]&lt;/span&gt; I decided to build a general database and forms UI engine from scratch, and then quickly create the business apps (e.g. contacts, H/R data, calendar, memos, etc) using the engine. The engine eventually became a product in its own right and was dubbed &lt;span style="font-weight: bold;"&gt;Savant&lt;/span&gt;.  Mark Wozinac (brother of the famous &lt;a href="http://en.wikipedia.org/wiki/Woz"&gt;Woz&lt;/a&gt;) ran an &lt;a href="http://forums.dealmac.com/read.php?4,2674893#2674908"&gt;early computer store in Silicon Valley&lt;/a&gt; and was an early enthusiast for the technology.&lt;br /&gt;&lt;br /&gt;Having always been interested in AI and &lt;a href="http://en.wikipedia.org/wiki/Knowledge_representation"&gt;general knowledge representation&lt;/a&gt;, and with expert systems looking hot, I took a &lt;a href="http://en.wikipedia.org/wiki/Semantic_network"&gt;semantic networking&lt;/a&gt; approach. Savant had an interactive development mode where the user could move the cursor around the screen and dynamically define form fields, associating each field with an &lt;a href="http://en.wikipedia.org/wiki/Entity-Attribute-Value_model"&gt;EAV (entity/attribute/value)&lt;/a&gt; data triple (way before the term EAV was widespread).  The name of each form field was the "attribute", the value entered into the field was the "value", and the "entity" was the value of some other form field that the user specified. Savant let users create their app, complete with database, on the fly, with the form definitions stored in the same EAV database.  I had some novel techniques to optimize the data retrieval (using my written from scratch &lt;a href="http://en.wikipedia.org/wiki/B%2B_tree"&gt;B+&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/B%2A-tree"&gt;B*&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/B_tree"&gt;tree&lt;/a&gt; DB kernal).  All this was written in &lt;a href="http://en.wikipedia.org/wiki/Ucsd_pascal"&gt;UCSD Pascal&lt;/a&gt; (grandpa to Java) such that it ran on IBM PC, Radio Shack TRS80, Apple ][, and exotic 32-bit computers, and ran on &lt;a href="http://en.wikipedia.org/wiki/Floppies"&gt;FLOPPIES&lt;/a&gt;! Only shortly later, when &lt;a href="http://en.wikipedia.org/wiki/Corvus_%28company%29"&gt;Corvus hard drives&lt;/a&gt; for Apple ][ and the &lt;a href="http://en.wikipedia.org/wiki/IBM_XT"&gt;IBM XT&lt;/a&gt; came out, did it benefit from their size and speed. To UCSD's credit, I didn't really have to change any code.&lt;br /&gt;&lt;br /&gt;One of my inspirations was to make a more intuitive approach for non-technical users than was required by a popular database of the day, &lt;a href="http://www.computerhistory.org/corphist/view.php?s=select&amp;amp;cid=23"&gt;pfs:File&lt;/a&gt;. &lt;a href="http://www.dans20thcenturyabandonware.com/d2ca-ssg-dos.html"&gt;It&lt;/a&gt; also let users create form screens and save the data from each screen into its own "table".  I thought that it was too complicated to know which screen each bit of data you wanted was on, plus, you couldn't share data between screens!  My goal was to have all data available from all screens/forms without having to know about tables and schemas.  One would just design forms and the data would magically go to the right place.&lt;br /&gt;&lt;br /&gt;T&lt;/span&gt;&lt;span style="font-size: small;"&gt;he other day, &lt;/span&gt;&lt;span style="font-size: small;"&gt;I stumbled across, &lt;a href="http://www.mindmodel.com/"&gt;MindModel&lt;/a&gt;, a product that looks very similar to Savant (except its written for the new-fangled &lt;span style="font-style: italic;"&gt;graphic &lt;/span&gt;user interface :-) It also looks like it may have the same fatal flaw that my system had.  Namely, Savant didn't (because I didn't) understand that the value of a "name" attribute of an entity is not the same thing as the entity itself (nor is it a key). E.G. (JoeSmith,phone#,123-456-7890) does not represent the same information as (key123,name,JoeSmith) plus (key123,phone#,123-456-7890).  So, if you change JoeSmith to JoeBlow, you either lose the association with other attributes tied to JoeSmith, or you must remap them all. So, Savant changed all the JoeSmith references to JoeBlow in all triples, but then what to do about the phone number changing? If you change all 123-456-7890 references to 321-654-9999, you have not only changed JoeSmith's phone number but anyone else who shared that number. In other words, it didn't really understand the concepts of entity and attribute.&lt;br /&gt;&lt;br /&gt;I see the same fuzzy understanding of entities and attributes in many articles about the Semantic Web and how easy it is to encode data such that any lay person can do it intuitively. They show the same &lt;/span&gt;&lt;span style="font-size: small;"&gt;(JoeSmith,phone#,123-456-7890) flavor examples. We all need more basic metaphysics and ontology training in grade school!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - April 21st, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;How funny...I just stumbled upon an old blog post where someone had stumbled upon MindModel, and in their post they used the term "existential programming".&lt;br /&gt;&lt;a href="http://caet.blogspot.com/2004/12/mindmodel-fascinating-easy-to-use-true.html"&gt;http://caet.blogspot.com/2004/12/mindmodel-fascinating-easy-to-use-true.html&lt;/a&gt;&lt;br /&gt;with follow-up post&lt;br /&gt;&lt;a href="http://caet.blogspot.com/2004/12/more-on-mindmodel.html"&gt;http://caet.blogspot.com/2004/12/more-on-mindmodel.html&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-7794713628464956338?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/7794713628464956338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/savant-semantic-network-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7794713628464956338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/7794713628464956338'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/savant-semantic-network-database.html' title='The Savant  Semantic Network Database'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1029679237102081271</id><published>2007-09-09T16:23:00.106-04:00</published><updated>2011-03-14T00:45:30.060-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='quantum'/><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Quantum Math for Fuzzy Ontologies</title><content type='html'>In my earlier post "&lt;a href="http://existentialprogramming.blogspot.com/2007/07/existential-programming-as-quantum.html"&gt;Existential Programming as Quantum States&lt;/a&gt;", I mused that objects that were simultaneously carrying properties from multiple ontologies (i.e. multiple class hierarchies or data models), were like Quantum States in Quantum Physics.&amp;nbsp; This led me later to wonder what math had been developed to work with quantum states...i.e. is there some sort of quantum algebra that might be applicable to Existential Programming? It is needed because&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/span&gt;, in Existential Programming, a property of an object might carry multiple conflicting values simultaneously, each with varying degrees of certainty or confidence or error margins.&lt;br /&gt;&lt;br /&gt;I found Wikipedia page on &lt;a href="http://en.wikipedia.org/wiki/Quantum_indeterminacy"&gt;Quantum-indeterminacy&lt;/a&gt; which looks applicable.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Quantum indeterminacy can be quantitatively characterized by a probability distribution on the set of outcomes of measurements of an observable. The distribution is uniquely determined by the system state, and moreover quantum mechanics provides a recipe for calculating this probability distribution.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Indeterminacy in measurement was not an innovation of quantum mechanics, since it had been established early on by experimentalists that errors in measurement may lead to indeterminate outcomes. However, by the later half of the eighteenth century, measurement errors were well understood and it was known that they could either be reduced by better equipment or accounted for by statistical error models. In quantum mechanics, however, indeterminacy is of a much more fundamental nature, having nothing to do with errors or disturbance.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;AHA! It dawns on me that going beyond the mere fuzzy logic idea of values having a probability or certainty factor, Existential Programming could have a fuzziness value for the property as a whole...as in "it is not certain that this property even applies to this object"...and even further it could mean "it is not certain that this property even applies to the entire Class".&amp;nbsp; &lt;b&gt;&lt;span style="color: #660000;"&gt;A FUZZY ONTOLOGY: method of associating attributes/relationships with entities where each entity is not conclusively known. The value of a property may be certain (i.e. not vague or probabilistic), but whether that property belongs to this object is fuzzy.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Why would you want that ability?&amp;nbsp; How about data mining web pages where several people's names and a single birth-date (or phone number, address, etc) are found.&amp;nbsp; Even though it isn't known which person's name is associated with the birthday, one could associate the birth-date with each person with some fractional probability.&amp;nbsp; With enough &lt;i&gt;out of focus wisps of data&lt;/i&gt; like this, from many web pages, the confidence factor of the right birthdate with the right person would rise to the top of the list of all possible dates (analogous to the way that very long range telescopes must accumulate lots of individual, seemingly random, photons to build up a picture of the stars/galaxies being imaged).&amp;nbsp; The fractional probability assigned could be calculated with heuristics like "lexical-distance-between-age-and-name is proportional to the probability assigned". This could make the "value" of a scalar property (like birth-date), in reality, the summarization of a complete histogram of values-by-source-web-pages.&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;th&gt;POSTSCRIPT - May 21st, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Came up with another AHA this AM that I later found in a French university's academic journal. I had the bright idea of "fuzzy frames" and sure enough later found "A theory of Fuzzy Frames" here...&lt;br /&gt;&lt;a href="http://www.listic.univ-savoie.org/modules.php?name=Busefal&amp;amp;func=AfficherVolume&amp;amp;no_volume=31"&gt;http://www.listic.univ-savoie.org/modules.php?name=Busefal&amp;amp;func=AfficherVolume&amp;amp;no_volume=31&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am not sure it is exactly the same since I was thinking of applying neural net type "learning" (of the sort used to recognize handwriting) on semantic network relations. The inspiration was the problem of how to handle all the variations on a "restaurant scenario" frame (see &lt;a href="http://www.amazon.com/dp/0898591384?tag=existenprogra-20%20"&gt;original Schank book&lt;/a&gt;).&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0226311341&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0898591384&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1029679237102081271?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1029679237102081271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/quantum-math-for-fuzzy-ontologies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1029679237102081271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1029679237102081271'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/09/quantum-math-for-fuzzy-ontologies.html' title='Quantum Math for Fuzzy Ontologies'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1481865420479701347</id><published>2007-08-31T14:35:00.090-04:00</published><updated>2010-06-09T15:38:04.371-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test driven'/><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Fuzzy Unit Testing, Performance Unit Testing</title><content type='html'>In reading Philosophy 101, about Truth with a capital "T", and the non-traditional logics that use new notions of truth, we of course arrive at Fuzzy Logic with its departure from simple binary true/false values, and embrace of an arbitrarily wide range of values in between.&lt;br /&gt;&lt;br /&gt;Contemplating this gave me a small AHA moment: Unit Testing is an area where there is an implicit assumption that "Test Passes" has either a true or false value.&amp;nbsp; How about Fuzzy Unit Testing where there is some numeric value in the 0...1 range which reports a degree of pass/fail-ness? i.e. a &lt;i&gt;percentage pass/fail&lt;/i&gt; for each test.&amp;nbsp; For example, testing algorithms that predict something could be given a percentage pass/fail based on how well the prediction matched the actual value.&amp;nbsp; Stock market predictions, bank customer credit default prediction, etc come to mind.&amp;nbsp; This sort of testing of predictions about future defaults (&lt;i&gt;i.e. credit grades&lt;/i&gt;) is just the sort of thing that the BASEL II accords are forcing banks to start doing.&lt;br /&gt;&lt;br /&gt;Another great idea (&lt;i&gt;if I do say so myself&lt;/i&gt;) that I had a few years ago was the notion that there is extra meta-data that could/should be gathered as a part of running unit test suites; specifically, the performance characteristics of each test run.&amp;nbsp; &lt;b&gt;The fact that a test still passes, but is 10 times slower than the previous test run, is a very important piece of information that we don't usually get.&lt;/b&gt;&amp;nbsp; Archiving and reporting on this meta-data about each test run can give very interesting metrics on how the code changes are improving/degrading performance on various application features/behavior over time.&amp;nbsp; I can now see that this comparative performance data would be a form of fuzzy testing.&lt;br /&gt;&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1584885262&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B00186Z0L4&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1932394850&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1933988274&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0974514012&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1481865420479701347?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1481865420479701347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/fuzzy-unit-testing-performance-unit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1481865420479701347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1481865420479701347'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/fuzzy-unit-testing-performance-unit.html' title='Fuzzy Unit Testing, Performance Unit Testing'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-3472717845299087235</id><published>2007-08-26T19:09:00.003-04:00</published><updated>2010-03-12T15:58:19.978-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='origins'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Birth of a Blog</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;On this date I had the blinding realization that after a year and a half of thinking and note scribbling about this thing I was calling Existential Programming, I should grab the domain name and start a blog to plant my flag on the name and topic.  I had the thought while recording notes on the original ideas that led to Existential Programming...&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;Recalling the inspiration for Existential Programming, the concept&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;While working on a Javascript project in early 2006, I became aware of the differences between Java class-based objects and Javascript's prototype-based objects. I wanted to work with Java-like classes and researched existing attempts to implement them and what it would take to "do it right".  In the course of comparing different attempts, I came across different definitions of "class".&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;Once I realized the ability to dynamically add and delete attributes of an object in Javascript, I realized that one could nicely map them onto semantic-network relations/tuples. I already knew about EAV database schemas.  I had the epiphany that O/O and E/R and S/N modeling could all be made isomorphic once one had class-less objects as Javascript had.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;Once I realized that classes were isomorphic to semantic networks, and having already known that computer ontologies were anything but universally agreed upon, I had the epiphany that OO class structures were too restrictive because they assume a single ontology.  On the other hand, I did not want to give up the benefits of strong typing.  So I had the idea that objects should be able to simultaneously house the attributes of multiple ontologies, and with class-less objects I could see how to implement the whole system.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;Together, these trains of thought somehow gave rise to the intuition "I'll bet people have already thought about this...like maybe in Philosophy?". I quickly discovered it had everything to do with this topic. And once I found out what Existentialism was, it became clear that class-less objects have the same deep idea.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: verdana;"&gt;So, I coined the term "Existential Programming" to refer to the whole "project" of exploiting type-less objects to implement multiple strong types simultaneously.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-3472717845299087235?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/3472717845299087235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/birth-of-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3472717845299087235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/3472717845299087235'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/birth-of-blog.html' title='Birth of a Blog'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1887571250501083175</id><published>2007-08-26T17:54:00.019-04:00</published><updated>2011-04-07T17:10:06.715-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>Which came first - the Chip or the Socket?</title><content type='html'>Q: Which came first, the integrated circuit chip, or the socket into which it fits?&lt;br /&gt;&lt;br /&gt;A: The socket came first (at least conceptually). Before a chip is designed, there is a framework defined into which the chip will integrate: Digital vs analog signals, voltage levels for digital one and digital zero, power requirements, clock rates, transistor type, etc. This usually results in the design of whole families of chips that are intended to work together.&lt;br /&gt;&lt;br /&gt;SO, no chip is created in isolation, just as no software component should be. Otherwise, the result would be that there is no common framework with which other components can be attached (Super-glue, play-doh, and duct tape not withstanding).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, as I wrote back in 2000, &lt;a href="http://existentialprogramming.blogspot.com/2010/05/hole-for-every-component-and-every.html"&gt;there is no such thing as a component&lt;/a&gt; (in the same way that there is no such thing as a donut hole).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1887571250501083175?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1887571250501083175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/which-came-first-chip-or-socket.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1887571250501083175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1887571250501083175'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/which-came-first-chip-or-socket.html' title='Which came first - the Chip or the Socket?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-4986225112653354207</id><published>2007-08-12T17:31:00.000-04:00</published><updated>2010-03-12T15:58:19.979-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Killer App of Existential Programming?</title><content type='html'>&lt;span style="font-size:85%;"&gt;Ok, with all this theorizing about "existential programming", what the heck is it good for?&lt;br /&gt;I.E. What is the &lt;a href="http://en.wikipedia.org/wiki/Killer_application"&gt;killer app&lt;/a&gt; of existential programming?&lt;br /&gt;&lt;br /&gt;The answer could be "integration of uncooperating systems"...&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Data Integration&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Data Model (i.e. schema) Integration&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Application Integration&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Frameworks API Integration&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;By developing an information (&lt;a href="http://www.cs.inf.ethz.ch/%7Ewirth/books/AlgorithmE0/"&gt;code/data&lt;/a&gt;) environment where different paradigms can coexist without even being aware of each other, uncooperating systems can be mediated between that otherwise could not.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-4986225112653354207?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/4986225112653354207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/killer-app-of-existential-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4986225112653354207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/4986225112653354207'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/08/killer-app-of-existential-programming.html' title='Killer App of Existential Programming?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-5994268439895959685</id><published>2007-07-28T17:55:00.002-04:00</published><updated>2011-03-14T00:42:49.600-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='parts'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Things vs Stuff, Individuals vs Commodities</title><content type='html'>&lt;span style="font-size: small;"&gt;In thinking about "what is a thing?", I had this &lt;a href="http://en.wiktionary.org/wiki/brain_fart#Noun"&gt;brain fart&lt;/a&gt; about the dividing line between things that have an individual identity and "commodities" or "substances". That dividing line is between those things that are chosen or manipulated by "amounts" rather than "names". I.E. When you ask for X number of things &lt;span style="font-style: italic;"&gt;(a dozen donuts)&lt;/span&gt;, or Y ounces of stuff &lt;span style="font-style: italic;"&gt;(an ounce of prevention ;-)&lt;/span&gt; (i.e. &lt;a href="http://en.wikipedia.org/wiki/Mass_noun"&gt;mass nouns&lt;/a&gt;), instead of asking for "that one"  (i.e. using an &lt;a href="http://plato.stanford.edu/entries/indexicals/"&gt;indexical&lt;/a&gt;), you are referring to things that may actually exist as separate things (e.g. pork bellies, batteries, molecules) but they are so similar that we quit referring to individual ones as individuals.  EVEN WHEN picking out a single screw from the basket of screws at the hardware store, it doesn't really have an individual identity! We picked &lt;span style="font-style: italic;"&gt;"one"&lt;/span&gt;, not &lt;span style="font-style: italic;"&gt;"that one"&lt;/span&gt;, much less &lt;span style="font-style: italic;"&gt;"Joe"&lt;/span&gt;.&lt;br /&gt;In fact, to give "names" back to things that have become commodities, we resort to assigning serial numbers to make them each unique.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[Ed. Note - 11/21/07: as per &lt;/span&gt;&lt;a href="http://existentialprogramming.blogspot.com/2007/09/my-blog-disclaimers.html" style="font-style: italic;"&gt;my disclaimers&lt;/a&gt;&lt;span style="font-style: italic;"&gt;, once I start looking for my epiphanies on the net, I find them.  E.G. in this case, see "&lt;/span&gt;&lt;a href="http://www.sciencedirect.com/science?_ob=ArticleURL&amp;amp;_udi=B6T24-44XTP7W-1&amp;amp;_user=10&amp;amp;_coverDate=03%2F31%2F2002&amp;amp;_rdoc=1&amp;amp;_fmt=&amp;amp;_orig=search&amp;amp;_sort=d&amp;amp;view=c&amp;amp;_acct=C000050221&amp;amp;_version=1&amp;amp;_urlVersion=0&amp;amp;_userid=10&amp;amp;md5=9f1a52eff24d88798533b44d6e011755" style="font-style: italic;"&gt;Conceiving of entities as objects and as stuff&lt;/a&gt;&lt;span style="font-style: italic;"&gt;". Congrats Bruce, you've just discovered that there are &lt;a href="http://en.wikipedia.org/wiki/Mass_noun#Relating_grammatical_number_to_physical_discreteness"&gt;mass nouns vs count nouns&lt;/a&gt;.]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;aside&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - &gt;March 11th, 2010&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;It turns out that our notion of stuff versus things is so intuitive that they are already being processed by different brain parts during visual processing, long before making any "conscious" decision.&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://www.journalofvision.org/4/8/510/"&gt;http://www.journalofvision.org/4/8/510/&lt;/a&gt;&lt;br /&gt;see Cant, J. S., Valyear, K. F., &amp;amp; Goodale, M. A. .. (2004). 'Stuff' versus 'things': Neural processing of the material properties and geometric form of objects in human visual pathways [Abstract].&lt;br /&gt;Journal of Vision, 4(8):510, 510a, &lt;a href="http://journalofvision.org/4/8/510/"&gt;http://journalofvision.org/4/8/510/&lt;/a&gt;, doi:10.1167/4.8.510. &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-5994268439895959685?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/5994268439895959685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/07/things-vs-stuff-individuals-vs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5994268439895959685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/5994268439895959685'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/07/things-vs-stuff-individuals-vs.html' title='Things vs Stuff, Individuals vs Commodities'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8122668556664321113</id><published>2007-06-11T21:05:00.001-04:00</published><updated>2010-09-28T14:28:28.935-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quantum'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphism'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Different orders of Polymorphism</title><content type='html'>&lt;span style="font-size:85%;"&gt;When most computer science texts refer to &lt;a href="http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29"&gt;polymorphism&lt;/a&gt; (in the context of object oriented programming) they are referring to either refining the implementation of a method via subclasses &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;overriding &lt;/span&gt;&lt;span style="font-size:85%;"&gt;that method, OR, by defining more than one behavior (method) with the same name.  The former case (hopefully) preserves the semantics of the method name, the latter &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;overloads &lt;/span&gt;&lt;span style="font-size:85%;"&gt;multiple semantics on the same name. In either case, it is only the method that is &lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;multifaceted&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, not the entire object much less the class hierarchy.&lt;br /&gt;&lt;br /&gt;With Existential Programming, a different order of polymorphism (i.e. "a single entity can take on multiple forms") is at work.  Here a single entity in its entirety can take on multiple forms.  Heck, it can take on multiple ontologies (aka class hierarchies).  This means either supporting multiple (albeit, fundamentally similar) views/conceptions of an entity, OR, trying to knit together very different models where the object instance is in some sort of oscillating  &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Schrodingers_cat"&gt;Schrodinger's Cat&lt;/a&gt;-like state (except that we can look at it and not affect its state :-).&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Schrodingers_cat"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8122668556664321113?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8122668556664321113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/06/different-orders-of-polymorphism.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8122668556664321113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8122668556664321113'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/06/different-orders-of-polymorphism.html' title='Different orders of Polymorphism'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8796040387585143805</id><published>2007-05-14T13:59:00.004-04:00</published><updated>2009-07-27T14:40:22.566-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knowledge'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic network'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Rationalism of the Semantic Web a Flaw?</title><content type='html'>In thinking about how knowledge is represented in the real world, it occurs that, in addition to the traditional rational representation via human and formal languages, there are at least two other biggies:  DNA and neural nets.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Many, if not all, of the things we learn are represented in our brains as complex networks of (mathematical) functions that are simulated in computers via the technique of &lt;a href="http://en.wikipedia.org/wiki/Neural_network"&gt;neural networks&lt;/a&gt;. And, if you have ever looked at the data associated with a neural net that has been trained to, say, recognize a handwritten letter "A", you've seen how there isn't any way to put that &lt;i&gt;knowledge&lt;/i&gt; into words.  In fact, it is not clear by simply looking at a net's matrix of fuzzy weights that it &lt;i&gt;knows&lt;/i&gt; anything at all, much less &lt;i&gt;what&lt;/i&gt; it knows!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a similar vein, DNA obviously encodes tremendous amounts of knowledge, like how to make a beating heart, that are also very hard to translate into explicit "facts".  In fact, DNA, like self-modifying source code in Lisp, is hard to verbalize because what it "does" can be very far removed from what is "says".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now because the whole theory and strategy of representing knowledge via "facts", whether in a traditional database, or a semantic network, assumes that everything can be put into a fact format, there are huge amounts of knowledge in the world that can't be used.  Yes, one can simplistically use a &lt;a href="http://en.wikipedia.org/wiki/Binary_large_object"&gt;BLOB&lt;/a&gt; to stuff anything reducible to a number string into a database tuple, but that doesn't really put the knowledge into a form that can be "reasoned" about via inferencing rules.  And it is that sort of inferencing that is the rationale behind the &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;Semantic Web&lt;/a&gt; and why we should bother to create it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Is this a (fatal) flaw in the foundation of the Semantic Web?  Many philosophers have claimed it is a fatal flaw in &lt;a href="http://en.wikipedia.org/wiki/Rationalism"&gt;Rationalism&lt;/a&gt; which is the philosophical equivalent to semantic networks. &lt;a href="http://en.wikipedia.org/wiki/Phenomenology_(philosophy)"&gt;Phenomenologists&lt;/a&gt; insisted that many other flavors of knowledge had to be handled beyond the ones covered in rationalism and logic. How will the semantic web handle these?  Is it even possible philosophically?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8796040387585143805?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8796040387585143805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/05/rationalism-of-semantic-web-flaw.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8796040387585143805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8796040387585143805'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/05/rationalism-of-semantic-web-flaw.html' title='Rationalism of the Semantic Web a Flaw?'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-277505318953689654</id><published>2007-05-14T10:36:00.004-04:00</published><updated>2010-03-10T11:50:03.357-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='identity'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='equals'/><title type='text'>== considered harmful</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JWiCz7S_rac/SZ1_5k12MfI/AAAAAAAAADA/Gie2VSs0P-w/s1600-h/dangerous+equals+operator.gif" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JWiCz7S_rac/SZ1_jbDhe0I/AAAAAAAAAC4/0KiJ-YTXd1o/s1600-h/dangerous+equals+operator.gif" style="text-decoration: none; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;Once one realizes that &lt;/span&gt;&lt;/a&gt;&lt;a href="http://existentialprogramming.blogspot.com/2007/04/dont-confuse-oop-objects-with-entities.html"&gt;objects aren't entities&lt;/a&gt;, and that they very often are &lt;a href="http://plato.stanford.edu/entries/mental-representation/"&gt;representations of real world things&lt;/a&gt;, one realizes that the "==" (equals) operator is dangerous!&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JWiCz7S_rac/SZ1_5k12MfI/AAAAAAAAADA/Gie2VSs0P-w/s1600-h/dangerous+equals+operator.gif" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); "&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/span&gt;&lt;img style="text-decoration: underline;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 148px; " src="http://4.bp.blogspot.com/_JWiCz7S_rac/SZ1_5k12MfI/AAAAAAAAADA/Gie2VSs0P-w/s400/dangerous+equals+operator.gif" border="0" alt="" id="BLOGGER_PHOTO_ID_5304536563231109618" /&gt;&lt;/a&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As shown in the diagram below, it is quite possible that two different objects can represent the same real world thing, and the same object can, at different times, represent different things.  Since "==" simply says that two different references to objects point to the same object, it has little to do with the references pointing to the same "thing".&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-277505318953689654?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/277505318953689654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/05/considered-harmful.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/277505318953689654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/277505318953689654'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/05/considered-harmful.html' title='== considered harmful'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JWiCz7S_rac/SZ1_5k12MfI/AAAAAAAAADA/Gie2VSs0P-w/s72-c/dangerous+equals+operator.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6027300959724833738</id><published>2007-04-16T21:11:00.000-04:00</published><updated>2007-10-29T22:46:05.083-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><title type='text'>What is the difference between an Ontology and a Taxonomy</title><content type='html'>&lt;p&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;&lt;span style="font-style: italic;"&gt;The following has been posted on a few sites and I don't know which was the original. In any event, it is very germane to my purpose, so I republish it here...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;A &lt;b&gt;controlled vocabulary&lt;/b&gt; is a list  of terms that have been enumerated explicitly. This list is controlled by and is  available from a controlled vocabulary registration authority. All terms in a  controlled vocabulary should have an unambiguous, non-redundant definition. This  is a design goal that may not be true in practice. It depends on how strict the  controlled vocabulary registration authority is regarding registration of terms  into a controlled vocabulary. At a minimum, the following two rules should be  enforced:&lt;/span&gt;  &lt;/p&gt;&lt;ol style="color: rgb(0, 0, 0);"&gt;&lt;li value="1"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;If the same term is commonly  used to mean different concepts in different contexts, then its name is  explicitly qualified to resolve this ambiguity. &lt;/span&gt; &lt;/li&gt;&lt;li value="2"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;If multiple terms are used to  mean the same thing, one of the terms is identified as the preferred term in the  controlled vocabulary and the other terms are listed as synonyms or  aliases.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Times New Roman;font-size:100%;"  &gt;A &lt;b&gt;taxonomy&lt;/b&gt;  is a collection of controlled vocabulary terms organized into a hierarchical  structure. Each term in a taxonomy is in one or more parent-child relationships  to other terms in the taxonomy. There may be different types of parent-child  relationships in a taxonomy (e.g., whole-part, genus-species, type-instance),  but good practice limits all parent-child relationships to a single parent to be  of the same type. Some taxonomies allow poly-hierarchy, which means that a term  can have multiple parents. This means that if a term appears in multiple places  in a taxonomy, then it is the same term. Specifically, if a term has children in  one place in a taxonomy, then it has the same children in every other place  where it appears.&lt;/span&gt;  &lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;A &lt;b&gt;thesaurus&lt;/b&gt; is a networked  collection of controlled vocabulary terms. This means that a thesaurus uses  associative relationships in addition to parent-child relationships. The  expressiveness of the associative relationships in a thesaurus vary and can be  as simple as "related to term" as in term A is related to term B.&lt;/span&gt;  &lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;People use the word &lt;b&gt;ontology&lt;/b&gt; to  mean different things, e.g. glossaries &amp;amp; data dictionaries, thesauri &amp;amp;  taxonomies, schemas &amp;amp; data models, and formal ontologies &amp;amp; inference. A  formal ontology is a controlled vocabulary expressed in an ontology  representation language. This language has a grammar for using vocabulary terms  to express something meaningful within a specified domain of interest. The  grammar contains formal constraints (e.g., specifies what it means to be a  well-formed statement, assertion, query, etc.) on how terms in the ontology's  controlled vocabulary can be used together.&lt;/span&gt;  &lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;People make commitments to use a specific  controlled vocabulary or ontology for a domain of interest. Enforcement of an  ontology's grammar may be rigorous or lax. Frequently, the grammar for a  "light-weight" ontology is not completely specified, i.e., it has implicit rules  that are not explicitly documented.&lt;/span&gt;  &lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;A &lt;b&gt;meta-model&lt;/b&gt; is an explicit model  of the constructs and rules needed to build specific models within a domain of  interest. A valid meta-model is an ontology, but not all ontologies are modeled  explicitly as meta-models. A meta-model can be viewed from three different  perspectives:&lt;/span&gt;  &lt;/p&gt;&lt;ol style="color: rgb(0, 0, 0);"&gt;&lt;li value="1"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;as a set of building blocks and  rules used to build models &lt;/span&gt; &lt;/li&gt;&lt;li value="2"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;as a model of a domain of  interest, and &lt;/span&gt; &lt;/li&gt;&lt;li value="3"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;as an instance of another  model.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Times New Roman;font-size:100%;"  &gt;When comparing  meta-models to ontologies, we are talking about meta-models as models  (perspective 2).&lt;/span&gt;  &lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;Note: Meta-modeling as a domain of  interest can have its own ontology. For example, the &lt;/span&gt;&lt;a href="http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=284288"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;&lt;u&gt;CDIF Family of  Standards&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;, which contains the  CDIF Meta-meta-model along with rules for modeling and extensibility and  transfer format, is such an ontology. When modelers use a modeling tool to  construct models, they are making a commitment to use the ontology implemented  in the modeling tool. This model making ontology is usually called a meta-model,  with "model making" as its domain of interest.&lt;/span&gt;  &lt;/p&gt;&lt;p style="color: rgb(0, 0, 0);"&gt;&lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;&lt;b&gt;Bottom line:&lt;/b&gt; Taxonomies and  Thesauri may relate terms in a controlled vocabulary via parent-child and  associative relationships, but do not contain explicit grammar rules to  constrain how to use controlled vocabulary terms to express (model) something  meaningful within a domain of interest. A meta-model is an ontology used by  modelers. People make commitments to use a specific controlled vocabulary or  ontology for a domain of interest.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6027300959724833738?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6027300959724833738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/04/what-is-difference-between-ontology-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6027300959724833738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6027300959724833738'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/04/what-is-difference-between-ontology-and.html' title='What is the difference between an Ontology and a Taxonomy'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2905933723952034316</id><published>2007-04-13T18:44:00.003-04:00</published><updated>2010-03-10T11:50:03.358-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphism'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='equals'/><title type='text'>Don't confuse (OOP) Objects with Entities</title><content type='html'>&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;AHA! (OOP language) Classes are too general to think of as synonymous with (Philosophical) Entities! &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;OOP classes/objects can represent roles, or values of properties (e.g. Red),&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;or PropertyTypes (e.g. Color), NONE OF WHICH are Entities.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;SO, the "isA" relationship between a superClass and its subClasses&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;is not always analogous with the "isA" relationship between an Entity&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;and the collection of Entities constituting an entityType.&lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;&lt;br /&gt;"Red isA Color" is different than "Joe isA Human" or "Human isA Mammal".&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;Red is not an entity, Joe is and a Human is. W&lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;hy? Red is not countable and not distinguishable from another "instance" of red;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana; font-family:sans-serif;font-size:85%;"&gt;Joe, humans, and mammals are. [Ed. note: this intuition will later be recognized as the problem of universals as the author reads more books. ;-) ]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;With "domain objects" (aka "business objects") being roughly equivalent to philosophical entities, it is dawning on the IT industry (e.g. POJOs, "domain driven development") that there are at least 2 kinds of classes/objects: "domain" and "non-domain".  There are wildly different ideas of what "non-domain" classes are, but they generally are meant to include all that programming implementation logic kind of stuff rather than the direct modeling of the world.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;The main point here (and the AHA moment), is recognizing that lots of confusion about how to divide a problem into programming language classes (along with what logic goes into their "equals" methods) boils down to a lack of understanding about first philosophy concepts of entities, universals, etc.  We programmers confuse the ability of programming languages to implement everything as a class/object with the idea that down deep everything is the same kind of thing.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;Philosophy would say that red is fundamentally different than Fred, and both are fundamentally different than a "process" (i.e. an OO method) or an "event" (i.e. an OO "message").&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2905933723952034316?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2905933723952034316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/04/dont-confuse-oop-objects-with-entities.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2905933723952034316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2905933723952034316'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/04/dont-confuse-oop-objects-with-entities.html' title='Don&apos;t confuse (OOP) Objects with Entities'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-6205892291116621435</id><published>2007-04-12T19:34:00.001-04:00</published><updated>2008-12-14T18:41:49.332-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='roles'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><title type='text'>"isA" and "asA" Relationships</title><content type='html'>&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;In modeling the world, (object-oriented,  entity-relationship, etc),&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;the emphasis  has been on distinguishing between "is-a" relationships&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;and "has-a" relationships. (human isA mammal, human hasA  head)&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;  &lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;There is another fundamental  relationship that is under-emphasized in modeling; namely, &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;the "as-a" relationship.  This is the relationship between an  entity&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;and a "role" that that entity can take on.   Many putative "entities" (e.g. customer, employee, etc)&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;are not really entities at all, but are "roles" that the  actual entity (e.g. a person)&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;can take  on.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; &lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;[&lt;a href="http://existentialprogramming.blogspot.com/2006/06/ontology-mismatch-case-study-customers.html"&gt;see a case study here&lt;/a&gt;]&lt;span class="Apple-style-span" style="font-family: Georgia; font-size: 16px; "&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span class="Apple-style-span" style="font-family: Georgia; font-size: 16px; "&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;Roles are often implemented as classes, and  multiple-inheritance is used &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;[or worse, lots of glue code is written] &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;to gain the lexical convenience of referencing&lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt; joe.employeeID and joe.resign() versus&lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt; joe.employeeRole.getID() and joe.employeeRole.resign()&lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;. Of course, "static" classes can be used to&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;  &lt;/span&gt;&lt;span style="font-family: verdana;font-family:sans-serif;font-size:85%;"  &gt;encapsulate the role details resulting in AsEmployee(joe).resign() references.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: verdana; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-6205892291116621435?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/6205892291116621435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/04/isa-and-asa-relationships.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6205892291116621435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/6205892291116621435'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/04/isa-and-asa-relationships.html' title='&quot;isA&quot; and &quot;asA&quot; Relationships'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-1375590640922886232</id><published>2007-03-27T01:00:00.004-04:00</published><updated>2011-03-19T13:54:51.418-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><title type='text'>THE PHILOSOPHERS' PROJECT</title><content type='html'>&lt;div style="font-family: georgia;"&gt;Here is a bit of Philosophy jargon that will be new to programmers: "&lt;b&gt;project&lt;/b&gt;".&amp;nbsp; It may best be explained via this excerpt from the world-wide best selling book,&amp;nbsp;  &lt;a href="http://www.amazon.com/Sophies-World-History-Philosophy-Classics/dp/0374530718?ie=UTF8&amp;amp;tag=existenprogra-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Sophie's World&lt;/a&gt;...&lt;br /&gt;&lt;blockquote style="color: #660000;"&gt;&lt;b&gt;THE PHILOSOPHER'S PROJECT&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here we are again! We'll go directly to today's lesson without detours around white rabbits and the like.&lt;br /&gt;&lt;br /&gt;I'll outline very broadly the way people have thought about philosophy, from the ancient Greeks right up to our own day. But we'll take things in their correct order.&lt;br /&gt;&lt;br /&gt;Since some philosophers lived in a different age--and perhaps in a completely different culture from ours--it is a good idea to try and see what each philosopher's project is. By this I mean that we must try to grasp precisely what it is that each particular philosopher is especially concerned with finding out. One philosopher might want to know how plants and animals came into being. Another might want to know whether there is a God or whether man has an immortal soul.&lt;br /&gt;&lt;br /&gt;Once we have determined what a particular philosopher's project is, it is easier to follow his line of thought, since no one philosopher concerns himself with the whole of philosophy.&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="font-family: georgia;"&gt;&lt;span style="font-size: 85%;"&gt;&amp;nbsp;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=existenprogra-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0374530718&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-1375590640922886232?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/1375590640922886232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/03/philosophers-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1375590640922886232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/1375590640922886232'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/03/philosophers-project.html' title='THE PHILOSOPHERS&apos; PROJECT'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-8599712356246815774</id><published>2007-02-12T12:55:00.003-05:00</published><updated>2011-05-17T00:31:09.939-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='philosophy'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Captain's Log: My (new) niche in the World</title><content type='html'>Captain's Log, Lincoln's Birthday: After being absorbed in my new pastime these past several months trying to learn enough Philosophy to know whether it is worth learning at all to be of any practical use in my Software Engineering career, I have decided a decidedly *yes*.  Not only is it worth continuing to pursue, it could well be my next career: Exploring and writing about the intersection between Philosophy and Computer Science. i.e. "Experimental Philosophy" or "Empirical Philosophy" or some such.&lt;br /&gt;I can already see that Philosophy is a deep ocean to get drowned in; better to take on the much smaller pond that is cross-disciplinary studies.  Nobody in mainstream computer programming is aware of this stuff!  I know because I have a computer science degree and have been doing hands on development for 30+ years from the days of spaghetti code thru structured programming thru modular programing thru embedded programming thru object oriented programming thru distributed programming thru AJAX. I think I saw &lt;a href="http://portal.acm.org/citation.cfm?id=1164396&amp;amp;coll=portal&amp;amp;dl=ACM&amp;amp;CFID=5210594&amp;amp;CFTOKEN=14346329"&gt;one article about Plato&lt;/a&gt; in &lt;a href="http://www.acm.org/publications/cacm/"&gt;CACM&lt;/a&gt; once. There is a book in this; dare I say a series? At the very least I ought to start a blog to put these notebook entries someplace in the meantime.&lt;br /&gt;&lt;aside&gt;&lt;br /&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - Aug 26th, 2007&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Having made the decision to focus on practical programming tips based on basic ideas from Philosophy (as opposed to diving into the deep end of pure philosophy), I ironically find that &lt;a href="http://www.philosophytalk.org/pastShows/Pragmatism.html"&gt;"Pragmatism" is specifically American&lt;/a&gt; and so my pragmatic approach is apparently a foregone conclusion given my American birthright.&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/aside&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-8599712356246815774?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/8599712356246815774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/02/captains-log-my-new-niche-in-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8599712356246815774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/8599712356246815774'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/02/captains-log-my-new-niche-in-world.html' title='Captain&apos;s Log: My (new) niche in the World'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-2232749192991096964</id><published>2007-02-01T16:52:00.001-05:00</published><updated>2011-04-08T11:20:04.680-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POSTSCRIPT'/><category scheme='http://www.blogger.com/atom/ns#' term='namespaces'/><category scheme='http://www.blogger.com/atom/ns#' term='ontologies'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Identifying Ontologies with URIs</title><content type='html'>As noted before in &lt;a href="http://existentialprogramming.blogspot.com/2006/06/original-epiphanies-of-existential.html"&gt;my original ephiphanies  #10 &amp;amp; #15&lt;/a&gt; and &lt;a href="http://existentialprogramming.blogspot.com/2006/06/three-levels-of-existential-ness.html"&gt;Level III Existential  Programming&lt;/a&gt;,  there should be a whole collection of meta-data around each "fact" documenting  the source of that data, the time that data was acquired, etc, etc. This meta-data  in effect constitutes an ontology definition; one per each different  source/timestamp/etc.  To be sure, these various ontologies are largely similar  to each other and could benefit from an inheritance tree (ala &lt;a href="http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29"&gt;OO class  hierarchies&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;In Java, such  collections of definitions can be grouped into &lt;a href="http://en.wikipedia.org/wiki/Java_package"&gt;Packages&lt;/a&gt;.  In XML, they can be grouped into &lt;a href="http://en.wikipedia.org/wiki/XML_Namespace"&gt;Namespaces&lt;/a&gt;. So, a pragmatic way  to factor out this metadata (such that it is not copied into every "fact"), is  to give the ontology a name and tag each fact with that name (in the same way as  each Java value is "tagged" with a data type that includes the Package  name/path). And since, XML has already defined  &lt;a href="http://en.wikipedia.org/wiki/Uniform_Resource_Identifier"&gt;URIs&lt;/a&gt; as the format for  namespace identifiers, and it is easy to &lt;a href="http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html"&gt;map Package names with URIs&lt;/a&gt;, Existential  Programming systems/languages could use URIs to identify the ontology associated  with some set of facts. Since Existential Programming systems seek to seamlessly  convert between an &lt;a href="http://en.wikipedia.org/wiki/Object_oriented"&gt;O/O&lt;/a&gt; and an  &lt;a href="http://en.wikipedia.org/wiki/Entity_relationship"&gt;E/R&lt;/a&gt; and an  &lt;a href="http://en.wikipedia.org/wiki/Semantic_network"&gt;S/N&lt;/a&gt; representation, having OO  packages easily mappable to data exchange mechanisms like XML is a good  thing.&lt;br /&gt;&lt;aside&gt;&lt;/aside&gt;&lt;br /&gt;&lt;div class="ppostscript"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;POSTSCRIPT - Nov 23rd, 2007&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;It is hard to tell which of my epiphanies are new and which are things I read long ago but later remembered as if they were a new idea...I'm sure I read this &lt;a href="http://www.w3.org/2001/12/semweb-fin/w3csw"&gt;URI stuff in the Semantic Web articles&lt;/a&gt; (see Principle #1), but only "remembered" it when stumbling back across it today. At any rate, it was only recently that Tim Berners-Lee wrote this post about &lt;a href="http://www.w3.org/DesignIssues/LinkedData.html"&gt;Linked Data&lt;/a&gt; using URIs.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-2232749192991096964?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/2232749192991096964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/02/identifying-ontologies-with-uris.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2232749192991096964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/2232749192991096964'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/02/identifying-ontologies-with-uris.html' title='Identifying Ontologies with URIs'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-9162360798874449445</id><published>2007-01-21T22:18:00.000-05:00</published><updated>2010-03-12T18:31:35.561-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fuzzy'/><category scheme='http://www.blogger.com/atom/ns#' term='mathematics'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><title type='text'>Imaginary Numbers paradigm for Existential Programming</title><content type='html'>&lt;span style="font-size:85%;"&gt;It occurs to me that one of the things that Existential Programming hopes to enable is the ability to continue working with data that is vague, fuzzy, semi-inconsistent instead of screeching to a halt as would be the case with a strongly-typed implementation of a single ontology.&lt;br /&gt;&lt;br /&gt;An analog to this is the invention (discovery?) of &lt;a href="http://en.wikipedia.org/wiki/Imaginary_number"&gt;Imaginary Numbers&lt;/a&gt; in mathematics. The imaginary number "i" is defined to be the square root of -1.  Now the mildly mathematical reader will note that you can't have a square root of a negative number because any time you square a number it is always positive.  So, when early mathematicians came to a point in their formulas where a square root of a negative number was required, they were stuck.  By creating a way to talk about and manipulate numbers that "can't exist" (i.e. imaginary numbers), formulas could be worked through such that "real" answers could eventually emerge.&lt;br /&gt;&lt;br /&gt;By developing techniques to work with data that is not consistent with a single ontology (i.e. existential programming), programs can get past the "thats not legal data" stage and work its way to answers that ultimately do result in "legal data".&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8738230087002446758-9162360798874449445?l=existentialprogramming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://existentialprogramming.blogspot.com/feeds/9162360798874449445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://existentialprogramming.blogspot.com/2007/01/imaginary-numbers-paradigm-for.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/9162360798874449445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8738230087002446758/posts/default/9162360798874449445'/><link rel='alternate' type='text/html' href='http://existentialprogramming.blogspot.com/2007/01/imaginary-numbers-paradigm-for.html' title='Imaginary Numbers paradigm for Existential Programming'/><author><name>Bruce Wallace</name><uri>http://www.blogger.com/profile/01185353603127616202</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_JWiCz7S_rac/TAPch8SZX7I/AAAAAAAAAD0/egBtHLbUUFA/S220/polyglotLOGO80.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8738230087002446758.post-4796912184999626447</id><published>2006-10-07T23:43:00.000-04:00</published><updated>2010-03-12T15:58:19.982-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphism'/><category scheme='http://www.blogger.com/atom/ns#' term='epiphanies'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><category scheme='http://www.blogger.com/atom/ns#' term='existential programming'/><category scheme='http://www.blogger.com/atom/ns#' term='abstraction'/><title type='text'>Post Facto Polymorphism</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Post Facto Polymorphism&lt;/span&gt;&lt;span style="font-size:85%;"&gt; ®&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;☺ is the &lt;a href="http://existentialprogramming.blogspot.com/2007/09/introduction-to-existential-programming.html"&gt;Existential Programming&lt;/a&gt; technique of mapping an abstraction (defined after the fact of creating actual object instances or relational database entities or semantic network relations) to multiple preexisting ontologies (i.e. &lt;a href="http://en.wikipedia.org/wiki/Class_%28computer_science%29"&gt;class/type definitions&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;For example, suppose that there were several data sources that held data (specifically names) about "people", and these data sources were culturally specific. A typical European &lt;a href="http://en.wikipedia.org/wiki/Ontology_%28computer_science%29"&gt;ontology&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Database_schema"&gt;DB-schema&lt;/a&gt; might define 3 fields: &lt;span style="font-family:courier new;"&gt;firstName&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;middleName&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;lastName&lt;/span&gt;. A Native American oriented database might define a single &lt;span style="font-family:courier new;"&gt;Name&lt;/span&gt; field.  An Asian database might have a &lt;span style="font-family:courier new;"&gt;familyName&lt;/span&gt; and a &lt;span style="font-family:courier new;"&gt;childName&lt;/span&gt; field.  Yet another ethnic database encoded names into the European schema but understood that &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;firstName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt; was the "family name" for its data rather than &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;lastName&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:85%;"&gt;. If we wish to consolidate these data sources and define (after the fact) a new abstraction to work with all of them, we can use the &lt;a href="http://existentialprogramming.blogspot.com/2006/10/external-abstractions-existential.html"&gt;external abstraction&lt;/a
