Thursday, June 18, 2009

Mindless Mind

Lately, I can't seem to get my head out of the clouds. I'm having a bad case of Architecture Astronaut-itis lost in my own delusional mental world of Meta Programming.

It started a few weeks back with the usual complaint.... Why is writing software difficult? By difficult, I mean, beyond the concept and prototype, why do we spend inordinate amounts of time fighting with byzantine syntax, performance and scaling problems, poor test coverage and typos that make our code explode? Why is expressing an asynchronous message ugly and why use text in an arcane and byzantine programming language syntax at all? The world of computer programming is crazy I tell you!!

So I get hung up on MDA, Case Tools and such. I also think back on the code bases I tangle with (literally)... why is it challenging to port to newer platforms? Just push a button and it should work right? C++ to Java? Should be a no-brainer. Why is it hard to de-tangle spaghetti code and refactor? Throw the spaghetti in the DRYer and be done. Push the button. Percolate out some pure functions, apply some spaghetti de-tangling shampoo, and be done.

So here is my next question... what interface would I like to use to resolve my real software problems and where do Eclipse, other IDE's and tools fall short? Well... I've come up with a few answers to that. Got quite disgusted when I saw the wise and all knowing (ha!) Patent office gave out a 2007 patent for using a central model for 'core constructs of all sequential programming languages' for universal programming language conversion (a bit obvious).

Anyway, I'll share my thoughts on my dream software development interface and all the bits and pieces out there that already exist to facilitate it in another post... and all the Intellectual Property fortresses making sure it can't happen in the next 20 years.


  1. The primary issue, for me, is that people refuse to learn from history. Instead of actually improving tooling and capabilities, people still think its those byzantine programming languages that make all the difference. They really believe that if they can't type it out with 2-5 key strokes per token, that it's much too complicated. They like brief syntax and absurd rules to make brief syntax work (python indentation for blocks for example).

    When you look back at all programming languages, none of them really break any new ground. There are expressive improvements that enhance programming correctness through things like OO (everything call by value) and Functional language evaluation (immutable data structures) rules.

    Right now, concurrency is killing programmers working on large scale apps. Because we don't have effective, simple and reusable inter-thread messaging, we are convinced that we need to call methods and use locking (which is hard to get right when we try to be efficient with the tools available). Mr. Hoaar's monitors are an age old solution go controlling concurrent access as well as managing sequential state changes. HTML "coders" don't get to learn things like this. They only use what "APIs" provide them. If its not a core library/api thing, than it doesn't exist, or so it seems to me as I watch what happens.

    We could be using immutable input data and getting copied immutable data as results. If we want something to persist, there could be mechanisms for publishing results in ways that guarantee consistency. These are things that people, who write code in concurrent environments (such as Java) have done for years. There are educated people and there are yet to be educated (the ignorant masses) people.

    Once you are doing things using concurrency to improve performance, you can create such nightmarish operational ordering issues that it's often hard to get mutability correct no matter what mechanism you use.

    We all seem to be convinced that a new language will be our salvation. We have to have python and ruby for web apps because we have to change them all the time, and the people writing them are so uneducated (it seems) that every day is a patch day, and its much easier to patch by editing a script and being done.

    So many wait for someone to invent the magical, mythical "This language solves all problems" language. It's not the language that will fix things up, in general.

    Tooling is important, but so is simplicity. We need simplicity so that we can continue to improve and enhance software development without having to rewrite 10 man years of code in 2 months, and get it correct, so that a new tool for messaging to a new customer can be incorporated.

    What else is wrong, the web tools... There's far to many of them. But that's another rant...

  2. Testing the template...

  3. This Wiki article on
    Domain Specific Modeling covers a large part of the problem space that has me in a tizzy.