Some of the biggest revolutions started with an apple. While men and women were dwelling peacefully without needing much apart from each other, it took an apple to shake up the balance and start the evolution of mankind. After a while, it was all due to an apple if that Newton concluded that stars and planets are following the same universal rules as we do on earth, thus opening up the possibility of understanding and exploring the universe.
After a few more years, it took another apple to rewrite the evolution of mankind once more. We were all living somewhat peacefully in the land of Java, if you were on the server islands, or .Net/Windows, if you were a desktop application developer. We were all amazed that we could run the same applications on desktops as on laptops, and we even had friends who would read emails on the their cathodic tube tvs connected to something they called a media center. From a developer perspective, there were a few uber-frameworks to deal with. Java on servers, .Net on clients, HTML with SQL backends on the web. Living in a world of few languages had its benefits. Microsoft was pouring a good deal of its resources on the .Net platform, which kept improving and extending its reach. Java was also maturing, and so were the development environments for it.
This was quite convenient for software designers, as the technology mattered a lot less than the concepts and the implementation. If you consider that c#/.net was basically a clone of Java/JVM initially, you should concur that the picture looked so flat it sounded almost boring for developers.
All of a sudden, year 2007, the apple changed it all for good (in many ways), again. The IPhone showed that there were other options for running applications apart from desktop pcs, or laptops. It showed that PCs can be thin, light, pocketable, look good, and work as phones as well as pcs. That was the revolution. In a matter of a few months, people got acquainted with the idea of using applications on tiny touch screens. Then the IPad came, and the poor laptop went to join the fate of the desktop as the tool for nerds. People who use the PC (I don’t mean software engineers) stopped caring about what operating system the device was running. They stopped caring whether the wordprocessing app could create multi-column layouts, because all they started writing were emails. Who takes care of formatting emails with pretty fonts? The idea of a general purpose PC, with very generic purpose applications like spreadsheets and super feature-loaded word processing applications was being questioned very heavily. The phone and tablet became the preferred content consumption device. We started using a myriad of very small, very focused applications in place of the big office suite guns. The “write once, run anywhere” line, which was already rusting to be honest, was forgotten and erased from all books. Now we write iOS applications with iOS tools, Android applications with a mixture of Eclipse and other tools, WinPhone applications with, uh, well, a myriad of tools, and Windows desktop applications with yet another set of tools. If you’re in the web space, then you cannot count the amount of languages, scripts, and specific technologies for specific needs.
The balance has somewhat shifted from architecture and uber frameworks to technology and small pragmatic solutions. If you like making software, it’s fun to choose the right tool for the job these days, there are quite a few options. To be honest, this mindset change has also to do with the economic crysis which imposed faster turnaround times for projects. It’s often less structure, less organization, more action. Time for hacking!
So what happened to uber-frameworks? There’s surely less and less investment in those. Microsoft was supporting the largest ecosystem of languages, frameworks and tools with .Net. The efforts of the company are now clearly directed towards the mobile space where it’s playing the catch up game. .Net has not evolved much, the loose ends are now mostly handled by the community. Bits and pieces of the framework (XAML, some libraries) were carried over to native (or almost) c++, which could be defined a “lower level language” compared to .net/Java. The new Directx 12 seems to go for a lower level approach as well. In general, lower level is more trendy nowadays than it was a just few years ago. Is this turning us into coding machines without architectures? I don’t think so, possibly it’s the opposite. It’s the mini frameworks, home brewed, that can save the day by pulling together all the tools and giving a structure to all those different-minded pieces of software.
The mini framework topic is basically the focus of most posts here, when I am not digressing about software philosophy or history, as done in this case.