Last week, I attended a webinar hosted by One World Coders and focused on becoming a better software developer. During the Q&A at the end of the session, someone asked how to tell the difference between a junior and a mid-level developer. While there are undoubtedly many ways to rank developers, and individual organizations almost certainly have their own definitions, I propose the following.
For me, a junior developer is someone who knows the basic syntax of a programming language and can write units or modules that produce given outputs for well-defined inputs. While a junior developer might be able to write simple applications from scratch, I think it more likely that they work with specific parts of larger applications, possibly under the direction of a more senior programmer. Also, I would expect a junior developer to be able to code effectively in only one language. The term I would use to describe a junior developer is “learning.”
A mid-level developer is one who can write a moderately-complex application end-to-end in a language of choice. This person probably has an understanding of how to interface with networks and databases in that language. However, the design of the system may be naïve, it may rely on language-specific constructs, and it may not be tuned for optimal performance. Where a junior developer may be struggling to tackle a first language, a mid-level developer should be comfortable in at least one language and beginning to dabble in others. I would describe a mid-level developer as “proficient.”
Senior developers think about problems in abstract terms rather than how they might be solved with a given programming language. Their code will likely be more elegant than that written by their less experienced colleagues. They often have an ability to make the complex seem simple, and they will probably be able to improve performance by picking the most appropriate implementation for the situation, sometimes just by making small and subtle tweaks. Senior developers know the finer points of their languages and employ patterns and idioms. In short, a senior developer is an “expert.”
While these categorizations are somewhat vague and subject to interpretation, a key element that is absent from each is a specific number of years of experience. Certainly, a senior developer likely has been programming far longer than a junior, but I do not think it can be said that one transitions between levels based on a set schedule. It is a matter of what one can do, not how long one has been doing it.