![]() |
|
Spaces home Kyle HuntleyPhotosProfileFriendsMore ![]() | ![]() |
Kyle HuntleyAt the Risk of Stating the Obvious
September 26 Why Domain Specific Languages?Domain Specific Language (DSL) is a technique for crafting a special-purpose languages to create solutions within a specific and well-defined problem space. The potential is immense. They may be a little over-hyped (in some circles), and I think we’re still a ways from business analysts writing their own systems…
Nevertheless, I assert that DSLs are important and will increase in popularity and utility as the tooling improves to allow “DSLs for the masses”. SQL, HTML, XAML, UI and Process design surfaces. These are all examples of DSLs and all revolutionary in power and productivity.
I’m of course not advocating that everyone build a new DSL for every project, but when there are “product families” which share a problem space, the power of DSLs is undeniable.
The power of DSLs comes from working with high level code elements that are “abstract” but not “imprecise”. It’s like one of these trade-off triangles. Everybody knows the scope-staff-schedule triangle. You can hold two fixed, but at least one must move.
With DSLs, the triangle is abstraction-precision-domainScope. If the domain is huge or unbounded, you have to choose between abstraction and precision. This really limits the power of the abstraction, because it can’t be fully precise and is therefore not “code” – not executable even in theory [1]. However, if you limit the scope of the domain, you can raise the level of abstraction without losing precision. This - in a nutshell - is the “magic” of DSLs.
[1] This is closely related to the Platform Independent Model (PIM) fallacy, but that is another tale. July 20 What will developers do tomorrow?At the risk of not only stating the obvious, but also sounding like a prognosticating blowhard… I’d say that developers with a skill-set that only involves programming to a spec should worry about being automated out of their jobs. This has happened countless times through our history of near-continuous economic revolution and there’s no reason to believe that it can’t happen with software. (that was the blowhard part) The frameworks we code against have increased in sophistication and utility a tremendous amount over the last decade, and the previous decade for that matter, though it seems to be accelerating. What was once many lines of code is now few and I expect this trend will continue. Add to that the coming (this is the prognosticating bit) rise of domain specific languages and you can see that the design and the code will be converging and folks who make their living off the current delta are going to feel the squeeze. February 01 Enterprise Library 3 Delta ConfigurationI saw a preview of an interesting new feature in Enterprise Library (EntLib) 3.0 this morning. When released this will allow EntLib users to create delta configurations. In practice, the user first creates a base configuration and then adds new top-level configuration sections called for example Dev, Test, or Production. Then, for each of the nodes in the main configuration, there is a subnode (Dev) which allows you to override the property definitions in the base configuration and specialize them for the different environments. Then you can select the top level delta node and export the XML combining the base configuration with the delta overrides. There is also a command line version that allows you to integrate this into your build process. Good Stuff! September 07 The death of spelling and grammarSeeing incorrect spelling in computer print all the time detracts from the visual image of the correct spelling. I'm not sure if everyone uses that sort of spatial relationship and image to recognize words, but that's a big part of how I do it. It's a visual gestalt of the word and not a remembered sequence of letters. If I'm wondering about the spelling of hand-written words I just recall the print version to see if I've got it right. Or at least I used to. The change toward online media has created a situation where everything can have the "in print" glamour of correctness, no matter how ill-informed or tawdry. Now that everything is hard text online and full of errors, yet still set in "official" looking type, it seems more difficult to just see a word and know if it's correct. Or it could be age. And it’s not just spelling, but also basic grammar and usage. I see this all the time in the debased language on internet forums. Their there loss has surely exceeded they're gains. It's not limited to the internet though; any "official" seeming source can push this creepy plasticity into the language. Have you wondered lately if the correct pronunciation is nuclear or nuke-u-ler? I'm afraid the latter is starting to catch on. This doesn't seem like a trivial twist in the development of language, driven by the explosive changes we've witnessed in the reach of all forms of media. I expect it will have a long-term deleterious effect. August 22 Browser vs Runtime, Atlas/Ajax, WPF thoughtsSome thoughts about the boundary between what we traditionally think of as thin and thick client apps. With the increasing complexity of the browser environment I think the distinction is blurring between using a browser as an execution host vs. a “traditional” run-time as an execution host. In the beginning there was the native client, and it was good. For a while at least, until IT departments found out how expensive it was to maintain that software configuration. So came the radical shift towards thin client, with a goal of zero client side application footprint. There were two options: · Distribute a runtime and enable it to run network portable code. Like Java and Applets. · Use a browser and send lightweight markup over the network.
Well, at the time there were problems with the runtime approach: · Distributing the Java runtime was problematic for many network connections. · Applets were painfully, agonizingly, slow in execution · The applets were also relatively big for the network (then) to carry.
So, momentum shifted to the browser model. Well the browser was small and fast, and the markup was light, but it couldn’t really do that much. Accordingly, the industry spend a decade or so enhancing the browser object models and environments until the browsers became runtimes in their own right, which are capable of hosting reasonably complex software that just happens to be JIT-Loaded from a web server, taking us to Atlas / Ajax today. Atlas / Ajax does not represent any “Best Practices” in development from a purely technical standpoint; there are better ways to do it all. It is the unfortunate reality that the industry has been unable to settle on a single well-conceived runtime environment and has instead taken a drunkard’s walk to arrive at a very unappealing, but relatively standard, programming environment. Ajax is simply a way of trying to paper over the “poor” client characteristics of the browser / markup technology rootstock. If we re-examine the runtime vs. browser decision today, would we make the same decision? · Browser downloads are now comparably sized to full-fledged runtimes and networks are much faster, so the browser no longer has any clear advantage in runtime distribution. · “Applets” or transportable .NET code is plenty fast for the client now, so that reason favoring the browser is also gone. · Downloaded byte-code or IL can still be pretty big. This can be managed with proper techniques, but it is still nowhere near as light as interpreted script and markup.
So it seems that the size of the executable is the last strong fundamental reason to favour the browser model. This must be balanced against the inferior programming model. With new markup-enabled rich client technologies, such as WPF and Silverlight, the applications distributed to the client side run-times will be light enough, but with good user experience plus properly robust and productive development models. This should knock the final pin out from under the browser approach. From both a user and a developer standpoint I look forward fondly to a day where I don't have to submit to the tyranny of the back button. ;-)
August 06 JITting Phoenix... Grid?In the context of all the multi-core processor excitement, I’d like to see a JITter that would optimize to the target parallel architecture. It’s a hard problem but there are ways to approach it. Experimental re-JITting and measurement in sandboxes, with the JIT strategies selected from an heuristic analysis of the code, for example. Or a formal analysis for that matter, and strictly functional code in critical sections could simplify the analysis. The Phoenix project: http://research.microsoft.com/Phoenix/ suggests the near term availability of tools that could really help with this. Of course targeting N cores would just be the beginning, because you could use the same technology to underpin a “Big G” Grid. August 05 Waterfall == CommunismWaterfall projects fail for the same reason Communism failed. They tried to control a big complex system, their economy, from the top down. Planning and control. Well that didn't end up being too efficient or successful. Software projects are big complex systems too. So, the next time someone asks you for an estimate, refuse and call them a commie. Just kidding. Of course I think the idea with the say, Soviet, economy was that eventually there would be a change in human nature and people would gladly labor side by side to the best of their abilities, taking only what they needed and giving all they could in an economy of plenty. Sort of like, hmm, Star Trek? The funny thing is, I've seen development environments where people really do act like that and there is an intellectual economy of plenty, but never in a big command and control environment. |
There are no photo albums.
|
|||
|
|