The software is mainly written in C++ and Python.
Sometimes the problem you face may seem impossible to solve, but hardly it really is. Often the key is perseverance, even aparently simple problems can take a lot of effort to solve. In the end, you will wonder why you worried so much. :)
It may sounds obvius, but it's amazing how often people don't use a debugger, either because it's not installed or because of it's overhead to learn how to use. Knowing how to proper use a debugger really worst the effort, and it's really essential for anything but the most trivial programs.
Sometimes, tracing the execution with a logging function may be more convenient than using a debugger. (such as when you want to print a brunch of variables) Some strategic placed prinfs() may give you a better view of what's going on while the program is running.
A common (not to say irrational) technique is to just make arbitrary changes to the code until something different happens. You may have this voice in your head telling why a change will make a difference. Sometimes, just commenting lines out can get over an impasse. This is specially usefull to gain a better understanding of what exactly the code does. Obviously, this is the last resort.