> I've been converting some projects to Clojure for the past few months... > but thinking about them enough to express the issue clearly has so far > always resulting in my solving them easily.
This is GREAT to hear. I personally place considerable measure on accounts such as yours because they offer a degree of historic context - this is something which I find lacking w/re to most contemporary new programming languages. This is unfortunate because there are so many reasons that an eye to the longer term context would prevent CS from constantly re-inventing the wheel. I suspect that unlike many of Clojure's early adoptees I do not produce code professionally or on a for hire basis. My gut tells me that this affords me certain insights that are not immediately visible to those entrenched in the active work a day of developing the language and bringing it to a 1.x reliable production release. My personal interest in Clojure (and programming languages in general) is directed solely towards maintaining/building the systems and environments I use in an area of specific professional concern (fine arts + art history). For the most part, 'programming arts' have few immediate intersections with the particular fine arts applications I concern myself with. When first examining language paradigms which might facilitate tool creation/maintenance related to my formal area of expertise I found that those of the 'Lisp School' (if there is such a thing) best dovetailed with my internal maps, associations, and arrangements of the fine arts subject matter. In particular I've found Li-spy concepts like 'Code as Data - Data as Code' to be of immediate relevance when considering how to best model data that is conceptually abstract and which is invariably fluid and dynamic. One thing I find truly inspiring about Lisps is that over their 50 yr history - as a group or language paradigm - they have consistently "Done the Right Thing". From the perspective of one who routinely handles, preserves, and conserves visual objects at one time created for their aesthetic value this is important. In the arts "doing the right thing" is probably no more quantifiable than in programming. However, as the arts are an older more established field of creation there are certain measures of rightness that can be ascertained over time - "Is a work remembered, if so why? Did it influence significantly - Whom? Did it innovate - How? Did it sell well at auction - How Much?" Viewed en masse these questions can give a good approximation of a work's aesthetic 'rightness'. Prob. no one remembers the picture of a tree you drew in kindergarten - that doesn't make it wrong - but it does not make it not right... Even if you were a child prodigy unless your childhood art satisfied certain of the aforementioned measures we can not gauge it's rightness in the now with any quantifiable certainty (subjective as it may be). We know lisps have DTRT because: a) They are still around and used actively; b) They've influenced the design of nearly every popular language used in commerical production code today; c) They helped inspire many of the language innovations provided by today's popular languages; d) For nearly 20+ yrs they were provided as core language components of many state of the art mainframe, distributed, parallel processing computing environments (that we know about). All of this suggests to me that Lisp as a language has been bolstered by a community concerned with achieving value over the long term and with lasting for 'the long now'. Typically, when creators concern themselves as such they're output achieves a certain aesthetic beauty - an elegance. I believe that things created with aesthetic rightness as a guiding principle are generally shown to be 'better' than those that aren't. Beautiful things are worth keeping, celebrating, sharing, defending, preserving, and maintaining. It is for this reason that I am drawn to Lisp. This tropism towards a lispy approach is not one that has been embraced by the broader jobbing CS community in recent times. I believe this is due in large part to the rise of Internet/web applications circa 1995-2005 which have *required* a rapid/ reproducible pattern of design/implementation which allowed for scalable turnkey deployments of 'enterprise' data - MVC being a classic example. That said, such approaches have tended to leverage imperative style and OO design - neither of which scale well for data and data oriented tasks outside the purview of 'enterprise'. In lieu of this we've seen tremendous effort extended to the formation of standards like XML/rdf which aim towards the production of some sort of "semantic web" and which are geared in large part towards enabling non-programmers to process, communicate, and assemble, data specific to domains outside those typically embodied by 'enterprise'. Where 'enterprise' has benefited from a separation of concerns - code as code/data as data; other domains (often with data that is more nuanced, less empirical, or otherwise indefinite) have languished. Non enterprise oriented domains tend to benefit from the "Code as Data - Data as Code" approach. This is precisely what XML/rdf attempts to facilitate. However, there is a fundamental orthogonality to the XML/rdf approach - the development tool and developers which have thrived in last 15 yrs are for the most part enacting these technologies with languages rooted in an imperative style wrapped up in OO design - these languages and their developers fall over when they try to do "Code as Data - Data as Code". That being said, XML/RDF is not all bad, MVC w/ scripting/SQL works great for lots of apps and Billions of Dollars worth of legacy production code isn't going anywhere soon (nor should it). We're all stuck with situations which require us to continue leveraging existing data into new new and interesting, *interoperable* environments. This is not an intractable situation. Integration of Lisp paradigms into these systems alongside or in place of existing codebases provide a way forward. Though, it seems that there are some who have considerable investment stakes in further intractability and convincing others that the Lisp paradigm is a dead end - I read recently where Tim O'Reilly mouthed off with a suggestion that XML/ Xpath/XSLT has largely supplanted need for a modern Lisp. Note to Tim; </tag> will never parse the same as `)' no matter how much your publishing enterprise *needs* to continue twisting reality to accommodate that perspective... >From a non programmer perspective 'Code people' tend to be overtly concerned with matters such as Type Correctness, Turing Completeness, Data Structure Optimization, b-trees vs hash tables, etc. And with good reason, their success depends on these matters. Still, code isn't written in a vacuum - it must interact - often times with humans. Non 'Code People' tend not to care about b-trees. I recall arguing with a developer at length about a specific design choice pertaining to a reasonable model on semantic relations within a relational db and when/if to limit the number of joins on an SQL query. "We can't do that, the db will CRAWL!" He was right, the db crawled.... but the relation was valid - moreover the need to access that relation was valid. Unfortunately our environment was limited to budged constraints and the tools at our disposal and the relational db was driving the design choices. At that time, I was not familiar enough w/ dbs to recognize this developers concerns and why he was expressing them - whether he understood my *need* to perform the query was an entirely separate issue. The point is, developers and development tools affect design decisions AND they affect the way users influence and employ the software developed with those tools (this is Paul Graham's 'Blub paradigm). Collectively, we now have 10+ yrs of web/network aware production code *and* data most of which has been built with imperative style OO design tools. More recent trends in popular language design seem to acknowledge the need for some move towards better integration of code with data - typically this involves leveraging scripting tools to do so. Still, these same languages and their clans of developers are want to continue encouraging that the data itself be modeled /constructed and accordingly parsed internally in an OO style eg XML/rdf. The scripting is often simply an after thought dropped in as a means with which to 'lazily' avoid compilation concerns vis a vis dynamic data structure. It appears to me that the recent chorus has been that use of dynamic scripting languages as abstraction layers on an underlying core of imperative style OO languages are the way out of this problem. e.g. ECMA script. (Note: ECMA script behind all the bells and whistles is Scheme's ugly step-brother from a now defunct marriage) Despite Steve Yegge's claims to the contrary, Java-script may not be the answer to a move towards achieving more "Code as Data Data as Code", any more than compiled C is the way to build an ecommerce site or Java code makes for non verbose way to write one off record reports. On the other hand, where past LISPs have been highly successful they have floundered in potentially irreversible ways due in large parts to the way they have historically handled compilation to byte code - (e.g. Lucid and the move to C). While there is NO reason traditional Lisp languages can't accommodate modern and future processors - the underlying codebase, developer base, hardware infrastructures, etc. are dwarfed by those of the more successful and popular imperative based OO style languages. In many respects it is simply an insurmountable task to bring the entirety of any legacy Lisp system onto a competitive playing field with the Python, C++, Perl 5.xx, Java, etc. "Doing The Right Thing" entails achieving successful transparent integration of both worlds. So far Clojure seems to have achieved a rightness to these approaches. Mark Tarver's QiII is the another attempt towards a reintegration of Lisp into popular commercial languages though his approach is radically different - keeping a CL core Tarver's approach can allow for massive Type extensibility to the language and compiles down to lisp byte code. Tarver's approach is the more academic of the two and may well never yield/generate immediately commercially viable production quality language inter ops for jobbing programmers. This is why I find Clojure so exciting. So far it has made good efforts to accommodate most of Lisp terse syntax and Functional Style. That said, I take some issue with calling Clojure a pure Lisp style functional language - simply eschewing side-effects does not a lispy FP make. It is just as important that Clojure stands up under heavy native macro augmentation (sans external Java imports), and the ease with which this can be achieved - the book is still out on that one (literally) - if extending Clojure's native macros beyond the core precludes reasonable external Java Interop or is otherwise more painful than CL's FFI what does it get you other further tied to a Java based environment - one that doesn't currently offer TCO or offer native support of complex numbers? I believe that Rich Hickey has the vision, experience, and grey matter to make Clojure the next 25yr language. His enthusiasm is inspiring and as stated elsewhere "infective". It's hard not to watch RH's Autumn '08 screencasts and not feel as if your getting let in early on a big secret. I believe he has a commitment to DTRT. In many ways he's asking a lot of Lispers to place faith in him when he says - "Trust me I've thought about this and looked into it - I've decided this is the right thing". By all accounts he's standing on the shoulder's of giants. Certainly there are a good many that want to see him get it right. There are probably also a good many that would relish him getting it wrong. There some smart cookies in each camp - and despite the relative motivations they are definitely watching on with a strong eye towards scrutiny. If RH is getting it right then a lot of people waiting in the wings want right to be RIGHT - it is doubtful they will put their seal of approval on it without such assurances. Equally if there are not insignificant design flaws then it is important that they be well scrutinized and publicly discussed. The conventional wisdom seems to be that the JVM and similar run-times present an environment where language design is cheap... If RH gets it wrong someone else will get it right next time. I don't accept this - there are far too many wasted resources as it is on failed or compromised languages. With the potential for the first time in quite awhile for new research/ investment dollars to enter the field - now seems like the absolute wrong time to promote forks, fragmentation and Babylon. I also believe that he can have all of these things and Clojure can fall short of the mark without the active adoption of Common Lispers and Schemers ready to let go of some of the unfulfilled promises of earlier lisps. Clojure is a radical design. Not necessarily from an algorithmic standpoint (and i wouldn't know or be qualified to judge anyways) but simply because it is written in Java! If it's true what they say that change happens where you least expect it then change has come to Lisp Land. It takes *real balls* to endeavor to design a lisp in "blub" - get rid of the cons cell - and then insist that the language has the potential for future Lisp superiority in the realm of concurrent, distributed, and parallel processing (my understanding says these areas are a convergence?). Having lost the OS to C - recent lisp lore characterizes Java as a sort of supreme example of all that is wrong with the world. Asking lispers to move (stoop) into that Clojure's Java world is a bold move. In his Oct. '08 screen cast RH says something along the lines of "Java isn't the JVM" Which while technically true doesn't swallow easily, moving your development platform to the JVM is a slippery slope. One of the knocks on CL is the way it supports arrays. Yeah, it's a bit awkward. That said, take a gander out how Clojure supports arrays... And therein lies the slippery slope (Java doesn't even support Java array!). That said, there is no reason one is required to use Java arrays... that is if RH has gotten the rest of it right. I want Clojure to be the right thing. I sincerely believe RH when he says he has gotten it right. I don't see a better chance to bring Lisp into the 21st C. I don't want to look up a year from now and feel like i wasted time learning Clojure basics. I believe the success of Clojure is of considerable importance for the future of Lisp. I also worry that without good participation from advanced CLers, Emacser and Schemers that no matter how "right" the core is the Java influence will lead it down 'a not quite right' or 'good enough for Java' path. This is not to speak ill of Java but as my daddy used to say "two wrongs don't make a right" I look forward to hearing of more more longtime Lispers jumping on the Clojure Bandwagon. It means RH is getting it right. On Dec 6, 11:12 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > I've been converting some projects to Clojure for the past few months, > and I thought it was about time to say something about how much fun it > is. I've nearly posted a couple of times about issues that cropped up, > but thinking about them enough to express the issue clearly has so far > always resulting in my solving them easily. To me, that's a sign of a > good piece of design. > > I've been a Common Lisp programmer for many years. My first serious > project with Common Lisp started at Apple Computer in 1989. I used > Coral Common Lisp and got to know the people who produced it. I ended > up working with them again several times. They're my main customer > now; their business is called Clozure Associates, and they maintain > Clozure Common Lisp, which, once upon a time, was Coral Common Lisp. > It was a message from one of the Clozure partners that first made me > aware of Clojure. She noticed that they weren't the only Lisp-based > venture using a misspelling of "closure" as a name. > > One of the things the Coral/Clozure folks did while I was at Apple was > the design and implementation of Dylan. The early version of Dylan, > before the invention of the infix notation, was probably my favorite > programming language. I worked on a version of the Newton OS that was > implemented in that version of Dylan, and preferred it over any other > programming language before or since. > > I think I've used Clojure enough now to say that I like it as much as > that old version of Dylan. It's possible I'll end up liking it more. > > In some areas, I'm not sure yet whether I like Clojure as much. Is it > as easy to extend the sequence abstraction to user-defined datatypes > as it was in Dylan? Dunno. I do know that I like the unified sequence > abstraction in Clojure. Is the Clojure design for multimethods as > natural and convenient as the CLOS-based one in Dylan? Dunno. It feels > awkward so far, but I do like the separation of protocol from > representation; Clojure may be the first language I've used that does > what I've always wanted there. It's taking a while to get used to > derive. I very much like the freedom to create arbitrary ad hoc > classification relationships with it, but relying on symbol tags feels > a little forced sometimes. It doesn't seem to be impeding me, though, > so maybe it's just a matter of getting used to something new. Are > Clojure namespaces as pleasant as Dylan modules? Hm. Not really. And > the implicit mapping to a hierarchical filesystem feels a little > creepy, as it does in other languages that do it (e.g. Java and > Python). But Clojure's design fits the JVM, which is a virtue that > might trump other considerations, at least for now. > > I've moved pretty much all my spare-time projects over to clojure and > it's been a pleasure so far. It's a nice piece of work. It seemed > appropriate to say thanks for it. So thanks! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---