Choose Your Battles and Make Your Peace
We all want to be that developer whose an expert in all languages and frameworks. Unfortunately, this isn't possible for most of us.
Join the DZone community and get the full member experience.Join For Free
So, what have I learned in about thirteen years of software development? You either need to specialize, or you need to choose your battles very carefully. In either case, make peace with the fact that you won't know everything or become an expert in everything.
Writing Diverse Projects
Our team also supports other teams with IBM Websphere (Portal, WCM, Liberty), we have upwards of 60 projects on our plate, and with most of our new projects comes the opportunity to experience and learn new technology. This means you don't have the time to get experienced with all of the more modern frameworks and advanced tools.
Coping With Cognitive Load
So, how do you cope with this cognitive load and still get stuff out the door? You simplify.
Think of software frameworks, utilities, and languages as tools in a toolbox. Chances are you'll know how to operate a screwdriver or spanner, and maybe be OK with a power drill, but not so much with the CNC milling machine. So, first see if the screwdriver won't do the job, then look further if it doesn't. Don't try and weld everything if screwing it together is quite sufficient.
For example, learn what jQuery can provide, then learn what Angular or React adds to this. For server-side development, learn what JEE 7 adds to the box vs standard Java, or maybe have a look at Apache projects. Make sure you understand caching tools, storage options (e.g. caching, DB), communication and API options (REST, SOAP, Websocket, async messaging).
Then, when you need to work on a project that requires a certain set of features (yes, technology supports features, you don't hammer features to fit a technology) you pick the simplest set of tools that will provide the desired outcome. Remember: simplicity, maintainability, easy testing, fit-for-purpose.
Shoot for Specialist or Jack of all Trades, not Polymath
In summary, if you don't have the opportunity to specialize in a certain language and its supporting frameworks, or if your projects are very diverse, it is important to know a set of software tools of varying sizes (depth of features or abstraction), know the basic tools really well and be able to focus on resolving problems/building features/delivering value instead of punting the latest framework.
Opinions expressed by DZone contributors are their own.