The Future Java Developer
Working together with Duke Award winner and Java Champion Fabiane Nardon and the also Duke Award Winner and NetBeans Dream Team member Sven Reimers I have presented talks that discusses the Future Java Developer, the most recent ones in JavaOne Brasil and JFokus. Admittedly, we are not particularly visionaries, and our "future" is pretty grounded on experience today. Although during the talk we make some specific previsions, we're really not trying to foresee the far future nor even debate the future of the Java Technology. The idea is to look at what developers, specially the ones working with Java, can do today, to prepare their own future. Here, I'd like to present some of the main points of the talk.
Software development has always been an unique opportunity. It is what Malcolm Gladwell in his book "Outliers" calls Meaningful Work: "work that is autonomous. Work that is complex, that occupies your mind. And work where there is a relationship between effort and reward -- for everything you put in, you get something out".
An important point about "meaningful work" that Gladwell makes is that it takes time for someone to master. He presents research in different fields -- music, computers, law, agriculture -- that correlate 10 thousand hours of doing a meaningful work, with being successful on the specific area. Gladwell shows that those that put that many hours are successful, and those that are successful, did put in that many hours. Gladwell also discuss that there is no such thing as a "born" genius, in short, the old saying "1% inspiration and 99% perspiration" is not only true, but inevitable.
Preparing for the future means putting now enough of those 10k hours in things that will allow you to become better and relevant in the future. With that in mind, software development gives us some interesting benefits, that for lack of a better word, I'll call here freedoms. Some are old freedoms, existing since software started to be developed, some are more recent ones, that we are lucky to be right on time to benefit from.
Freedom of Imagination
As the Dilber cartoon says: "try to get this concept through your thick skull: the software can do whatever [you] design it to do". Your imagination is the limit. The lack of constraints make software something hugely powerful, and extremely complex. As a corollary, get through your thick skull that software development is hard, and it is not going to become easy just because there is a new language, new framework or new tool. In 1975 Edsger Dijkstra wrote that "Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians." Got the idea of how hard it is? Developers that get excited doing the hard things and that work on their freedom of imagination will always be ahead of the pack.
Freedom to Run Anywhere
Java was not the first, but was the technology that popularized the "run anywhere" idea. This is not a Java-only benefit: since the industry broke free from the lock-in that developers had in the 90's, developers learned that they can write software that runs in multiple environments. Today, in one way or another, all development technologies are trying to give you this freedom. Well, maybe not all... But this is something that we should not "un-learn": do not let yourself become tied to a single vendor or single platform. Choose technologies that give you ample opportunities to experiment with multiple environments, this is the only way to have now the freedom to experiment today with things that will be valuable tomorrow, and also, to guarantee that, when devices, platforms and vendors disappear, you don't get dragged into the drain with them!
Run anywhere has another side that is as important: once a lot of the code can run in multiple devices, manufacturers can create new devices easier. We are seeing this trend with Android: by leveraging developers knowledge and tools, and allowing (even if only to a certain extent) developers to target multiple devices, it created a strong marketplace that many vendors could participate. With most of the development technologies targeting multiple platform, the future will bring even more devices, and the opportunity will be open to those that keep their freedom to run anywhere.
Freedom to Learn and Build
Open source is a world changing phenomenon, and may be the most important thing for software developers. Like Bart, repeat 10 thousand times, "Open Source is good for me, I'll fully embrace it". It is, and you should. If you plan to reach 10k hours of software development, you need to work on software that you are excited to work on, that you are passionate about. And if you want to be ready for the future, you need to be able to learn from what exists and build on other's work, and build with others, and have others building on what you did. If the future is built on what you helped build, you will be in the right spot when the future happens, you'll be making it!
Open source has many other advantages, for companies and governments, and users. But no one benefits more then the developer. The sooner you realize this, the sooner you'll learn to value your freedom to learn and build.
Freedom to Work Anywhere (and with Anyone)
Work from anywhere is a lifestyle that will become more common as time goes by. This has many implications, the most obvious one is that you can choose a great place to live at, and this is not something to ignore. But there is the other side of it: if you need to put 10k hours in something, it needs to be something you like, and chances are, that the best people doing whatever is that you like will not be seating in the next cubicle. Working from anywhere works both ways, for you and the people you're working with. To work with the best people, work with them no matter where they are: they will not move to your area just because. So, choose what you want to work on, you can work on anything from anywhere with anyone, at least when we're talking about software development. That also means you need to cope with working with people that are far away from you, be it physically, culturally, financially, linguistically or whatever. Respect that. Free yourself from the constraints of the work place, pursue your freedom to work from anywhere and with anyone, it will open big opportunities.
Freedom from Hardware
Recently there is some buzz about the 3D printing thing, how it will turn manufacturing on its head. Imagine, you need to manufacture something, and you don't need to worry about building a manufacture plant to do it, all you need is your ideas and design capabilities. Won't this be amazing? Yes it will. But if you're a software developer this is true today! Any idea you have, you don't need to buy/order/install/build a datacenter: you have all the machines you need, 5 minutes away. Dozens of cloud providers are doing the behind the scenes work, all you need is a good idea, and your code. Oh, remember the multi-platform thing we said earlier? Yep, it is valid for cloud too: make sure you don't get stuck to one of those guys, so choose smartly how you go about it. Of course this is not without it's issues, there are many. But the freedom to test, implement, grow and even throw away your ideas is already changing software development. And if you think cloud computing is the same old thing of having a server co-located somewhere, you really need to go play with it right now. Free your ideas from hardware constrains, it takes time, so start now.
The future is your future...
As you can see, those possibilities are all true today. But, realistically, they are not the day to day reality of most developers. But it can be yours. So, what about the future? The future has more and more developers benefiting from those freedoms, and that means, more ideas being able to see the light of day, more open source to learn and build from, more devices and vendors to run the code that is developed, more people working together from different places.
Yes, that does means there will be more challenges: we'll need more code able to run concurrently for one. We'll need to benefit from the multi-core machines that are showing up. Our frameworks will need to support cloud environments. And yes, languages will show up that will benefit from those things better than the languages that exist today, and there will be new frameworks and abstractions that will allow us to be more productive on this environment. None of that is news: this is the development world. Remember, software development is complex, and no matter how the vendors try to put it, it is not about to become any simpler.
There will be a huge amount of developers coming from development countries like the BRIC (Brazil, Russia, India, China) and others (Africa, Indonesia...), that will have access to more learning because of open source, more chances because of cloud computing, and more jobs because of remote work. Software development will be more inclusive, because those freedoms will give more developers the opportunity to make their 10k hours, and join in. More developers means more ideas, more devices, more frameworks, more languages, more communities, and more open source. Software development is a mixture of engineering and art, and more artists can only be a good thing!
So, in short: to survive the future: learn to deploy in the cloud, while keeping your vendor and platform independence. Learn to work with people from multiple cultures, joining the open source revolution, so you become a better developer and a more connected one. From open source, learn to build on top of what others built, and to develop simple solutions so others can build on top of what you do. Think of services, cloud will provide that, and the new connected devices will require it. Neal Ford talks about the "Polyglot Programmer", because "applications of the future will take advantage of the polyglot nature of the language world." Become one!
And, finally, what if you're a Java developer? You're on the right track. You understand the importance of multi-platform and standards. Java is one of the most important language for open source software, and Java's most important features are themselves open source, so you'll be at ease there. Java is also the main focus of the cloud providers and Java software like Hadoop form the backbone of many cloud environments. Most cloud frameworks are done in or directly support Java. Not to mention that all of the important cool new languages that are being talked about run on top of the JavaVM and integrate well with your Java libraries and knowledge.
In the end, what matters is your passion: to prepare for the future, choose something you're excited about, consider the cloud, build it as and with open source software, join in or attract people from anywhere. Keep your independence. You'll do great!