The Cloud, micro-services and distributed systems are all the rage these days. But, in the end, each service and software component is implemented in some programming language. In the olden days, most software was custom made and very little was shared beyond built-in operating system libraries and the standard library of the language itself. These days, software is constructed very differently and is more often of an assembly of third-party libraries with a little bit of glue code to hold it all together.
C and C++ represent the olden days. Back in the 1990s, I wrote desktop application in C/C++ and mostly used the Windows 32 API, the C++ STL and maybe a couple of third-party libraries. C/C++ have no central repository for libraries or a packaging format. Each platform comes up with its own way.
The introduction of Perl really brought the idea of an eco-system with lots of third-party modules to center stage. The Comprehensive Perl Archive Network (CPAN) is accessible through www.cpan.org. It has been online since October 1995 and currently has 179,934 Perl modules in 35,044 distributions, written by 13,009 authors and mirrored on 248 servers. Talk about community and staying power!
Python has had a lot of ups and downs with its packaging story. Similar to CPAN, it has PyPI (Python packaging index). You can use pip to install packages from PyPI (or private repository). You can create and upload your own packages???and in your programs, you use the import keyword to be able to use third-party packages in your code.
Java packages its components in .jar files that are simply zip files. If you put a .jar file in your CLASSPATH then you can use it in your code. Java has an elaborate namespace scheme that is reflected in its packages. Java doesn’t have an official repository, but Maven serves as the unofficial repository for Java software. Go to https://search.maven.org/?and look around.
RubyGems is the Ruby Package manager. The public repository is found here. You can distribute and use programs and libraries (in standard gem format). The gem command-line tool allows finding, listing and installing gems. Later you can require a gem in your Ruby code to use it.
Go relies on packages being in a standard location???the pkg sub-directory of the workspace. You import the packages and then use them in your code. You can also install packages directly from source code repositories by using the “go get” command.
Rust is a modern and advanced programming language that brings a lot of innovation to the programming language landscape. It learned its lessons well as far as packaging goes and from the get go had a well-designed and well-integrated package management system. Cargo is Rust’s package manager. Rust packages are called crates and the central repository is found at https://crates.io/.
The .NET framework didn’t start with a package management system such as Rust, but it got one eventually. NuGet is the .NET package manager. The central repository currently hosts 74,831 unique packages that have been downloaded more than 2.5 billion times! If you want a nice command-line interface for NuGet, similar to apt or yum or brew on the Mac OSX, I recommend Chocolatey.
Libraries are essential for productivity. Learn about package management in your programming language and take advantage of all the goodness that’s out there. If what you need is even remotely general-purpose, someone has most likely already created a library that you can leverage.