
The defining line between coders and engineers
Computer Science Engineers are in high demand today! Mind you I said “Computer Science Engineers”, and not “Coders”! The thing is, with the overabundance of tools available at your disposal, everyone can pick up a laptop, a pc, a MacBook even a smartphone to write software they want! But, does this really cut it?
With a population of above 1.3 billion, Indian people are already craving the best. India has the second-highest internet users in the world with over 455 million people regularly accessing, using and changing the internet! Imagine the scale of apps, software and services needed to cater to such a huge populous. Don’t even think about the world right now, India and China combined could vastly surpass any scale imaginable for any app!
When I talk about scale, I do not mean the sheer magnitude you have to achieve in order for the app to be successful, I mean the continuous process that you can achieve to solve problems. No matter what, the problem in front of you should be solved, there should be no crashes, no lags, no delays, no bugs and no bullshit. The problem must be solved in every and any circumstances for all the people that relate to that problem. That is a scale you should see. This scale keeps on increasing every day, every second, every microsecond of your life and you have got to commit to it.
So where does the current world stand on the approach to achieve this scale! The vast IT firms, organisations, companies and communities have all united in a unanimous roar, stating that coders are who will labour and help the tech survive and live on for all of us, but, it is the engineers, the scientists and the visionaries who shall create and pave the path to groundbreaking revolutionary future of tech that addresses the scale that humanity needs; And engineers don’t come bundled up pretty.
I strongly believe that no-one is born a problem solver. We are born curious, we are born explorers, but we always develop the problem-solving attitude, either by experience or by the hard work we put in. This is the first criteria, to engineer something, to build something and to pave a path into the future.
That’s where I begin to talk about the data structures and algorithms. Pretty much throughout my CSE graduation, during my college, I have thought that data structures and thinking about all the available algorithms slowed me down. I believed in creating solutions as fast as often as possible. I completed over 50 projects over a span of 4 years developing anything I thought was a problem for me without ever bothering to think about the kind of data structure or algorithm I was using or should use.
As I sat down 4 years later after I had completed my college, after I had begun teaching young aspiring “coders”, after I had joined an MNC and started solving problems at an unimaginable scale where about 27 million people were affected by every decision I took, every line of code I wrote; its then that I realised that I shouldn’t just code, I should engineer my solution to the most optimal, flexible and ridiculously effective way possible.
A student of mine once asked me, can everyone use the software that you create? This question made me think a lot, I could certainly use it. I created it for me, I solved a problem of mine, but I didn’t think that other’s could face the same problem! That night I sat down with some beer, a pizza and some chips and started modifying that same app. It was a network vulnerability tracking tool which worked by brute-forcing through all the possible parameters and checking every possible situation to find what bothered the network. I had both the time, patience and hardware capability to support that. But, it was not efficient. It certainly wasn’t effective and not at all flexible. It had to be my system, my hardware and my environment. This was a problem.
So I began my painful ordeal of deconstructing my code and deciding how to restructure it so as to suit every hardware and situation possible. I decided to first time use the best algorithms, design some myself and build a data structure to address a significant scale. I implemented a hashmap to create a map of all the possible contenders that needed to be searched. Then I created an algorithm to search for vulnerabilities using hash-based values. My complexity? It came out to be O(1). Those who don’t know what it is, I can explain it to you simply as, what I used to achieve in possibly a hundred iterations of guessing, I could now do in just 1, always, no matter what the situation is. This drastically reduced the load on my hardware, this also allowed the system to be more effective, reducing its commitment to just one software piece. It was highly flexible too, I could always add or remove what I didn’t want. To top it off, I made it user-friendly. Even a beginner with absolutely no knowledge of what programming is could use it. This was all possible by engineering the solution that could scale.
As I showed what I had restructured to my student, she was overjoyed. Not only she could understand what the software did, but, she also could herself use it on her system, deploy it, test it and create something she wanted out of it herself. The data structures and algorithms which were too difficult for her to comprehend didn’t bother her at all, she instead wanted to understand what this all meant!
This further triggered a thought chain in me as I began my journey to explore what do these data structures and algorithms could help me achieve. I picked some of the toughest projects I created, learnt the go language to implement them in the most effective manner and the results were drastic. Every project that I restructured to implement exactly the same task showed a level of improvement that was mind-boggling to me. I was constantly thinking about the best approach, the most effective solutions, the lightest loads, easy maintainability and modularity.
I dived into architectures, used more and more approaches like greedy, recursive, divide and conquer and what not. I began teaching my students about them more and more, I began using these in my stories, my tasks in my company and in the way of mine thinking. It was then that I finally understood how these techniques, methods, ways and structures were helping me evolve from a coder to an engineer!
I still use brute force and direct techniques while I code. I still rely on tools and architectures so that I could achieve my goals quickly and as often as possible, but, now I have begun asking myself what if? A simple question that has so many different answers. Its when I have begun watching the scale of problems, its when I see solutions affecting a great many people with the same problem that I am solving! Data structures and algorithms have become analogous to bricks building a wall. We could just stack the bricks over each other and build a wall, but neither that wall would be strong nor reliable. But, if you plan where to place each brick, build a pattern so that the walls could absorb shocks, so that the walls could last longer, support other structures, that wall would actually be the one you want. Similar is the case with data structures. You use the most optimal data structures, algorithms, planning and vision, and you will eventually build a software that would address the scale that needs to be addressed.
With this brief introduction about why data structures and algorithms are needed, I hope now you all understand their importance and need. Not all situations demand their usage as sometimes time becomes more critical to the delivery of a solution than what we put into it. But, if you do have the time, start asking yourself, how to build this better, how do I engineer it so that it addresses the problem, so that it scales!
It is with this thought, that I have decided to create a series on some data structures here on medium so that you could understand and learn about some basic techniques and ways we use them. I would strictly not be strict and write about them the way I have perceived them. This won’t be the best case of their usage, but this definitely would be the way that a beginner or a learner wanting a new approach to programming would like to take.
So hope to see you soon! Till then, keep coding!
About the author —

I am a Computer Science Engineer and software developer at LTI (Larsen and Toubro Infotech), with specialization in Open Source Softwares and Open Standards. I have begun my career as a full stack developer and am an ardent believer in inculcating secure digital practices in the modern education system. I have dabbled in android, Tickstack, Unity and Cloud. I am also a cybersecurity enthusiast and have done extensive training in Network Security and Ethical Hacking. I have played a key role in the incubation of several startups at Entrepreneurship Cell, Dehradun.
I like music and poetry and am constantly trying to learn and perform hip hop and rap! I am big streaming junkie and a trained boxer as well!
My expertise lies in cybersecurity having undergone rigorous training and certifications in digital security, encryption and Ethical Hacking, and java development. I am a certified spring developer and am in the works to get certified in Redhat Openshift too.
I am a founder of AINC, creating code — an organization aimed at developing software and educating all about various programming languages, software, and tools used. I have about two years of teaching experience on subjects like Android development, data structures and Web Design as a student teaching volunteer at UPES, Dehradun. Apart from this, I have successfully done 10 extensive and over 40 short projects over a span of 4 years in my college life and am working with Nets payment solutions to create payment solutions for an easier tomorrow.
To reach out contact me at ankushors789@gmail.com or call at 9990614406.
Find me on Linkedin here.
Visit my Instagram here.
Leave a Reply