Yesterday, it was my Parallel & Distributed Systems exam. The last of the 4 subjects for this semester, which itself was last of the 8 semester we have in an Engineering degree course. Which is to say that Engineering is finally over. I am pretty dense about most things outside of computers, but even for someone like me, realization of the fact that a very cheerful phase of my life has now come to an end, it was a bit difficult to take in.
I remember the first day of my engineering, the same way I remember the first day of my junior college. Both my junior college and degree college were far away from home (60kms each side), and I selected them purposely. I liked cities from a very tender age, and selecting a college in a city quenched that thirst for me. Cities are quite fascinating, especially due to the fact that I come from a sub-suburban town that closed its shops by 8 at night. On my first day, I was clueless, just like others. I didn't know that in each semester we were going to have different subjects. Like most others, I had not one friend. I looked up my name on a board and went to the classroom it mentioned. I made my first friend in the Chemistry lab on the 11th floor, and that guy stayed my best friend throughout college, which is nice. Made quite a few friends in Engineering, as opposed to junior college, which is a huge improvement in my social skills.
Love for technology
I choose computer engineering (after realizing that computer science is not an option for the academically dull kids), and I got the college seat in the third and final round of admissions. If that wouldn't have happened, I had planned for BSc, because I wanted to study Physics as well. During admissions, I knew computers was my first preference. I had already been into computers from 2-3 years then. Didn't know how to write any code as such, but I did have a good idea of what I'm getting myself into, given my interests in Netsec from sometime then. I knew stuff back then, and I remember the cyber wars time. I wanted to be more than a guy who used exploits and php shells, I wanted to be the one writing them (Arjun, thank you for inspiring). I was so crazy about cybersec back then, that I managed to get promoted with grace marks in 11th standard.
One of the most interesting difference between junior college and engineering was that in junior college, people (except Kunal, who liked tech) around me thought I was crazy, because talking about webservers, exploits and sql injection was something that would turn me on. On the other hand, things were different in Engineering. I had a friend or two who used to understand what I'm up to, were equally fanatics about something in computers, and shared the same passion for programming and solving problems. Suddenly, I wasn't weird. Thanks to landing in the right place, where I think I belonged.
I got into blogging just the day after my last HSC exam if I remember well. The original plan was to make money, but the end result was that it taught me a lot about tech in general. It taught me things related to web hosting, numerous CMSs that I used back then, I played with my first VPS around this time. And to match the OS on the VPS, I started using CentOS on my PC too. It was then I learnt how multiple sites get hosted from a single IP address. How SEO is done and how affiliate marketing hows. None of that actually made me any money, but the foundation it gave me was later used when I later got into web development. It is a great feeling when you're writing PHP code and then suddenly you exclaim, "Oh, so this is how SQL injection actually works. Cool!". Although nothing can beat the feeling of writing AJAX for the first time to retrieve data from a remote REST endpoint. I was so excited, I even called my mom to show it to her. "Arre waah, chaan! (Oh wow, nice)" is all she said. Never mind.
I got into competitive programming in my first year. We were taught C, and I and my friend had just discovered Hacker Earth back then through our seniors. Not much later, I realized that I can save myself a lot of efforts if I knew how to code a second language. Thus came Python. I did some competitive coding with it, but my interest quickly shifted to learning Django, which was this cool thing that looked like a CMS but wasn't a CMS. People called it a "framework". Now what on earth was that? And what is this MVC thing? Can't we all stick to simpler things like writing SQL queries in PHP files and echoing HTML though them? Why need all this complexity.
But wrong I was all this time. Models had to be separated from views and then you can focus more on what mattered, and less on struggling with the structure of your own code. During my time with C and Python, I wrote a some comparison articles because it was fascinating to me how different both these technologies were.
Then I fell in love PHP, and then C++ which was when I tried getting back to competitive programming. I had given Debian Wheezy a try then. Soon I read about the launch of Jessie. I came across this meet-up announcement about Jessie's launch party. I attended it, which was the first meet-up that I had attended. Although I went there purely for the Debian launch party and getting my hands on the ISO, the outcome was that I got to hear people talk about various other things, real web development being one of them, and it was amazing.
In 3rd year, we had web technologies as a subject. It was when I got to learn Javascript properly. I knew it from as long as I had used the Internet, but never really understood it, or the power it had. I learned it in depth, and found a new love. I used Js to write most of my projects, and I really owe a lot of my current skills to that little decision of not just learning Js, but understanding it under the hood.
Towards the second half of the 3rd year, I got involved with Project Lumos, another life changing experience for me. Then things got pretty busy, and final year came and went without much happening from a technological learnings point of view.
Travel
I traveled a lot more than what I was known for before engineering. I watched movies in theaters, went to good restaurants, had fun with nice people who actually cared about me. I even went on my first trip with friends out of state, which was in Uttarakhand. I have learned tonnes of social skills through some of these people around me, and during my time in Delhi, I learned how much do these social skills and people skills matter. In fact, your technical skills sometimes come second to these people skills. "In a way, life is what but the relationships you build along the way", a person I respect a lot said once.
Misc
Apart from that, I got to speak a lot in front of people, in class, during Project Lumos meetings, in the committee that I was a part of, etc. Since I never spoke publicly, I had a fear of doing it. I got over it during engineering, which is a great thing. Expressing your thoughts in clear words in a skill very few actually have, and while I'm not there yet, I've made a start towards it. I learned to stay organized, use notes, reminders and other stuff. I have tried to actively help my friends and classmates with their stuff. Helping others have given me great deal of satisfaction, and while it may not translate to anything, it surely helped me get my own foundations and concepts right, which is a byproduct of teaching.
Most people and their opinion don't matter. I realized that there's a very little group of people around you whom you should never let down. Don't waste time impressing the rest. I learnt I'm missing on some good experiences by always caring about what people might think. Once I let go of it, life was even more colorful.
A great deal of all of this people skills have come from the book by Dale Carnegie, How to win friends and influence people. A no BS book that I would totally recommend to each and every person reading this, irrespective of your field of work, given all of us share the same Human abstract class.
What I could've done better
Now that I know what mattered more than most other things, I think if I were to take up admission in engineering again, there are a few things I would do differently. I think a lot of unnecessary emphasis is given to academic excellence when actually, it was the least that mattered. I think I've spent a lot of time studying for exams when I could've studied to gain actual practical knowledge by building projects. I mean, reading from those question papers, studying answers from the point of view of scoring marks is time that went down the drain. Optimizing your time best to get the essence of the subject, some practical exposure as well as a score just enough to keep you going, that is what I would do the next time.
I would talk to more people, send more emails. I had always been hesitant to talk to people from startups and organizations that I loved. I felt I was under-qualified for most of the things people do in tech. Although, not properly qualified either, but if you just assume that and don't reach out to people, you'll never move to the next level. For starters, suppose you learnt Python this semester, and you are confident enough to work on a project. Start contacting people and ask them if you have a way to contribute to their project. That way, you can get a part time role over the semester vacation at a good place, and get to do things professionally.
Make open source contributions. If you don't feel like working as an intern, contribute to open source. I'm amazed at how much I overestimated open source and thought that getting into it is too big a deal. No it isn't. If you know what you're doing, just pick up a tool that you use (say Chromium), look into their bug trackers and write a patch for a bug that you can understand and solve. Then compare it to the accepted patch. When I did it, I was surprised to find that the solution that I wrote (which I thought was 'unprofessional, inefficient and too simple') was exactly what the solution which was accepted was. The message here is, you're not as stupid as you might think, and the people who build all the amazing stuff that you can't live without a single day were not any smarter than you are. Know basic Javascript, Python or C++? Any one? Great, you can officially 'author' some part of the Mozilla Firefox web browser. Know how to write a language fluently? You can write documentation for them. It's that easy.
Make connections. Connections are just people you know, whom you can call up and ask for a favor. Your friend is your hangouts connection. Similarly, get to know people in various walks of life, in different fields. It is a win win in most cases for you and your connection. Share with them any opportunity that you find useful, and they would do the same. Plus, it is almost always the case that they know more about something than you do, and can guide you on that. They can validate your skills both professionally and personally. Connections are also useful when you want to make new connections. Some of your connections would be a lot ahead of you in professional life. They might know more about most things than you. Have them as mentors. You'll avoid some common mistakes and save time if you have a good mentor.
Eat healthy and workout regularly. I've realized it a little late, but you only have one body that you have to live with for the next 40, 50, 60 or 70 years. And it isn't indestructible. There are some irreversible changes taking place while you're sitting there reading this. Your spine takes a lot of beating when you sit, and if you're a computer person who sits most of the day in front of his or her PC, then the spine cries. Make sure you have a right posture when working. I know people who use a Rs. 70,000 laptop but use a crappy chair as it 'doesn't matter'. It does, so let's stop taking our bodies for granted. Eat less sugary food and workout regularly, if not daily. If nothing, go for a 5km walk everyday. You'll feel much better when you come back to work. We programmers are very keen to watch log files, warning and error messages. But we often ignore the warning messages our body tries to give us, and by the time you encounter your first error, it is irreversible. Don't let that happen.
Drink plenty of water. I know, very trivial. But surprising how many of my fellow engineers and programmers forget to drink water when they're working on some interesting problem. Sure, work hard, but keep a water bottle close to you and have a sip every now and then. It will benefit in ways you can't even imagine. Make it a habit. I have done it, and it really helps keep you hydrated and fresh.
Learn to judge people. Not everyone who might ask you for a favor might actually deserve it. During our projects, I have helped all kinds of people. Later when I used to think, not all of them were into learning how to do things. Most of them just wanted me to get their work done for them. People will befriend you when they see a merit in it, that's just life. Don't be ignorant of it. If you still choose to help, cheers!
Finally
I hope some of you will find something to learn from my experiences. I've made mistakes and I've learnt from some. There's still a lot to learn, so many amazing people to meet and places to explore. One life, too short and too long the way you see it. I've been privileged and fortunate enough to have so many positive experiences during my time in engineering. As an engineer, I feel the learning phase of my life would never end, but this particular one, of formal education, has ended here, at least for now. Life would turn off the 'easy' level switch for me, and that's scary enough. But at the same time, new opportunities, freedom to take major decisions and new responsibilities will become part of my life in this new phase. It should be pretty interesting.
So this little thread to the 18 years of education my parents gave me, the people I met and became friends with and to all the amazing experiences, learnings and setbacks, that molded me into the person I am today. Thank you for reading.