Published on
14 min readmentions

Career advice for ambitious undergrads

The markets are very bad for freshers these days. I see every batch of my juniors making the same mistakes. So I decided to write a blog based on what I think students should do to have a good career in programming. Please note that market and situations change over time so this is my advice on a best effort basis. Things might not be applicable for your goals.

Looking for TL;DR? Skip to key takeaways

Who am I to give you advice?

I graduated in 2022, did 5 internships during college, did freelance/consulting, and have been writing software post-grad for 4 years.

I currently work remotely at Qdrant, an OSS vector database from Germany. It's a distributed database, which is one of the hardest types of softwares one can build. I have never worked at a FAANG company myself, but I have close friends across MNCs and startups, so I have some context on both.

Who is this for?

People who are ambitious. They may or may not be confident in their skills at the moment whether they will be able to pull it off. But you wanna give your best and are willing to take well thought out bets.

The confidence comes later. What you need first is to believe the thing is possible at all, and that you're allowed to be the one who does it. When I entered college, I couldn't speak on stage. I was very shy. Everything below is stuff I learnt after that point, so none of it needs you to already be good at anything.

I don't come from top college. Does it matter?

Any great career is made of multiple (relatively independent) great achievements. Preparing for JEE was only an early part of it, and you tried your best. Now it's the next phase of your life.

Your current position matters far less than your growth rate. Someone at rank 500 who keeps compounding passes someone at rank 50 who stopped, and that stays true every year after college too. You'd also be surprised that people who got rank 500 think if only they had got rank 50, their life would have been more fun.

Overall, just focus on growing your skills and network, everything else is noise. Have bigger achievements in life than just your college degree. Only those who haven't done anything significant after cracking a good college will brag about it ;)

How to spend your college years

  • Find your niche. Use these years to find which topics in Computer Science you actually like. The exploration should be practical, i.e. internships >>> side projects >> taking a course.

  • Understand your own taste. Half of this is finding out what you don't want. I didn't like the research part of my first ML internship at IIT Mandi but I liked ML. I liked backend engineering and databases at FamPay but not the low margins of consumer tech in India. F*ck around and find out your taste.

  • Take the systems courses seriously. OS, DBMS, Cryptography, and Information Retrieval are the ones still paying off for me years later, directly or indirectly.

  • Speak in public and take initiative. Given where I started, this was the single biggest change in my four years. It's also how you end up knowing the seniors and alumni worth knowing.

  • Lead something. A club, a society, anything with other people in it. I used my work at OpenLake to prove my passion for open source in multiple interviews, which a side project on its own would not have done.

How to get a good job? Should I prepare DSA or dev?

Students used to ask me whether they should do DSA or focus on dev. But now the markets are so bad that neither works with a high rate of success on its own. So what to do?

The general rule is to focus more on DSA (Data Structures and Algorithms) for MNCs and more on dev for startups. Do both if possible because you never know what will work out for your career.

I know people focused on academics and DSA but got placed in MNC (Microsoft) via a hackathon. And many large startups (i.e. scale-ups) ask easy-medium level DSAs. Also, DSA is not the same thing as CP, LeetCode vs Codeforces/Codechef.

Students ask me the same thing about languages. Java or CPP, Python or Javascript, Django or FastAPI, React or Vue. For most companies it doesn't matter, because once you've mastered one language you can pick up the next one when a job needs it. Put the time into fundamentals instead, like OS, networking, concurrency, and parallelism.

An optional exercise if you really want to understand a language

All languages are turing complete, so literally all the paradigms can be used in all of them. It's the design and syntax that make a paradigm feel easier or harder in a given language. So try implementing one language's interesting features in your favourite language. For example, implement Golang's coroutines and channels in Python.

Some other tips:

  • Focus on networking. Build connections with seniors/alumni and other successful engineers (attend meetups). Also make friends your own age outside your college, and later outside your company, because they're the ones who'll tell you what the market actually pays and what the work looks like elsewhere.
  • Contribute to open source. Ideally in projects that have commercial value, i.e. either the project is used by many companies (Apache, Cloud Native projects under CNCF, Python/Django, etc) or it's a product of an OSS company (Qdrant, Signal, Astral). I've written a separate post on GSoC if you want the details on getting started.
  • Get into internships first. They are easier than cracking full time jobs. And once you're able to crack internships or get PPO (Pre-Placement Offer), you'll have high confidence and proof of work that will help you get a full time job. Be employable from early years so it's only a matter of how much you can make, not if you make anything.
  • Improve DSA. Work a little bit on DSA skills too, at least till LeetCode medium level. You never know what might come in handy.

For the resume itself, where to apply, and how to ask for referrals, I have a separate post.

Build proof of work

Students get stuck on the experience paradox, where jobs want experience and experience requires a job. The way out is proof of work, meaning anything someone else can check that shows you can do the job. An internship is the strongest kind. A hard project you can defend in an interview is the next best.

So the loop is simple. Apply for internships, and apply a lot. I emailed 100+ professors across India before my first research internship landed. If nothing lands, go build something hard and level up. Then apply again. Keep going and eventually luck hits, because each round leaves you with more proof, and more proof gives you more chances.

Not every project counts as proof though. Real world hands-on practice is a billion times better than theoretical knowledge, and a tutorial e-commerce clone sits closer to the theory end. The ones that work are the ones solving a problem you actually had, because then you can answer any question an interviewer throws at it. I wanted to track my own time, so I built something that does it.

The first internship changes much more than a line on your resume. You get real world skills, you find out what working at a company actually feels like years before you graduate, and you stop worrying about whether you'll get a job at all. Your worst case becomes "some job", which is a far calmer place to plan the rest of your career from.

This is why I tell students to land an internship in 1st or 2nd year if possible. The earlier the first one lands, the more rounds of this loop you get before placements. You can start at smaller companies, sometimes for free if you really can't find anything, and expand from there.

The same loop keeps working long after college, and it's how you change domains later too. If you want to move into ML or databases or anything you haven't been paid to do yet, you're back in the experience paradox, just at a higher level. The way out is the same. Build something hard enough in that domain and the project becomes the proof on its own. This is what makes riding an industry wave possible rather than wishful, since you need strong proof of work in the new domain before the wave can carry you.

Your goal is to collect proof of work. The more of it you have, the better you are. And it works on you as much as it works on recruiters, because every piece of it is something you actually pulled off once. That memory is what carries you into the next interview.

Confidence is the memory of success.

Get comfortable with failing

I failed my first GSoC attempt. The second one changed my life.

That gap matters, because the loop above only works if you keep running it after a no, and most people stop at the first one. A rejection is mostly about how many others applied and what the org needed that year.

After enough of them you stop dreading it. A rejection tells you what to fix before the next round, which is more than a silent yes ever gives you.

A master has failed more times than the student has even tried.

Find mentors 5-10 years ahead of you

Look up to people who are 5-10 years ahead of you and stay in touch with them. Any more than that and it's hard to relate, any less and you won't get many insights. Ideally these should be people like whom you want to be in future.

You can't aim to be Elon Musk. But you can aim to be the best engineer you personally know, and that's a target you can actually reach. Pick who you want to be like in 1, 3, and 5 years. When you catch up, upgrade the target. That's how you keep climbing instead of stopping at the first local maximum.

For me, Valentin Lorentz (my GSoC mentor), Vinod Bollini (startup founder), Nirant Kalsiwal (NLP and search engineer), and Andrey Vasnetsov (CTO, Qdrant) have been great inspirations and have helped me a lot in my journey. I'm really grateful to them.

People worth following

How to have a great long term career?

  • Know why you're doing this. Skills compound over decades, so you need a reason that lasts that long. Mine is that I'm deeply interested in understanding intelligence, origin of life, and the laws of the universe, and programming is my outlet for that. I also think anyone who can do something impactful shouldn't leave earth without doing it. Steve Jobs might have died but he shifted entire industries, and it could have been anyone, but in our universe he was the guy. Find your own version of this, because it's what keeps you going once the work stops being novel.

  • Pick the painful option when it pays later. If you get two choices, pick the one that's painful in the short term but has high value in the long run. This sounds simple but takes years or decades to truly grasp.

  • Have role models and mentors. There have been moments in my life where I didn't feel super optimistic about my programming skills. I used to avoid unwrapping abstractions (i.e. not going deep) and wanted to just get the task done and be done with it. But I got ahead of that because I got guidance from good mentors and some YouTubers like Hussein Nasser and Arpit Bhayani. On how to actually find them, see find mentors 5-10 years ahead of you.

  • Explore deep tech. At one point, you'll get bored of building simple APIs and ask what's next. But my friend, that's not the end of engineering. If you wanna do the hardest forms of engineering, go into deep tech. This includes distributed systems engineering (ideally stateful systems like databases), language tooling, infra, HFT (High-Frequency Trading), or ML. I now build a database, which is one of the most complex software you can build.

  • Work at startups with high talent density. If your co-workers are exceptional, you'll be forced to become exceptional or be depressed about being a loser. Many companies can pay you well but most can't give you high quality challenging work. It's your responsibility to find such teams, not the college, not the HR, not your mentors. I've written down how I'd judge a startup before signing.

  • Ride industry waves. You might end up liking different things about different domains. But you should go with ones where the domain is expected to grow in demand and you have strong proof of work at the moment. Find industry waves to ride upon. Things like AI, developer tools, etc. are booming. Say if you become globally top 100 expert in vector search (say you have experimented a lot with vector search and understand where it breaks) or Voice AI models (say you joined ElevenLabs team), or Django (by contributing to the repo or creating popular libs for the ecosystem) you're gonna benefit a lot.

  • Try being T-shaped. Have breadth in multiple topics while having depth in some.

  • Make yourself discoverable. Have a good social media presence and keep sharing updates about your side projects and experiments. To become an industry leader, you need social reputation along with skills.

Will AI take over my job? How to prepare?

Eventually yes, but we have years or decades before that happens.

What the models can and can't do will have changed by the time you read this, so don't plan a career around today's capability. Plan around the roles instead. Be in the ones that are hard to master and growing in demand, because those are the last to get automated and the first to get real leverage out of better tools.

Why am I doing this?

My early career decisions were guided by my mentors, especially Vinod Bollini. He taught me many things and helped me at the right points in my career to make decisions.

I often asked him if I could help him somehow, but he always asked me to just pay it forward by helping someone else. He taught me to be grateful and it stayed with me. If anything I did helps you, I request you to just help someone else and pay it forward.

Further reading

Key Takeaways

  • Your goal in college is to collect proof of work. Internships are the strongest kind and are easier to crack than full time jobs, so try to land one in 1st or 2nd year. Projects that solve your own problem are what you build while you wait for one to land.
  • Expect to fail a lot on the way there. I emailed 100+ professors before my first internship, and failed GSoC once before the attempt that changed my life.
  • Your position matters less than your growth rate. Rank 500 compounding passes rank 50 standing still.
  • Pick the painful option when it pays later. Simple to say, takes years to actually do.
  • Talent density is the thing to optimise for. Many companies can pay you well, most can't give you high quality challenging work.
  • Find mentors 5-10 years ahead of you. Closer and they haven't seen enough yet, further and the advice stops transferring.
✓ link copied
← Back to the blog