Its been a long time since my last blog. I have had a lot of exciting stuff happening in my life in between. I graduated, got my first full paper selected at a major AI conference, did an internship with Adobe’s Media and Data Science Research team where I worked on a really exciting new field (more on that later) and went on a solo tour to my home state at the end of it. As I write this post I am traveling again, this time to Jaipur for a weekend. For a while now, I have been retrospecting about how these four years of undergraduate life have gone by. Overall it has been a sweet cocktail of highs and lows and I have thoroughly enjoyed my time in college. But I still remember the feeling of uncertainty that plagued me when I was a fresher, the lost opportunities and mistakes (or blunders :-) ) committed due to lack of awareness about things related to undergraduate engineering. Now that I have finally left my college (and I also have some free time at my disposal), I think I can look back and examine my undergraduate years to derive some suggestions, cautions, advice, etc. Things that I would tell a younger version of myself if I could go back in time. I summarize all of that in the form of this Survival Guide for Undergrads.
I should make a few things clear in the beginning.
In no means is this guide complete. Part of the reason is that I don’t think a full undergraduate experience can be distilled into a single blog post. So it’s I may have made some serious omissions (graduates! you are welcome to point that out to me on mail!!). Consequently, I might add stuff at a later date.
The ideas presented in this blog are based around my college experience and therefore would be biased in some way. As much as I would like to include an all-round perspective, its simply humanly impossible for me to do so. Since I am a computer engineer by education, you might find this blog a bit ‘CS-ish’. Additionally, some sections of this post might not fit a non-Indian student’s perspective.
Finally, this is my take on how to successfully wade through college life and certainly not the only one. You may very much disagree with my viewpoint and that is absolutely ok. But I hope you would find at least something that might be of use to you.
In this post, I focus mainly on the following topics
- The mindset you should have
- Gender diversity
Though I started writing this blog on August 9, I managed to finish it on August 31!
How to approach your undergraduate life
Starting with your college journey can be overwhelming and it is quite natural to think of it that way. After all, when you emerge from the other end of undergrad life you would legally be an adult. The thought might be enough to spur you into worrying about your career, internships, placements (or whatever you think you want to do after college). Trust me this feeling is shared by most if not all freshers even if most wouldn’t admit it. Here’s what you should ideally be doing.
Relax and enjoy: You have just entered college after a gruesome entrance preparation and you deserve a break. Don’t worry about placements, internships at the onset. Trust me, anything you do in the name of preparation would be pretty insignificant in the larger scheme of things. So use this time to know the students joining with you make friends (as many as you can), go out and play, etc.
Explore! Explore! Explore!: I can’t stress this enough. Find out what hobby excites you the most. There would be time during your course where you would feel burnt out. Taking your mind off at that time and immersing yourself in something you like does a world of cut. Therefore you should try to identify some activity that refreshes you. It could be traveling around, going off for a stroll, painting or poetry.
Start a blog: Write something! Learning a new tech? Share your learning journey in the form of a blog. Visiting your village/hometown? write about it!. I think ‘writing’ is perhaps the most underrated intellectual activity. Writing forces you to sort, condense and solidify your ideas. The importance of this activity has been beautifully summarized by David McCullough, Pulitzer Prize-winning author -
Writing is thinking. To write well is to think clearly. That’s why it’s so hard.
Apart from being an intellectual exercise, the habit of writing technical blogs is looked quite favorably in recruitment and in applications for higher education. You will be surprised to know that most undergrad you will find writing down your ideas in a coherent and structured manner to be difficult. Making writing a coveted skill.
- Ask: It always helps to ask for advice/opinions from senior students in your college. Apart from getting time-tested solutions for your conundrum, you get an opportunity to make yourself ‘known’. This is quite important because soon you will realize that opportunities won’t just knock on your door. You will have to find them. It is not possible to be on the lookout for every such career chance on your own. In such a scenario the network of seniors you build turns out to be the best medium for information.
However, I should emphasize that although you should be ready to take input from as many people as you can, you need not attach equal importance to what everyone says. A simple rule of thumb is that the most useful advice/suggestion you will get will be from someone who has been in your position or the position you want to be in. Needless to say that although you should be permeable people’s opinions, you should always evaluate them on merit before acting on them.
- Academic performance is important!:
If there is one thing you must take away from this article then this is it! Whatever goals you want to end up pursuing, a good academic record is a huge asset. Anyone making you think otherwise is either ignorant or your enemy :D . Yes, you can argue that the current education system is broken or it discourages innovation, etc (and these arguments have some merit) but at the end of the day, people do look at your GPA. As far as undergraduates are concerned, GPAs do matter a lot !. The importance of GPA, however, wanes as you progress in your career. They matter less for students pursuing masters and very little for PhD candidates. So you can regard your scores/percentages as some pesky nuisance that you need to deal with before you graduate. It should be noted that when I emphasize the importance of GPA, there are two things I don’t imply:-
- poor academic record automatically leads to failure (in life).
- you need to be a department ranker to do something big.
My point is that you should try to maintain your GPA above a certain threshold. Once above that threshold, people don’t care about how much you score. A score below that, however, can make things harder. So how to score above that threshold?
Well, it depends on the individual. There is no standard, algorithmic way of doing x-y-z for getting good grades. You will have to come up with your own hacks. However, I would highly recommend reading this blog for a few pointers.
Engaging socially helps: Studies during undergraduate years are way different than what we do in high school. The main difference you will observe is that it’s difficult, in general, to maintain discipline in college academics vis-a-vis academics in school (especially if you are a hosteller!). Paradoxically this difference is not because of some fundamental changes in your mindset. Rather it’s due to your environment. You will find a plethora of activities that you would want to pursue, a less hands-on approach by the college admin as compared to your school teachers and even course syllabus would look a bit ‘uncertain-ish’. For instance, during my time at NSIT, it was not unusual to find last-minute addition/reduction to exam topics. This deluge of possibilities can give rise to a sinking feeling.
The best way to deal with this is to be socially active! You will find that you get a lot more information about the course syllabus/ exams from your peers, seniors or through personal interaction from the professor than through official channels. Make it a point to reach out to your teachers personally regarding your coursework. They are more likely to explain a topic in detail or give you some important advice in a one on one discussion which they wouldn’t feel like giving during a classroom lecture. All these little chats, though seemingly insignificant, lead to big differences when seen holistically.
Be collaborative rather than competitive: While preparing for entrance exams we tend to get extremely competitive. Well, college life will force you to shed that attitude. Your priority during these for years should be to find and achieve (or be on the path to achieve) what you want to do in life. Since life goals depend on personal preferences, it is stupid to be fiercely competitive. Working with others for mutual benefit is a skill that you should try to learn as soon as possible. Believe me, effective collaboration is a rare phenomenon. Mastering it would yield great dividends.
Do a project: Life in college is more than just getting marks. Five years down the line no one will care about how much you scored in your first semester examinations. What they will see is how skilled and passionate you are in your profession. Therefore getting real hands-on experience out of your curriculum is necessary. Read codebases of open source projects that you love. You will learn a lot more about software development than by reading theory. Start working on small personal projects of your own. Don’t wait for learning the full-stack required for that project before diving into it. You should learn while you develop. That’s the most enjoyable and effective way to learn especially in the case of computer science.
- Result is not always proportional to effort: This is something that is deliberately neglected when we are in school. ‘If you work hard you will always succeed’ seems to be the moral of every other story that we read. The point is that these stories don’t capture all the complexities of life. There are gazillion many random variables that are potent enough to ruin your result no matter how hard you have worked for it. Learn to deal with the fact that there will be moments when in spite of all your best efforts, you will end up being disappointed by the outcome. But mind it I am not telling you to stop doing your best and be a defeatist, resigning yourself to those random factors. On the contrary, you should, apart from working hard, plan your efforts in a way that accounts for those random variables. This is analogous to how electrical engineers keep a tolerance band while designing circuit elements to prevent circuit failures when there is a sudden random spike in current.
Internships, Placements from a CS perspective
Industrial or Research Internship?: If you want to go for higher studies, trying finding a research internship. Such an internship would serve you on two fronts 1. You can get a paper written during the period of your internship. 2. You can obtain a letter of recommendation from the professor under whose guidance you did your internship. Good quality research paper and a recommendation letter from a faculty at a reputed institution would bolster your chances of getting a good admit. How do you apply for such an internship? You would have to personally mail every professor ready to take an intern. But make sure you have read a few of their past research papers before applying. Your email should cast the impression that you are a serious candidate and you are familiar with his/her line of work. In case you are not able to obtain such an internship, that’s fine! Go for an industrial one. However, the chances of getting research-based projects are very low. So you might have to take time out to work on some personal research projects. There do exist companies such as Adobe, Samsung that offer research internships to undergrads. But they are quite selective while hiring and one of the major factors they take into account is your college brand (unfair but that’s the way it is). Overall you should make sure that you have a good professional relationship with your manager so that he is willing to recommend you when you require.
It goes without saying that if higher studies aren’t your goal, you should seek an internship in reputed companies. The benefit being you will get a first-hand experience of what life is like in that industry. Also, if you perform well enough during your internship, you might get a pre-placement offer. So you won’t have to worry about not having a back up during your placement season.
Does your academic performance matter?: A lot! Companies place a bar (GPA cutoff) on the candidates who can take part in the recruitment process. In some companies, top rankers implicitly have an edge over other students even if the company doesn’t mention that in its orientation. At NSIT students who have backlogs are barred from sitting in the recruitment process for top companies. I think this emphasis on academic performance serves two benefits to the company. First of all, it means that the company representatives have a manageable number of candidates to deal with. Secondly, a good academic performance is, in a very conservative sense (and not entirely correct), a measure of obedience. That is it shows that a student with a good GPA can work and excel within the system.
Which companies to sit for?: Those which offer a profile which is concurrent to what you want to pursue as a career goal. Apart from that, before a company arrives for recruitment you should make it a point to ask seniors about its the work culture, perks and shortcomings. Preferably ask those who are currently employed or were employed in the past in that organization. This is important because depending on your placement cell policies you might not allow you to sit in placements if you get a pre-placement offer during your internship. You will then have to depend on off-campus opportunities to get a company of your choice. A simple rule of thumb is that reputed companies generally come early. Also, make sure you don’t judge a company by its internship stipend! Many companies that offer higher than average internship stipend but would end up disappointing you with their full-time package.
What if I don’t get an internship in the company of my choice?: That’s ok! make sure you keep on preparing for the placement season. Should you accept the PPO? Depends. If the package is low compared to the average placement offer in your institution and your placement cell policy would allow you to sit for good corporations or startups, then take it (because - job security). If they don’t then refuse. If the package is around the average then you should make the decision based on how confident you are about your ability to crack off-campus interviews. Keep in mind that getting such interviews is a matter of chance. In case the package you are being offered is above average then I would suggest you take it and prepare for off-campus opportunities. If you happen to be from premier institutions of India (read IITs, IIIT-H and BITS) you will have more leeway so you can reject PPO offers without giving much weight to job security. Many good companies would either higher exclusively from your campus or would give your profile a preference based on the reputation of your alma mater.
In case you are not able to get into any company for internship don’t lose heart. Try working on a research project under a professor. Ask him to issue you a letter stating that you worked as an intern under his guidance. Research projects won’t consume all of your time and you can also work remotely. Moreover, you can always write that you worked as a research intern so your inability to clear internship season successfully wouldn’t reflect on your resume. Utilize the time you save for preparation. If you think logically you will have more time for placement preparation at your disposal than any of your peers doing internships in companies. Consequently, it doesn’t come as a surprise when you will find that students who couldn’t get an industrial internship, crack placement interviews early.
Structure of the selection process
The first round of both the internship and the placement process consists of a programming test. You will be given 2-3 programming questions to solve in a limited time frame. Additionally, you can also get a set of MCQ questions based on OS, DBMS, Basic Maths, etc. Keep in mind that programming questions will always outweigh the MCQs.
Later rounds are called ‘technical interviews’ and they follow a common template. You will usually have an interviewer (sometimes more than one), who will ask you to solve a coding problem on board, some basic viva-type discussion. They might ask you questions related to your resume. The number of such rounds depends on the company.
The final round is termed as ‘HR round’. It is essentially a non-technical round meant to analyze you as a person. One thing I would suggest is to be original. Keep in mind that the people who are conducting interviews are no greenhorns. They have been through a wide range of made-up answers. There is a high possibility that your cliched answer might not have the intended effect.
Generally, companies follow this format when they come for on-campus placement. They can, however, alter the selection pattern based on their convenience. Some companies also conduct a mental ability test to filter out candidates before the coding round. A few companies also keep a group discussion round. You might also get a one week project and based on your work you will be called for an interview.
Preparing for Internships and Placements
When should you start preparing from?:
Assuming you are in an Indian engineering college, you should ideally start preparing from the fourth semester. However, targeted and smart study during the two-month summer vacation following your fourth semester is enough for cracking internship tests and interviews. But make sure you know basic programming by the end of your second year
A similar scenario exists for placement preparation. Since placements hold a lot more importance, the earlier you start the better. Best case scenario - don’t go out of touch with coding preparation after you bag an internship (you anyways won’t if you are not satisfied with the current internship offer or if you haven’t got one).
Writing your resume: A resume is a documented summary of your skills and experience. It helps the interviewer to decide what skills to test you on during the interview. An ideal resume should mention your college scores, past awards, internships done, projects, skills (languages/tech stack you are proficient in) and should contain links to Github and LinkedIn profiles. You should explain your projects briefly and should have hyperlinks to the demo or code repository. There is no standard template for a resume. It is suggested that your resume should not look too cluttered, should have your photograph and shouldn’t look too fanciful. Since its just the beginning of your professional career interviewers expect your resume to be limited to a single page. There are hundreds of websites offering resume templates and you can go with any one of them. I personally use resume’s built using Latex. You can them here.
Programming Language to use: Either C++ or Java. Although theoretically, any language would do but practically speaking many programming test platforms don’t support languages other than these two. If you don’t have a preference, I would suggest using C++. You will have slightly less boilerplate code to write.
What should you focus on during preparation?: Look at past interview question the company has asked in its interviews. Designing new questions is a difficult task so most interview questions are recycled. The company might throw up fresh questions during the coding round, but those are usually simply twisted versions of some standard programming problems. A good reference for company practice problems is GeeksfoGeeks.
One thing that you should keep in mind is that competitive programming is not equivalent to internship/placement preparation. The structure of the questions, topic coverage is different. Even if you are an excellent competitive programmer, try to get a feel for the questions that you will face in your test. One thing you will understand immediately is that you aren’t required to be as creative as you have to be while solving competitive programming problems. I have seen many good competitive coders lose out on company tests because they either overthink a question or try to optimize a solution more than what is required. Remember your priority is to get the question right not to produce the most efficient solution.
Algorithms and Data Structures (on a scale of 1-5 (5 being most important)): Dynamic Programming (5), Array-String problems (5), Greedy algorithms (4), Trees (3 for internship, 4 for placement), Linked-Lists (3), Graph (2 for internship, 3 for placements).
Programming Language features : (for C++ (I don’t remember for Java)) templates, oops, friend functions, access specifiers, compilation process (what happens when your code is compiled and executed). Also, you can always ask the interviewer to ask questions regarding the language of your choice.
Computer Engineering Topics : Operating Systems (5), DBMS (5), Networking (3 for internship, 4 for placements). If these topics haven’t been covered in your college curriculum before your internship interviews you can tell the interviewer about it. However, this wouldn’t work during your placement interview.
You should move to the last two topics only after you have mastered Algorithms and Data Structures. This is because they have zero to low importance in first (coding) round. Most of the time you can clear the first round by completing the programming questions only. The last two are mostly asked during face-to-face interview rounds and even then (in case of internships) you can get away by solving algorithmic questions asked by the interviewer. Remember this is not the case with placement interviews.
Companies generally advertise off-campus openings after they are done with campus visits. These advertisements are put out on their LinkedIn pages, Official websites or third party sites like ReferHire and InstaHyre. Some companies require you to obtain a referral from their employees. Here is where networking helps you big time. You can approach college seniors using LinkedIn and ask them to refer you to their companies. And of course, requesting a referral would be much easier if you already know him personally. In case you do not, still, try contacting them. Most people are comfortable giving referrals to someone from their alma mater.
One key difference between on-campus and off-campus interviews is the structure of the selection process. You might have to compete on an open platform with other applicants or the company might call you for an online code-pair round. Some companies conduct on-site rounds too.
How to approach your internship
So you have got an internship. Now what to do next? You should start casually reading about your company’s products. Who knows you might find something that you are passionate about?. If that is the case you can ask the organization to set you up with a certain team (if that’s feasible with that org). That’s a fact most undergrads are unaware of. Even I was unaware of this until it happened to a close friend of mine who was a co-intern at Adobe.
When you join your respective companies as interns, you will be given a project to accomplish. The idea behind assigning you a project is to make you comfortable with the inside processes of the company. Undergrads usually limit their internship experience to their intern project, stipend and pre-placement offer. And that’s a huge opportunity loss. During your internship take out time to talk to other employees and discuss with them what they are working on. Make sure you take away a new skill or experience from your internship that would be useful to you in the future.
Doing research during a bachelor’s degree is not necessary but is useful in my opinion. Research work requires you to develop a lot of skills, creativity, technical writing, logical thinking, programming to name a few. All these skills are useful in any profession. Therefore I would suggest that even if you are not looking to study further after obtaining your bachelor’s degree, you should try working on at least one research project. It doesn’t have to be anything fancy or groundbreaking. You could do a comparative study of different algorithms used to solve a certain problem, analyze how an algorithm behaves when it gets some weird input or you could even write a paper on some project you worked on. You don’t need to have it published in a big conference. You can simply put it on arxiv.org. The underlying message is - indulge in research to enhance the skills I mentioned above. And of course, you also get bragging rights if you have a paper :).
Expectations from undergraduate research: In general, people don’t expect you to do something earth-shattering from students pursuing their bachelor’s degree. It would be exceptional if you manage to do so but you shouldn’t be disappointed if the progress you make doesn’t seem groundbreaking. Remember great results are a culmination of years of scientific output. Therefore if you are working on a large problem and you manage to find a better solution to a small subproblem, don’t be afraid to publish it. This has two advantages.
- Doing so is motivating. Research takes time and it is quite common to lose interest in between. In such a situation nothing beats the happiness of paper acceptance.
- It would help you get valuable feedback on the approach you are using to solve the larger/higher-order problem.
Of course, you should discuss the progress you have made with your advisor. This would help you avoid a situation in which you spend weeks writing a paper on something too trivial to be accepted in a reputed conference/journal.
Keep a research journal: Very often you will find that you can’t just brainstorm research ideas out of the blue. It takes time. And even when they do come, they would arrive in bits and pieces. Therefore I would suggest you keep a journal where you scribble ideas, draw rough diagrams, etc. When you read that journal at a later time you will realize some of those ‘bits’ were germinal ideas leading to something significant.
Joining a research lab: Contrary to the popular image of researchers sitting in isolation and churning out ground breaking theories, research especially in computer science is a collaborative activity. Many active areas in CS require additional computing hardware for making original research. Therefore I would highly advise you to join a research group (need not be in your college). Research labs would provide you with a peer group of like-minded people who can guide you when you get stuck in your research work (Trust me that happens often!). An association with a good research group can do wonders for you. For instance, I was a part of MIDAS@IIITD (led by Dr. Rajiv Ratn Shah) during my undergraduate years. Apart from the obvious benefit of getting access to necessary computing hardware, MIDAS also opened doors for me to collaborate with researchers from New York and Singapore. Moreover, I was able to secure an internship at Adobe Media and Data Science Research team because of the research I did under Dr. Shah at MIDAS.
Writing a research paper: As I mentioned in an earlier passage, writing is difficult. When you will sit down to write about your research work, you will find yourself wanting for words and phrases to express yourself. This is what is called ‘Writer’s Block’. To tackle that I use Writer’s ‘Sturmtruppentaktik’ (German for ‘Storm troop tactics’)
Sturmtruppen or Storm troops were elite German shock troops whose main focus was speed and initiative. German army attacks would consist of Stormtroopers bypassing serious resistance from enemy troops until they reached enemy artillery positions which were then neutralized. The regular troops would then mop of the enemy positions avoided by the Storm troops.
The tactic is as follows
- Write all the headings and subheadings you want to have in your paper. (First wave)
- Then for each paragraph write a summary (in a few words) that tells you what the purpose of the paragraph is. (Second wave)
- For each paragraph summary, write three points you will mention to achieve the paragraph’s purpose. Avoid thinking about English when you jot down the above points. It’s ok if those points are linguistically crude. (Third wave)
- Mopping up: Start expanding those points into coherent sentences (First draft of your paper is ready!!)
You should remember the first draft is the most time consuming and boring part of the research process. Using the above tactic you will be able to get over with it quickly. For more insights on writing research papers, I recommend watching this video from Microsoft Research.
Keeping up Morale and Health
Going about your bachelor’s degree is not a mean feat. You will face hardships both personally and professionally. Even if that’s not the case you will sometimes feel stressed, less enthusiastic, low on morale and in extreme cases depressed. It’s not too difficult to imagine what consequences that can lead to. Unfortunately, the mental health of students is generally overlooked and dismissed as ‘weakness’. Its an absolute necessity on your part to take care of your mental health. Sometimes a small discussion about it with your friends or something as trivial as taking a stroll outside can help alleviate it. At other times you might have to consult a counselor. Don’t be shy to do that. Remember you are doing all this (pursuing your degree) to keep yourself happy in the end. Stressing yourself to do that is inherently contradictory.
A short note on gender diversity
Throughout my years at NSIT, I came across various schemes and policies in the name of affirmative action for women. Scholarships, Travel grants, exclusive internships and placement opportunities for women in dream companies were a source of great frustration for boys at my college. To be honest, I held that view to some extent. I was flummoxed as to why such measures were required to promote women. After all, being in college by default meant that you are part of a society which in principle agrees to the idea of equality of sexes. I couldn’t imagine someone educated thinking otherwise. So the low percentage of women was merely a matter of time. Moreover, since unemployment was a huge problem in my country and in our society unemployed men are stigmatized, exclusively hiring women rather than keeping it open for everyone was not justified.
However, during my internship at Adobe, I came to know how women face discrimination in subtle forms. My mentor recounted how a male told her to “show more skin” if she wants the attention of the audience (She was a speaker at a technical conference in the US). A co-intern told me how her fellow classmate attributed her selection at Adobe to her gender and not to her talent (She was selected through the general open for all Adobe hiring process and she is one of the smartest computer engineers I know). This made me realize that these ‘remarks’ are actually barriers that silently discourage women from entering STEM in large numbers. Many seemingly ‘harmless’ comments that we throw around are essentially a manifestation of our inherent bias against women.
Will exclusive hiring solve this problem? I am not sure. Such policies are not perfect but that’s the best we have got! I am proud to be part of Adobe, one of the few companies that has taken solid initiatives to promote diversity and inclusion at workplace.
Final word of advice - All of this, engineering, college, internships, placements are just means. Means to keep you happy, to make you grow. Don’t get too entangled into these ‘means’. As an undergrad enjoy your life and never stop learning.