When I started my career in software development over two decades ago there was no such thing as a specialist coder.
Programmers as we were called in those days were required to do a mix of jobs. Gather business requirements, design the solution, code it and get it implemented. This included the graphic design, the end user training, etc. This attitude of “do it all” has served me well in my career. I have seldom been unable to solve any technical obstacle myself.
Today it is very different. Most developers specialize in front-end, back-end (server side) or ux (suer experience). Graphic design has diversified just as much.
This is not a bad thing, as software development has intensified and the range of tools in use today makes it impossible for anyone to be an expert in all of them. What is of concern though is that together with specialization comes an attitude of compartmentalizing.
It seems that many modern day coders struggle to think outside their immediate scenario, and cannot come up with innovative solutions to obstacles in their path. They seem resigned to only doing a single task. Even the thought of going outside the scope of their immediate task to look for a solution is often considered incomprehensible.
How do we fix this? I for one want developers that not only think outside the box, but also comes up with solutions when they encounter obstacles. There is always a solution, it just depends on you willingness to look for it. Sometimes it might take all night, but if you persevere you will succeed.
So i guess in my eye at least, perseverance is the key to being a successful developer. I have battled through many a night find a solution to a problem, and I am a better coder as a result. Whether you know one or ten programming languages is of little concern, what matters is being able to sort issues out yourself, and not to helplessly wait for guidance from the next person in the chain for a solution.
With the right attitude a developer (whether ‘specialist’ or not) will be invincible, and will always be able to move between technologies. Having a ‘no defeat’ attitude is a considered it a coding superpower in my books.