Think About your audience

The new year has got me thinking of how much I have learnt so far about open source and GJS. Usually, contributing to an open source project for the first time is like stepping into the unknown- not knowing how the community will welcome you, how helpful the community members will be or if the skills you have are good enough for a start. In this blog post I will be talking about how my journey has been which might be useful to you thinking of contributing to the GJS debugger.

Some months ago, I submitted an initial application for the May 2020 round of the outreachy internships not knowing exactly if I was ready for the journey ahead. Unfortunately I didn’t get through to the contributions phase but the little experience I had from going through the lists of organisations that participated in previous rounds and checking out some of their repositories helped me become more familiar with open source contribution.

When the contributions phase for the December 2020 – March 2021 round started, so much confusion set in. Which Organisation should I choose, Why should I choose it and what strategy am I to use to get selected were the questions I kept asking myself. Sooner than later, I finally decided to choose something that in my opinion was not only challenging but will make me feel like part of something great. Due to the fact that I developed a special relationship with JavaScript mainly because it is the first language that helped me understand what programming meant deeply, I chose the GJS project and another project which required JavaScript. I finally put all of my eggs in the GJS basket when I realized that it was a developer tool and because of how quickly my mentor and other community members helped me out when I got stuck. This experience alone made me understand that the community is open to everyone. You just need to be willing to put in the time and be open enough to ask questions.

The GJS community is part of the GNOME community so it is more appropriate to mention GJS with GNOME. GJS is GNOME’s very own JavaScript binding built on the SpiderMonkey JavaScript engine (visit this link to know more https://mozilla-spidermonkey.github.io/) and my project involves working on the debugger (A debugger is a computer program that allows you to uncover and diagnose problems in other computer programs.) to improve it’s debugging experience. For clarity’s sake, GNOME is an easy to use graphical user interface and a set of computer desktop applications for Unix-based operating systems which include Gedit (text editor), builder (IDE), polari (chat application), just to mention a few. If you install a Linux distribution like Ubuntu or Fedora, then what you see on your desktop is GNOME (see https://www.gnome.org/gnome-3/). For more information about GNOME visit it’s wikipedia page at https://en.wikipedia.org/wiki/GNOME.

During the last couple of weeks, I have learnt a lot from better coding practices to new terms such as stack frame, backtrace and bindings. When I started contributing to this project, drawing a line between a developer using the tool and a developer developing it was confusing. This is partly because I only started using it when I started contributing to it. Now I clearly understand why user acceptance testing is very important in developing any application. There are so many things a user can see that the developer of an application will not see. To anyone you who plans on contributing to GJS or any other project, I strongly suggest you test it and try to understand it as a normal user would so you can clearly see some modifications that need to be made before the lines of code steal some of the gifts an end user has from you.

From all that has been said, here are key points to note as a new contributor to the GJS project

  • The project does seem more challenging than it really is in the beginning. It is generally a good practice to give yourself some room to try and fail so that you can then be able to ask questions from the errors that you get.
  • Again, it is good to test the project as a normal user so it helps give you ideas on possible modifications that can be made without letting the fear of how challenging it might be to achieve them limit you. Users are free minded and are often only concerned with something doing what they want it to do and not how it was made to do that.

Everybody Struggles

A week into the internship, I felt like giving up. In an attempt to regain my motivation I reached out to my mentor Philip Chimento, to find out about his experience. Surprisingly, he faced challenges too. My journey as a programmer has often been met with me trying to find out if I was meant to be on this path or if I had to do something else(obviously because I found myself taking so much time to grasp some concepts). Three weeks spent as an Outreachy intern @GNOME has thought me that everyone, experienced or not struggles. Today I will be sharing a challenge I faced.

Adding context to the discussion that follows, GNOME JavaScript(GJS) is a JavaScript interpreter based on Firefox’s interpreter. My internship project is Improving on the debugging experience of GNOME’s JavaScript Engine. Currently, I am working on adding the backtrace full command to the debugger. This command prints out information about a stack frame together with it’s local variables and their values, helping users to be able assess why a program crash occurred and also coming up with a solution to the crash. When this task was first assigned to me by my mentor, I didn’t know exactly where to start. I read the issue description on gitlab countless times but it was just so confusing. I also went through the link that was added in the description but realized that there was some background knowledge needed which I didn’t have. I didn’t feel comfortable asking my mentor things which in my opinion were expected of me. I spent some time researching on the terms which were used such as “stack frame”, “backtrace full” and “backtrace”. With some understanding of these terms, I could now ask my mentor some questions with regards to this issue. After our conversations and going through the resources he shared with me, I was able to get started on the issue.

Here are a few points that helped me overcome this challenge as well as others I have encountered in the past.

  1. Consistency. Consistency in software development(programming in particular) is a habit you cannot do without. The more consistent you are, the more familiar things get and the easier they become too.
  2. Company. The phrase “you are the company you keep” really does apply in all aspects of life. Surrounding yourself with people who can motivate you to work harder is a plus. When you are tired or bored, you can find them all motivated and high spirited. This can encourage you to keep trying.
  3. Mentor-ship. The opensource community is so big today because so many people have adopted the habit of giving back. With the opportunity given by Outreachy, some of us are chanced to be mentored by people who serve as a great motivation. Finding a mentor who is willing to sacrifice their time to help you get better is one of the best ways of coping with your challenges, getting over them and finding long lasting solutions.
  4. Don’t be shy. Most people have inferiority complex when they feel like they do not know something and are often scared of asking “stupid” questions. The truth is there is no stupid question especially when one is eager to learn. The best approach is usually to come forward with attempted solutions so that the person helping you out should know that you tried hard before not succeeding. That way they will feel more comfortable offering their help knowing that their efforts are not going to waste.
  5. Usually, when you are stuck, the best thing to do is change your activity- maybe go for a walk or take a nap. When you get back to looking the devil in the eye(I call my challenges devils), there will be a new approach you can use to win.
  6. Research. The internet is a world of information which if used rightly can help us solve so many problems. If the task you have to do is not so urgent, spending a few hours doing some research online usually puts you on the right path.

These steps just help you reach the milestones and it is necessary to remember that there will always be challenges. The way forward is to understand how to get pass them rather than stay stuck and stay discouraged.

Internship Day 1

My name is Mantoh Nasah Kuma and I recently completed course work to become a software engineer from the faculty of engineering and technology, University of Buea, Cameroon, Africa. Today, Tuesday December 1st 2020 is the first day of my outreachy internship which is “Improving the Debugger experience in GNOME’s JavaScript Debugger”. I’m so excited to be working with my mentor Philip Chimento(@therealtomato on twitter) on this project and waiting anxiously for the activities that unfold in the coming weeks.