How to Break Into Software Engineering

Image for post

Throughout my four years learning and experiencing Computer Science, I learned a lot of lessons along the way. From writing my first “Hello World” statement to completing a summer internship, I picked up important tips and tricks for breaking into software engineering. I was able to land internships in software engineering at Intuit, LinkedIn, and Google, and returned to Google full time last year.

A quick aside that I think is worth mentioning: a lot of people think that you have to be coding since you were 10 or younger in order to be an engineer. My first class was in college. It’s definitely possible to pick it up later along the way, and with the right push and direction you can succeed in landing a job in software development.

The first and foremost question I asked myself was whether software development was the right path for me. Here are some pointers that can help decide whether software engineering is a good fit for you:

  • Do you enjoy building new things?

  • Are you eager to expand your knowledge base and learn new things?

  • Do you like problem solving, creative thinking, and venturing into the unknown?

If these are yes’s, you’re good to go.

With that, here’s a quick timeline of how to break into software engineering!


1. Take an Introductory Course

Image for post

My introduction to Computer Science was AP Computer Science. A lot of universities offer an intro to computer science course, and this can help you figure out quickly if coding is a good fit for you. Typically these courses are in Java and Python, which are both great languages to learn.

When I arrived to college I decided to take honors computer science courses and other coding courses. As you go on and continue learning in these fields you’ll start to get a sense of what field in computer science is right for you. These fields include cybersecurity, programming languages, data science, software engineering, graphics, and many more.

In addition to this, I would recommend speaking to a full-time engineer and ask them about their experiences, as well as what their day-to-day is like. It’s one thing to learn computer science in school, and another thing to experience software development in a real-world setting.

Assuming you’re looking to focus on software engineering, the next step would be to make a project of your own.

2. Make Your Own Project

Big-Project Classes

Seek out classes that provide huge coding projects. I was able to make a game development app during my last semester at Cornell, and it turned out to be a great showcase project. The more relevant the project is to the real world, the better.

Hackathons

I definitely recommend hackathons for creating a personal project. Here are some hackathons I recommend as excellent sources of talent and potential job opportunities (and provide super high travel reimbursement):

If hackathons are a challenge for you to attend, just being involved in an open-source project can help you showcase your knowledge to recruiters.

3. Begin Interview Preparation

Here are top resources I found very useful for interview prepping:

  • LeetCode: A massive repository of questions and answers, complete with an integrated development environment and test framework.

  • Cracking the Coding Interview: I highly recommend reading this book along with LeetCode, its’ an excellent way to learn the fundamentals of technical interview questions.

  • Online Coding Schools: Some resources I know that are useful are FreeCodeCampTeam TreehouseCodePenUdemy, and Udacity.

  • Non Coding Prep: Preparing for behavioral questions, preparing a personal website, hosting your project(s) on GitHub.

4. Job Hunting

Job hunting is inherently stressful — here are some tips for specifically finding a SWE internship or full-time job:

  • Apply to as many places as possible. Worst case scenario you gain more knowledge about a company and get to practice your skills.

  • Always be interviewing. Someone told me this a while back and it makes sense — you want to stay fresh in your knowledge and be sharp.

  • Handle rejection gracefully. You never know if you get a chance to reapply (chances are super high of that).

  • Make a grid of companies, current progress, contacts, etc. This helps you stay organized and ready to tackle applications.

The Offer and Negotiation

Offer Deadlines

Every offer you receive in software engineering comes with a deadline. Usually this deadline is one to four weeks.

Offer Extensions

If you are waiting for another offer, or just need some more time to consider your offer, you can definitely ask your company for an extension on your offer.

Rejecting an Offer

If you feel that you don’t want to accept the offer at this time, you should still try to stay on good terms with the employer as you may want to work there in a few years.

Your reasons for rejecting an offer should be non-offensive and inarguable. An example would be that you took a position at another company because you don’t feel comfortable relocating to their office at this time, or that you want to work at a startup at this time instead of a larger company. These are reasonings that your employer cannot argue with.

Evaluating an Offer

Congratulations on your offer! Here are a few things to consider when evaluating a job offer:

  • Financial Package: Salary is just one component in your financial package. You can break this down further into: signing bonus, cost of living difference, and stock options.

  • Career Development: How good does this company look on my resume? How much will I learn? Is the company growing?

  • Company Stability: It’s always good to know if a job is stable. Some questions you may want to ask here are: Can you quickly find a new job? If so, is it worth the risk to take a job that is less stable?

  • Happiness Factor: The company culture, the work/life balance, manager, the product, and teammates.

Negotiation

When I received my first full-time offer, I had zero clue how to negotiate. As I went on with full time recruitment I was able to pick up some pointers that eventually helped me get a sense for negotiating an offer.

  • Know What You Want: Always come into a negotiation meeting/call knowing exactly what you’re looking for. If you say to a recruiter you want more, he or she will just give you the lower end of the highest band rather than giving you what you really want.

  • High-Ball: Ask for a small amount more than what you want. This is because often companies will try to meet you in the middle, thus satisfying your initial ask.

  • Use the Right Channel: While I believe that over the phone is the best way to negotiate, if you feel more comfortable over email definitely try this instead of a phone call.

Staying Up-To-Date

  • Reddit Threads: Great threads on programming, Java, and Python

  • Hacker News: Really great resource to stay in-the-know on the latest developments in the tech industry

  • CodePen: An excellent resource for discovering good coding practices.

Appendix

Here are some further books and articles I recommend for interview prepping and breaking down an offer: