Day 20 of the 40-Day Challenge

In the name of Allah, most gracious and most merciful,

Today I have faced a critical challenge in my work, and I solved it thanks to Allah. I will mention it, how I solved it, key takeaways to learn from this, and some useful pieces of advice that I have learned so far.

1. The Challenge

I was working on a big coding project, and I wanted to convert it into an executable file to run on any computer. My usual approach is to learn new things from books to get a good picture of them and to know many useful details in a consistent manner. Then if I got stuck, I could search online, coding forums, videos, and so on.

I have learned a lot from the book I have been using. However, although I followed his instructions so well, there seem to be some problems with the packages I was using. I have implemented the book’s instructions on small pieces of code, then generalized what I have learned by applying it to the whole software project I was developing. But at the final stage of converting the file to an executable file, I started by directly applying it to the whole software program instead of experimenting with small pieces of code to ensure that I understand what is going on.

It is clear that compromising a little bit in my approach has costed me some time. However, the bug or the problem I have faced was too subtle to the extent that when I ran the exact piece of code the book used to illustrate his point, it didn’t work as well. So, what should I do now? It seems that there was no clue to find the problem, and I have noticed some people on the question-answering coding platforms encountering similar issues with the book’s pieces of code.

After trying for a long time to solve the problem with no apparent progress, I decided to use another software package that is different from the book’s used package to convert the software I was developing to an executable file. However, I found some other problems with using other packages. It seems that every package has its own problems so what should I do now?

2. The Solution

Yesterday I has nearly lost hope in solving that problem, but today I have got another idea. I will reduce the software I was developing to the smallest possible functionality so that it will perform only one thing. Then on doing so, I have greatly reduced the pieces of code in which I will search for the error sources. If I succeeded to convert this to an executable file, I will retry with the whole software again, and if I failed, I will then increase complexity step by step to track the error propagation.

This idea seems really logical because I have reduced the amount of error tracking I will do. After doing so, I started with some assumptions about why my software didn’t build (i.e., get converted to executable file) correctly. Then I tested my assumptions by trial and error. After doing so for a while, the feedback I am receiving indicated that all these assumptions were not true. Finally, I have got an idea to check by reducing the piece of code complexity a little bit to remove possible problems from the increased complexity that I have observed after many trials and errors. This increased complexity was for the sake of organizing code for being expandable and maintainable but I could remove it temporarily to reduce my search domain to identify the problem, and then of course I will return everything back into its place. Coding errors can sometimes be too tricky, and need a lot of patience 😊.

Finally, I identified the exact error and I have converted the small functional piece of code to an executable file. Now, I understood the main problem I have encountered in the big software I was developing. However, I didn’t yet build the whole software, but I think that this approach has greatly solved my problem since at least I have identified a major problem with how I was converting the software to an executable file.

3. Key Takeaways

  • If you have a big problem, then divide it into smaller problems to identify the problems more easily since you reduced your search domain and thus increased the probability of finding the exact problem. Divide and conquer is a well-known programming technique.
  • Try to test your work on small manageable things from which you could get immediate feedback of your true understanding to avoid major problems that may happen in the future due to the accumulation of many misunderstandings. In other words, ensure that you understood something well by testing and implementing it on a small scale and then increasing the scale and complexity gradually.
  • Try to dig deeper into your problem by thinking about how to solve it instead of just searching right away for a fast alternative fix from another source although you have spent much and did a good job in solving the problem by the first technique. I am not saying not to try different approaches, but I mean that you have to give a good real logical try to the approach you have decided on instead of experimenting superficially with many approaches and going nowhere. From my experience, many techniques, if not all have, their own complexities and problems so try to truly experiment with one technique so well before reverting to other techniques. Of course, if is it possible to experiment superficially with different techniques in the beginning, and see what others before you said about it, you could save yourself much time by investing time in the most promising techniques with the least problems. I am speaking generally here, so it depends on your situation. And you could usually find exceptions for rules based on your exact use case or situation.

4. Useful Pieces of Advice

Most of these pieces of information are taken from The Magic of Thinking Big book.

  • Before you start out, know where you want to go.
  • Your abilities and skills are like your products so develop them to be highly valuable. Forward planning will help you do it. Here are two steps that will help you:
    • Look at your future in terms of six parts. This could help you avoid confusion, conflicts, and see the big picture:
      1. Spiritual
      2. Work
      3. Personal Development (Expanding your mind)
      4. Family
      5. Community or Social Life
      6. Health
    • Seek clear answers to these questions, although for most of the questions the answers don’t have to be very accurate since you may not know what you don’t know. But they will help you to start correctly and refine your answers along the way.
  1. What do I want to accomplish in each of these parts? What do I want to be?
    1. Why will I do these things? You could read this post to help you more in figuring out the why, and to avoid big misconceptions and logical problems.
    2. How will I do these things?

Finally

Thank you. I hope this post has been beneficial to you. I would appreciate any comments if anyone needed more clarifications or if anyone has seen something wrong in what I have written in order to modify it, and I would also appreciate any possible enhancements or suggestions. We are humans, and errors are expected from us, but we could also minimize those errors by learning from our mistakes and by seeking to improve what we do.

Allah bless our master Muhammad and his family.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x