Applying for Jobs/Internships and Asymptotics: Difference between pages

From Computer Science at Indiana State University
(Difference between pages)
Jump to navigation Jump to search
m 1 revision imported
 
wiki_previous>Jkinne
No edit summary
 
Line 1: Line 1:
=Applying=
=Assignment=
== Advice ==
Assignment for [[CS 303]]Problems from [https://courses.csail.mit.edu/6.042/spring18/mcs.pdf Mathematics for Computer Science] (MCS).
''Cover letter'' - if it is an option, then do one for a particular jobWhy are you interested, and why are you qualified?


Tailor your resume and cover for each type of job, and to each individual job.
Note: for each question, give an explanation of why the answer is what it is. This does not need to be a formal proof. When possible you can use my big-O rules of thumb: (0) ignore constants multiplied out front, (1) for terms that are added just keep the fastest growing one (fastest eventually), (2) n<sup>c</sup> grows faster than (log(n))<sup>d</sup> for any constant c > 0 and constant d, (3) (1+c)<sup>n<sup>d</sup></sup> grows faster than n<sup>e</sup> for any constants c > 0, d > 0, and constant e.


''Start early'' - it takes most people 3-6 months to find a job. Start applying now!
# MCS Problem 14.20. Indicate whether each statement is true or not. Explain why for each. <br>''Note that for functions f(n) and g(n), the notation "f ~ g" means that the limit of f(n)/g(n) approaches 1 as n goes to infinity (this is like them being Theta of each other with a constant factor of 1); equivalently, for any constant epsilon>0 you can find a value n0 such that (1-epsilon) g(n) <= f(n) <= (1+epsilon g(n) for all n >= n0.''<br>''Note that sin(x) ranges between -1 and 1, and periodically goes between those two values forever; that is all you need to know about sin(x) for the one that has sin in the formula.''
# MCS Problem 14.21. Show an asymptotic equation pertaining to factorial, using [https://en.wikipedia.org/wiki/Stirling%27s_approximation Stirling's formula].
# MCS Problem 14.26. Arrange the functions in increasing big-O order. For some of these you also need to pay attention to the precise definition of big O.
# MCS Problem 14.28. Determine which of the given options describes each function's asymptotic behavior. For part (e) you will need one of the summation formulas from here: https://en.wikipedia.org/wiki/Summation#Summation_index_in_exponents
# MCS Problem 14.33. For each pair of functions, find constants c and n0 that make the asymptotic formula true. The book asks for the smallest c, but you can find any c that satisfies the definitions. For each one, give some justification as well.


''Be realistic'' - don’t waste your time applying for jobs you are only marginally qualified for.
=Old assignment, from last term=


''Networking'' - if you know someone at the company, that gives you a huge advantage.
# MCS Problem 14.18. Find the least non-negative integer n to make each statement true. Note that n=0 is theoretically a possible answer for some of these.
 
# MCS Problem 14.19. For each cell in the table, indicate whether the asymptotic statement is true or not. Note that for the ones that have sin, you have to pay attention to the precise definition of big O. For the one with n! you can use Sterling's approximation (any of the variations will be good enough).
''Technical interviews'' - many companies run technical interviews.  Imagine one of your CS professors quizzing you about everything you should have learned as a CS major. Those who get the job generally will have done well on the interview.  The take away is - start studying now everything you should know, focusing the most on programming, data structures, algorithms, and specifics from the types of jobs you want to apply for.
# MCS Problem 14.25. Indicate which cells in the table are true. Note that for functions f(n) and g(n), the notation "f ~ g" means that the limit of f(n)/g(n) approaches 1 as n goes to infinity (this is like them being Theta of each other with a constant factor of 1).  For the one with n! you can use Sterling's approximation.
 
# MCS Problem 14.26. Arrange the functions in increasing big-O order. For some of these you also need to pay attention to the precise definition of big O.
''What is happening in CS'' - pay attention to news related to CS/IT. One place to look is [http://cacm.acm.org/ Communications of the ACM], and another is the technology section of google news (or yahoo, bing, or wherever you look at news).
# MCS Problem 14.34. False claim, identify where it is incorrect.
 
''High volume'' - there are very many jobs in CS, and there are also very many people applying for jobs. Most people will end up applying for lots and lots of positions before getting one. Applying for jobs in the field of CS is definitely a "high volume" thing - plan on applying early and often.
 
''Direct contact'' - if there is an option to contact the HR or recruiter from an ad, you should write a short message to them (in LinkedIn, HandShake, etc.) giving a specific reason why you are interested in the position, a specific reason you think you would be good for it, say that you have applied, and that you would be excited to hear further from them. Sometimes this could help.
 
== Places to look for jobs ==
Handshake, LinkedIn, Indeed.com, Ascend Indiana, ACM, IEEE, jobs.indstate.edu, sycamore career link, ISU job fairs, stay on the cs-ugrads/cs-grads/cs-alumni email lists, large companies in the geographic area you are applying, check [[Alumni]] for places CS grads have gone previously.  Look at [https://www.careerinfonet.org/oview6.asp?id=&soccode=&stfips=18&from=State&nodeid=12 top employers in Indiana], [http://terrehauteedc.com/economy-a-demographics-terre-haute-indiana/top-employers-terre-haute-vigo-county-indiana top employers in Terre Haute].
 
= References =
You want at least one CS professor, at least one employer (hopefully).  You want people you think will actually do the letter, and do it well.  When you ask someone to be a reference, tell them it is okay if they think they cannot provide a good (positive) reference for you.
 
You ideally would be one of the better students/workers they had (e.g., you got an A- or higher in courses with them).
 
If you have a class with someone who is writing for you, do well in that class.
 
Your references will NOT give you the letter.  They agree to be contacted by employers, and they will give the letter to the employer directly (typically through an online form).
 
Send anything you have used to apply to your letter writers - your resume and cover letter. If you get an interview with a company, give your letter writers a head’s up that they might be contacted, and let them know anything particular about this job they might need to know.
 
= Resume =
FWIW, a latex resume template - https://www.overleaf.com/latex/templates/jakes-resume/syzfjbzwjncs
 
== Advice ==
''Length'' - make your default resume 1 or 2 pages - either is fine, depends on how much good information you have.
 
''Brag'' - paint yourself in the best possible (though still true) light. Is there any way to list something on your resume that sounds good?  People will be looking for both quantity and quality.
 
''Ordering'' - normally put your education (expected degree and date) first, and after that put things in the order that looks best.  If you have good relevant work history, put that first (and order the work history from oldest to newest or newest to oldest depending on which looks better for you).  If you have good project experience (e.g., in CS courses) and not so exciting work history, put your projects first.  Etc.
 
''Keywords'' - some companies screen applications using AI / automated searches for keywords and such.  So make sure to include some of the keywords they likely are looking for based on the job ad.  If the ad is for a java programmer, then make sure to have this somewhere in your resume (e.g., under Skills/Languages).
 
== Basic sections ==
''Contact information'' - include a website for more information that looks nice, where you have a copy of your resume, and possibly more.  Include a link to your github (or gitlab or something similar) where you have some of your projects.
 
You can use your permanent CS account for a website.  cs.indstate.edu/~username, you put you rhtml files in ~/public_html/, and make sure files and directory are chmod a+rx
 
''Education'' - list your degree and expected graduation, include your GPA and/or major GPA if it looks good (at least 3.5).
 
''Employment History'' - jobs you have had with most recent first.  Include a bullet point of your responsibilities and/or accomplishments, making it sound good.  If employment history does not sound good at all, don’t put it.  For example, you’ve had one job for one year, and it was McDonald’s. Put more details for the jobs related to CS/IT.
 
''Projects'' - list major projects you have worked on.  Include projects from jobs, projects from courses, and independent projects.  For each, include a bullet point of the main idea (just a phrase or sentence) and any skills/technologies/programming languages/tools used.  For example, you probably had a good sounding project in any Exoo class - interpreter, 3d game, ....  Make it sound good.  You would say “3d OpenGL game”, you would not say “it really wasn’t that good, or was very simple, ...”.  You could have a bullet point that is “Other Projects” and just list some more with no details for these.
 
''Skills and tools'' - laundry list of programming languages and tools.  You can split them into categories - proficient and familiar, or some other categories. If you are applying for something where you really should be good at X, and it is among your better skills, then split up the skills and include X in the “proficient”.  In your “familiar” category, include everything you have seen in all classes, etc.  It’s okay to list if you can say something about it, would be able to answer some basic questions, and would be able to say more by looking up information.  For example, in a PL course, you looked at ML - you could include that.
 
''References'' - available upon request (for your publicly available resume), but for specific jobs maybe put them in. Check with people before listing them.  Generally, only use people that have good things to say.  When asking someone, ask if they would be able to write a positive letter for you.  Best case - a CS professor that has good things to say (you took a course, got an A, were one the best students), and at least one employer (can say you’re responsible, on time, etc.).  Feel free to leave this tiny section out if it helps you fit on 1 or 2 pages; everyone assumes that references are available upon request, so it isn't really necessary to list this on your resume.
 
''Other'' - depending on your experiences, you might have some other section(s).
 
= Cover Letter =
== Basic outline ==
''Header information'' - who to, date, etc.
 
''Introduction paragraph'' - say what job you’re applying for, why applying, one sentence about your background and why you think you’d be good.
 
''Your experience/background'' - just a few sentences saying when you expect to graduate, relevant job experience, etc.
 
''Your thoughts on the position'' - and why you think you would be good.
 
''Signature''
 
That could be just 2 paragraphs.  Don’t stretch the truth.  Don’t say you’re an expert. Right length cover letter?  More than a few sentences, should fit on 1 page.  1/2 a page is typical.
 
= Interviews =
== General Advice ==
Be prepared to answer questions about anything that is on your resume.  If you can’t answer questions about it, don’t list it.
 
Don’t stretch the truth.  For example, “Are you an expert programmer?”.  Answer - no, I am a good programmer, and still improving.  “How much training do you need to do to do X?”  Answer - honest (one of): I have done that before, so just some getting used to how your company does it; did it in a class, but need to brush up; I have seen that before, and am confident I can do some self-training over a few weeks.  You don’t want to sound unrealistic.  “Rate your programming skills on a 0 to 10 scale.”  Answer - 6 or 7 (for the better students), and say that you’re comparing yourself to all kinds of developers, and for example a 6 or 7 means that I can develop code from scratch to do even modestly complicated tasks (and am best at doing XYZ kind of programming).
 
Things that are important that aren’t often covered much or at all in CS courses.
* Accessibility.
* Program design/architecture (e.g., you need to do BLANK, how would you design this system [where store the data, what programs running on the backend and front end, etc.])
* Ethics
* Learn an IDE (start with a tutorial - eclipse or MS Visual Studio)
* Github (and using it "for real" with the checkout, etc. workflow)
 
Use linked in.
 
== Practice ==
https://www.reddit.com/r/cscareerquestions/comments/20ahfq/heres_a_pretty_big_list_of_programming_interview/
 
http://www.nerdparadise.com/tech/interview/
 
https://www.interviewcake.com/google-interview-questions
 
And so forth - search google for things like “computer science interview questions”
 
[http://www.crackingthecodinginterview.com/ Cracking the Coding Interview] and https://www.hackerrank.com/
 
''More Advice'' - [http://www.kegel.com/academy/getting-hired.html Kegel Getting Hired]
 
= Alumni Advice =
''A few things you look for in hiring entry level positions.''
* Have had an internship or coop with a good company with hands on experience
* Good communication, can understand a project assignment / scope of work
* Strong in data structures / algorithms (especially for interviews)
* If interested in commercial/management side then should consider an MBA as well
 
''Pick one course in the CS major you would hope students really do well in.''
* Core data structures and algorithms / programming courses, fundamentals
* A difficult class that you are interested that you will work hard at and end up with a good project experience
* Programming languages - different ways of thinking, exposed to different languages
 
''Some fashionable areas/topics currently''
* Robotics, cybersecurity, containerization (microservices, docker), web/javascript
 
''General advice''
- Be excited about the opportunities you have, your first job does not have to be your dream job, as long as it gives you experience and moves you forward.

Revision as of 13:44, 26 April 2023

Assignment

Assignment for CS 303. Problems from Mathematics for Computer Science (MCS).

Note: for each question, give an explanation of why the answer is what it is. This does not need to be a formal proof. When possible you can use my big-O rules of thumb: (0) ignore constants multiplied out front, (1) for terms that are added just keep the fastest growing one (fastest eventually), (2) nc grows faster than (log(n))d for any constant c > 0 and constant d, (3) (1+c)nd grows faster than ne for any constants c > 0, d > 0, and constant e.

  1. MCS Problem 14.20. Indicate whether each statement is true or not. Explain why for each.
    Note that for functions f(n) and g(n), the notation "f ~ g" means that the limit of f(n)/g(n) approaches 1 as n goes to infinity (this is like them being Theta of each other with a constant factor of 1); equivalently, for any constant epsilon>0 you can find a value n0 such that (1-epsilon) g(n) <= f(n) <= (1+epsilon g(n) for all n >= n0.
    Note that sin(x) ranges between -1 and 1, and periodically goes between those two values forever; that is all you need to know about sin(x) for the one that has sin in the formula.
  2. MCS Problem 14.21. Show an asymptotic equation pertaining to factorial, using Stirling's formula.
  3. MCS Problem 14.26. Arrange the functions in increasing big-O order. For some of these you also need to pay attention to the precise definition of big O.
  4. MCS Problem 14.28. Determine which of the given options describes each function's asymptotic behavior. For part (e) you will need one of the summation formulas from here: https://en.wikipedia.org/wiki/Summation#Summation_index_in_exponents
  5. MCS Problem 14.33. For each pair of functions, find constants c and n0 that make the asymptotic formula true. The book asks for the smallest c, but you can find any c that satisfies the definitions. For each one, give some justification as well.

Old assignment, from last term

  1. MCS Problem 14.18. Find the least non-negative integer n to make each statement true. Note that n=0 is theoretically a possible answer for some of these.
  2. MCS Problem 14.19. For each cell in the table, indicate whether the asymptotic statement is true or not. Note that for the ones that have sin, you have to pay attention to the precise definition of big O. For the one with n! you can use Sterling's approximation (any of the variations will be good enough).
  3. MCS Problem 14.25. Indicate which cells in the table are true. Note that for functions f(n) and g(n), the notation "f ~ g" means that the limit of f(n)/g(n) approaches 1 as n goes to infinity (this is like them being Theta of each other with a constant factor of 1). For the one with n! you can use Sterling's approximation.
  4. MCS Problem 14.26. Arrange the functions in increasing big-O order. For some of these you also need to pay attention to the precise definition of big O.
  5. MCS Problem 14.34. False claim, identify where it is incorrect.