A self-taught programmer, without a CS degree, passionate to help others.

Hi there. I am Bilal, the founder of Codeguage.

I've spent the last 5.8120618 years on building and improving Codeguage as a completely free, online platform to help programmers truly understand concepts that are otherwise explained with tiring complexity elsewhere.

Here's a little insight into my own humble journey.

Entry into programming

In grade 7, we had these IT classes in school where we would often show up in a computer lab every week and perform some basic software activities which were tested at the end of the year in the form of an exam.

In the curriculum, luckily for my later journey, we had something called HTML. When the time came to learn this topic, we went to the lab and coded a basic HTML page. This was a completely new and superbly exciting experience for me. For the very first time I felt I had gotten control of a computer. I enjoyed coding those tags and quotes a lot. Like seriously, a lot!

To make things even more exciting, I read about HTML from the reference text book assigned to us by our school curriculum. At the end, it contained a website link to learn more about HTML. I opened the link out of curiosity and that was the day I met my first love in life — web development.

After our yearly exam of IT, I had made up my mind that I'll be learning more about HTML and whatever logically follows it. This is the very beginning of my programming journey.

Learning, learning and learning

As is the norm even today, I began with HTML, then learnt CSS, and finally learnt JavaScript. Each avenue was an exciting experience of its own. I also learned a little bit of jQuery (it was very popular those days) and then began experimenting with my creativity, creating all sorts of webpages.

Soon, I got introduced to PHP and MySQL, and learnt them as well in order to be able to create more amazing websites. More or less, at this point, I was just busy adding more and more and ever more technologies to my arsenal without having a strong foundation in either of them.

This continued for a long while after which I started to find some connection between my learning failures, the resources offered online, and my approach to learning. In fact, one of the most memorable things in my life would be trying to learn what exactly were prototypes in JavaScript. Oh my! I spent whole days just trying to make sense of what exactly is a prototype, why we need one, what is the prototype property, and so on. To my surprise, there wasn't a single resource that was simple to understand or that answered all of my questions. I was lost completely. The same was the case with function closures.

Somehow one day, things started to make a little sense, and I again tried learning about prototypes from yet more resources. Slowly and gradually, the concepts surprisingly began coming to me and I started to make more and more sense out of them. This was really a big moment for me, but it also put me in thought of a deeper issue underlying all resources — lack of good and simple explanations.

Weak fundamentals, searching for solutions all the time

Well, I knew HTML. I knew CSS. I knew JavaScript. I even knew PHP. But the moment, I went on to create something complex, I always got stuck. The way out I thought at that time was to go to Google and search for my problem. Little did I know that my questions were all remnants of untouched fundamental topics and a lack of structure of all the teaching resources at that time.

Yes, I was developing programs of different sorts, but I was moving really really slow in my coding sessions. I didn't feel confident as a coder. To give context, I couldn't create image sliders with fade effects or custom dialog boxes (whereby clicking outside the boxes would hide them), to name a few, without constantly referring to resources. And even if I were somehow able to make something, the code was verbose and dirty. All in all, I was able to foresee problems in the way I was learning, or better to say, being taught programming by online resources. No resource was focusing on the fundamentals clearly. A complete waste of time and energy.

"It has long been an axiom of mine that the little things are infinitely the most important."

— Arthur Conan Doyle

Time brings the answers, which resources could've

Being self-taught and not really imagining of becoming a software developer ever, I didn't obviously think of a mentor. And honestly, there wasn't really a necessity of it. Although fragmented here and there, there were solutions out there to my questions. There were a mixture of tens of different resources to learn about a topic (excluding those low-quality sites flushing in ads). But there were. All I had to do was spend a large amount of my time learning and building things. Or as they say, take "a hands-on approach."

As time went on, a lot of it, little by little the haziness started to disappear from many concepts. I was becoming more mature as a programmer. I was becoming more confident in my CSS skills, my JavaScript skills, my PHP skills, and most importantly, my problem-solving skills. But let me restate the fact, I spent a lot of time — a heck lot of time — acquiring skills that a good resource could have made me acquire in almost a tiny fraction of that time.

And so, now that I was able to navigate myself past the complexities of web development, having spent a great portion of my time on learning, I decided that it's time to do something to make life easier for others. But before that I did a small experiment — learning one topic, that I had already mastered, from the top websites on search engines in order to evaluate their quality. To my surprise, there wasn't one that addressed all the aspects of that topic. Yup, not even one!

The birth of Codeguage

Running more such experimentes led to the same conclusions — all resources were lacking comprehensiveness and clarity. Ultimately, I strongly felt the immediate need of a resource addressing the pitfalls of existing resources. I truly wanted to help others not fall in the same learning trap that I fell into. And so, I went on to create that one resource, all by myself.

On 1st August, 2018, I launched Codeguage with one course on JavaScript and one tutorial on creating image sliders. It took me many days and nights to make those two things and launch with something to show the world, but the shear amount of passion kept it all exciting. In a short time thereafter, I even added a blog with 3-4 articles.

At first sight, the content on the website was good but a heck lot of work was to be done to take the website to the stage that it could become that ideal resource that I envisioned, at least for learning JavaScript.

College years, red percentiles

While all these developments were happening, my 2-year A Levels studies at college were about to commence later the same week. Now imagine this scenario. My website, teaching people web development, has just launched and my college is beginning at the same time, requiring me to be devoting all my time and attention to learning and revising whatever is taught on campus. Will I even be left with time to write for the website? Keep in mind that it was A Levels; failing, even in college mock exams, could potentially mean problems for me and my future university choices. (Now I don't think this way.)

The point here is that I had to make a choice then and there — occasionally add content to the website and devote all my time to my studies. Or occasionally do my studies and devote all my time to my website, regardless of the consequences. Eagerly passionate to teach people programming, I chose the latter.

As the college started, I would work everyday on adding more and more content to my website, to help all the beginners out there. While the teacher was busy giving a lecture, I (seated at the back chairs), was always into writing content for Codeguage. Boltzmann constant (chemistry), Argand diagram (maths), Kirchhoff's law (physics), I heard nothing in the classroom — it was all me and my content creation.

These 2 years at college could be discussed for another hour or so, but to keep things short, I have to get to the climax quickly. And that is that I failed many college exams. My percentiles were consistently poor. I was well known amongst my group to be a bright student (I don't like that word now). In fact, some of my teachers knew me very well in that way and they used to ask me, "What has happened to you?" If only I could've told them that I had a bigger thing to achieve in life than those mere exams, getting me nowhere.

"Like what you do, and then you will do your best."

— Katherine Johnson

Competitive programming and mathematics

In the first year at college, all students received an email regarding a Canadian Computing Contest to take place on campus for which interested students could sign up with a small entry fee. Being into programming, I signed up for it.

This was my first ever attempt at competitive programming, and surprisingly I was the only person in the junior level to have attempted the fifth question, and coded and submitted its solution (the contest was comprised of 5 questions and I and one more fellow student successfully solved the first four correctly). Unfortunately, being naive in my knowledge of algorithms, I had solved the fifth question using breadth-first search, however later I came to realize that it was a question meant to be solved using Dijkstra's algorithm.

Nonetheless, this introduction to competitive programming got me intriguing for more knowledge about the world of computer science and so I went on to learn algorithms and mathematics from books, my favorite resource of all time.

Expansion of Codeguage

Meanwhile I was adding more and more content to Codeguage. At this stage, there were two tutorials and five courses: CSS, JavaScript, JavaScript Regex, Advanced JavaScript, and AJAX.

As I was learning new things from such diverse areas of computer science such as algorithms, I was also teaching web dev technologies at Codeguage and it was a real challenge to manage these together. My top priority was first Codeguage, and then learning. That's because it was important for me to teach whatever I had already learnt and learnt well, in order to build a healthy traffic to the website and also address the issues with other resources, as I talked about above.

Many quizzes were added as well in order to allow learners to conveniently test their skills after having learnt a given topic. Altogether, it was a good time for Codeguage because, despite of progress being a little slow, new content was showing up on the website and it was gaining traction.

The future I seek

I have always been a curious guy, wanting to learn about topics deeper and deeper. Even in college, I always used to question the way we were taught about famous theorems in physics, chemistry and math, in the matter of minutes without ever going into the details of how people came to those discoveries.

Over all these years, having attained a considerable amount of experience of the world of computer science (and still there is a long way to go, since learning never ends), I've come to the ultimate conclusion that without strong fundamentals, no one can ever get to harness the true potential underlying the computing machines at our dispense.

I am astounded by mathematics and the miraculous nature it holds. I am astounded by the complexity of computer science and the power it holds in solving our day-to-day problems. I am astounded by the great amount of work numerous people have put into taking this field to where it is today.

My aim is to get people to appreciate all this, and most importantly, become better thinkers and problem-solvers by having a very firm grasp over the very fundamentals of computer science. It's a long journey to take but with dedication, there's always light in the dark.

I seek a future where education is accessible for everyone, everywhere, everytime.

Begin your learning journey