Mathematics of a Software Engineer : Memoirs of how I became one
"In the 21st century, Software is something which seeks your interests, matches your requirements and gives you something you desire."
THE TONALITY
I still remember sitting in front of the interview panel of a Software firm in my campus placement when one of the interviewer asked me "How much of coding language you have?" I replied swiftly, "Zero".The panel looked a little bewildered and amazed and retorted back."Then in that case what are you doing in a software firm interview?Why should we hire you if you don't have knowledge of anything about coding?" I replied to the lady who had asked me this question,"Mam if you know about something, it's good. If you don't don't know anything, it's even better. Zero is a beautiful figure to start with.If you don't know anything about something, you cannot judge, have any pre conceived notions about it and you start from the scratch, from ground. From there on you build it.Brick by brick". That is what set the tonality of my future career in the software industry.Since I had instilled confidence in the panel that starting a new thing brings inquisitiveness and new interests in myself I landed up getting an offer from them. For the record I am from Mechanical Engineering background.
After my college had finished off and I was waiting for the joining letter from the company, I tried going through few technologies they were expecting the candidate to learn before joining. The list consisted of Python, Database, C Programming and others. When I started to go through it, I hardly understood it. I wasn't feeling any connect with any of the topics. Like how it is working, why it is working like that. I could not get any answers from it and I didn't persuade any answers for my questions as there was no compulsion nor any push to do it.
THE EARLY JITTERS
Now being in the Greenlands of Gods own country one would least care to work but just enjoy in the beaches and forests of Kerala.The initial phase of joining the company was good as new things and feelings about starting a corporate life was sinking in.But as time grew slowly and slowly the bug of programming started to bite me. I was being trained under Core Java and somehow I was having difficulty to learn it. So I took help from few of my friends and they helped in getting me few basics right like CRUD operations in Java. I went through it various times and understood it.But somewhere down the line I was not feeling the attachment to it and why I did not feel struck me at a very later stage. Now the initial tests started with asking to do CRUD operations and connecting with a database. As fate would have it, I failed at it. I could not get the logic of whatever I had learnt and it left me pretty shook and I grabbed cold feet. But more than me there were other people who were more terrified than me. Seeing them in this state, I was initially hesitant what to do, but thought eventually I would find a way. Anyhow I passed at the second time, but figured out this isn't my cup of tea. So during the training period when the team gets formed and every team is tasked with designing a project, I took the opportunity to escape from the coding part and lead and manage the team as I was good at managing people. I was more responsible for various design patterns and User Interface work for the application. It was a JAVA based application based on Servlet platform and had various functionalities in it. We were a team of seven people where I had two coders and a database guy.So my worries were not so much as I was not responsible for the coding.At the end, we finished the project and gave a good presentation and happily we completed our training. Then it was time to head to Bangalore where we would join different projects.
THE INITIAL RELAXATION
Now when you are in Bangalore, you just calm down and relax for a bit. You are at a new place, want to enjoy the pleasant weather, hang out with your friends in cafes, enjoy the night life and basically chill. The thought of office hadn't crossed my mind yet. The only thing everyone suggested is to join a Development project. So when I first headed for a project interview, I had kept in my mind that it should be development. The interviewer asked me what kind of work I had done in the past and was I aware of struts framework, hibernate etc.Since I was not aware of it, I answered no. Then he had a couple of questions related to HTML pages which somehow I answered. Then basic generic questions followed up which I told. Then I left and was feeling I may or may not be selected because I was wondering what they want. Couple of days later, I was informed that I had got selected for the project and they want to start the on boarding process. Happily I went ahead and joined the project.
THE SAME OLD FEELING
Now when I joined the project, my worst fears came true again. I was again given some database work and I was having a bad time handling it. There were few IDs and attributes attached to each id and on answering one id other id should pop up. For few people it may seem simple, but the thing is basically I was not aware about basics of databases and key, value pairs concept. Thankfully the Solution Architect asked me in which technology I was interested in. I immediately said User Interface Development and was given that role as I thought it was easy, basically designing and not too much of going Haywire.
"The mind only and only fears what it cannot understand."
EASY BUSY AND CHEERFUL
So I started off with the role and was given easy tasks like text changes in the application and going through the client documentation to understand the application in better ways. I had worked on simple functionality like hiding an element using hide() from jQuery library or by using addClass('hidden') and the vice versa for show() or removeClass ('hidden') for showing an element. I was doing it but didn't understand the literal meaning where I was adding it. To sum it, what was happening at the architectural level, I was not aware of it all. Mostly I didn't care or was not pushed to do it as team members were more and they would get the most chunk of work rather than me. Life was easy and no hassles.
THE SPARK OF THE INTEREST
After some time, few of the team members moved to higher frameworks and the size of the team grew smaller. At that point of time, a new person joined in our team. He had joined as a fresher and I was told to give him some sort of Knowledge Transfer on our application. I started the session and explained few things/functionality to him assuming he doesn't know much. When we were having the conversation, he told me he had worked for few start ups.So I understood that he is having heavy coding knowledge. Since we were of the same age gap and had similar interests, we bonded. After few days, on an occasion a requirement came to show a One Time Password (OTP) page on the application when the user tries to login using his/her credentials. This was similar to what we experience when we are making a payment through our card/netbanking and in order to authorize that payment we receive an OTP on our mobile number which is mapped to that bank and we enter it and make the payment. Hearing all this, my mind started to wander how on earth I will do it. Then I called the startup guy and asked him how to do it. He said it's simple and can be done easily. He started seeing the code and asked me the exact requirements. After some time he had written the code and discussed something with the back end guys and did it. So I asked him how he did it.He told,"Nothing man. I just created a HTML file where I added the username and password where the user will enter his user name and password. Then I created a submit button which the user will click and send his details to the backend i.e, where the application is built upon. For sending the details to the backend, I created a a simple process where to the backend I passed my information i.e, user name and password. Now the backend will check whether the username/password credentials are correct or not and based on that it will send a response. If the response is true, we need to show a page where it asks us to enter the OTP and we will hide the login page." This very thing he told summarized how it worked. He didn't explain each coding part but the manner in which he explained to me so simply, no one had ever explained it to me that way. I suddenly felt that coding may not be that difficult to understand. So far anybody who had explained me coding used to use many coding jargons which I failed to understand. He somewhat had the ability to explain it to me in a very relatable way that one could easily understand. Now all the applications OTP related websites flashed in front of me and I started imagining how they may have been done and mostly would have followed this particular structure only. This was the first step where my interest spiked for a bit thinking now that maybe coding is not just not that bad.
Whenever you see something already burning, you kind of loose the interest and move on. But when you burn something by yourself, you know how it started, the exact place from where the fire started, and how the fire found its path and what it used to come out in its full glowing form.
DECODING WHAT A LANGUAGE IS
Now since then in a period of three years, I worked extensively on coding and software programming.To the very basic where I can say, coding is mostly simple mathematics at its heart. Most people who are not in the IT industry don't know exactly what software engineering is or what coding is. Let me break it down to simple terms. Now an engineer is a person who through the application of mathematics develops something right.Now using those set of skills of mathematics and through a language we develop software. Now the language here in question is a programming language. What is a programming language actually? JavaScript or Java can be considered one of the most ancestral and popular programming languages. But if you say it to someone to who is alien to it he/she can't do it. Any programming language in the entire world follows a basic structure, if you grasp this structure, you can master any programming language.
Lets say for example, a person from North India comes to the Southern part of India, and is introduced to the various southern languages. Now will he/she be able to understand it?Definitely not. They wont be able to understand it as they are not aware of the structure and syntax of the language. Now same with a person from South India, who can understand the various languages from other southern states. People who are from Bangalore and know the local language primarily Kannada can understand somehow the language of Andhra Pradesh. People who belong to New Delhi, they can understand languages of Haryana, Punjab etc. Hence a language's complexity doesn't lie with what we hear, it just lies with the structure and syntax of it. The very same thing goes with a software programming language also. If you are aware of a particular programming language fully, the languages similar to it can be learnt very quickly.Do not treat the programming language as a computer program, just treat it as another language. A program can be referred as a group of statements which the compiler/interpreter identifies with. That is what it is composed of.
ALL THE MATHEMATICS OF THE WORLD IN ONE
To deduce is to know Maths.
Coming to the mathematical part, we have linear equations. Now with linear equations, generally what do we do. We try to extract the value of a variable, then try to put that same value in other equations to get other values. Now we do it in a step by step method. We are dealing with an equation which has unknown variables. So just by looking, we try to identify which is the most easily extractable value. Now if we say, the average value of age of a father and son are 28 years and ratio of their ages is 3:1. Since knowing the average age can be calculated as summing the ages dividing it by number of participants, we derive an equation from it. Since 3:1 ratio is provided, we simply just replace it with the values and get the ages. Whether it is integration, where by knowing the upper and lower limits and applying appropriate formula to it, we get a value from the equation. Hence everything is basically knowing what we have, what we do not have, what value needs to be known first and applying them to take out final values. Hence by appropriate division, what we need to know to go ahead promptly determines the mathematics. The exact same thing is replicated in writing a programming language.
Lets take a very simple example which will sum it up. Lets consider you open a website, where you see a login page. Like any other login page, you see it is asking for username and password along with a submit button. Lets say the website what it will do is, after you login whatever images are in the record on your username, it will display it. Now whenever we are doing web applications development like one of these, we require three things primarily or I can say, three files. These three include the file where you write what you want to see in the page, which is known as HTML. Secondly where we design the coloring, layout, styling associated with the HTML known as the CSS file, and third a file which controls the behavior of these two files popularly known as JavaScript.JavaScript is the one of the most popular computer programming languages for web development. Now in the html file we can write the username and password fields in accordance with the html file rules. Now in this file only, we also see a submit button. Now within this file only, we can provide various attributes and the value associated with it. So on the button section, we can write an attribute called as on-click and within it we can write a value called as submit(). Now basically what we are doing is finding a place where we can dump the values of the username and password what the user has entered after clicking the submit button. Now this submit() can be referred as a function in programming language. Its just a method which we are invoking or calling in order to handle what to do with the username and password.Now what this particular method will do with it follows up next.
THE DEMO OF AN APP
Now any web application or software application has two parts. The front end and the back end. The front end is what a user usually sees, the login panel, the style associated with it, which is visible to user in a browser. Now the back end is what a user cannot see. The back end is the place exactly where the application is built upon. You can consider the back end similar to the root of a tree, where the branches and the whole tree is built upon the tree. The stronger the roots, the tree holds for a much longer time and grows more. The same analogy applies to a web application. If there is no back end available the application may collapse on its own. Now typically any web application or a website has a url of its own. On entering the exact url only, you are redirected to the website. So back end of any application also has a particular url on which the application is built on. Since we have the user name and password with us passed by the user, we can send this data to the back end by mentioning the exact url and let the back end decide what to do with the data.
The back end is also a cluster of various methods which is also written in the form of a programming language, most popular being Java. It has its own syntax and structure. Now when we are sending the username and password to it, we here assume that the back end has some method already existing just like the submit method to search for images tagged to it. Now when we are mentioning the back end url in the submit method itself, we also mention the method name of the back end along with it. After the data is sent, the method is triggered and the code searches for any records related to that username, and if any, it picks it up and again throws it to the front end. Just as in mathematics, if you were trying to put a variable in a wrong equation, you never will be able to deduce the equation and get messed up. Same goes with coding to, if you are not able to locate where to put the data, inevitably you will land up in errors.
Now after you send across the data, the data comes back from the back end, the submit() again handles it with two scenarios. Here there can be a possibility when you get some data, you get a success scenario, or else when you do not get any data, you land up in error scenario. So in the success scenario, the data or the result can be assigned to something. It can be a variable. It can be anything, and then and there only, you can tag that variable to your HTML or view and can show the images retrieved hiding the login page. In the error scenario, you can display a message, "Sorry no data available for this particular username". Moreover, the back end consists of database, a place where all the records are kept intact and with time and need, can be extracted and given to the application like in this example.
MATHEMATICS INTERSECTS CODING
The above scenario is what concludes the heart of a programming language. It is the ability to trigger a behavior, send the data across, manipulate it and ultimately tagging where you want to. It can be considered as the germ of an idea of any programming language. Why I compare it similar to Mathematics is the structural approach of both of them in order to achieve what they want. Both have the exact same level of structural integrity which they deeply follow. Just like formulas in mathematics, coding in any particular language also involves some use of third party formula which help with many calculations. This is what was missing on my approach towards understanding a programming language. I had never ever thought that coding can be associated with something like Mathematics and it is this approach that helped me understand coding at an architectural level.Moreover, it was also the relentless pursuit of my senior colleague to go through every basic and concept of programming.He pushed me in a way nobody ever could. My team lead also who behind the scenes was watching how I am doing used to provide a fresh and different perspective. Both of them wanted me to personally go through it and master it. Apart from the business perspective, they wanted me to give it a chance, invest time in it and learn it perfectly. When I finally moved out of the project, they felt really well seeing me achieve what I had.From seeing me knowing nothing to doing the most complex things at work, they truly must have felt happy.Other than work, I have great personal bonds with them which remains intact.For me personally, I never had the idea of technicality of software programming.Thanks to all of this, I envision work now in terms of technical and management perspective.
One another marvel of programming is that you can store anything and everything inside a variable like x where the data can be string, number, Array, object, etc. The size does not matter. It is basically like a small compact briefcase within which you can carry all your luggage. You do not need a big travel-lite bag to carry your things i.e, your data always showing the length of data each time making it look clumsy and big.Nowadays roles which are becoming quite popular and trending such as Data Scientist entirely focus on the proficiency of Statistics and Mathematics.
One another marvel of programming is that you can store anything and everything inside a variable like x where the data can be string, number, Array, object, etc. The size does not matter. It is basically like a small compact briefcase within which you can carry all your luggage. You do not need a big travel-lite bag to carry your things i.e, your data always showing the length of data each time making it look clumsy and big.Nowadays roles which are becoming quite popular and trending such as Data Scientist entirely focus on the proficiency of Statistics and Mathematics.
THE DRIVE INSIDE YOU
For being a good computer programmer, definitely one needs good coding skills, programming efficiency and analytical ability. To know the syntax and what code to write is extremely important. But the cherry on top to make your coding learning fun is to be inquisitive and not knowing things. When you are curious about something you dont know and you want to know more about it, it unravels and explodes in a very awakening manner. That experience is something you will relish only when you keep learning and thinking of ideas and trying to implement them. To be not sure, to be not knowing is alright. One just needs to be curious, that alone will do everything inside you and will take you to a path you never imagined.
Copyright © 2018 Shivashish Panda All Rights Reserved

Nice write up... All the best��
ReplyDeleteThanks Vaishnavi :)
DeleteKeep it Bro...
ReplyDeleteThank you so much Pati Bhai!!!
DeleteSharing experiences of life is a great feeling. Someday, someone might read your story whether it might be a school kid, teenager or a grad. Surely they will co relate these situations which you highlighted in your journey so far and they will be able to shape their path more towards the goal, rather than waiting for a silver lining to happen. #ThumbsUp
ReplyDeleteHey Suraj.Thanks a lot buddy for your input.You were one of the parts at the beginning of this terrific journey.I am sure people who read it will shape their goals in life.
DeleteWow!! quite inspiring and informative too. :)
ReplyDeleteHi, Thank you so very much. :)
Delete