Algorithms and its usefulness in Life
As this course and semester comes to an end, I am starting to look at the contrast of knowledge which I’ve gained in the past two years, in my major based studies. As a student of Human Centred Design, one is expected to know as much as possible about topics like UI/UX, Interaction design, Emerging Technology etc. In my second year at Design school, I took courses that taught me and gave me insights to exactly those topics.
This year, as we entered our third year, we were asked what we would like to learn. After gaining those earlier mentioned skill sets, I wanted to learn something different. Something that I didn’t know, but at the same time, is relevant to my practice. Luckily, there were new courses that were being offered that involved coding and computation in them, and thus, I took it.
After two intense and knowledge heavy courses, I would like to say, yes, I do feel really strained by it all, but, I want to push through and get the most that I can! I am really glad I have chosen these courses.
In the first week of this course, we were asked what an algorithm is and how would one define it? To me, algorithms were anything that had numbers, and mathematical operations in them. But after this course, I would like to change my definition — Algorithms are a set of well-defined instructions that detail how a certain action is carried out based on the constraints it has to work with.
We also watched a video on understanding what algorithms are and where all they are found and used. What fascinated me most was how by observing how a Honey Bee travels from flower to flower to collect nectar, people mapped out the patterns and could form an algorithm for Nearest Neighbor.
By the second week, we started looking into search algorithms, Linear and Binary search and used Python (what I learnt in my previous course) to code for these algorithms. We then generated random large sets, searched for a value in that set and recorded the time it took. We then slowly increased the number of objects in the set and noted that after 108 objects, the computer gave a “memory error.” I was very intrigued by this as I did have 16 GB ram in my system and couldn’t think of why a certain small code wouldn’t run. After reading up on the net, I learnt that, while installing Python, since I got the 32 — bit version, it only used around 2–4 GB of Ram and no more.
After writing down the time taken for various lengths of data sets, we did a step wise amortized analysis of the algorithms. We then went further and did an arithmetic step wise amortized analysis and formed equations for both. This was tough for me and till now, I find it a bit tough forming that equation.
We learnt Asymptotic complexity, Big O (Upper Bound), Theta (Tight Bound) and Omega (Lower Bound) very briefly and once I did a little homework about it on my own, I understood it much better.
Moving onto the third week, we were asked to form groups and work on a project that was under the theme of Transportation and Logistics. My group chose — IT companies and work from Home option and how that could affect the traffic.
One of the days in week three, we were told to learn a specific algorithm and present it to the class. My algorithm is the Heap Sort algorithm and I enjoyed learning it a lot. It was really fun to manually write down the logic of the algorithm and work out the problems that the class gave at random. I also found other Algorithms like — A* Algorithm, Dijkstra’s Algorithm and Merge Sort Algorithm really fun and interesting.
For our project, we started off our research by first going to a well-known IT company in the Whitefield IT Park and understanding how their employees commute, what is the system that lies in terms of how work is scheduled and carried out, information on the logistics, etc. After gathering quite a lot of information, we zoomed out of the picture a bit and started looking at the IT Park as a whole and then the roads connecting to the IT Park. From this information we went ahead and narrowed down what we wanted to look into, and that was how the employees are given work and the work timings.
From research, we found that a certain Nurse Rostering algorithm exists and tried to extrapolate it to the IT park employees. Using this as a base to kickstart further ideas, we then moved forward to coming up with our own solution and tried generalizing it to form an algorithm.
This topic wasn’t something that I found as interesting, but nevertheless, I pulled through and worked wherever I was required. I would like to work on a similar topic and help optimizing it using an algorithm that I create/modify, sometime in the near future.
I would like to conclude saying that this class and its contents were really new to me and I am so glad that I have a much clearer picture of this topic and I can look at problems from a new lens now. I would also like to look further into algorithms and understand the mathematics and the logic behind it and try to code for a successful output.
Coming back to a question — Should Designers learn how to code (and understand algorithms)? My answer would be a strong YES.
In tomorrow’s world, where technology is rapidly advancing and knowledge is becoming easier to gain, Designers who have a multi-disciplinary skill set would be preferred over those who just have a basic understanding of a topic and an aesthetic sense. Also, one must completely understand what they want to design. If another member of the team goes wrong, maybe in terms of coding, the designer could help identify that flaw and optimize the product and also help make it more user friendly.