The life of a software developer, episode 3/4: how to be flexible?

software-iron-triangle.jpgAs a software developer, one of the most difficult challenges to have a interesting career path is to be able to adapt to changing environments, even when you are an expert in a specific framework. I think there are 2 majors reasons to explain this necessity: the first one is that technology evolves very quickly, so you have to be able to be on top of the new “killer” programming language (e.g. currently RoR); the second one is that the essence of a software developer job in almost every company lies in the ability of being assigned to different projects with different practices and programming languages. These changes in assignments are most of the time unexpected, unless you consider that you have to expect them all the time! In all cases, you must be efficient and productive very quickly: an in-house software developer almost always has to prove that he can do the job better than a service provider and that internal development offers more advantages than outsourced one. This is of course not always true, but the variety of a software developer job often depends on this assumption. To illustrate that, I remember the case of HCL America, a provider of software development services, loosing its clients because software developers at the client’s company threaten to leave the company if external developers were about to take some of their functions, even for the restricted time of a project.

But the question is, how to be efficient and productive very quickly with new programming languages or development platform? In my previous company, some members of my team and I have had to learn programming languages like JAVA or FORMS in only few weeks. Whereas it may seem difficult to be up to the task, there are some basic principles that help a software developer on a day-to-day basis to build on his current knowledge to acquire new skills.

One of the main asset to get started is simply… Google! I know some companies where software developers are not allowed to use an Internet connexion, and I think that it is completely counter-productive. We have to remember that the developers community is like the gamers one: we don’t like to spend hours looking for a solution to a problem that plenty of us have already encountered; we love receiving tips to go quicker, and we are ready to share our knowledge without any limits to benefit from this community’s knowledge in return. I am never reluctant to dedicate time to answer some developers’ questions on dedicated forums, and I use them a lot when I face a problem or simply want to get started and understand the “spirit” of a new language.

Then, the basic reasoning of any programming language is always the same. A traditional software developer formation does not provide a knowledge of every language, but an understanding of how you can solve a problem in a development context and what are the best tools to do that. Therefore, mastering basic algorithms like Dijkstra or the graph theory, and modeling languages like UML is almost sufficient to develop in every language.

For example, during my first year in my previous company, I had to develop an application in FORMS (language developed by ORACLE). Of course, as it happens all the time, I was asked to do that without even knowing anything about this language. But in only one month I was able to develop a complex application with FORMS and to help other people to get started with this language. The secret of such a flexibility was to understand how this programming language worked. Some basic questions were:

  • Is it a object-oriented programming or a procedural programming? – Which tools are used to develop this language?
  • Where is processing made?
  • How to create a variable?
  • What is the syntax of conditional statements, conditional expressions and conditional constructs?
  • How to make tests on the code?

Any good developer must be able to process quickly this kind of reasoning because of operational pressure. For example, for web applications, with interactive applications becoming mainstream, operational people just can’t tolerate that all their specifications to add interactive features can’t be developed in a timely manner. Therefore integrating Ajax to a code written in Java is simply an obligation if you want to meet deadlines. However, this kind of market pull, forcing technical people to adapt their skills and the technologies they master to market needs, is clearly what drives excellence and motivation among most developers, eager to push their limits further. This is also our capacity to overachieve in terms of flexibility, adaptability to new challenges, capacity of anticipation and rapidity which lead to recognition of the value of software development in any company.

Staypressed theme by Themocracy