I completed first year of my professional career as a Software Engineer last week and here I’m, now thinking about a year younger myself and what advice I’d give him. I guess these kind of feelings come to everyone time and again in their life. When I try to picture a year younger version of myself – I see a young kid in love with computer science, looking forward to build killer products, waiting to be assigned to the project which will solve some problems for millions. He doesn’t know or care much about customer experience or how to build something that can be sold to them. He likes the taste of JavaScript animations much more than that of unit test and load tests.

Quick heads up – I joined Microsoft IDC, Hyderabad on 13th June 2016 as a software engineer. This is my first job after graduation & I still work here. Now that I think back, it’s been a good journey with a couple of ups and downs, great learning and opportunity to work with great folks on good projects.

Some key points I would want to enumerate are (not in order of importance):

  1. Be humble – even if you have become the subject expert in the matter, listen to what the other has to say. A lot of innovative ideas come from discussions and brainstorming.
  2. Try and leverage work of others – its 2017, most of things are already implemented, don’t act over smart and try to reinvent the wheel. There are cases where it’s easier and smart to DIY, but question yourself twice before you choose that path.
  3. Don’t try to implement stuff you don’t understand – it’s highly possible you can’t implement it right if you dont understand it, or you might leave the implementation in between.
  4. If you want to implement anything, start with very simple minimum viable versions – then reiterate.
  5. Don’t try to implement most generic version of your code in first iteration. You don’t know if generalization is really needed. With agile model so popular, it’s possible the code would be scrapped off before generalization is actually used. Implement it after the use case comes.
  6. If you think something / someone is doing it wrong – mention it, worst case – you will be told where you went wrong, best case – you might have just prevented a big failure.
  7. Start to loose fear of failure, try and fail early. Accept failure and reiterate.
  8. Read more literature, doesn’t need to be related to computer science.
  9. If you are building a software or a module think from customers perspective, put customer first, even if you are a developer. If the scenario doesn’t make sense to you talk to folks responsible.
  10. Keep track of what’s going on in Open Source Software landscape, try and contribute to one or more projects.
  11. Learn about investments and invest your money for safer and fun future.
  12. Participate in more and more hackathons & competitions – good opportunity comes when you do extra.
  13. Sometimes push yourself and see how you perform under hard deadlines – one way is to pick up freelance tasks with short deadlines. It’s fun!
  14. Work hard and then go out and travel. Travel with close friends or make new friends.

One particular thing I’d like to emphasize is very similar to what I have been hearing time and again:

never stop learning, it’s both exciting and rewarding.

In fact, my suggestion is one should always be learning things both inside and outside of work and it’s better if intersection between these two is less.

Learning set

 

Here’s my theory:

The learning curve at work would have a different gradient from time to time. When I started working, the Management Team was considering whether or not to dissolve the team and stop investing in the project. Due to the confusions new hires weren’t given much work and we were assigned to fix certain functional tests. It was tedious and we weren’t supposed to spend a lot of time on it anyway, neither was any result expected from us.

So learning curve in this period was something like:

If you can find the point where I have attempted to draw an arrow in the above plot, that’s when one start resorting to sources of entertainment at work. It’s so much fun when you spend 4 hours a day of your job time watching the big bang theory while the rest of them glaring at functional tests. I think, nothing good will ever come out of it, Big Bang Theory has just 10 seasons and you will run out of episodes very soon.

I believe this phase comes to everyone – work is less time is more. And it’s an excellent time to add more skills to your basket. If you go out and explore, there are practically infinite topics to learn and once you do – you’ll start seeing it being applied everywhere around you. I have observed this throughout the year. Could be possible because of how naive I’m. In my case I started doing a coursework on Distributed Systems and Cloud Computing by Indranil Gupta, UIUC from Coursera. Doing this helped me in two ways – I realized how I haven’t persisted much we were taught during engineering. Second, very soon an opportunity came where we were designing architecture of micro-services for a proof of concept where it was easy to relate to concepts and I was able to contribute.

Learning theoretical concepts are great in the beginning, however, eventually it becomes too much or difficult to absorb if we don’t get any practical exposure around it. Trying to learn without using the concepts some way or other, doesn’t look very different from college days. Well, before it comes to that, your manager will assign you some work.

Normal work phase – you are assigned to decent amount of work. Every time we work on something new, there is some learning involved.

This is the phase where we spend 8 hours of our job time on assigned work. Who am I kidding :D, 5 focus hours after all chit chats, lunch, pool games and Foosball. Learning inside of work will implicitly occur. Now you’d need to put extra efforts to try and learn things outside of work. Also, it’s not completely orthogonal to the idea of going out and partying after work. There is always enough time for that. It doesn’t even need to be related to Computer Science. Learn music, swimming or spend time on physical training.

I wouldn’t say last two lines are on record. Being a huge fan of physical fitness myself I’d recommend swimming and working out. If possible use it as a break from work. Check this article – What weight lifting for 20 minutes does to your brain.

Anyways, what I wanted to convey with last plot is – if at possible continue learning stuff outside of work as well. It could be a rewarding experience. Even if it’s not very much related to what you work on every day, at some point in time it could be of help.

I don’t thing we’d are programmed to be ever satisfied with what we have done. I can write a bigger article on what I shouldn’t have done or publish 555 mistakes of my life. But it has a positive angle to it, I can translate those to todos and dontdos for coming year.