I’ve been thinking about something for quite some time now as a developer.
A lot of tasks in developing/programming repeat themselves; even if not as a whole, a lot of development is just reorganizing/repackaging/repurposing.
And while libraries, plugins, APIs, IDEs, and just well planned and informed coding, can make things more efficient; it seems that this can be changed.
Programming, good programming, can be challenging, and machine written code can be messy and inefficient when not done well (just look at some MS front-page HTML markup 🙂 – not programming per se, but same concept).
It seems that an ideal would be:
- data sources
- output formatting/architecture
than an AI type programming system goes and writes the rest.
I know this may seem a massive over simplification, but particularly with the strides that machine learning and neural networks are making, this doesn’t seem so far fetched.
And while a lot of publicly accessible code on the web may not be the highest quality, there’s a lot of example functionality and documentation out there that could be utilized as raw data.
Designing a system starting with “loop through this construct and do this with each” and lego blocking your way up to larger and larger constructs until you have a viable programming AI that can actually follow instructions and build programs/applications/websites.
And I know there’s drag and drop and visual programing, but what I am talking about would be much more sophisticated and flexible. A better, more efficient, less error prone way of writing software.
Wolfram alpha seems to be along this vein at least somewhat with high level building blocks, and along with high level programing languages, but perhaps my point is that those aren’t high level enough.
I think programming could evolve into a more architecting / engineering field where less and less low level knowledge was directly used. Where low level system knowledge is useful background to architect the whole, rather than a hands on necessity.
And it seems an AI that can construct its own tests based on a wide array of low level tests to see if a given solution fits, could be feasible. And perhaps vet code samples from a sea of code to evaluate usefulness.
It seems that longer term there could be better ways to build software solutions than hiring individuals to write code directly.
What thoughts do you have on what would be required to build such systems?