I'm saddened by the state of many programming projects and the rot they accumulate over time.
Recently I tried to make some changes to the firmware of a certain USB device. This was a first for me; fortunately, the source code was readily available. In this particular case, the source was written in Rust, with which I have near-no experience. The only time I have touched Rust, I fixed a bug by removing a single line of code. This time around, I took effectively the same approach, and the bulk of my changes were removing code I didn't want or need.
Anyway, I don't have any problems with Rust as a language. The problems I ran into were tooling-related. Rust, if you've ever used it, comes with a package manager called cargo
. And as it turned out, my system's cargo
version was not compatible with the versions of the lockfiles that were generated for some specific dependencies. To fix this, I had to dig around in the failing dependencies to find the last version that still used lockfile version 3
, and install those specific versions instead.
In general, even though this particular incident was straight-forward for me to resolve, I believe this type of setbacks are detrimental to people trying to get into new languages or programming in general. I remember very vividly that these problems were extremely prominent in my early days of web development; a constant stream of things that were preventing the building or running of certain software. Think of it like a very interesting book with an introduction that makes you want to pull your hair out. Who's going to read the book?
Now, I don't have any constructive feedback here. Projects that are well-maintained generally suffer from these issues less - although are not immune by any means - but many (if not most) open-source projects are one-offs that someone built to completion and is just sitting there for eternity. A decent portion of the time I'm looking for something very specific, this is the type of project I need, and getting it up and running is a nightmare. The main thing that I think helps remedy this project deterioration is to minimize the number of dependencies and tooling. This is something I already do to simplify maintenance and footprint, but now I have another reason; it makes projects more accessible.