| tags: [ development ] categories: [Development ]
Software Development Foundational Tools
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.