My Journey To SWE Competence as a 4 Year Comp Sci Student

Rahul Pandey
13 min readMar 13, 2022

--

I’ve had the good fortune of being a founding engineer at a startup, an Android engineer at Pinterest during hyper-growth, and most recently a tech lead at Facebook. Before all that, though, it took me years until I had the confidence that I could be a professional software engineer. Here’s my slow + steady progression as a software engineering student.

I initially wrote this for YouTube (video here), but here’s the essay format!

This essay is the result of digging through dozens of emails and docs from 2009–14, when I was working on my Computer Science degree at Stanford University. Looking through my recruiting emails reminded me how far I’ve come: it took years until I started passing interviews or felt like a halfway competent as an engineer. While at Stanford, I had 7 programming jobs including 4 internships — for most of them, I didn’t know what I was doing. By the time I graduated, though, I had 5 offers from FAANG companies.

If there’s one takeaway from my journey, it’s this: the path to becoming a developer takes persistence. I started out as someone who knew uncomfortably little about programming, but I recognized that growth happens through discomfort.

Progression of my hourly internship pay

2010: Shop It To Me

My first internship was right after my freshman year, at a small startup called Shop It To Me.

I’m going to be totally honest here: I was not qualified for this internship. I had literally only done 2 programming classes, and I’m not sure if I had ever opened up the terminal at this point. I stumbled into this internship simply due to attending Stanford.

In March or April each year, there’s a startup career fair. I had applied to around 40 companies, since all I had to do was handout my resume, and I was (of course) ghosted by the majority of them. I think I heard back from around 5 or 6 companies, and almost all of them quickly rejected me. I got lucky with SITM because they asked about something we just covered in that 2nd programming class I had taken.

The internship paid $20/hour, and the office was in the SoMa district of San Francisco. Looking back, the pay was quite low, barely covering the studio apartment rent + expenses. But $20/hour was significantly more than almost any other (non-tech) summer job I could have had, so I was really happy. In fact, my emotion at the time was guilt! I kept thinking “I’m being paid too much compared to what I know.”

As you might expect, the actual internship was really difficult for me. The company used Ruby for the programming language, some shell scripts, and Git for version control. I didn’t know anything about Ruby, or any scripting language for that matter, and I had no idea what version control even meant.

The other aspect of me doing poorly was the actual product of the company. Shop It To Me scraped websites of high-end fashion retailers and then emailed out when there was a price drop. I didn’t care about shopping or high-end fashion, and in fact, the majority of my wardrobe at this point consisted of free company t-shirts from career fairs. 🤣 The most cringe moment from the summer was when the company gave out t-shirts to the engineering team, which was mostly men, which said “I satisfy thousands of women everyday”, since the product was mostly women. I’m embarrassed to say that I actually wore that shirt in public a few times.

Given that I didn’t really care about the product, and I didn’t know much about programming going into the summer, I didn’t learn much from the job. Instead, the majority of my learning that summer came from learning how to be an adult.

Coming to California for college was a bit scary, but I was living in a dorm with hundreds of smart, kind people. This summer was my first time actually living independently, outside the Stanford bubble and truly on my own in a big city like San Francisco. I lived in a studio right by the Tenderloin district for $1100/month, and I was pretty lonely since I didn’t know many people. The most valuable learning from that summer was the confidence that I could take care of myself: I went shopping, cooking, and did a lot of things on my own.

2010 Rahul exploring Pier 39

I remember spending literally hours and hours every weekend exploring different neighborhoods through free walking tours. I became very acquainted with FunCheapSF.com, which worked great for me since I wanted things that were, well, fun, cheap, and in SF! I also attended the pride parade for the first time in my life and I remember being shocked at what people wore, coming from Michigan.

2010: Research project

In April or May of freshman year, a friend told me that she was doing a research project over the summer with a Political Science professor at Stanford, and they were trying to find someone else. I’m pretty sure they couldn’t find anyone else because of how late they started the search, so I ended up becoming the “tech person” for the 3 person research team.

The idea was to analyze correlations for politicians who were on various committees, and their re-election rate. This data lived in a bunch of files with comma separated data, so they wanted a programmer to make it easy to correlate information in these different spreadsheets.

Looking back, I feel like this task would have been a pretty straightforward Python script, but of course I didn’t know that, and I’m lucky that no one else on the team had any programming background to call me out. I ended up using Visual Basic to create a basic GUI where you enter the name of a file and it did some sort of mapping.

Updates for this project were due Monday mornings, so I’d end up basically pulling an all nighter on Sundays to get something functional. It was stressful, but I’m still proud of actually being able to deliver something functional. It was through this project that I felt for the first time that I could write software that was actually useful to other people.

My commitment to the lab was 10 hours/week for the summer. The standard rate for summer research was $5600 for 10 weeks of full time work, so I my rate was ~$1400 for 100 hours, roughly $14/hour.

2011: Marin Software

In my 2nd year at Stanford, I had a better idea of what it meant to be a software engineer, but I mostly still had no idea what I was doing.

One lesson I learned from my 1st year is that most of the good internships were gone by the Spring, so I made a deliberate effort to apply for as many jobs as possible in November and December.

I applied to around 50 companies, got around 20 interviews, and ended up with 3 offers. One of my offers was for an outsourcing company in India called InfoSys, which felt more like a customer support internship rather than an engineering job, and the pay was also very low, around $400/month.

I ended up taking a job at a company called Marin Software, which was a paid marketing firm — they helped manage ad campaigns on Google, Facebook, Bing, or other platforms.

Marin Software is actually still around ($MRIN), but it’s a really good lesson that not everything in tech goes up. I joined the company in the summer of 2011, a few years before its IPO in 2013. The stock has lost more than 97% of its value since then, to the point now where its entire market cap is $50M, not much more than a penny stock.

In terms of technology, I was excited to have a more productive summer since I had taken 2 classes on Java at this point, and Marin also used Java. Unfortunately, I had a rude awakening when I discovered that doing class projects in Java doesn’t mean you’re ready to contribute to a production Java codebase.

The words serialization and deserialization were used a lot that summer, which I really didn’t understand, and I still didn’t know how version control worked. (Marin used Subversion while my previous internship used git.)

It was pretty obvious to me that I wasn’t contributing as much as other interns, so my strategy to improve was to spend 30 minutes/night reading a book about some programming or version control concept. It turns out that reading a book about the theory of version control when you’ve never properly used Git or SVN is a horrible idea, so I didn’t actually learn anything from the hours I spent reading. A better way to learn is through building and implementing things.

The internship paid $25/hour, which was still below average for the Bay Area. But this was still a significant bump from the $20/hour I had gotten last summer, so I was happy.

2012: Section Leading

During my junior year at Stanford, I took on my 4th job which was not about writing code, but teaching other students how to write code. This was the Section Leading program, and it was one of the best things I did during my Stanford career.

The idea is that undergrads become teaching assistants for other undergrads, and this peer to peer learning turns out to have more effective outcomes compared to an expert who is teaching the material for the 30th time.

The reason this is so valuable as a section leader is because teaching is learning. Teaching forces you to deepen your understanding and communicate your thought process while debugging or explaining an algorithm. I owe most of my teaching passion to section leading. Over the next 2 years, I section led for the 2 intro CS classes, which meant I was in charge of leading section and grading assignments for around 15 students per quarter.

I didn’t do section leading for the money, but they did pay $15/hour for undergrads. (I’d later learn an additional benefit for Stanford running the SL program: undergrads can be paid significantly less than grad students!)

2012: Walmart Labs

My 3rd summer internship was at a company called Walmart Labs, which in reality was a startup that Walmart acquired and rebranded.

This was the first summer where I created something meaningful. I built an internal dashboard to track the popularity of various search terms on walmart.com, to make it easy to see trends and correlations.

This project touched a bunch of different technologies that I got working together. I had a cron job to query the data warehouse, and then I massaged the data with some Ruby scripts before I presented it with a fancy front-end using a JavaScript library for charting.

From my internship presentation

The team really enjoyed my demo, but I had worked on the tool in isolation, so the tool was left unmaintained (and eventually deleted) after the summer ended. Despite having 3 internships at this point, the gap I had was that I had never meaningfully productively contributed to a joint project with a team of professional software engineers.

The salary for Walmart Labs was $40/hour, plus a $1,500/month housing stipend, which was a huge increase from the previous summer internship of $25/hour. I was very happy since I could reasonably live off an $80K/year job, which is roughly what that hourly rate translates to. So in my head, I felt like I made it to the point of being an employable, independent software engineer.

2013: Facebook

My 4th internship was at Facebook, which was by far the best internship I had. After being rejected from Facebook for the past 3 years, I was so happy to get an offer from a hot, name-brand tech company.

The internship was better in literally every single way:

  • First, Facebook was already a fairly large company by 2013, so there were hundreds of interns, not just from Stanford, but from around the country. This meant there were plenty of people of my age, not just interns, but also full-time folks who were much younger than any other company I had worked for. Having that social atmosphere, people to grab lunch with, made everything more fun.
  • The perks, such as the meals, were almost unbelievable when I first joined Facebook. In addition to providing 3 meals/day, they also had micro-kitchens with tons of snacks, and a whole shop called “Sweet Stop” on campus which served desserts and fruits every single day. It literally took me weeks to get used to the fact that I could grab as many coconut waters as I wanted, or that I could do a mid-day gym break at the onsite gym.
  • As part of perks, Facebook provided amazing corporate housing with shuttle service to and from campus. There was one magical experience where my roommate and I had hosted some friends in our apartment, and when we came back from work the next day, the entire apartment was clean due to the weekly cleaning that Facebook paid for.
  • Finally, of course, Facebook paid significantly more than any of my previous internships: $6800/month on top of free housing, transportation, and meals.

I worked on a team called Nearby, which focused on showing relevant places + restaurants when you open the Facebook app. This project was in Hack and JavaScript. I wasn’t super familiar with either language, but I was finally at the point in my career where I was able to learn things relatively quickly.

Facebook was also unique in providing direct feedback for interns. Each intern found out whether they got a return offer on their last day. Getting the offer to join Facebook full-time felt like the culmination of years of effort: I started out in my first year at Stanford without any idea how version control work, not being able to write any kind of production code, and now I was able to master these skills enough in one summer to get a full time offer.

2013–14: Research Assistant

In my 5th and final year at Stanford, while I was finishing my master’s degree, I was a research assistant in a lab at Stanford.

My research position was dedicated to understanding recommender systems. Throughout the course of the year, I worked on 2 projects: first, I collaborated with a post-doc on his research paper about understanding complementary and substitute relationships between products. That was cool since it ended up turning into a publication.

The 2nd project was to actually implement a recommender system using collaborative filtering for a biomedical website which hosts a bunch of different projects. At this point, I felt more and more confident as a developer each month. I was able to dive into the massive PHP codebase, make some queries on the database, do some analysis, and implement the front-end changes as needed.

The research assistant job was a perfect way to conclude my last year at Stanford. First, from the financial perspective, it covered my entire graduate tuition and paid $25,500 over the year. So I actually started making a small amount of money in that last year of school. If you’re in grad school, I highly recommend you look for a teaching or research assistant position to eliminate or reduce your tuition.

Second, the research position in this lab turned into my first full time job, since the professor who ran the lab created a startup and recruited me to join. That’s a story for another time!

I’ve had a lot of experiences throughout my whole university career, some where I thrived, and many others where I struggled. But regardless of how I felt in the moment, I learned a lot through each job, each one preparing me to be a competent software engineer.

It took me 5 years to start feeling that confidence. If you’re looking to fast-track your learning so it doesn’t take 5 years, join the Tech Career Growth community that I started with my friend Alex. We have free live sessions and helpful discussions in our Slack.

Takeaways

Here’s what I’m hoping you takeaway from my journey.

1. It takes time

It took me years until I had the confidence to actually add value to an organization through software. So if you’re going into a 3 month bootcamp, be clear-eyed that you won’t become an expert engineer in that time. The bootcamp could be a good starting point for your career, but it certainly won’t be an ending point for your learning. As you keep getting better, remember that the struggle is where learning happens.

2. Failure is ok

One thing that has had a big positive impact in my career is not being afraid of rejection — in fact, I embraced rejection. Here’s a hack to help with this: I flipped my mindset to try and fail at least half the time. If I’m failing less than that, I’m not being ambitious enough. Even within Stanford, where almost everyone was smart and ambitious, I had tons of classmates who were hesitant to put themselves out there because they didn’t feel qualified, or they were nervous about an interview process.

I’ve failed many, many more interviews than I’ve passed, especially in my first 2 years at Stanford. That’s part of the game, and when you’re ok with rejection, you won’t be disappointed when it happens. No one cares how many times you’ve failed.

3. Teaching and building are critical

The inflection point in my learning was when I invested more in actually applying my knowledge through teaching and building. The section leading program was amazing since it forced me to revisit the fundamental concepts in programming, and explain them to other students. Teaching has been a big part of my life since then, with this YouTube channel and actually coming back to Stanford for the past few years to teach the Android class.

My last 2 years at Stanford were where I started building side projects, and I learned a lot more from those than I did from any problem set. As much as possible, do something with your knowledge! Explain it in a video, write a blog post, or build something with it. That’s where the learning happens.

If you‘ve gotten this far, I’d love to connect you on YouTube, Twitter, or LinkedIn. My friend Alex Chiou and I run a community called Tech Career Growth to help you accelerate your growth as a software engineer!

P.S. One job that I didn’t mention was that I was a resident assistant (RA) for 2 years in the best dorm at Stanford, Branner Hall. That was a ton of fun, and I learned a lot about building community and dealing with people, but it wasn’t engineering-related.

If you want to watch the video version of this essay :)

--

--

Rahul Pandey

Founder at joinTaro.com + youtuber: https://youtube.com/rpandey1234. Android Eng at @Facebook, formerly @Pinterest. Stanford CS Lecturer.