To become a respected professional in software development today requires a high level of expertise in a variety of skills. At the very least, you need to be able to translate your English solutions into software implementations. Not only does it need to be technically correct, it needs to be commercially viable. Therefore, it doesn’t hurt to have a solid understanding of business. This enables you to effectively gather and negotiate requirements from your customers and ensure your software survives the test of time. Business demands that software be a long term investment that pays dividends over years or even decades. Very rarely is software expected to last only weeks. If it did, it’d be a poor investment.

Demand For Less Skilled Development

The demand for software developers in the US is rising, yet the amount of skill required is diminishing. Computer programming has regressed into finding the correct set of software libraries out there and stringing them together. How else would you explain the meteoric rise of software or platforms as a service? Yes, there are times when you’ll have to figure out which components fit together the best for your particular problem. And, if there isn’t a component to be found, you’ll have to create it yourself. But, chances are, that software already exists. In which case, your job is just a boring sequence of repetition: pick out the libraries, combine them, and test against your needs. The funnest part of our job is being reduced to nothing more than just following blueprints.

But wait just a second! You might argue that programming encompasses a lot more than I’ve stipulated. Sure, we may be building structures that have been built before, but they need to be personalized to fit the needs of a particular business. That surely requires some degree of engineering and ingenuity, right? And to this argument, I concede. Yes, business needs are very diverse and particular, however they’re beginning to converge.

Therefore, the picking of components to satisfy business needs are a prime target for automation. Given that there are so many potential combinations, it is the perfect problem for a worker that never sleeps, eats, or tires. The age of human-assisted software development is dawning on us. That is, computers will be performing the majority of development and humans will simply assist their endeavors.

In this new era, visionaries and testers reign supreme. The visionaries will be responsible for coming up with the grand plans. They will determine what problem needs to be solved. This boils down to describing expected output given an input. The testers will then write the tests that assert the problem is indeed solved. That is, verifying the correct output was produced given an input. The computers are now responsible for transforming a given input into a desired output.

Genetic Programming

At this point, you might be wondering how this miracle of automated software development will even be possible. The answer is genetic programming. Software will mutate their instructions in an effort to favorably evolve to become more fit. After each mutation, they’ll self-assess whether or not they’re trending towards the desired output. This assessment of fitness is provided by tests. A lot of tests. These are tests that encapsulate business logic via time, space, and functionality constraints. The fitter a mutation is, the more tests it will pass. It’s worth reiterating that we shouldn’t be concerned about the details of the generated implementation. In fact, it’s entirely plausible that multiple solutions meeting the requirements will be produced. Reducing this set will simply be a matter of adding more constraints.

The traditional role of the software developer will become obsolete. They’ll soon be realigned to focus on designing, developing, and maintaining tests. That is, programming of computers will become unnecessary, as they will program themselves. This paradigm shift in development is absolutely beautiful. A change in business requirements, stipulates a straightforward change in a test, which triggers an automated evolution of the software. Gone is the pressure of trying to hack existing code to satisfy burgeoning requirements. The computer will take care of that; for it has no qualms of starting from scratch. It doesn’t care about maintainability and is ultimately more compatible with the changing requirements of the business.

With all that said, I’m extremely excited and ready to embrace a lifestyle of investing in and shifting my focus to testing. What about you?