Volunteering

This year I decided to try and find some way to give back to the software community. I’ve lurked around the edges of many open source projects, but I have never really had the time to participate actively in those efforts. I decided that I would try and change that in some way this year. I signed up with an volunteer organization that pairs experienced software developers with pre-entry level software developers to help them skill up and gain experience.

This is how I got paired up with two energetic college students that are trying to make their first open source submission. They only have about 2 months to complete their task. I guess would call this an unpaid internship experience.

Development Tools

I realized quickly that there are a whole bunch of software development tools that early career software developers might not be familiar with. I’ve tried to identify a few of these here for future reference.

Logging

Writing large software projects is hard. It can be difficult to understand how everything is running. At some point print statements are not going to be enough to capture the execution sequence in a programming. ‘Logging’ is the answer to this.

Every software language I have used has had some package for expressing logs. Learn how the logging system works. Environment variables will probably come into play when controlling logging.

Almost all software packages that I have worked with or written has some degree of logging. When running systems in production environments logging is critical for understanding how a long running system is behaving.

Environment variables

An environment variable is a parameter that is defined in the operating system shell and applies to that shell. The purpose of an environment variable is to provide some ‘meta control’ parameter to a program or programs that are running in the shell. There are many different ways to set an environment variable.

The Wikipedia reference is pretty good. This syntax is particularly useful.

VARIABLE=value program_name [arguments]

In a lot of systems, environment variables are used to set the log level, identify some service URLs, specify ports, define access keys, passwords, etc.

Also in some systems, .env files can be used to group together environment variables that are useful for running a program. This works, but be cautious not to add your .env file. You shouldn’t put a .env in to a git repository.

docker

Ugh. Not a fan of docker, but it probably makes sense to spend some time learning docker and docker-compose. Beware that docker images are big. You’ll need to know how to start and stop docker containers. Docker can be used to start up servers and expose a port from your operating system to the port inside the container.

make

You might still run into a makefile in some projects. Make will evaluate rules in the makefile and will run rules within the makefile based on the rules and state of files in the current working directory structure. It would be good to understand what make. I’ve also seen references to justfile which is close to makefile but not quite the same.

References