I’ve been searching for a job over the last several months since graduating with a B.S. in Computer Science. One major conclusion that I have come to is that my education did not prepare me for this process.
Did I learn the fundamentals of CS? Yes. Is that enough to get a job? No.
In this post I hope to shed light on the shortcommings of my education, and where I think they could’ve done a better job in regards to the job interviewing process after graduating. I may do an additional post in the future on applying to companies which wont be featured here.
Do universities need to prepare you for this?
If you look at an undergraduate program purely from the educational standpoint, the answer to that is no. They don’t really need to prepare students to get jobs. However, most schools, including mine, will dedicate sections of classes to this particular subject.
In my case, the class was called Junior Seminar:
"In this course we will investigate and prepare for careers and internships in the technology industry." No other classes made an effort to prepare people for this process.
The course roughly took the shape of the following:
- Writing a resume, and resume review (Peer reviews and someone from career services, not in depth)
- Networking Basics (Old school, exchange business cards/resumes at a career fair)
- Interviewing Basics for internships (behavioral questions)
- Should you go to graduate school? (TLDR: no, unless you want to teach or do research)
- Mini Talks done by recruiters at companies who are hiring (mostly just to explain their product)
While this information is great, it doesn’t cover 90% of what you’ll experience out in the real world as someone seeking a software engineering position. It completely skips the technical side of interviewing. I suspect this is because they think you’ll gain your technical skills from actually getting your degree, but let’s face it.. I don’t remember the specifics of things I learned as a sophomore in data structures/algorithms, and that’s what these interviews go over.
You remember that resume you wrote? Update it to say you graduated, and start giving it out to every job you possibly can. Ok, maybe not quite as freely as that, but it’s not uncommon to send out 150 resumes and only hear back from a couple companies.
The key here is to do research into every single company before applying. Yes, every. single. one. I know.. I know.. that will take a LONG time. Don’t worry, you’ll have plenty of that free time available, use it wisely.
What I mean by research is being able to answer a few basic questions about the company you’re applying to. If you don’t know the answers to these, it’s not the end of the world, but it definitely makes you stand out as being interested in the company.
- What does the company do? If possible, find out what the team you’re applying to does as well.
- You don’t have to know specifics, but the basics will be fine. “You create a marketplace aggregator for car dealerships so people can find vehicles more easily.” From there, you can ask questions to get to the specifics.
- What about them makes you want to work for them? Do they make your favorite game? Are their values inline with yours and you want to be a part of their cause? Do you have friends that work there that speak highly of it? etc…
- Being able to answer this question is mandatory. It also can’t be a bullshit one, because they will see straight through it. Something along the lines of, “My friend has worked for you for two years, he has told me about all of the amazing work you’re doing! The demo days are especially cool because you showcase projects people are passionate about!”
- Are there any recruiters for this company? What are their names/email/phone?
- Message them directly about the position you’re applying for. They will often fast track you into the interviewing process. A great way to figure this out is to search linkedin for “Company Name Recruiters”. InMail one who’s title resembles technology recruitment and they’ll (hopefully) refer you to who you should speak to if they’re not the right person.
- Do they have an engineering blog? Github profile? Have their engineers done talks at conferences that you can watch?
- Figure out as much as possible about what they’re doing in software, and find a few areas that interest you which you could talk to them about. “I watched the closing talk at x conference by one of your engineers, Jane Smith. I found it fascinating and was able to use that information to improve the code of this project. I’d love to work here because you clearly have talented engineers!” (ok, maybe different wording lol, but you get my drift)
Once you have that information, alter your cover letter to include some of these things, including why you should be considered for the position.
Then submit the application to either the recruiter you found, and/or to their job listing application form. After that, proceed to the next company. The likelihood of them responding to you is near 0%, so it’s kinda like strategic spraying and praying. Eventually one of your resume’s will hit a target, and you’ll get an interview scheduled.
Congratulations! You caught the attention of a recruiter or hiring manager. The first step is almost always a phone screen. The recruiter will ask basic questions about your career goals, ask you to introduce yourself (elevator pitch style) and what your experience is, and some will do a preliminary technical screen as well. Usually these are high level questions that have set answers which everyone should understand. While these recruiters aren’t engineers, they do interview for technical positions and will know what you’re talking about.
This should last about 5-30 minutes, and you need to have some questions prepared to ask them. Things like specifics about the team you would be working on, what’s the culture like, what kind of work/life balance to expect, what does their interviewing process look like from here to an offer, etc..
The recruiter thinks you may be a good fit for the role, and they’ve scheduled you to do a technical screen. This usually takes the form of a take home project, hacker rank challenge, or a remote pair programming session. The work done here will be evaluated by one or more engineers at the company, who will determine if you have potential and if you move on to the next round.
There often is more than one round of technical screening done. For example, one company had me answer high level questions over the phone, do a take home project, and do a pair programming session. Just depends on the company’s policies.
On-Site Technical Interviews
Wow! You’ve made it to the on-site interview! That’s amazing! This doesn’t happen very often, especially when you’re a recent grad and are looking for your first full-time role.
What to expect depends on the company you’re interviewing with. Some will just have you meet with one person, others will have as many as 5 people interviewing you. Always assume every person you’re in contact with while on-site is interviewing you and taking notes about how you interacted with them, especially the host of your stay, which is usually the recruiter.
On-site interviews are usually whiteboarding technical interviews. These are generally more about how you solve a problem, but you should know the fundamentals of CS going into these. Which algorithms and data structures are best for certain problems, what are the time and space complexities of those algorithms/data structures, how would you design the architecture of a system, how would you scale your solutions to handle multiple millions of requests, etc..
You don’t need to answer these correctly, they’re trying to see how you solve problems. Do you get stuck frequently, do you get frustrated when that happens, can you get unstuck easily, do you ask questions to clarify things, etc.. Of course, they are also looking at the decisions you made to see if you made smart choices or horrible ones. Basically, they want to see if you have potential to be molded into something they can work with.
I learned most of that in school, why are you saying the university isn’t teaching you this?
They are, but not from the perspective of landing a job. Yes, I learned what merge sort is, and how to implement it from scratch, but do I remember how? Do I remember why I should use that over bubble sort? There is a mentality that goes with job hunting, which resembles cramming for a final exam, except this exam covers 4-6 years of knowledge.
What I would like for colleges to focus on is the building of habbits which will help you stay in touch with your CS fundamentals.
- Teaching students how to verbally work through problems, not just in code with help from Stack Overflow.
- Encouraging students to do daily programming challenges.
- Forcing them to take an internship (This is so important if you want a job right away after college, I wish I did an internship or two).
- Giving them resources to continue refining their understanding of these concepts (books to read, podcasts to listen to, meetups to hang out at).
- Squashing the mentality that it’s easy to land a job after graduating in CS because there are soooo many jobs (There are, but mostly for senior positions that require 10+ years of industry experience).
I’m sure there are other things I would like to mention here, but this is it for now. I will edit this post over time with any additions I come up with.comments powered by Disqus