Some years back I had a dilemma that led me to never study algorithms and data structures as a computer engineering student. I am the type of student that always goes above and beyond. One thing that I did during my studies is take courses that were 1 year ahead of my class. For example, if I was a Freshman (1st year), I would register in classes from the Sophomore year (2nd year) with any remaining credits (my university system is one of which you are given a fixed amount of credits for each semester, but passing courses ahead of time made me have an excess). I reached a place where one of the courses I passed was removed from the curriculum so the next year, which was the year on which I was originally supposed to take it, I was eligible to swap its grade for a future course. Due to my inexperience with being in university or studying computer engineering, I had little to no experience on which was the best course to switch my grade with. My background was science oriented, biology, chemistry, you name it. My experience with computer science was very minimal, hence my knowledge of it was lacking foundations. I had no advisor, so I resorted to asking people, in specific classmates in the same or an older year than me, however, I never thought of asking any professor. In my naive brain I thought that a student is more likely to know the answer based on rumors from other students or if they have done the course before. That sometimes holds true but not all the time. After asking around I was advised to assign that passing grades to “Algorithms and Data Structures” because that course was hard, and even the ones that did pass it say they barely understood what was going on in that course. I strongly remember that there were 2 students out of the several I asked that told me it is a fundamental course to take. I did not take that word seriously, I did not understand why it is fundamental, I looked it up a bit online but I still did not understand what it was about. I decided to go by the advises of the party of opinions that were the most resounding. I assigned that not-so-awesome grade to algorithms and data structures and after that day I was not eligible to join the lab classes of it anymore because on paper I had already passed it.
Years after I tried to look for internship openings, and I realized that…software engineering internships which was what I wanted to try were asking for “algorithms and data structures” as one of their requirements. Later, I learned that, that is one of the fundamental coding interview must-know in order to become a software engineer or ace the challenging coding interviews. For top companies it seemed to me that no matter how intelligent or smart I was, all that mattered was how much I possessed that hard technical skill. That was depressing. Right there the dream of being a software engineer started to fade. I once more went online and tried to ask the search engines to show me the way. Show me the way to learn this skill! I did get an answer, but not the answer I wanted. I read some books, checked out series of recommendations on the right and best book to read for this subject but it looked so complicated. It looked very confusing, after a point these resources hardly made any sense and I will call it quits for several months, try again, temporarily quit, and repeat; I struggled.
I developed a phobia on data structures and algorithms, one that told me that it is so hard, and I would not be able to learn it. Eventually, I felt that the tech industry does not have a place for me. I felt that I needed to have known what code is at the age of 6 so by my early 20s I would have the necessary coding experience needed to do well in a coding interview. Life doesn’t go back and by the age of 6 or 12, I had no computer anyway.
The Turning Point
Over the months I changed my focus on being able to build some skills on other areas I was lacking. Several things happen till It lead me to decide to learn it again. It happens that I had the wrong goals in mind. I wanted to learn algorithms to do well in a coding interview to get a software engineering internship at an awesome company, when instead I should be learning it because it is a skill worth knowing and it is something that is bound to make my brain think smarter.
This time I was fortunate to get to know a wonderful person who is there for me in this journey of learning. That is very comforting. You can also join us in this journey of learning, a never ending cycle, having in mind that we are walking the same steps together in asynchronous times and paces.
I want you to join me in this journey. If you are struggling to learn this very important fundamental knowledge feel free to follow me in this path. This is a skill you can learn, and you need to start believing you can. That is the first step and that is how I am starting myself.
Task 1: Believe you can learn it. It might take hard work, but believe you can.
How I am Getting Started and How you Can Join
The first thing to realize is that you might need to circle back. I came to understand that the reason I struggled to understand all these recommended stuff by answers of people on sites such as Quora, was because I was lacking on other computer science fundamental skills. So what I am doing now is take a step back, by starting with some maths, but first we have to deal with the phobia. If you also are experiencing a phobia in anything you need to understand how to work your way around it.
Addressing the Phobia of Algorithms and Data Structures
To address the phobia, I researched several things online but what helped me the best was an interactive illustration called, neurotics neurons. This is a potential way to address the phobia, since this is a challenging task I am doing, it might not be so easy to do but it is a good technique to keep in mind. This does not erase the phobia, but it makes you more self aware of how your brain reacts to it.
Task 2: Nicky Case – Neurotics neurons
Reading Some Number Theory
My good friend suggested I do study some number theory due to being stuck in some project Euleur problem. In specific problem no 5. Understanding some number theory might make me understand the optimal solutions for some of the coding challenges that evolve around number theory. For that I started reading
Task 3: Victor Shoup – A Computational Introduction to Number Theory and Algebra
chapter one and two. Let me make mention that, I again reached a point where I could not understand how some proofs came about so there is when I decided to find other ways to make things work.
Currently I have moved to the number theory chapter of the
Task 4: MIT OCW Readings – Mathematics for Computer Science – Number Theory Chapter 4
I have found that to be a bit more understanding in some parts. So what I plan to do is finish reading that, see if I fully get it, then maybe move on to the previous book to see if it makes things more understanding. I will make sure to let you know what my next steps will be in this journey.
Any positive thoughts? Feel free to comment 🙂