Sometimes, when I interview someone, they’ll mention a favorite piece of technology (a common one these days is Go). Once they’ve discussed its merits, I ask them what they don’t like about it. Not being able to come up with a downside indicates a lack of experience.

No technology is perfect for everything. To me, Python is great for prototyping, modifying business logic quickly, and for interfacing with third-party libraries, but it’s difficult to manage in the context of a large organization because you can do basically anything you want. Java, in contrast, enforces excellent API barriers when used correctly but can be a lot of tedious typing (AbstractWidgetFactoryFactoryBuilder, anyone?) when you’re trying to test something quickly. Go is fabulous balance of readability and performance for concurrent programming, but its dependency management system is a nightmare by design, and depending on your use case, it can be clunky when trying to iterate.

It takes immersing yourself in more than one language/database/editor/etc to see the benefits and downsides of the first. The more tools you use and contexts in which you use them, the deeper you understand your craft. If you expose yourself to new technologies and push yourself to discover their limitations, you’ll form opinions, gain experience, and ultimately accelerate your growth as an engineer.