Calling a developer "Senior" is extremely relative and, to some extent, temporary as technology progresses. The software sector develops at a frenetic pace. It is impossible to compare a technical profession such as a developer to any other non-technical profession. For this reason, we could never talk about a programmer's professional category in generic terms.
What experience or level of knowledge must a programmer possess before they are considered to be a senior programmer? We will follow the obvious path by starting at university (or any other structured training) and moving to the first years as a developer. This approach may work better with other jobs. We are not interested in the years of experience, at least in the traditional sense. And we don't care whether or not the foundations were laid at university or through self-teaching, even though there are countless resources that allow you to do this.
Any company which considers itself to be "modern" must focus on the following when they assess a senior programmer, i.e. during recruitment and promotion within the company:
– Experience, however not necessarily quantitative. It is important to have progressed by working in different projects. This means working with different technologies, building a project from scratch (not necessarily as a lead) or, obviously, critically assessing the work you did –six months ago or last week– and learning from its lessons. Working for ten years while repeating the same tasks is not the same as working for ten years and progressing as a developer.
– Technical skills (good practices). Let's forget about programming languages for a second. We must focus on good practices rather than code. For a developer to be senior, they must have some knowledge about design patterns, agile methodologies, architecture, object-oriented programming, version control and functional programming (if applicable); and knowing something about basic algorithms is always an advantage.
This sounds common place, doesn't it? However, these two points summarize the basis for setting the goal of achieving "seniority". The problem is how to actually do it.
How can you gain valuable experience?
We may have less control over this factor; however, it is possible to gain valuable experience if you make good decisions. Nowadays, there are countless new startups which grow from a more innovative culture; instead of taking the "easy" path of working for a major consulting firm, you can contribute to/learn more in a year from creating an innovative product from scratch. Many of these startups use "modern" technologies, and this is a good way of gaining experience in technologies which other companies do not dare to try.
However, increasing your experience must never take second place while you work as a developer. You can expand your knowledge with open software: Github is currently the biggest existing "catalog" of open-source code. Github contains numberless projects you can learn from and even participate in.
And don't forget your own pet project. Working on a project on your own helps you face challenges which push you forward in your career. Using new programming languages such as Scala, Go, Dart or Kotlin may be useful for the future.
How can you expand your basic skills to achieve seniority?
Programming languages are one of the fundamental tools of any developer. Consequently, you need to ensure you use them as well as you can. You need to go beyond simply learning syntax: you must learn how to use it efficiently and, most importantly, when to do it.
It's great if you can handle three or four programming languages. A perfect balance would be if you could master a general-purpose language such as Java, C#, C or PHP; a scripting language such as Perl, Groovy or Python; a JavaScript language, which is becoming increasingly popular; a Big Data-oriented language such as R; and also begin exploring functional programming with Scala for instance. This would be the ideal situation. But you don't need to know all of these languages in depth. And as we mentioned before, you must learn your working language in depth instead of being restricted to syntax.
Can a senior programmer learn any language quickly? Naturally, this should be one of your goals. To achieve this, you need to have wide knowledge about design patterns, read Martin Fowler and his ideas about architecture with extreme care, and have strong Unit Testing foundations (any noteworthy language contains a Unit Testing framework).
The internet is a source of countless resources, from the BBVA API_Market e-books to all kinds of e-learning platforms.
Two of the most well-known platforms are Coursera and Udacity where you can find all types of courses overseen by professional developers. You can learn about Artificial Intelligence, cloud programming and application development, among other subjects. There are also platforms focused on a specific language, such as Codeschool and its courses on Ruby, Objective-C, JavaScript and Git.
Another excellent source of information is the Safari book online library and its extensive book catalog.
Images | istockphoto