Everyone Struggles πŸ§‘β€πŸ’»

Everyone Struggles πŸ§‘β€πŸ’»

What is it like to be contributing to the Debian Operating SystemπŸ₯?

Β·

5 min read

Life is not a bed of roses for anyone. Even the so percieved genuises have untold struggles behind closed door.

In Software Engineering, struggles are propellants of our learning. As a matter of fact, most of my learning as a Software Engineer is a direct result of me trying to figure out solution to a challenge I encountered. It is safe to say that challeges are essential to maintain you on a constant learning path.

As you may expect, my internship with Debian has not been without a lot of struggles. When I started contributing to Debian, I had very little knowledge of shell scripting. Coming from Javascript/ Web Dev background, it was a real struggle working on Debian Javascript Software Packaging that required at least moderate knowledge of shell scripting fundamentals and good grasp ofJavascript build systems. The good part is that my mentors, and other members of the Debian js-team are always there to help out. It's been literally a case of free learning under their tutelage. My role has been to keep bumping into problems and asking for help each time πŸ˜ƒ . That's not all there is to it, I've been resolute about staying confident and maintaining a positive mental health no matter the struggles.

How do I handle my challenges ?

There is a saying that a traveller who constantly asks for help never misses his way. Asking for help is not in any way lack of confidence. In fact, your ability to borrow as much brain as you can and add them to yours to grind out a solution to a problem is wisdom. Once you master the act of borrowing other brains, by getting them involved in your challenges through asking questions, you're likely to solve your problems much faster and build new knowledge. The first thing I do when I encounter an error or a bug is to ask a question in the community. There is always 99.9% chance that someone in the community has encountered similar problems before. Even if I don't get direct answer to my questions, I will at least get answers that will give much insight to the debugging route I may take to arrive at the ultimate solution to my problem. Another thing is to rule out the thinking that the probelm may not be solved. One fact in Software Enginnering is that every problem has a solution. And funny enough, most of my so-called challenges are easy fixes for the experienced devs 😊, but I need to struggle a bit to get better.

The big Terms

As you probably would expect, Debian ecosystem is crazy loaded with big technical terms that could look intimidating to a new dev. You have to embrrace them, cherish them, and make them your everyday language as you will be working around these terms constantly. These are not just terms but aliases for massive softwares that automate software packaging workflow. You'd ideally need to know what each of the terms entail ( the software it refers to - what that software does ), how to install and configure the software, the different commands that can be run with it, and the command line options possible with each command. Some of the big terms that have become part of my everyday life include:

  • npm2deb - A script that automates debianizing Node.js modules.
  • uscan - A program used to identify and download the new upstream release of a package.
  • lintian - A helper tool used to check for inconsistencies and errors in a Debian Package.
  • chroot - A utility that changes the working root directory for the current process and it's children.
  • sbuild - A script that automates building a binary package in a clean chroot.
  • sid - The permanent codename for Debian unstable distribution.
  • quilt - A patch creation and management automation script. quilt helps managing a series of patches that a Debian package maintainer needs applied to upstream source when building the package.
  • pkg-js-tools - A collection of tools to aid packaging Node modules in Debian.
  • Bullseye - The code name for the next major release of the Debian Operating System.

These terms may seems very intimidating to a newbie, but they are actually very interesting packages and scripts to work with

Going forward - The good news

Success is not final; failure is not fatal: It is the courage to continue that counts. - Winston S. Churchill

Every bug fixed, every challenge overcame is a step forward in becoming a better developer.

The mental drills of working with the Debian js-team has not only demistified linux, containerization and virtualization concepts to me, but have made me a better and mentally tougher developer in all aspects. I've become very comfortable learning new concept or libaries through the technical documentation rather than just relying only on tutorials. Just last weekend I felt like refreshing my knowledge on the Express nodejs framework, and I went straight up to the source code on github. I enjoyed going through the files, understanding how the express function and other exported goodies of the framework are structured. It was pretty insightful and very much demistified the framework to me.

Embrace your challenges, and see them as necessary ingridients to grill you into a more excellent developer. In all your struggles, never lose confidence in yourself. If you're confident, nothing can break you. Most importantly, share your problems, borrow as much brains as you can 😊. The good thing about the Sotware Engineering world, especially the FOSS communities, is that everyone is willing and happy to help.

Β