Know your tools

Lots of learning material about programming languages is available today, but I see there’s very little-to-none material on which tools are available for developers.

One reason could be: tools are a temporary commodity, that might be replaced in some years. That’s true, some softwares are made available and after some months or years, they’re not updated anymore or they don’t introduce new features or they are just burned out by some new brand tools.

But for some programming languages, such as C++ or Java, some of those tools represent a foundation. Think about compilers, such as gcc, cl.exe, mingw or clang: they’re around since years or decades, but they’re not deserving all the attentions they need to have, even if they’re fulfilling the most important job, translate our code into machine code.

Think about development environments or editors: Eclipse, Visual Studio, Xcode, vim, emacs. These softwares make the developer’s job (sometimes) easier, allowing us to write code with less effort and help us debugging it.

Tools improve our job

As we are in 21st Century, I strongly believe that a developer (but concepts could be extended to any IT or not-IT job) that cannot understand and work with his/her environment cannot be defined with this job title. There’s a huge amount of available tools that can improve our job tremendously: project management tools, dependency management tools, control versioning systems, testing systems, mocking tools, etc. Start learning them as long as you learn a programming language.

Are you learning how to code in C++? Try to learn some tools like CMake or autotools: they will help you to organize your project and dependencies without headaches and without writing very long commands on the Linux shell or adjusting all the paths in Visual Studio. Are you learning how to code in Java? Then try to learn maven or ant or gradle for the same reasons explained for C++: organize your projects easily. Other programming languages offer smart tools as well: pip or virtualenv for Python, bower and grunt for JavaScript and so on.

Would you make your work even more flexible? Give a spin to containers and to continuous integration/continuous delivery: learn how to use Docker or Vagrant or how to setup a Jenkins server, they will save hours of your time. Don’t just focus on the programming language: focus on the environment and grow with it. Look for the best tools available on your platform of choice. Don’t you like a tool? Try another one, there are alternatives, both free or commercial. Be comfortable with them, they may improve your workflow, but please, keep learning!