The longer you work as a software developer, the most likely you are to need to learn a new language or development stack. As I’ve done this many times, I’ve discovered a few tricks that help get me productive quicker. So, what are those things?
Package and dependency management
Package and dependency management is the first thing I try to work out because upon this foundation we can introduce increasing levels of sophistication. There are two sub-aspects to this point: finding dependencies and importing them.
Dependency injection frameworks
If we are to build testable software, we want to be able to swap implementations in and out at will. It’s practically impossible to maintain a testable software solution without some form of dependency injection.
All the major languages have mature solutions in this space: Autofac (.net), Ninject (.net), Guice (java), Spring (Java), and php-di (PHP).
Unit and integration test frameworks
Which conveniently leads on to testing. When I’m stepping into a new eco-system, I want to make sure I start with testing at the forefront of my approach.
Once I’ve worked out how to introduce dependencies into my solution, and how to quickly swap implementations in and out, it makes unit testing much more manageable.
Regardless of the technology space, almost all eco-systems have adopted the test-driven development paradigm, including infrastructure as code such as with Chef. In this space tools like Test Kitchen and Inspec enable engineers to develop and test rapidly.
I’ve demonstrated my top three tools for rapidly accelerating productivity when adopting a new language. Would you change any of these three? What would be number four?