Every now and then I recall back to my earlier days some 15-20 years ago when I was just starting on my journey into the programming world. It was an exciting and in many ways a romantic time. I used to get interested in many different things and fall completely for them letting them engulf me and consume all of my time and energy. I got busy with hardware assembling computers myself and even manually building some simple components from discrete elements. I programmed things to interact with hardware. I was jumping into various programming languages, technologies, libraries and tools and was spending days and weeks experimenting with them, out of curiosity, genuine interest and no agenda whatsoever but to satisfy my curious mind. Time seemed to have no meaning and the priorities were simple: get engaged with something cool and don't think of the outcomes of your decisions. Everything would attend to itself. And it indeed did that back then. Glorious wonderful times.

They are gone these days. Something subtle and intangible has changed, we can all feel it in the air but not immediately understand what is different. Here's the thing: priorities are different now.

What was one thing we didn't do back then?

We didn't think of the economic and career effects of our interests and decisions. We simply followed our path no matter where it would lead us. We got interested in things and technologies for the sake of them. Everything about computers seemed to be a self-contained purpose in itself, no need to seek out external application or real-world usage scenario. Technologies were self-fulfilling. We were young, the world was young and we knew there was a place for all of us and opportunities to make use of our versatile interests. And it worked out somehow.

Today we are different. We are old, mature and pragmatic. We are no longer interested in computers and technologies themselves, but in powers they allow us to wheel. We have our objectives and goals and they no longer lie in the technologic plane. They have aligned with the world around us, they now have certain business, economic or social context. We wish to get things done and we regard computers and technologies as an instrument to achieve those goals. To that effect we seek out the tools that allow us to perform our work in the most efficient manner.

And without regret we toss out the tools that get in our way and slow us down. No matter how cool they are.

Remember what were we doing back then? We would all install Linux on our personal computers and spend literally months configuring it, recompiling the kernel to add a small tweak. We were all programming in low level languages like C or later C++. We loved hacking things, working directly with pointers and manual memory allocation, on occasions going down to the machine code and doing some black magic there. Remember the COM technology? Paired with C++ it would certainly seem like a sadistic environment by today's notions. So it was in fact but its complexities excited us. We thrived at being able to write and understand the most sophisticated code on the face of Earth, to pride on ourselves and because it served as a rite of passage, to be able to understand that what to the others would look like an alien language. And we were happy that we were. The time didn't matter, we were interested in the process not the result. If we had any goal whatsoever, working on what would be called these days a "business domain" only used to take a small portion of the time. The most of it was spent on all kinds of "support activities" that the technologies were requiring of us: configuring the project, coding the mechanisms that would serve as a foundation of the future application, testing it in various scenarios to identify memory leaks. By my personal estimation, some 40-70% of my time was lost dealing with the technology, with any luck leaving me 30% to deal with that problem domain of yours. And it was okay that state of the things.

But not today. We now only wish to focus on the primary goal of our project and not be distracted by fighting with a technology. We have no time for this. There is an urgent business opportunity to take, time-to-market is critical and we must be flexible to quickly react to the changing demands. The technology is not allowed to interfere or slow us down. We'd prefer not to notice its existence at all.

That's why we're programming in high-level languages like Java or C# these days. Most of the routine tasks have been taken care of: project configuration, memory allocation, garbage collection. Even the standard tasks are now supported by numerous libraries so that we don't need to reinvent the wheel. The integrated development environment has overgrown an advanced text editor and has become a very convenient tool indeed: think refactoring and code analysis tools. We can focus on our problem domain and almost forget about the technology.

Conduct an experiment. Pick any programming forum on the web, in any spoken language located in any country and browse through their topics first for the C++ and then for something more high level like Java, C# or Visual Basic. See the difference? The issues and problems discussed in the C++ category mostly revolve around the intrinsics of the language itself, people trying to understand the complexities of certain code constructs, peculiarities of the compiler behavior, the consequences and the side effects of their particular coding solutions and so on. In simple words: people struggling with the technology. Contrary to them, the folks using the higher-level languages mostly ask how to implement a certain functionality to which they quickly get an advice for a library support out of the box, or they inquire if their coding style is consistent with the best practices and how they can polish it further to make it even simpler, cleaner and more streamlined. These are the two worlds lightyears apart.

And that's indeed how I used to work then and how I work now. Back then I liked smart and sophisticated solutions. I coded things smart and when I reviewed my code I was looking for ways to make it even smarter. Smart included dealing with more technological peculiarities, environmental specifics and certain edge cases. Would I want to do it nowadays? No way. These days I like to keep things simple. I can't be enticed my smart and sophisticated code structures. When I review my code I look for ways to make things simpler, cleaner, more streamlined, more maintainable, it's what constitutes code quality to me. And when on occasion I see that a particular code piece can't be made any simpler, I rejoice. Do you know one definition of perfection? A perfection is achieved not when there are no more things to add, but when there is nothing left to remove. That's it, the defining philosophy of the modern software development, which was taught to us by the progressive designers of the minimalist movement.

With the modern tools I've been seeing the efficiency of my time usage gone up to 98-99% as compared to earlier 30%, that is the portion of time I spend working on the useful functionality of my application as opposed to dealing with the technology issues. And you know what? I like that. I like that very much and I don't regret at all not having "enough" technology to think about.

That geeky interest seems to have gone away. And from what I can tell it's been a trend for a while.

It's hard to say when exactly the change in the mindset took place, but I estimate it silently happened in the last 5 years, some time between 2005 and 2010. Around 2008, my guess. From that time on the geeky culture and priorities have been in clear and irreversible decline worldwide.

Don't believe me and need a proof? But you have it already. Look out. What noticeable things happened in the last years that are very indicative of the changed priorities?

The explosive success and the wide penetration of Apple products, which were designed with the simplicity, efficiency and usability in mind. They won millions of users including former geeks. Even they appreciate things simple. The iPhone seems to have become the golden standard of the mobile design. Had previously released mobile environments like, say, Windows Mobile that kind of success? No, they stayed in a very narrow niche and only started to come to the daylight when HTC brought their Sense environment onto their smartphones which attempted (quite effectively) to camouflage the geeky internals of the Windows Mobile. And here's the Android of course which enjoys the wide acceptance thanks to its streamlined user interface oriented at normal users, and not because of the Linux it's based on like some believe. In fact people couldn't care less what's inside it for as long as it is convenient and efficient. If it is, it will sell.

And a few words to say of the Linux which made wild promises to win the users worldwide and find their way on every personal computer in the world. Which not only it didn't, but instead began to lose their prophets who started to choose alternative environments over it. Windows, MacOS, whatever eliminates the need for them to waste their precious time painfully configuring their computer and the hardware but instead allows them to go on with their lives and the more important things to do.

And you can see it happening everywhere, with different technologies, products, companies, people. Every industry, every country.

Why am I telling you all of this? Because our profession has changed and it's about time we realized that and moved along. Here are a few takeaway lessons from the story for you.

The first being the understanding that from now on every new product, tool, library, technology or programming language oriented at geeks and designed for geeks will ultimately and inevitably fail. If it's not designed with efficiency, productivity and ease of use in mind it will fail to gain traction no matter how smart and sophisticated and deeply scientific its mechanisms are. With any luck it might take a niche but it is most likely it will go straight into the underground possibly winning a few connaisseurs but that's it. People will choose the tools and products that make their work more efficient and their lives easier and more fun, even if those tools and products are dumber. The world we live in has changed, it's become more active, more rapid, more efficient and there's no time for procrastination and for the unnecessary. Whatever takes a long learning curve, requires a PhD in architecture astronautics to comprehend its ingenuity and be able to use it, whatever misses a good documentation and tutorials to instruct new adopters in the most efficient manner but instead will leave them alone with the thing to black-box analyze it, debug it and perform some spiritual ritual to make it work, it will see its potential users go by without even a farewell look. Users will choose whatever is easy and efficient and for what they'll get help, including the help on the web from the other adopters. Be sure you're developing the right product for these times or don't bother at all.

The second observation concerns the constantly shrinking job market for geeks. Companies are becoming more pragmatic, time and costs are a cornerstone of the modern economy. You have seen how companies have been making decisions to optimize their operation, improve efficiency and decrease their reaction time to market opportunities. This process will no doubt chew their technological support tools and then sieve what is left to keep only the most needed and the most efficient tools. I predict that within the next 10 years, by 2020 that is, most of the companies will migrate to the modern and efficient products and tools and will toss out the old medieval instruments. If you're still a geek by that time you will find yourself struggling to find employment. The only options that will be left to you is to look among few surviving stagnating companies, certain research facilities, academia or with any luck a few companies that will still be cultivating the geek culture (which I doubt). While the majority of the companies will be looking for people gladly working with the modern tools and not being geeks but instead being social and skilled in many areas including the knowledge of a particular industry, while the tools will be regarded and valued as nothing else and nothing more than... the tools they are.

And the third part is that you can't stop or ignore the process, no matter what side you are on, you being either a programmers not ready to enter the new world or perhaps a company that is reluctant to change their ways. In the latter case you've probably been observing the change when you're hiring programmers. I've been hearing many companies complaining about how harder it's been getting to find skilled people. I've heard those complaints originating from different companies located in different countries on different continents. The one thing that unites them all is that they still administer the old-type technical test to their candidates. That sort of a screening procedure where you ask deep technical questions into a technology in use and expect candidates to give you an immediate and precise answer to your purely factual inquiry. Yes, I know, more and more people are failing to respond with the correct answer, to your unending frustration no doubt. Many believe it's because the candidates are getting dumber, lazier, willing to sneak in without having a deep and profound knowledge of the technologies they use. That's not it. You're missing the point. People aren't choosing to become technology experts these days. They don't see value in it. Back then you could be an assembler programmer or a C++ programmer, possess expert knowledge of your tool but know nothing about anything else. You could know your part and hate databases, for example, despise any work related to the user interface and "prettification", ridicule your users and avoid any contact with customers. It was possible back then. Because your were the "programmer guy", and there was a "database guy" who took care of the database (and knew nothing else), there would be a "designer girl" who would draw the UI, the technical writer to prepare the documentation because programmers lacked writing skills, the marketing specialist to present the product and everyone would live happily. But not these days. People want to become a bit of everything. They're stopping being specialists and turning into generalists. Because that allows them to accomplish way more work and become more useful. How wonderful that it is exactly what the companies out there are crying for. People are adapting and you're seeing it. They put less stocks in knowing one technology deep inside but instead broaden their skills. Programmers of today know many things: programming languages, tools, libraries, operating system configuration, the processes and methodologies. The more entrepreneurial ones also have knowledge of marketing, advertising strategies, accounting and even legal matters. And all of those pieces of information are equally valuable to them so there is no particular need to prioritize certain technology knowledge or any clear benefit in investing all of your time in becoming a narrow technology expert. It's inefficient, not needed, not asked for and... let's be honest, by being a geek you don't get the girl any longer. Social skills and knowledge of a particular industry far outweigh deeply knowing the algorithmic internals of the Standard Library or remembering the C# language specification. In addition, with so many things to occupy one's mind it's difficult to retain little details of what you ever used, so people can't be bothered with remembering the factual trivia to satisfy your requests, especially if it is easily recoverable on-demand and all it takes is 15 seconds with google to quickly get it back. If you don't see what's been happening to the industry, you're doomed to sit frustrated while your technical knowledge testing nets will be pulling fewer and fewer fish every year. The times of specialists and experts in one narrow area have gone away. Get over it.

I suppose it can be frustrating and even maddening to certain representatives of both parties to see the profession and industry going a different direction from where they would like it to go. How shall I respond? It was inevitable for once, and don't be sad, there are new challenges and new opportunities in the new world that you're encouraged to explore. It's time to move on.

And for the rest of us who've already moved into the new pastures a good time has come. We can rise above the code and focus on building great products that will impact the people's life and change the world. Isn't that wonderful?