Where Imagination and Technology Collide

Throughout our lives we rely on the technological designs of others. From baby formulas and clothing to transportation and education the world we live in is an extraordinary mashup of legacy and new technology. For the majority of tech we use, it’s a process of adopting some one else’s standards. We treat the majority of our world as a black box.

This is no different in the space of software. In fact due to complexity of organization we have an ever growing reliance on layers of software that we don’t understand which knowingly or not inflict constraints on derivative work. We’re constantly exploring other group’s thought systems and mental constructs in order to accomplish tasks. And based on time restrictions we are forced in many cases to adopt “techno religions” without spending sufficient time understanding the nuances of previous design decisions.

c++ is killing me softly

In my work life as an engineer I’ve coded and recoded many thousands of lines of software, the majority of which is written in c++. I struggle to maintain consistency between several engineers working with the same source, and git has recently become a helpful tool for that task (if I can only get them to embrace it).

We are often stuck writing throw away customized interfaces and massaging data to conform to legacy software. I categorize this activity as painfully tedious. But this work’s pain was only exasperated by needless restrictions and complications of the c++ language. On a regular basis I come to the conclusion that the folks in charge of designing the language standard don’t use it for real problems.

The standard libraries for all their utility and potential processing speed are an obvious product of group think and feature bloat.
What’s wrong with c++:

  • The standard is hundreds of pages long and chock full of surprises and exceptions
  • The abstraction of the language is mired in a swamp of backwards compatibility with ill thought component libraries
  • Looking through those libraries source code exposes a cacophony of arcane bloated syntax with splashes of needless complexity to interpret objects and compile down to assembly. No offense to the poor ladies and gents who manage the libraries, they are doing the best they can in a bad situtation
  • Confining structures to heirarchies of static types introduces a level of syntactical weight and complexity in exchange for a first order level of testing and in many cases a minor boost in implementation speed. It is not a fair exchange in my opinion, the casualty is the inhibition of developer clarity and creativity

The root of this design disaster may be assembly or it may be group think, or the dreaded feature bloat. C++ may be the perfect language for some developers but I can’t count myself among them. Still with many years of sunk costs, I’m bound to it as an unwilling servant (in my day job). Over time as a painter is affected by their brush and canvas, my thinking has been bent in ways I wasn’t capable of seeing until I explored other programming languages. It causes me to wonder at how deeply our native spoken language influences the way we think (another great reason for continually learning new languages be they software or spoken).

Refactor Technology to Best Fit Your Imagination’s Need

It’s clear I have very strong biases for certain styles of software development tools, but there’s a general principle beneath the frustration.

To unleash our most creative abilities, we must master our tools. We must make them our own. Only by crafting tools that are an extension of ourselves and the way we think, can we realize the depth of what we’re capable of

At the very least we should make a regular effort to experiment with tools that better harmonize and amplify our personal style of thinking.

  • Leland

    I agree with you wholeheartedly Mark. There are so many layers of software and languages that it is extremely difficult, if not impossible, for one person to completely understand his code from assembly language all the way up to the top level language he is using.

    I think what you are really getting at here is that being able to *change* our tools, languages, and work habits is the most important point for staying up to date and being able to continue making our dreams.

    I tell you what, switching from writing C++ to something like python, javascript, php, and actionscript is like going from night to day. The difference is just massive. These days, knowing where to find important libraries and open source code is just as important as knowing the basics of the language that you are coding in.

    As was once said before “Standing on the shoulders of giants..” is the way in which we are able to continue developing new ideas and technology. And if you think about it, mankind's progress throughout the ages has always been measured by the tools with which they have available to them. We started with basic flints and hammers, and now we have computers, microscopes, and a whole host of other tools.

    In the future, I foresee the end-game tool as being the creation of strong AI. After this tool has been created, our world will be absolutely changed. The laws of reality will be bent by the exponentially increasing intelligence of technology that we will have created. AI will measure time in milliseconds and nanoseconds wheras we will be stuck at the seconds level still. The AI “society” will perform a thousand years of progress in a single minute of real-time. Can you imagine what that would be like? It would be as close to heaven or hell in the real world as one could imagine.

  • http://steamcatapult.com/ Dave Pinsen

    “As was once said before “Standing on the shoulders of giants.”

    Newton said that, though some say it was meant as a dig at Hooke, who was a hunchback.

  • http://www.victusspiritus.com/ Mark Essel

    I suspect we would be percieved by such potent intelligence as both
    parents and children.

    But let's not count out our ingenuity and creative ability, we may
    still have depths of intellectual abilties that aren't fully utilized
    (3D world building- dreamscapes).

  • Leland

    I'm looking forward to that. :)