Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
CPSC 436ICareer PreparationJeremy Goh
A little about me
● BCS '15● Co-op at a local startup, internship at a big company● Software Engineer working on product in the Bay Area
1. Motivation2. Options3. Timelines and Planning4. Getting Noticed 5. Getting Over the Bar6. Making the Most of It
Overview
What should I do with my life?
● We all want to be happy● Work takes up a significant amount of our lives● Tech is booming and there are lots of options● Some jobs are better than others and we want to make
adjustments at the least costly stage● Internships and Co-ops are great for validation
Why does it matter?
Two Ways to Start
1. Motivations2. Possibilities
What should I do with my life?
ExerciseTaking turns, talk to the person next to you about - Why you decided to do a computer science
degree- What you'd like to do after and why
DiscussionSo why are you all here?
What motivates you?
- Money- Prestige- Social- Learning, Interest- Life (Not work)
- Humans are unique because they can be forward looking- We're not very good at it though
- In choosing your motivations, you're making assumptions- Hypothesize, Test, Validate
- We should validate our assumptions that our motivations are correct and then that our chosen course fulfils them
Are these the right motivations?
Assumptions
I want to make the most money I can. I'm going to work at company X which offered me the most amount of money
Assumptions:
- Money will make me happy- The cost of doing that job will be outweighed by the benefits- Working at company X will truly make me the most money
- What about promotions and career progression?- What about learning which might enable you to get a better paying job elsewhere?- If you get compensated in stock, what about stock trajectory?
Motivations - Resources
- Resources- How Will You Measure Your Life, Christensen- Designing Your Life, Burnett and Evans
Options
- Roles- Domains- Companies
Options
- Attend career events- Networking events, Meetups, Eventbrite, Piazza,
Conferences- Grace Hopper
- Your Network- Careers Sites (Indeed, Hired, StackOverflow, LinkedIn)- Google
How do you figure out your options?
Common Roles
- Software Engineer- Backend- Front-End/User Interface Engineer- Full Stack- Systems- Mobile- ML
- Product Manager- Project Manager- Data Scientist- Academia
- Work with a Data Scientist to opportunity size a new feature- Pitch the project to the Product Manager and work with Designer and Content
Strategist to come up with mocks- Product Manager coordinates strategy and resources/dependencies with other
teams- Build the feature
- UIE/Mobile Engineers build the client- Server/Full-Stack Engineers build the API- Infra/Backend/ML Engineers work on backend
- If it's a highly technical project of significant duration, a Project Manager may help manage timelines for the entire team working on it
Roles - Building a feature (1)
- Work with Data Scientist to ensure we're logging the right information and tracking success metrics
- Work with QA Engineer to get feature tested- Launch feature/Start a test- Product Specialist triages bugs to be fixed- Data Engineer builds pipelines for quicker/easier/cleaner analysis of data- Work with Data Scientist to determine if feature was a success
Roles - Building a feature (2)
- Startup vs Tech Giant- Hardware vs Software- Gaming vs Finance- Differences in
- Structure- Compensation- Learning speed- Tech stack- Culture- Career Progression
Domains and Companies
How many of you are thinking of doing co-op or an internship?
Co-ops/Internships are a great way to validate assumptions
- Company: Will this student be a good employee?
- Student: Is this job (role/domain/company) right for me?
- Co-ops- Typically 4 or 8 months long- Part of the Academic program- Applications needed- Structured (timelines, workshops, reviews)- Curated job postings- Check-ins
- Internships- Typically 8 to 12 weeks long- Self driven
Co-ops and Internships
- Talk to other students who have interned/done co-ops at the company- Are you doing actual work?
- Freshman and Diversity Programs- Facebook University, TwitterU, Microsoft Explore
- Pipeline for getting a full-time offer- Summer before your graduate
Things to Keep In Mind
Full Time Positions
- Ideally you've done co-ops/internships before you get your first position- If not, you might have difficulties
- proving your experience- ensuring this is the right job for you (it's a lot more costly to get the job wrong)
- Don't worry about getting it 100% right the first time. - Nothing is that permanent anyway
- Some of the biggest tech companies have average tenures of 2 to 3 years
Timelines and Planning
What do I do and when?
By Year
- 1st/2nd Year: focus on building out core skills and getting some industry experience
- Getting to grips with CS fundamentals- Building side projects and your resume- Getting your technical internship/co-op- Attending hackathons
- 3rd Year: apply for internships at companies you'd like to work at full-time- Fall: Start applying for summer internships. Prep for coding interviews- Summer: Intern at a company you'd consider working for. Try and get a return offer
- 4th Year: apply for full-time jobs or making the most of school + life once you've found something
Deadlines
- Co-op- Publishes their own set of deadlines
- Internships- Deadlines vary but summer internships recruiting can start as early as September and finish by
the beginning of December!
- Full Time- Generally involves more interviews than co-op/internships- Companies will likely fly you down for the interview- Try to land a job before you graduate. Start looking in the Fall
- Recruiting process can take more than a month- Can be sped up if you have deadlines
Process and Purpose
What does it take to get a job?
Application Process
1. Applicationa. Resume/Cover Letterb. Direct vs Referral
2. Recruiter Screena. Phone screen
i. Behavioral/knowledge based
3. Phone Screena. Technical/Coding
4. Onsitea. Multiple interviews (coding, behavioral, maybe system design)
5. Offer!
Company's Perspective
- Bad hires are expensive- Market is competitive- Hire as quickly and efficiently as possible
You're Interviewing the Company Too
- Would I want to work with these people?- Is their recruiting process well-thought out and challenging, or arbitrary?
- Smaller companies might focus on practical skills (e.g. build a clone of Reddit)- Larger companies focus on the academic but still technical (e.g. write an algorithm that does X)- Recruiting for technical roles should be technical
- Do they already know what I'm going to work on?
Strategizing
- Get as much (relevant) experience as you can as early as you can- Be realistic
- Cooling off periods (6 months to a year after interview or onsite fail)
- Use companies you are less interested in (but would still work for!) to warm up - Does not apply for co-op positions
- Your last co-op/internship should ideally be at the company you want to work for
Company: How can I filter out as many candidates
as possible?
Resumes
- Tell a story about why you're a relevant candidate- School, Degree, Graduation year
- Letter GPA
- Previous Professional Experience- Technical Skills and Side Projects- Work Authorization- 1 PAGE
Resumes - Structure
- Active vs Passive, Your Role- Measure Impact- Don't be overconfident or undersell yourself- Be unique
- Don't use the same class projects that everyone else is writing down
- BE CONCISE!
Resumes - Wording
Sample Resumehttps://www.careercup.com/resume
ExerciseWrite out a section of your resume for your project
Cover Letters
- May or may not be required/read- A chance for you to add (a little) personality and sell yourself- Show that you've done your research
- Personalize it to the company and for the role
- What can I do for you and why do I think I can do it?
Google receives three million applications a year and hires 1 in 5000
How do I stand out?
Getting Noticed - Hooks
- It's all about people- Referrals- Connect with Recruiters
- Career Events, Hackathons, LinkedIn- Networking
- Your Background- School, previous experience
- Technical skills- Hackathons
- Prizes- Coding Competitions
- Often sponsored and run by big companies (e.g. on Kaggle)- Side Projects
- Open source
Custom Hooks
- Tailor your hook for the company and role- This should be reflected in how you present yourself in the entire application
process from cover letter to resume to interview
Standing Out with Side Projects
- Not the same as a class project- Should demonstrate your interest and ability outside of the classroom- Does not need to be novel
- You can take inspiration from some impressive sounding tutorials and make them your own- e.g. build a Reddit bot that follows you around the site and upvotes your comments
- Leverage interesting APIS- Use Google's Cloud Vision API to auto-blur offensive user generated content
- Ideally open-source and accessible- Only list things you are able to talk about
ExerciseThere's a recruiter for your dream role at company X, how would you introduce yourself?
Connecting with People - My Experience
- Got an interview because the recruiter knew someone who worked on the same project I was interning on
- Got a co-op position after meeting with hiring manager at a tech talk and standing out during the interview
- Got fast tracked to an interview because I had won a hackathon prize and an engineer helping out at the hackathon referred me
- Got a job offer because I messaged a recruiter on LinkedIn
Connecting with People
- How to Win Friends and Influence People, Carnegie- Career Events and Hackathons
- Introduce yourself, be friendly, have your resume- Have a sales pitch or hook
- Meetups, local tech scene- The Vancouver tech scene is pretty small
Go do a hackathon already
- Great way to build your technical skills and network- Connect with recruiters that might not normally visit UBC and get more 1:1 time- Build out your resume
- side projects- prestigious hackathons and prizes
- MLH
Company: How do I ensure this
person can actually do the
job?
Interviews
Types of Interviews
- Non-Technical- Behavioral/Situational- Tell me about a time…- Helps determine if you're a good fit, have problem solving skills, can work with others
- Technical- Does this person have the technical skills to do the job- Can they write code?- Where most people fail
- Both require preparation!
Non-Technical Interviews
Two types:
1. Recruiter phone screena. Optional, takes place after the resume screenb. Typically short and surface level. Used to filter out candidates
2. Behavioral/Culture Fita. Can be combined with a technical interviewb. To see whether you would fit in with the company, if you share the same values
Recruiter Phone Screen
- Typically 30 minutes or less- Used to filter out candidates
- Can you speak English?- Have you done some research into the company and role?
- Make sure you know what the company does and have a reason for why you want to work there!
- Do you have some basic qualifications for the role?- May involve some knowledge questions
- e.g. What are some of the primitive types in Java?
Behavioral/Culture Fit Interviews
- Every company does this differently- Some focus on situational questions (big companies) while others just seek to
get to know you and your interests (startups)- Situational questions often reflect the companies values and take the form of
- "Tell me about a time when …."
Technical Interviews
- Typically involves coding on a whiteboard or in a collaborative editor online (e.g. google docs, collabedit, coderpad)
- Some startups might have you build something or pair program- Tests:
- Your ability to solve a problem using CS concepts: data structures and algorithms- Your ability to translate thoughts into code
Technical interviews are terrible
- But they're the least bad of the bad options- They're standardized
- Software engineers should have a background in data structures and algorithms
- Mostly binary- Can you write code?
- Some companies will be sticklers for syntax, others will be fine- Use pseudocode if needed
- Can you work with others?- Have you done your homework?
What questions will you be asked?
- Depends on the type of job you're applying for- Hardware will involve lower level language concepts
- Tests knowledge of CPSC 221 and 320- Questions vary by company but generally fall into specific themes and
categories- Highly technical interviews for companies like Palantir or high frequency trading firms
- Resources- Programming Interviews Exposed, Mongan et al- Cracking the Coding Interview, Laakmann McDowell- Glassdoor.com- LeetCode.com
What language should I use?
- Whichever one the company lets you- Whichever one you're most comfortable with and will get the job done
- Inputs/Output- Reading/Writing to files- Bit Manipulation- Collections- Sorting- Classes
- Safe choices: C++, Java, Python
Outline of a Coding Interview
45 minutes to an hour long
1. Intros2. Maybe some behavioral or warm up questions3. Coding Question4. Clarify + Propose Approaches5. Code6. Test7. Complexity Analysis + Discussion8. Iterate9. More questions
10. Wrap up11. Your turn to ask questions
Approaching a Problem - 1
- Clarify- So if the input is X then I should get Y- Are there any constraints?
- Does this all need to fit in memory?- What can I expect of the input?
- Do I need to check for malformed input?
- Identify approaches- What domain does this problem map to?- What algorithms might be useful?- Does this look like something I've seen before?
- Discuss and get buy-in from your interviewer- If they seem sceptical then you may be on the wrong track
- Code- Stub out functions for implementation later (either the tedious ones or the ones you're not sure
about yet)- Use pseudocode if you're not sure about the exact API
- Test your code- Run through some sample input
- Analyze the Complexity- Space/Time tradeoffs
Approaching a Problem - 2
Some Examples
- FizzBuzz. Print out numbers 1 to 100, except if divisible by 3 print "fizz", by 5 print "buzz", by 15 print "fizzbuzz"
- Return the most common letter in this string- Determine if any two numbers in a list add up to a target number
ExerciseDetermine the most common letter in an input string
Volunteer
Your turn to ask questions
- Interviewers typically leave a few minutes at the end for you to ask questions- Do your homework and ask a question that shows your interest- Think about how your question might be perceived- Good questions lead to discussions and conversation which can make you
more memorable- Sample questions
- How do you typically decide what projects to work on?- I heard you're releasing a new product built in language X, why did you decide to use that
language?- What do you like most/least about working here?
Interviews - My Experience
- Failed a lot at the start but improved with practice- Prepared extensively
- Leetcode- Time investments vs Academics
- Big company: Failed in the last round for an internship but got a reach out for full time and then landed a job offer
- Rejected a company based on my experience interviewing with them
You've got an offer, now what?
With incomplete information, how do you choose the right job/co-op/internship?
Offers
- Plan your application and interview timelines so that you get your offers within the same timeframe
- Ask for deadline extensions or earlier interviews if needed- Negotiate
- Does not apply for co-op and less so for internships- Know what you're worth, do your research
- You can't always see into the future- Write down the assumptions your making and validate them based on the information you do
have- e.g. You'll learn a lot working at company X. But is that the case if all their previous interns do is
refactor code?
Offers - My Experience
- Co-op: I chose between two jobs. I preferred the startup and the pace of working + culture over a more established company
- Internship: I chose a big company for a different experience and its brand recognition over a startup
- Full-time: I chose a company which offered me flexibility to find the role and domain that worked for me rather than the one that offered me the most money immediately
It doesn't end here
How do you make the most of your new position?
Preparing For Your New Role
- Co-ops/Internships are great for getting your foot in the door and getting a full-time offer
- Who doesn't want to start a full-time position off on the right foot- Make the most of your new role by
- Asking ahead of time what stack they use and if there are any technical resources you should read through
- Figuring out what you want to achieve with your new role- Determining what expectations the company has of you and how they are assessed
Traits of a Good Engineer
- Productive- Writes a lot of code (or as much as is needed to get the feature done)
- Quality- Doesn't make the same mistake twice- Writes code that adheres to conventions and internal style documents- Tests their code
- Independent- Knows when to ask questions and get others involved
- 15 minute rule
- Initiative- Does things without being asked, seeks to make the product and codebase better
- It's a process- Preparation counts- It's totally worth it- People matter (a lot!)- Fundamental problem solving
skills never go out of style- Have a life- Re-evaluate your direction from
time to time
Making the Most of It
Questions?