<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: How to Deploy Your Skunkworks Application&#8211; and Take Over Your IT Department&#8217;s Software Development in the Process</title>
	<atom:link href="http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/feed/" rel="self" type="application/rss+xml" />
	<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/</link>
	<description>(notes from an average programmer studying the hard stuff)</description>
	<lastBuildDate>Thu, 21 May 2009 01:17:58 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: using the sphincter-sigil to abuse Perl &#171; Learning Lisp</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-2233</link>
		<dc:creator>using the sphincter-sigil to abuse Perl &#171; Learning Lisp</dc:creator>
		<pubDate>Wed, 24 Sep 2008 00:04:00 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-2233</guid>
		<description>[...] lisp-ish DSL by itself.) In Blub, we hacked someone&#8217;s custom evaluator to go even further to craft our own language from scratch. This proved to be an unsustainable amount of work beyond a certain level of complexity. With Perl, [...]</description>
		<content:encoded><![CDATA[<p>[...] lisp-ish DSL by itself.) In Blub, we hacked someone&#8217;s custom evaluator to go even further to craft our own language from scratch. This proved to be an unsustainable amount of work beyond a certain level of complexity. With Perl, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leonardo</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1884</link>
		<dc:creator>Leonardo</dc:creator>
		<pubDate>Thu, 05 Jun 2008 01:26:46 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1884</guid>
		<description>EXCELLENT article, thanks for taking the time to write it. I wish I knew more enthusiastic people like you in my workplace; all I ever see is people who make just good enough an effort at their job to keep it.</description>
		<content:encoded><![CDATA[<p>EXCELLENT article, thanks for taking the time to write it. I wish I knew more enthusiastic people like you in my workplace; all I ever see is people who make just good enough an effort at their job to keep it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ProjectX Blog &#187; Blog Archive &#187; Xlinks Digest - 27 / 05 / 2008</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1880</link>
		<dc:creator>ProjectX Blog &#187; Blog Archive &#187; Xlinks Digest - 27 / 05 / 2008</dc:creator>
		<pubDate>Tue, 27 May 2008 00:07:57 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1880</guid>
		<description>[...] How to deploy a skunkworks application Added on 05/21/2008 at 09:17AM [...]</description>
		<content:encoded><![CDATA[<p>[...] How to deploy a skunkworks application Added on 05/21/2008 at 09:17AM [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: To Develop a Good Design, You Must Begin by Caring About People &#171; Learning Lisp</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1875</link>
		<dc:creator>To Develop a Good Design, You Must Begin by Caring About People &#171; Learning Lisp</dc:creator>
		<pubDate>Thu, 22 May 2008 14:17:52 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1875</guid>
		<description>[...] Learning Lisp (notes from an average programmer studying the hard stuff)      &#171; How to Deploy Your Skunkworks Application&#8211; and Take Over Your IT Department&#8217;s Software D... [...]</description>
		<content:encoded><![CDATA[<p>[...] Learning Lisp (notes from an average programmer studying the hard stuff)      &laquo; How to Deploy Your Skunkworks Application&#8211; and Take Over Your IT Department&#8217;s Software D&#8230; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Miller</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1874</link>
		<dc:creator>Mark Miller</dc:creator>
		<pubDate>Thu, 22 May 2008 00:51:07 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1874</guid>
		<description>&lt;i&gt;None of these people have even heard of Unit Testing or Regression Frameworks… and many of them do not use source control.&lt;/i&gt;

Gosh, that&#039;s scary! They don&#039;t use friggin &lt;i&gt;source control???&lt;/i&gt; Gaagh!! Well, I gotta admit. When I was working a job on my own a couple years ago I didn&#039;t use source control either. I just ZIPped up my source directories and put a version number on it. It&#039;s not the way I prefer to work, but all the source control systems I knew about at the time were commercial, and I wasn&#039;t sure if I wanted to put down the dough to get one. I&#039;d heard of CVS, and I had used it before, but didn&#039;t particularly like it.

&lt;i&gt;There’s a generation or a culture gap. None of them have this attitude of experimentation and exploration built in as a component of every development project they undertake. No immediate perceived business value, I guess.&lt;/i&gt;

More like they don&#039;t know how to do it. Believe me, it&#039;s not because it doesn&#039;t need to be done. It&#039;s not merely a &quot;right way&quot; orthodox approach either. Alan Kay has talked some about this, that the tech culture is rather primitive, even though it pretends it&#039;s &quot;up-to-date&quot; and &quot;advanced&quot;. There is some consideration now for how people interact with computers, but not enough. None of the popular development environments allow you to do what you&#039;re doing. They&#039;re all early-bound environments.

What surprises me a little is that nobody you&#039;re talking to can even relate what you&#039;re talking about to something they know. I remember several years ago seeing articles in .Net programming magazines (maybe like two or three) that talked about extending your .Net app. via. scripts. I knew a Visual C++ developer (coworker) who talked with me about doing that with C++ back in 2000.

I have met developers who know about the idea of creating &quot;data driven&quot; apps., that is creating an app. framework that responds to parameters entered into a database repository. So there are analogies around.

I&#039;m getting this image that these people you&#039;ve been hanging around are &quot;plug it together&quot; developers, who know how to deal with component-based frameworks, but that&#039;s it.

&lt;i&gt;But maybe there is no need for me in this setting. Maybe it’s just overkill.&lt;/i&gt;

I can understand why it would feel that way. I think that&#039;s what a lot of typical developers would tell you, &quot;You&#039;re making it way too complicated for what it is. It doesn&#039;t need all this.&quot; I think a quote from Alan Kay addresses this concern well. This is from his 1997 speech, &quot;The Computer Revolution Hasn&#039;t Happened Yet&quot;:

&lt;i&gt;&quot;I just played a very minor part in the design of the ARPANet. I was one of 30 graduate students who went to systems design meetings to try and formulate design principles for the ARPANet, also about 30 years ago. The ARPANet of course became the internet–and from the time it started running, which is around 1969 or so, to this day, it has expanded by a factor of about 100 million. So that’s pretty good. Eight orders or magnitude. And as far as anybody can tell–I talked to Larry Roberts about this the other day–there’s not one physical atom in the internet today that was in the original ARPANet, and there is not one line of code in the internet today that was in the original ARPANet. Of course if we’d had IBM mainframes in the orignal ARPANet that wouldn’t have been true. So this is a system that has expanded by 100 million, and has changed every atom and every bit, and has never had to stop! That is the metaphor we absolutely must apply to what we think are smaller things. When we think programming is small, that’s why your programs are so big! . . .

[The] way to stay with the future as it moves, is to always play your systems more grand than they seem to be right now.&quot;&lt;/i&gt;

The point of his speech is just what you&#039;re talking about: Most developers don&#039;t think like this. We need to! What he was saying is by thinking &quot;this is all I need right now&quot; for a small app., you&#039;re dooming yourself to creating a huge mess if and when your &quot;small app.&quot; needs to become huge. By thinking about architecture ahead of time, even for small problems, you&#039;re ensuring that your solution can scale up.

One of the things Kay is really into is creating systems that are malleable enough to deal with change well, and are able to go from small to huge without major disruptions.

I get the sense that your solution has kind of been hacked together. I don&#039;t know. Maybe you just think it&#039;s hacked together, but you&#039;re using a good enough architecture so it won&#039;t create problems. You could run into limitations with your approach eventually. That&#039;s the price we pay if we don&#039;t think about architecture. It sounds though that you&#039;re getting &quot;real bang for your buck&quot; because what you&#039;ve done is better than what anyone else there has tried. This isn&#039;t surprising, but a compliment to what you&#039;ve learned.

&lt;i&gt;It merged with some of my homegrown tools that I used daily and ate part of a pet project I’d been spending a few week ends on… and serendipitously, I just addressed a dozen minor requirements with an idea that came out of nowhere. I hardly even decided to make an application– it just happened. It’s a glorified proof of concept at this point… but the question is… what will happen over time as I face more wide ranging and more thorny problems… and grow into them… and discover new opportunities that I never thought of.&lt;/i&gt;

This is the reason I brought up the issue of scale above. If you&#039;re using good architecture it&#039;s more likely to scale well to those future unknowns than what anyone else is trying.

I know you&#039;ve told me your opinions of OOP before, and I&#039;m not trying to sell you on it here. I talked with Alan Kay briefly about programming in general via. e-mail last year, and he went on at length about the importance of architecture, and asking questions about the relationships between components of a system. He talks about OOP some, but his main point is thinking about architecture, which could just as easily be non-OOP:

&lt;i&gt;&quot;I would characterize the ARPA [work we did in the 1960s] (and then the concentration at PARC) as mainly interested in a &#039;no-centers&#039; style scaling architecture (personal computers [as opposed to centralized mainframes], Internet, Ethernet, objects, &#039;no OS&#039; [as it&#039;s traditionally defined], &#039;no Apps&#039; [they created &#039;widgets&#039;], etc.).

So a lot of the interest was how to get things done without having to concentrate the knowledge in one or a few places (because this would require these places to have to control &#039;ingredients&#039;). ...

In Computer Science, I think one of the things we (are supposed to) do is to try to abstract much simpler models of the artifacts that still are able to do what the artifacts do. So if someone does a word processor or operating system, we should be asking what is the simplest organizational working model that will also make that word processor or OS (or perhaps a better one). This will often lead to better designs for applications, and also better programming languages, systems architectures, etc. And this process can be turned on programming languages and systems themselves.

This is what we did at PARC. Smalltalk partly came from &#039;20 examples that had to be done much better&#039;, and &#039;take the most difficult thing you will have to do, do it, and then build everything else out of that architecture&#039;. This paragraph and the one above it have (new kinds of) math lurking as the pathways and principles towards greater ease of expression for programming. ...

&#039;In matters of scaling, architecture dominates materials&#039;, so we should first ask questions about architecture before worrying about details of the materials. This is how dynamic objects came about: by worrying about how largish systems could function -- &#039;no centers&#039; is a good answer here -- this brings &#039;messaging&#039;, and then &#039;to what?&#039;, and then &#039;how?&#039;, etc. Similarly, we need to ask about the architecture of the proposed model above before worrying about details. Some of these questions are algebraic: i.e. are there abstractions that could simplify the number of concepts needed to span the model? It seems there are: both structural and behavioral. Can we separate &#039;meaning&#039; from &#039;optimization&#039;? Yes, in many if not most parts of the system. And so forth. ...

In any case, to me, most of programming is really architectural design (and most of what is wrong with programming today is that it is not at all about architectural design but just about tinkering a few effectors to add on to an already disastrous mess). ... Lots of programming today is not unlike lots of blogs today: more opinion than knowledge, skills, or style. This is the pop culture infiltrating into a world of ideas that are usually at their best when developed rather than graffitied. ...

If we think of a big computer system as necessarily being made out of components at one or many levels of scale, then we really want to be asking questions about the relations between them. This will come down (partly, but in a pretty large way) to what the components know how to do vs. how much they have to be told how especially in the moment. Data structures don&#039;t know how to do anything and have to be told all - this doesn&#039;t scale - so I abandoned this idea in 1966. Objects can know quite a lot and thus don&#039;t have to be told much. We did not go nearly far enough in this direction in the 70s (in no small part because of the weak and small computer resources -- and our weak and small minds).&quot;&lt;/i&gt;

So if you want to take a look at a software system, you could look at its fundamentals: data access/serialization, rules, system communication, human-computer interaction, etc. and ask questions (to yourself I suppose) about the relationships between them, and then write bits of software that will deal with those domains, and facilitate the relationships between them, bringing in the same properties that you&#039;ve come to like about your current creation.

Another thing Kay communicated to me is that software architecture is the area of computer science where the most research is needed. CS in academia tends to not talk about architecture much, so not much work has been done on it. I say this so you won&#039;t feel bad if you feel inadequate/overwhelmed by the idea of trying to form a better architecture for whatever large system you&#039;re looking at. One of the things he said he&#039;d like to learn is how do people learn architectures and abstractions. So even he doesn&#039;t have a good answer. His advice seems to be to just go for it and give it your best shot. You&#039;ll learn something valuable from it, and I would add, &quot;even if you fail,&quot; though I understand perfectly well that failing is a scary prospect.</description>
		<content:encoded><![CDATA[<p><i>None of these people have even heard of Unit Testing or Regression Frameworks… and many of them do not use source control.</i></p>
<p>Gosh, that&#8217;s scary! They don&#8217;t use friggin <i>source control???</i> Gaagh!! Well, I gotta admit. When I was working a job on my own a couple years ago I didn&#8217;t use source control either. I just ZIPped up my source directories and put a version number on it. It&#8217;s not the way I prefer to work, but all the source control systems I knew about at the time were commercial, and I wasn&#8217;t sure if I wanted to put down the dough to get one. I&#8217;d heard of CVS, and I had used it before, but didn&#8217;t particularly like it.</p>
<p><i>There’s a generation or a culture gap. None of them have this attitude of experimentation and exploration built in as a component of every development project they undertake. No immediate perceived business value, I guess.</i></p>
<p>More like they don&#8217;t know how to do it. Believe me, it&#8217;s not because it doesn&#8217;t need to be done. It&#8217;s not merely a &#8220;right way&#8221; orthodox approach either. Alan Kay has talked some about this, that the tech culture is rather primitive, even though it pretends it&#8217;s &#8220;up-to-date&#8221; and &#8220;advanced&#8221;. There is some consideration now for how people interact with computers, but not enough. None of the popular development environments allow you to do what you&#8217;re doing. They&#8217;re all early-bound environments.</p>
<p>What surprises me a little is that nobody you&#8217;re talking to can even relate what you&#8217;re talking about to something they know. I remember several years ago seeing articles in .Net programming magazines (maybe like two or three) that talked about extending your .Net app. via. scripts. I knew a Visual C++ developer (coworker) who talked with me about doing that with C++ back in 2000.</p>
<p>I have met developers who know about the idea of creating &#8220;data driven&#8221; apps., that is creating an app. framework that responds to parameters entered into a database repository. So there are analogies around.</p>
<p>I&#8217;m getting this image that these people you&#8217;ve been hanging around are &#8220;plug it together&#8221; developers, who know how to deal with component-based frameworks, but that&#8217;s it.</p>
<p><i>But maybe there is no need for me in this setting. Maybe it’s just overkill.</i></p>
<p>I can understand why it would feel that way. I think that&#8217;s what a lot of typical developers would tell you, &#8220;You&#8217;re making it way too complicated for what it is. It doesn&#8217;t need all this.&#8221; I think a quote from Alan Kay addresses this concern well. This is from his 1997 speech, &#8220;The Computer Revolution Hasn&#8217;t Happened Yet&#8221;:</p>
<p><i>&#8220;I just played a very minor part in the design of the ARPANet. I was one of 30 graduate students who went to systems design meetings to try and formulate design principles for the ARPANet, also about 30 years ago. The ARPANet of course became the internet–and from the time it started running, which is around 1969 or so, to this day, it has expanded by a factor of about 100 million. So that’s pretty good. Eight orders or magnitude. And as far as anybody can tell–I talked to Larry Roberts about this the other day–there’s not one physical atom in the internet today that was in the original ARPANet, and there is not one line of code in the internet today that was in the original ARPANet. Of course if we’d had IBM mainframes in the orignal ARPANet that wouldn’t have been true. So this is a system that has expanded by 100 million, and has changed every atom and every bit, and has never had to stop! That is the metaphor we absolutely must apply to what we think are smaller things. When we think programming is small, that’s why your programs are so big! . . .</p>
<p>[The] way to stay with the future as it moves, is to always play your systems more grand than they seem to be right now.&#8221;</i></p>
<p>The point of his speech is just what you&#8217;re talking about: Most developers don&#8217;t think like this. We need to! What he was saying is by thinking &#8220;this is all I need right now&#8221; for a small app., you&#8217;re dooming yourself to creating a huge mess if and when your &#8220;small app.&#8221; needs to become huge. By thinking about architecture ahead of time, even for small problems, you&#8217;re ensuring that your solution can scale up.</p>
<p>One of the things Kay is really into is creating systems that are malleable enough to deal with change well, and are able to go from small to huge without major disruptions.</p>
<p>I get the sense that your solution has kind of been hacked together. I don&#8217;t know. Maybe you just think it&#8217;s hacked together, but you&#8217;re using a good enough architecture so it won&#8217;t create problems. You could run into limitations with your approach eventually. That&#8217;s the price we pay if we don&#8217;t think about architecture. It sounds though that you&#8217;re getting &#8220;real bang for your buck&#8221; because what you&#8217;ve done is better than what anyone else there has tried. This isn&#8217;t surprising, but a compliment to what you&#8217;ve learned.</p>
<p><i>It merged with some of my homegrown tools that I used daily and ate part of a pet project I’d been spending a few week ends on… and serendipitously, I just addressed a dozen minor requirements with an idea that came out of nowhere. I hardly even decided to make an application– it just happened. It’s a glorified proof of concept at this point… but the question is… what will happen over time as I face more wide ranging and more thorny problems… and grow into them… and discover new opportunities that I never thought of.</i></p>
<p>This is the reason I brought up the issue of scale above. If you&#8217;re using good architecture it&#8217;s more likely to scale well to those future unknowns than what anyone else is trying.</p>
<p>I know you&#8217;ve told me your opinions of OOP before, and I&#8217;m not trying to sell you on it here. I talked with Alan Kay briefly about programming in general via. e-mail last year, and he went on at length about the importance of architecture, and asking questions about the relationships between components of a system. He talks about OOP some, but his main point is thinking about architecture, which could just as easily be non-OOP:</p>
<p><i>&#8220;I would characterize the ARPA [work we did in the 1960s] (and then the concentration at PARC) as mainly interested in a &#8216;no-centers&#8217; style scaling architecture (personal computers [as opposed to centralized mainframes], Internet, Ethernet, objects, &#8216;no OS&#8217; [as it's traditionally defined], &#8216;no Apps&#8217; [they created 'widgets'], etc.).</p>
<p>So a lot of the interest was how to get things done without having to concentrate the knowledge in one or a few places (because this would require these places to have to control &#8216;ingredients&#8217;). &#8230;</p>
<p>In Computer Science, I think one of the things we (are supposed to) do is to try to abstract much simpler models of the artifacts that still are able to do what the artifacts do. So if someone does a word processor or operating system, we should be asking what is the simplest organizational working model that will also make that word processor or OS (or perhaps a better one). This will often lead to better designs for applications, and also better programming languages, systems architectures, etc. And this process can be turned on programming languages and systems themselves.</p>
<p>This is what we did at PARC. Smalltalk partly came from &#8216;20 examples that had to be done much better&#8217;, and &#8216;take the most difficult thing you will have to do, do it, and then build everything else out of that architecture&#8217;. This paragraph and the one above it have (new kinds of) math lurking as the pathways and principles towards greater ease of expression for programming. &#8230;</p>
<p>&#8216;In matters of scaling, architecture dominates materials&#8217;, so we should first ask questions about architecture before worrying about details of the materials. This is how dynamic objects came about: by worrying about how largish systems could function &#8212; &#8216;no centers&#8217; is a good answer here &#8212; this brings &#8216;messaging&#8217;, and then &#8216;to what?&#8217;, and then &#8216;how?&#8217;, etc. Similarly, we need to ask about the architecture of the proposed model above before worrying about details. Some of these questions are algebraic: i.e. are there abstractions that could simplify the number of concepts needed to span the model? It seems there are: both structural and behavioral. Can we separate &#8216;meaning&#8217; from &#8216;optimization&#8217;? Yes, in many if not most parts of the system. And so forth. &#8230;</p>
<p>In any case, to me, most of programming is really architectural design (and most of what is wrong with programming today is that it is not at all about architectural design but just about tinkering a few effectors to add on to an already disastrous mess). &#8230; Lots of programming today is not unlike lots of blogs today: more opinion than knowledge, skills, or style. This is the pop culture infiltrating into a world of ideas that are usually at their best when developed rather than graffitied. &#8230;</p>
<p>If we think of a big computer system as necessarily being made out of components at one or many levels of scale, then we really want to be asking questions about the relations between them. This will come down (partly, but in a pretty large way) to what the components know how to do vs. how much they have to be told how especially in the moment. Data structures don&#8217;t know how to do anything and have to be told all &#8211; this doesn&#8217;t scale &#8211; so I abandoned this idea in 1966. Objects can know quite a lot and thus don&#8217;t have to be told much. We did not go nearly far enough in this direction in the 70s (in no small part because of the weak and small computer resources &#8212; and our weak and small minds).&#8221;</i></p>
<p>So if you want to take a look at a software system, you could look at its fundamentals: data access/serialization, rules, system communication, human-computer interaction, etc. and ask questions (to yourself I suppose) about the relationships between them, and then write bits of software that will deal with those domains, and facilitate the relationships between them, bringing in the same properties that you&#8217;ve come to like about your current creation.</p>
<p>Another thing Kay communicated to me is that software architecture is the area of computer science where the most research is needed. CS in academia tends to not talk about architecture much, so not much work has been done on it. I say this so you won&#8217;t feel bad if you feel inadequate/overwhelmed by the idea of trying to form a better architecture for whatever large system you&#8217;re looking at. One of the things he said he&#8217;d like to learn is how do people learn architectures and abstractions. So even he doesn&#8217;t have a good answer. His advice seems to be to just go for it and give it your best shot. You&#8217;ll learn something valuable from it, and I would add, &#8220;even if you fail,&#8221; though I understand perfectly well that failing is a scary prospect.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lispy</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1871</link>
		<dc:creator>lispy</dc:creator>
		<pubDate>Wed, 21 May 2008 04:35:23 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1871</guid>
		<description>Yes... that dynamic simulation environment is very key.  Part of what happens in the 5 minute demos is that people always insist on something that nobody else has asked for.  Because the front end is just a GUI that&#039;s bound to an environment (that&#039;s initialized with the DSL), you need to have ways that you can alter that environment at runtime.  It&#039;s a sort of a REPLerization process that I&#039;m about to code up-- doesn&#039;t take much, but I want to turn it into something the power users can take advantage of, too. 

My dream is to take the scripts generated by the power users and integrate them into my solution somehow.  Basically... I&#039;m bringing the spirit of the EMACS community directly into a crappy database application.  I don&#039;t think any of the dozens of people I&#039;ve talked to the past few days would even know what I was talking about if I tried to discuss this with them... and even if they could they would not see the business value of it.  

Maybe it isn&#039;t &quot;worth it&quot;.  For me, though... to be able to go to those little 5 minute demo&#039;s... and to be able to answer their criticisms and issues right when they&#039;re looking over my shoulder....  Now we can go on and deal with the real issues instead of getting stalled.  And if that stuff&#039;s what we want in the release, all I do is kick out a script for what we just did and fold it into the scripts that initialize the system.  No recompile.  Or I could send a test script for the power users to beta for me first if I wanted....  

None of the vendors here can do that.  One application we use forces us to maintain modifications by hand that could have had something like what I&#039;m working on, but there&#039;s no vision for anything like this sort of dynamism/programmability.

I&#039;m so far out of the mainstream... I don&#039;t think any of the hundred people that I&#039;ve talked to the past few days could even listen long enough to get to this.  None of these people have even heard of Unit Testing or Regression Frameworks... and many of them do not use source control.  There&#039;s a generation or a culture gap.  None of them have this attitude of experimentation and exploration built in as a component of every development project they undertake.  No immediate perceived business value, I guess.

So it gets back to how I want code.  I can set up my architecture however I want....  Why not do so in a way that makes everything easier for me and that puts so much more within the 5 minute zone??

But maybe there is no need for me in this setting.  Maybe it&#039;s just overkill.  I wish I could be two people so I could handle more of the hard core business stuff on top of this.  But keeping up with all of the applications and support and technologies that are thrust on me is plenty as it is.  Yet, all of those issues that I contributed to eliminating... that were never on anyone&#039;s to-do list because they weren&#039;t even something that anybody imagined could be addressed with a little software... that *did* have an impact on our business.  The pat on the back may not have been there-- and we&#039;re back to &quot;what have you done for me lately&quot;--, but it was significant what I did.

I think the thing to do is continue to follow my destiny even though no one understands.  I&#039;m mentally in shock because there&#039;s a huge need in front of me now that&#039;s many magnitudes greater in scope than the simple problems I&#039;ve just solved.  I can address it without transforming into a CFO/CPA type.  My work style is very unorthodox, but once I understand something and codify it, I never have to think about again.  (&quot;Good enough&quot; for most people is nowhere close to that.)  There&#039;s just a whole new class of users that I have to engage now and the relationships aren&#039;t there yet.

But Mark... don&#039;t blow my solution out of proportion.  It&#039;s just a start.  It emerged out of nowhere as something that grew on top of a very simple application that just needed to print some stuff out.  It merged with some of my homegrown tools that I used daily and ate part of a pet project I&#039;d been spending a few week ends on... and serendipitously, I just addressed a dozen minor requirements with an idea that came out of nowhere.  I hardly even decided to make an application-- it just happened.  It&#039;s a glorified proof of concept at this point... but the question is... what will happen over time as I face more wide ranging and more thorny problems... and grow into them... and discover new opportunities that I never thought of.

I don&#039;t even know what the next thing is beyond the very next order of magnitude refactoring and extension....  No idea at all.  Why is it that I feel like I have the most comprehensive plan for software development of anybody on my block... but I just know that to the normal people here I&#039;d sound like I&#039;m just some crazy guy that doesn&#039;t know what he&#039;s doing?

I think... maybe... the fact that the problem is indeed so hard... maybe that mean&#039;s that contrary to &quot;common sense&quot;, my approach really is the best fit for this.  The status quo for my industry is so far from what&#039;s tolerable to me... and if I&#039;m going to be responsible for it, I have to take control of it and put it in terms that I can assimilate.  

It&#039;s a *right way* mentality dropped into a maelstrom of needs, unknowns, and entrenched mediocrity.  You pick your battles and bide your time, but I think there is value in it even if nobody else around me can see it until it&#039;s five minutes away.</description>
		<content:encoded><![CDATA[<p>Yes&#8230; that dynamic simulation environment is very key.  Part of what happens in the 5 minute demos is that people always insist on something that nobody else has asked for.  Because the front end is just a GUI that&#8217;s bound to an environment (that&#8217;s initialized with the DSL), you need to have ways that you can alter that environment at runtime.  It&#8217;s a sort of a REPLerization process that I&#8217;m about to code up&#8211; doesn&#8217;t take much, but I want to turn it into something the power users can take advantage of, too. </p>
<p>My dream is to take the scripts generated by the power users and integrate them into my solution somehow.  Basically&#8230; I&#8217;m bringing the spirit of the EMACS community directly into a crappy database application.  I don&#8217;t think any of the dozens of people I&#8217;ve talked to the past few days would even know what I was talking about if I tried to discuss this with them&#8230; and even if they could they would not see the business value of it.  </p>
<p>Maybe it isn&#8217;t &#8220;worth it&#8221;.  For me, though&#8230; to be able to go to those little 5 minute demo&#8217;s&#8230; and to be able to answer their criticisms and issues right when they&#8217;re looking over my shoulder&#8230;.  Now we can go on and deal with the real issues instead of getting stalled.  And if that stuff&#8217;s what we want in the release, all I do is kick out a script for what we just did and fold it into the scripts that initialize the system.  No recompile.  Or I could send a test script for the power users to beta for me first if I wanted&#8230;.  </p>
<p>None of the vendors here can do that.  One application we use forces us to maintain modifications by hand that could have had something like what I&#8217;m working on, but there&#8217;s no vision for anything like this sort of dynamism/programmability.</p>
<p>I&#8217;m so far out of the mainstream&#8230; I don&#8217;t think any of the hundred people that I&#8217;ve talked to the past few days could even listen long enough to get to this.  None of these people have even heard of Unit Testing or Regression Frameworks&#8230; and many of them do not use source control.  There&#8217;s a generation or a culture gap.  None of them have this attitude of experimentation and exploration built in as a component of every development project they undertake.  No immediate perceived business value, I guess.</p>
<p>So it gets back to how I want code.  I can set up my architecture however I want&#8230;.  Why not do so in a way that makes everything easier for me and that puts so much more within the 5 minute zone??</p>
<p>But maybe there is no need for me in this setting.  Maybe it&#8217;s just overkill.  I wish I could be two people so I could handle more of the hard core business stuff on top of this.  But keeping up with all of the applications and support and technologies that are thrust on me is plenty as it is.  Yet, all of those issues that I contributed to eliminating&#8230; that were never on anyone&#8217;s to-do list because they weren&#8217;t even something that anybody imagined could be addressed with a little software&#8230; that *did* have an impact on our business.  The pat on the back may not have been there&#8211; and we&#8217;re back to &#8220;what have you done for me lately&#8221;&#8211;, but it was significant what I did.</p>
<p>I think the thing to do is continue to follow my destiny even though no one understands.  I&#8217;m mentally in shock because there&#8217;s a huge need in front of me now that&#8217;s many magnitudes greater in scope than the simple problems I&#8217;ve just solved.  I can address it without transforming into a CFO/CPA type.  My work style is very unorthodox, but once I understand something and codify it, I never have to think about again.  (&#8220;Good enough&#8221; for most people is nowhere close to that.)  There&#8217;s just a whole new class of users that I have to engage now and the relationships aren&#8217;t there yet.</p>
<p>But Mark&#8230; don&#8217;t blow my solution out of proportion.  It&#8217;s just a start.  It emerged out of nowhere as something that grew on top of a very simple application that just needed to print some stuff out.  It merged with some of my homegrown tools that I used daily and ate part of a pet project I&#8217;d been spending a few week ends on&#8230; and serendipitously, I just addressed a dozen minor requirements with an idea that came out of nowhere.  I hardly even decided to make an application&#8211; it just happened.  It&#8217;s a glorified proof of concept at this point&#8230; but the question is&#8230; what will happen over time as I face more wide ranging and more thorny problems&#8230; and grow into them&#8230; and discover new opportunities that I never thought of.</p>
<p>I don&#8217;t even know what the next thing is beyond the very next order of magnitude refactoring and extension&#8230;.  No idea at all.  Why is it that I feel like I have the most comprehensive plan for software development of anybody on my block&#8230; but I just know that to the normal people here I&#8217;d sound like I&#8217;m just some crazy guy that doesn&#8217;t know what he&#8217;s doing?</p>
<p>I think&#8230; maybe&#8230; the fact that the problem is indeed so hard&#8230; maybe that mean&#8217;s that contrary to &#8220;common sense&#8221;, my approach really is the best fit for this.  The status quo for my industry is so far from what&#8217;s tolerable to me&#8230; and if I&#8217;m going to be responsible for it, I have to take control of it and put it in terms that I can assimilate.  </p>
<p>It&#8217;s a *right way* mentality dropped into a maelstrom of needs, unknowns, and entrenched mediocrity.  You pick your battles and bide your time, but I think there is value in it even if nobody else around me can see it until it&#8217;s five minutes away.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Miller</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1870</link>
		<dc:creator>Mark Miller</dc:creator>
		<pubDate>Wed, 21 May 2008 03:05:09 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1870</guid>
		<description>@Lispy:

Perhaps what you are describing is another angle of this trend I&#039;ve heard about for a few years, that what businesses really want is someone who is technically knowledgeable and has some domain knowledge as well, like someone with CS knowledge, and understands how the railroad industry works, too, for example.

Your description of a lack of a common language, even within groups, is real interesting to me. The first thing that came to mind was &quot;Design Patterns&quot;, written by the GOF. In the introduction I remember they said what they were searching for when they came up with DP was what they have in the field of architecture (as in buildings), called a &quot;pattern language&quot;. Because of the book they wrote there is now a recognized pattern language for certain structures. From what I&#039;ve heard though the particular patterns that were described in the book have become canonized, and some of the message of the book was lost. The point was not &quot;these are the only patterns you will ever need&quot;. It was supposed to be a &quot;conversation starter&quot;. The authors derived those patterns from constructing a word processing application. The fact that these patterns have been found useful in many other types of applications shows that they did some good work in finding a new architecture that improves what we do, but there are many more patterns to be discovered.

What I&#039;ve thought about from time to time, prompted by a brief conversation I had with Alan Kay by e-mail, is that the very programming languages we use are pattern languages. What most programmers miss is they are in fact using an architecture with every line of code they write. Instead they use these languages as though they&#039;re standardized communication protocols, both for the computer and each other. We know &lt;i&gt;somebody&lt;/i&gt; came up with them, but we don&#039;t seem to care how, or even if they&#039;re appropriate to the task. In any case they&#039;re godly smart, we assume, and so we should just use them without question.

I think a big part of this is the majority of programmers are never asked to learn this stuff. They are presented with frame-based solutions, which can be reliably used for certain classes of problems. As the name implies they also have boundaries, which are comfortable to people who are used to case-based learning.

Even our modalities in software design are themselves designed around frame-based solutions. Many expert developers are only familiar with the terminologies used for them, those particular pattern languages.

Really innovating with design means realizing that there&#039;s a world beyond the frame-based solutions, and instead of trying to shoehorn every problem into these frames, you can ask the question, &quot;What are we really trying to do? What are we as an organization really trying to be?&quot; With your training in SICP you can take a modeling approach to real problems. I think that&#039;s what you&#039;re seeing. You can literally model portions of a business, using a pattern language/architecture that&#039;s appropriate to the domain, and express it in a language of your own making. Secondly, you can see the a computer as a dynamic simulation environment, and as such, you should be able to a) experiment and dabble in ideas, to try to find the best solution to a problem, and b) see results of changes quickly and easily. That&#039;s a tall order to most people, but it&#039;s an idea that I find really interesting. I&#039;ve yet to try it out. It&#039;s only something that&#039;s been gelling in my head.</description>
		<content:encoded><![CDATA[<p>@Lispy:</p>
<p>Perhaps what you are describing is another angle of this trend I&#8217;ve heard about for a few years, that what businesses really want is someone who is technically knowledgeable and has some domain knowledge as well, like someone with CS knowledge, and understands how the railroad industry works, too, for example.</p>
<p>Your description of a lack of a common language, even within groups, is real interesting to me. The first thing that came to mind was &#8220;Design Patterns&#8221;, written by the GOF. In the introduction I remember they said what they were searching for when they came up with DP was what they have in the field of architecture (as in buildings), called a &#8220;pattern language&#8221;. Because of the book they wrote there is now a recognized pattern language for certain structures. From what I&#8217;ve heard though the particular patterns that were described in the book have become canonized, and some of the message of the book was lost. The point was not &#8220;these are the only patterns you will ever need&#8221;. It was supposed to be a &#8220;conversation starter&#8221;. The authors derived those patterns from constructing a word processing application. The fact that these patterns have been found useful in many other types of applications shows that they did some good work in finding a new architecture that improves what we do, but there are many more patterns to be discovered.</p>
<p>What I&#8217;ve thought about from time to time, prompted by a brief conversation I had with Alan Kay by e-mail, is that the very programming languages we use are pattern languages. What most programmers miss is they are in fact using an architecture with every line of code they write. Instead they use these languages as though they&#8217;re standardized communication protocols, both for the computer and each other. We know <i>somebody</i> came up with them, but we don&#8217;t seem to care how, or even if they&#8217;re appropriate to the task. In any case they&#8217;re godly smart, we assume, and so we should just use them without question.</p>
<p>I think a big part of this is the majority of programmers are never asked to learn this stuff. They are presented with frame-based solutions, which can be reliably used for certain classes of problems. As the name implies they also have boundaries, which are comfortable to people who are used to case-based learning.</p>
<p>Even our modalities in software design are themselves designed around frame-based solutions. Many expert developers are only familiar with the terminologies used for them, those particular pattern languages.</p>
<p>Really innovating with design means realizing that there&#8217;s a world beyond the frame-based solutions, and instead of trying to shoehorn every problem into these frames, you can ask the question, &#8220;What are we really trying to do? What are we as an organization really trying to be?&#8221; With your training in SICP you can take a modeling approach to real problems. I think that&#8217;s what you&#8217;re seeing. You can literally model portions of a business, using a pattern language/architecture that&#8217;s appropriate to the domain, and express it in a language of your own making. Secondly, you can see the a computer as a dynamic simulation environment, and as such, you should be able to a) experiment and dabble in ideas, to try to find the best solution to a problem, and b) see results of changes quickly and easily. That&#8217;s a tall order to most people, but it&#8217;s an idea that I find really interesting. I&#8217;ve yet to try it out. It&#8217;s only something that&#8217;s been gelling in my head.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lispy</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1869</link>
		<dc:creator>lispy</dc:creator>
		<pubDate>Tue, 20 May 2008 23:01:33 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1869</guid>
		<description>Yeah, Mark... I am the &quot;lone wolf&quot; here.

After talking to dozens of IT Managers, Developers, and CFO types the past few days, I can see that things are much worse than I thought.  There simply isn&#039;t enough common ground between these groups.  Even savvy developers that I admire can have radically different terms of viewing things... and we all suffer from a collective dearth when it comes to having a shared language for discussing architecture and software design.

The only way forward is for someone to take initiative and gradually prepare themselves (and their code) for the day when they can open things up with a substantial proof of concept.  You have to be addressing real needs at every step and you have only five minutes to walk anyone through a given use case.  The attention spans and the default fear is just too great.

Even for myself, seeing this and knowing this... there are so many practical business concerns that are impacted by the stream of business data-- and no one else is in a position to address them.  This is why the CPA that picks up technical skills and/or the tech that picks up business skills can end up becoming the de facto controller of the company.  No one else is in the position or has the leverage &amp; connections from which to act decisively.  There&#039;s a whole world of action there that I have yet to dedicate myself to....  I&#039;m not even sure I want to go down that path.  But if someone carried the same intensity to the data and business processes that I take to the code architecture....</description>
		<content:encoded><![CDATA[<p>Yeah, Mark&#8230; I am the &#8220;lone wolf&#8221; here.</p>
<p>After talking to dozens of IT Managers, Developers, and CFO types the past few days, I can see that things are much worse than I thought.  There simply isn&#8217;t enough common ground between these groups.  Even savvy developers that I admire can have radically different terms of viewing things&#8230; and we all suffer from a collective dearth when it comes to having a shared language for discussing architecture and software design.</p>
<p>The only way forward is for someone to take initiative and gradually prepare themselves (and their code) for the day when they can open things up with a substantial proof of concept.  You have to be addressing real needs at every step and you have only five minutes to walk anyone through a given use case.  The attention spans and the default fear is just too great.</p>
<p>Even for myself, seeing this and knowing this&#8230; there are so many practical business concerns that are impacted by the stream of business data&#8211; and no one else is in a position to address them.  This is why the CPA that picks up technical skills and/or the tech that picks up business skills can end up becoming the de facto controller of the company.  No one else is in the position or has the leverage &amp; connections from which to act decisively.  There&#8217;s a whole world of action there that I have yet to dedicate myself to&#8230;.  I&#8217;m not even sure I want to go down that path.  But if someone carried the same intensity to the data and business processes that I take to the code architecture&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Miller</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1867</link>
		<dc:creator>Mark Miller</dc:creator>
		<pubDate>Tue, 20 May 2008 06:25:39 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1867</guid>
		<description>Liked the post, and it answered one of the questions I had from your previous one on this. I used to do a version of what you describe. When I would fix bugs, I would analyze the code I was working on and see if it could be refactored as well. Sometimes it was too much of a hairball to deal with, so I&#039;d just fix the bug. A lot of times though there wasn&#039;t a lot of code touching it. So I&#039;d refactor, take care of the dependencies, and I&#039;d be done. There were also a few occasions where I&#039;d have some free time on my hands, and I&#039;d refactor some code just for the sake of doing it. My fellow developers didn&#039;t particularly like me doing this, because they felt like I was &quot;changing the rules&quot; on them. Up until recently I&#039;ve always worked in group projects. It was like that old saw about the wife cleaning up the husband&#039;s mess, organizing it nicely, and the husband complaining, &quot;I can&#039;t find anything now!&quot; The other developers tolerated it, probably because they realized I was refactoring, and that it was &quot;a good thing&quot;--like eating your vegetables. It wasn&#039;t something they wanted to do, but thought they should do.

It sounds to me like you take this up another level, to not just improving code, but improving how you create solutions as well.

The way you are writing this makes it sound like you are not working as a group member, but just finding solutions to company problems by yourself, and doing it effectively. Am I right?

Reading Giles&#039;s response was interesting to me, because he kind of had me pegged on this as well. I&#039;ve hoped that there are enlightened places to work, but wondered, &quot;Where the heck are they? How do I find them?&quot; The same question you&#039;re asking. The image I have is that these are places that I&#039;d find tough to get into because they&#039;ll always ask what I call &quot;the genius puzzle-solver&quot; test questions. They won&#039;t ask me to code something. Instead they&#039;ll have me solving tricky math problems, which I find rather infuriating, because I feel like, &quot;Look. How about you ask me what my philosophy of computing is and its relationship to society, or ask me about the philosophy of programming with objects, or ask me to define what programming is, or have me define my own metalanguage for data access, etc.?&quot; I&#039;d even be willing to entertain some lambda calculus problems. You know, something in relation to &lt;i&gt;computing&lt;/i&gt; as opposed to testing my &lt;i&gt;puzzle solving skills!&lt;/i&gt;

This is something I realized that I think is wrong with many of the practitioners in our profession: We&#039;re all trying to perfect our puzzle-solving skills. Software development is not just a problem-solving/puzzle-solving exercise. Sure, these are valuable skills to have, but I now think that if puzzle solving is our only skill then what we&#039;ll produce is exactly what you see most of the time: poorly designed hacks.</description>
		<content:encoded><![CDATA[<p>Liked the post, and it answered one of the questions I had from your previous one on this. I used to do a version of what you describe. When I would fix bugs, I would analyze the code I was working on and see if it could be refactored as well. Sometimes it was too much of a hairball to deal with, so I&#8217;d just fix the bug. A lot of times though there wasn&#8217;t a lot of code touching it. So I&#8217;d refactor, take care of the dependencies, and I&#8217;d be done. There were also a few occasions where I&#8217;d have some free time on my hands, and I&#8217;d refactor some code just for the sake of doing it. My fellow developers didn&#8217;t particularly like me doing this, because they felt like I was &#8220;changing the rules&#8221; on them. Up until recently I&#8217;ve always worked in group projects. It was like that old saw about the wife cleaning up the husband&#8217;s mess, organizing it nicely, and the husband complaining, &#8220;I can&#8217;t find anything now!&#8221; The other developers tolerated it, probably because they realized I was refactoring, and that it was &#8220;a good thing&#8221;&#8211;like eating your vegetables. It wasn&#8217;t something they wanted to do, but thought they should do.</p>
<p>It sounds to me like you take this up another level, to not just improving code, but improving how you create solutions as well.</p>
<p>The way you are writing this makes it sound like you are not working as a group member, but just finding solutions to company problems by yourself, and doing it effectively. Am I right?</p>
<p>Reading Giles&#8217;s response was interesting to me, because he kind of had me pegged on this as well. I&#8217;ve hoped that there are enlightened places to work, but wondered, &#8220;Where the heck are they? How do I find them?&#8221; The same question you&#8217;re asking. The image I have is that these are places that I&#8217;d find tough to get into because they&#8217;ll always ask what I call &#8220;the genius puzzle-solver&#8221; test questions. They won&#8217;t ask me to code something. Instead they&#8217;ll have me solving tricky math problems, which I find rather infuriating, because I feel like, &#8220;Look. How about you ask me what my philosophy of computing is and its relationship to society, or ask me about the philosophy of programming with objects, or ask me to define what programming is, or have me define my own metalanguage for data access, etc.?&#8221; I&#8217;d even be willing to entertain some lambda calculus problems. You know, something in relation to <i>computing</i> as opposed to testing my <i>puzzle solving skills!</i></p>
<p>This is something I realized that I think is wrong with many of the practitioners in our profession: We&#8217;re all trying to perfect our puzzle-solving skills. Software development is not just a problem-solving/puzzle-solving exercise. Sure, these are valuable skills to have, but I now think that if puzzle solving is our only skill then what we&#8217;ll produce is exactly what you see most of the time: poorly designed hacks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lispy</title>
		<link>http://lispy.wordpress.com/2008/05/19/how-to-deploy-your-skunkworks-application-and-take-over-your-it-departments-software-development-in-the-process/#comment-1865</link>
		<dc:creator>lispy</dc:creator>
		<pubDate>Mon, 19 May 2008 22:34:08 +0000</pubDate>
		<guid isPermaLink="false">http://lispy.wordpress.com/?p=119#comment-1865</guid>
		<description>Fixed; thanks, Logan....</description>
		<content:encoded><![CDATA[<p>Fixed; thanks, Logan&#8230;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
