Wednesday, August 19, 2015

Acing the Coding Interview

If you’re a computer science / information systems / computer engineering student, or if you’re working as a software engineer / developer / programmer, chances are that sooner or later you’re going to run into a coding interview: you’ll be given a problem and will be expected to solve it, face to face. Even if you can write great code, there are a few things you can do to increase your chances of impressing an interviewer. While different companies use a variety of styles, here’s some advice that should apply generally.

Before the Interview

Read up on the company and the position before you walk in the door. You don't have to go crazy - a few minutes spent searching the web can give you good results here. Find out about the languages and technologies they use - if you know some of them, leverage your strengths here. If you don't, try to fill the gaps as much as you can before the interview. You might not be able to learn everything you don't know by the interview, but learning even just a little can go a long way - it demonstrates your interest in the job and shows you're willing to learn new things.

Understand common data structures. You should know how common ones work, and what they're useful for. It's good to know lists, hash tables, and binary trees, and how to use them to solve problems - they come up a lot in coding questions. Brush up before your interview if you don't remember them.

Review Big-O notation. You should be able to evaluate your code and talk about your thought process. It's reasonably common for an interviewer to ask you to analyze the computational complexity of your solution.  

Know some sorting algorithms. It's important to be able to explain at least one sorting algorithm; insertion sort and merge sort are pretty good ones to know. It's definitely good to be able to write the code for those - try to find some solutions in your chosen language or the language you'll need to use and practice them. More than once I've had interviewers simply ask me to write a sorting algorithm, so a little preparation here might really help you in the interview.

Practice. One of the most important things you can do (and one thing that many candidates skip) is practice; so many candidates spend years honing their technical skills but won't spend an hour to practice their interviewing skills. An easy way to do this is to find a friend and ask each other technical questions. Even if it's a question you already know the answer to, it's definitely useful to practice articulating the answer and explaining your solution. Project Euler and Google CodeJam are good places to start for practice questions.

Be prepared to write code a few different ways. Some companies will let you use a laptop, some ask you to scribble a solution on paper, and some will have you write it out on a whiteboard. Make sure you can solve the problem with any of those... you don't want the first time you solve a problem on the whiteboard to be in front of the interviewer.

Before You Answer

Pick the right language. The interviewer might ask you to use a specific language, but if he or she doesn't, make sure the language you want to use is OK. If you're most comfortable with one particular language, use that one if you can. Don't try to get adventurous and attempt to answer questions in a language you're just starting to learn - put your best foot forward here.

Ask questions. It's important to ask lots of questions to make sure you understand what the interviewer is looking for - don't make assumptions without verifying them (even small things). Approaching a problem the wrong way can really derail your solution, and missing some small details can invalidate your whole approach. Make sure you're on the same page with the interviewer.

Answering the Question

Communicate. After you've been asked a question, talk through your thought process and communicate with the interviewer. If you need a minute to think, just tell the interviewer that. The interviewer can't read your mind - keeping an open line of communication will help the interview flow. If you get stuck, explain why you're stuck. It might help you figure out your problem, or it might prompt the interviewer to give you a hint - either way, keep communicating.

Draw a picture if you need to. Sometimes it helps to draw pictures or sketch out a solution before starting to write code - drawing a picture can help to make sure that you and the interviewer are on the same page about expectations. If you're still not sure how to start, write down some test inputs and explain how you'd approach the problem for them - that might help you to find the right way to code the solution.

Brute force isn’t always bad. If you're not confident about coming up with an optimal solution for the question, it might be a good approach to start with a brute force approach and iterate to improve it. Even if you don't know an elegant solution immediately, you'll at least have something to show if you start with the obvious solution.

Keep an eye on the time. Don't rush if there's still a while before your interview is over - pace yourself. Let your interviewer prompt you if there are unknown time constraints.

After You Answer

Be ready to ask your interviewer a question or two. If you do a bit of research about the company you're interviewing with you should be able to come up with some questions, but here are some ideas if you don't come up with anything:
  • Is the question you just asked a typical problem you solve here? How is the real job different?
  • What's your favorite thing about working here?
  • What's a typical day like in your role?
  • What's something about your job that bothers you regularly?
  • What about your current role has helped you grow in your career?
  • Other than this company, what other companies are you interested in?
  • If I ultimately want to do ______, how might this job help me do that?
  • What's the hardest problem you're facing right now?
Make sure you thank your interviewer for their time. It's a formality, but one that's noticed (especially if you skip it).

watch my videos on youtube follow me on twitter view my pictures on instagram view my profile on linkedin view my google+ profile

Monday, August 17, 2015

Students: Want an Internship for Next Summer? Don't Wait.

The fall semester is a challenge - coming back to school after a summer off, it can be hard to get right back into the swing of things. Vacations, barbecues, parties, trips... there are lots of things to keep you out of the studying mindset for a few months and that can bleed into the fall semester.

Unfortunately, lots of companies will have selected their summer interns by the time you've read the syllabus for all of your classes. This means that you've got some work to do to secure your dream job. Here are a few tips to hit the ground running.

#1: Figure out what you want.

If you're a freshman, you can learn a lot about companies you might like to work for at this point - there are definitely internships out there for after your freshman year, but if you don't feel like you're ready, you can still also collect lots of information. As a sophomore, next summer might seem like a long way away, but it's important to consider if you're going to want an internship - if so, you should start preparing now.  If you're a junior, this is really the time to be thinking about internships.  Setting reasonable goals and expectations for yourself now can help you plan for the next few months.

#2: Start your resume now.

You can always update it later. If you get something started right away, you'll already have a starting point when you're asked for a resume. You can iterate on this, but try to have even just a rough draft as soon as you can. You can come up with a basic resume just by listing your school, relevant experience, and student organizations; you can polish it later before submitting it to companies (but be sure to avoid these common mistakes).

#3: Learn about your reputation.

Set your browser to incognito mode / private browsing mode and see what you can find out about yourself. Use a search engine to search for your name. See what you can learn about yourself on social media sites. Prospective employers will do the same, so make sure that there are no red flags - you've still got time at this point to fix things (or at least make those party pics private).

#4: Watch for job fairs.

The school where I'm teaching holds its first job fair at the end of September. Find out when the first one for your school is and take a look at the companies that will be there. Even if there aren't any that you're interested in, it can be a good place to practice talking to recruiters. It can also be a great place to have some questions answered - lots of the company attendees will give you advice on the skills they look for, what their interview process is like, or what classes you should consider taking if you want to stand out.

#5: Research the companies you're interested in.

Make sure you understand their timelines for interns and new grad hires. Some hire late into the spring semester, but more and more are done with their recruiting season by the end of November. Use one of the many calendar applications available and set some reminders so you don't miss any deadlines.  Do some research to understand what they look for in new recruits - for larger companies you can usually find a blog post or an internship review with a quick search.

#6: Network.

Lots of your professors have professional connections. You might have family friends who are in the industry, or you might just meet somebody at a party who's already interning. Building our your professional network can help make the difference between "we will keep your resume on file" or landing an interview.  There's a good chance that a recruiter will check LinkedIn to see if they know somebody who knows you, so do your best to establish connections where you can.

#7: Get ready to interview.

Look at the job description to understand the skills necessary for the position - try to brush up on them.  You can also typically find practice questions on the web - try working through them with some friends.   You don't want the first time you try writing code on a whiteboard to be with an interviewer, so try to make your practice sessions as real as possible.

watch my videos on youtube follow me on twitter view my pictures on instagram view my profile on linkedin view my google+ profile

Sunday, August 2, 2015

8 Common Technical Resume Problems

I've been teaching technology courses for almost a decade now, and I really enjoy helping students work on their careers outside of the classroom - whether it's trying to help them find jobs, improve interview skills, or helping with networking.  Resume help is a common request; technical resumes can be a bit different than others so I'm glad to share some of the things that I've learned.  It seems to me that a lot of students have a good base for their resume, but make some common mistakes; here are some issues I regularly notice and how you can improve upon them.

#8: Ordering
Problems with ordering are not the most common problem I see, but I see it often enough.  Since people tend to read resumes from the top to bottom, the order that you present your content sections can be pretty important.  There are no hard-and-fast rules about ordering on a resume; but because of the typical top-to-bottom approach, I think it's best to put the most interesting and compelling sections first on your resume.  Most students start their resume off with their education, which makes sense since they're currently in school.  After that, though, you should focus on what you think is the next most important thing about you - put that section next.  Maybe it's your work experience; perhaps it's a few notable class projects or some research you've done.  Whatever it is, your best content should go near the top of your resume.

This can also apply to the bullet points listing experience under each one of your jobs.  Ordering these bullet points by impact or the value they provided can make your resume more engaging.  What's more, it can help you to identify your own strengths.

#7: Skills Lists
When you're constructing a technical resume for technology jobs, there are typically four different targets that might read it: a resume scanner / database, a recruiter or someone in human resources, a hiring manager, and a peer / developer / engineer.  Lists of skills can be pretty effective for the first one - keyword matching can work well for a scanner, but they don't work as well for the other three.  This can usually be improved by adding a little detail about how you've used these skills - how did you gain this skill?  How have you applied it?

An even better approach is to identify the skills you've used within your experience - it will make them seem much more concrete and realistic.

#6: Formatting and Consistency
Fonts are typically not the problem here (though they can be).  The bigger problem with formatting and consistency is around tense and the way that experience is described.  It's pretty common to see a resume jump from present tense to past tense to present perfect within the description of just one job.  Make sure that your tenses are consistent - it makes your resume much more readable.  Switching tenses can make a reader subconsciously uncomfortable, which is not the feeling you want your resume to inspire.

Another problem that I see with formatting and consistency is with dates and ordering - make sure that you're consistent with the way you're formatting dates.  For instance, don't spell out months in one section and abbreviate them in another.  The way you're ordering things by date is important, too.  Don't go from oldest-to-newest in one section and newest-to-oldest in another - it can add a bit of confusion.

#5: Reviewing
Probably the most important thing to understand here is that I don't know everything.  It's possible that some of this advice won't work for you.  This is why it's important to have more than one person review your resume.  Not everybody has the same style.  You don't want to write your resume to conform to just one opinion, unless the only person you're going to put it in front of is the only person who might hire you.

The more people you can get to look at your resume, the better - you don't have to take all of the advice, but the different perspectives can give you some insight into how an interviewer might see your resume.

#4: Missed Opportunities
With students, this can be a big gap.  Lots of students are looking for experience to boost their resume, without considering some of the things they might have already done.  Volunteer work, class project experience, open source contributions, and leadership positions are all things that are notable on resumes, but I often see them missing, even from students that I know have done these things.

Note that as a student, you have plenty of opportunity to fill this in throughout your schooling - find opportunities to volunteer.  Look at your class projects as an opportunity to build something great that you can put on your resume.  Go join a club.  Work on an open source project that interests you.  All of these can really help fill in a resume without a ton of extra effort, and they can be rewarding experiences regardless.

#3: Unnecessary Objective
Almost every student resume I see has this.  I don't see much value in them - it might just be my personal opinion, but I think that in general, objective statements on resumes have fallen out of favor.  They just take up space that could be used in better ways; typically your resume should convey your objective without really stating it.  I'd say the only place these make sense is if you have no experience, you're trying to change careers, or if the job you're looking for can't really be determined from your past experience.

If your last 3 internships were in systems analysis and I received your resume for a systems analyst position, I'm just going to assume that your objective is to get a position in systems analysis.

#2: Job Descriptions as Experience
Your experience will be more striking and sound much better if you list the bullet points under your job as accomplishments instead of regurgitating the job description.  I see this problem on almost every resume I review, and it always makes resumes blend in with the rest of the stack.  If you were a software development intern, anybody who sees your resume can safely assume that you developed software.  What did you do that was interesting?  What did you do that nobody else in the position did?  How did your work affect the team?

Listing notable accomplishments and the impact that you were able to have as an employee will make your resume stand out from others.

#1: Ignoring Opportunity Cost
This one applies to resumes for students and for more experienced professionals.  The concept of opportunity cost is very important on a resume.  Put very simply, opportunity cost is what you pay in missed opportunities for any decision you make.  Applied to resumes: every single thing that's on your resume is a chance that somebody will miss something else.  Because of this, it's best to concentrate on the most impressive parts of your experience, and leave off the less impressive parts.  I'd rather see a brief but impressive resume than a 7 page resume listing every inane thing a person has ever done.

Remember, your resume is like a sales brochure for you - when you build it, make sure you concentrate on the best parts.

watch my videos on youtube follow me on twitter view my pictures on instagram view my profile on linkedin view my google+ profile