Reddit mentions: The best job hunting books
We found 818 Reddit comments discussing the best job hunting books. We ran sentiment analysis on each of these comments to determine how redditors feel about different products. We found 126 products and ranked them based on the amount of positive reactions they received. Here are the top 20.
1. Cracking the Coding Interview: 189 Programming Questions and Solutions
- Careercup, Easy To Read
- Condition : Good
- Compact for travelling
Features:
Specs:
Height | 10 Inches |
Length | 7 Inches |
Number of items | 1 |
Release date | July 2015 |
Weight | 2.69 Pounds |
Width | 1.59 Inches |
2. Cracking the Coding Interview: 150 Programming Questions and Solutions
- MIT Press MA
Features:
Specs:
Height | 9.01573 Inches |
Length | 5.98424 Inches |
Number of items | 1 |
Weight | 1.49032489112 Pounds |
Width | 1.0251948 Inches |
3. Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition (Programmer to Programmer)
- Publisher - Mel Bay Publications, Inc.
- Date Published - 5/31/1990
- Author - Aaron Shearer
- Page Count - 154
- Difficulty - Beginning
Features:
Specs:
Height | 9.200769 Inches |
Length | 7.40156 Inches |
Number of items | 1 |
Weight | 0.90830451944 Pounds |
Width | 0.618109 Inches |
4. Programming Interviews Exposed: Secrets to Landing Your Next Job
- Wrox Press
Features:
Specs:
Height | 9.200769 Inches |
Length | 7.2988043 Inches |
Number of items | 1 |
Weight | 1.26545338388 Pounds |
Width | 0.79917163 Inches |
5. Cracking the PM Interview: How to Land a Product Manager Job in Technology
- Physical Condition: No Defects
- Great one for reading
- It's a great choice for a book person
Features:
Specs:
Height | 9 Inches |
Length | 6 Inches |
Number of items | 1 |
Weight | 1.0802650838 Pounds |
Width | 0.82 Inches |
6. Cracking the Coding Interview, Fourth Edition: 150 Programming Interview Questions and Solutions
- Used Book in Good Condition
Features:
Specs:
Height | 9.01573 Inches |
Length | 5.98424 Inches |
Number of items | 1 |
Weight | 1.15 Pounds |
Width | 0.6492113 Inches |
7. The Complete Software Developer's Career Guide: How to Learn Your Next Programming Language, Ace Your Programming Interview, and Land The Coding Job Of Your Dreams
Specs:
Release date | July 2017 |
8. Heard on the Street: Quantitative Questions from Wall Street Job Interviews
Specs:
Height | 11.0236 Inches |
Length | 8.2677 Inches |
Weight | 1.39 Pounds |
Width | 0.5838571 Inches |
9. slide:ology: The Art and Science of Creating Great Presentations
- O'Reilly Media
Features:
Specs:
Height | 8.64 Inches |
Length | 9.08 Inches |
Number of items | 1 |
Weight | 1.84 pounds |
Width | 0.67 Inches |
10. Liquidated: An Ethnography of Wall Street (a John Hope Franklin Center Book)
- For weightlifting, fitness, and performance training
- Lightest weightlifting shoe on the market
- Flexibility: meta-flex technology in the forefoot provides more comfortable movement, allowing transition from Olympic weightlifting to other functional movements in the same workout
- Incredible stability: external heel cage and power-truss technology deliver lateral stability and a stable base for lifting
- Standard fit
Features:
Specs:
Height | 9.25 Inches |
Length | 6.13 Inches |
Number of items | 1 |
Release date | July 2009 |
Weight | 1.25002102554 Pounds |
Width | 0.98 Inches |
11. Data Structures and Algorithms Made Easy: Data Structure and Algorithmic Puzzles
Used Book in Good Condition
Specs:
Height | 11 Inches |
Length | 8.5 Inches |
Number of items | 1 |
Weight | 2.27957978908 Pounds |
Width | 1.01 Inches |
12. So What Are You Going to Do With That?: A Guide for M.A.'s and Ph.D's Seeking Careers Outside the Academy
Specs:
Height | 8.5 Inches |
Length | 5.75 Inches |
Number of items | 1 |
Weight | 0.4 Pounds |
Width | 0.5 Inches |
13. Break The Rules: The Secret Code to Finding a Great Job Fast
- Used Book in Good Condition
Features:
Specs:
Height | 8.75 Inches |
Length | 6 Inches |
Number of items | 1 |
Release date | May 2001 |
Weight | 0.7 Pounds |
Width | 0.75 Inches |
14. Cracking the PM Interview: How to Land a Product Manager Job in Technology
- Used Book in Good Condition
Features:
Specs:
Release date | March 2014 |
15. Data Structures and Algorithms Made Easy: Data Structures and Algorithmic Puzzles
Specs:
Height | 11 Inches |
Length | 8.5 Inches |
Number of items | 1 |
Weight | 2.12084696044 Pounds |
Width | 0.94 Inches |
16. Work Your Way Around the World (13th Edition)
Used Book in Good Condition
Specs:
Height | 9.32 inches |
Length | 6.07 inches |
Number of items | 1 |
Weight | 2.21123648786 pounds |
Width | 1.18 inches |
17. How to Get Into the Top Consulting Firms: A Surefire Case Interview Method - 2nd Edition
Used Book in Good Condition
Specs:
Height | 11 Inches |
Length | 8.5 Inches |
Number of items | 1 |
Weight | 0.75 Pounds |
Width | 0.3 Inches |
18. The Art of Salary Negotiation: How to Get Paid What You Deserve and Feel Empowered Doing It
Specs:
Release date | September 2018 |
19. How to Buy, Sell and Make a Fortune on eBay - Make Money Online From Home on eBay
Specs:
Release date | April 2018 |
20. "So What Are You Going to Do with That?": Finding Careers Outside Academia
Specs:
Height | 8.5 Inches |
Length | 5.5 Inches |
Number of items | 1 |
Weight | 0.45856150496 Pounds |
Width | 0.9 Inches |
🎓 Reddit experts on job hunting books
The comments and opinions expressed on this page are written exclusively by redditors. To provide you with the most relevant data, we sourced opinions from the most knowledgeable Reddit users based the total number of upvotes and downvotes received across comments on subreddits where job hunting books are discussed. For your reference and for the sake of transparency, here are the specialists whose opinions mattered the most in our ranking.
> I think if I learn how to program with an aim to work as a software developer and make games on the side, is this viable after just turning 20?
There's nothing wrong with the age of 20. I started school at 20, graduated in four years, and found work as a software engineer right out school.
What you have to figure out is how to make the best of your time left in school: should you take a class or two on programming and graduate on time, or (more dramatically) change your field of study to computer science and spend a few more years in school? That's something only you can decide. If you want to finish your architecture program and graduate in a reasonable amount of time, I can assure you that your math and physics background will be enough to get you work as a software engineer, but only if you can actually program.
Part of working as a software engineer means being able to program in multiple languages. That's because it's not really about the language, it's about the logic. All languages follow certain patterns and while syntax or wording may change, they all share ways to implement the same logic.
It also means knowing what data structures to use for what scenarios. The phrase "There's no such thing as a free lunch" comes to mind. All data structures have advantages and weaknesses and no data structure is perfect for every occasion. Know the differences, know the performance impact, and be able to speak to them. This won't just help you write better code, it will help you land a job. Interviewers love to ask questions about data structures.
As a corollary to data structures, you also need to know your algorithms. You need to know the performance impact of different ways to search and sort, traverse graphs, and find the shortest path (particularly relevant for game programming).
You said you're learning Python and that's great. Python is a great way to learn how to program. It's dynamic, it's friendly, and it has a rich library. Learn Python inside and out, then pick another language and figure out how to do the same things. C++, Java, and C# are all pretty popular in the industry, pick one of those. Once you know how to program in a few languages, you focus less on minute implementation details specific to one language and more on high level abstraction shared across multiple languages. By that point, you'll no longer be speaking in code, you'll be speaking in plain English, and that's the goal.
I don't know many good free online resources for learning languages, I learned mostly out of textbooks and lecture slides (along with lots of practice). There are some links in the sidebar to some tutorials that are worth checking out. Beyond that, I can recommend some books you may want to read.
EDIT: I added Programming Interviews Exposed because it's a good reference for data structures, algorithms, and interview questions
I am going to give my perspective, but as always, your milage may vary.
>When and how did you start?
I didn't start programming until I started in college. I knew I was good at Math, and good at Science, and that I was interested in Computers. I pursued a CE degree (I was 18 at the time), and am now pursuing a Ph.D. in CS. My wife started her CS degree 1 year ago (she's now 25), after being dissatisfied with (and subsequently abandoning) a degree in Marketing. For the sake of mentioning it, we both started with Java.
My real point is: I don't think it's ever too late to start. If you're sincerely interested, your passion will take you far.
> What are some daily things you do that drove/drive you to your goals?
I consider programming a type of carpentry, and so, I strive (and don't always succeed) to program as much as I can, in as many languages as I find interesting. So far, I've programmed in Java, Python, Javascript, C#, C, Objective-C, and Lisp. It can be daunting to learn new programming languages, but I wouldn't worry. I got around to playing with each one because I found they were good tools for things I wanted to do. In academic circles, I believe that's called "project-based learning," where you learn as much as you need in order to complete some project or task.
> What books do you recommend, ones that have had a huge positive impact in your professional career?
I absolutely love the Head First series, and it made me value my own unique learning style (which in turn led me to discover that I learn better through projects). I own 6 Head First books, and I absolutely love each and every one of them.
My wife recently discovered (and I also really enjoyed) the book Cracking the Coding Interview, which is a concise review of the fundamentals of programming, as well as very good guidelines for doing well in your coding interview.
> What advice do you give to junior programmers that want to plunge into open-source community but are just overwhelmed by the amount of complexity in most of this projects?
If you're just starting out, I would start your own project to do something you want to do. The chances are that, in doing so, you will leverage someone else's tools, and in turn, you may discover that a tool you're using...
...has an obscure bug, or
...would be really great if it had this one other feature
You then contact the project lead (or project board of directors), and state your case, and then...BAM. You're an Open Source contributor.
> Which work-related fields are you most interested in?
I am a fan of artificial intelligence, and I think it's the bees knees. I also do game development, which I enjoy very much.
> What was your first big investment after your degree?
I bought a car, mostly because I needed it. Bear in mind, I am on a graduate student salary, which isn't necessarily the most financially rewarding position out there.
If you have any other questions, or if you would like me to go more in-depth into some of the previous questions, do let me know. :)
Yes! Also, quite honestly I don't know that many CS majors who took linear algebra at my school for whatever reason.
Where do you get started?
Bonus for programming:
Maintainable kinda means that your code is easy to test, easy to comprehend (by others) and easy to modify. Read up on different design patterns to learn more about this.
Scalable is something you'll learn more about later, but basically it's kind of thinking about whether your code will be "good" enough to handle a lot of users (how fast is it how much memory will it take up)
Testing is very important when coding. You want to try to write small pieces of code then test it (i.e.: make sure it works).
All three of these things show up a lot in interviews, and if you can relate why you made your code the way you did to one of these three points (or something else) you should be pretty well off :D
How do I land an interview?
How do I study for an Interview?
Typcially, an interview will have you and the interviewer. The interviewer will first ask questions about you, what you're majoring in. And then maybe ask questions about your previous projects, and then he'll throw you a programming problem. Sometimes these can just be questions like "Which is faster: quicksort or mergsort?" or something like that, but other times they'll have you code something. If the interview is online, this will either mean you'll need to tell them the code you're writing or you'll code online on some collabarative envirionment (i.e.: you type the code online). If it's in-person they may have you write on a whiteboard. There are other formats of interviews as well, so make sure to research. Typically, for most larger companies, they won't care what language you code in (hopefully though it's mainstream!), but if you don't code in a language which they use, they may test you later for proficiency in one of their languages.
Sorry, not sure if this helps or not!
Good luck!
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
OP! Super late reply but i hope you have the time to read. /u/ProphetThief and the children comments for that have awesome advice so I'm not gonna reiterate everything. But I just wanna give you a bit of my own experience, etc. and hope it helps!
Good job on signing up for the gym membership, I think thats the best thing for anyone who is trying to change their mindset. It's not about getting the best body or "GETTING SWOLEE". From my experience going 3-4 times a week lifting heavy weights, really changes your brain (yeah it sounds weird) and you'll feel more positive. Personally, prior to going to the gym, there would be times throughout the day when something "bad" happens, and I'll get all depressed and shit. But after going to the gym consistently, now when something "bad" happens, it's really easy to "force" my mind in a positive direction. IMO it's the best way to break out of a bad mindset.
Secondly, I read below that you like programming. Someone below gave you the link to www.freecodecamp.com which should be pretty good. I believe they teach HTML/CSS/Javascript, which is good for front-end and back-end, which means if you like web development, that's literally the most minimal amount of languages you'd need to learn. Maybe a goal you can have for the time being is to learn these skills while thinking of a cool web application that you can make. That way by the time you feel comfortable developing in those languages, you can build a project. Then you can learn new tools and build more projects with those new that. And you just keep doing this. After while you'll have a bunch of awesome projects you can put on a resume and you'll have the skills to back it up. I'll link you to some of the stuff that I found useful:
-https://www.youtube.com/watch?v=pB0WvcxTbCA (So you know what technologies you should learn. Yeah i know it says 2015, but it still applies)
-http://www.amazon.com/Cracking-Coding-Interview-6th-Edition/dp/0984782850 (So you know what it takes to get a dev job)
I hope you get the chance to read this and I hope it helps! GL MAN!
Disclaimer: I teach at a bootcamp in the midwest.
Here are some things I'm noticing:
I'm going to suggest a couple of things to try before you enroll in a boot camp.
From here, it's a matter of learning. You're never going to learn everything (there's too much out there), but you can definitely learn quite a bit.
If you've got a CS background, you should be able to pick up the basics of Ruby on Rails. Michael Hartl's Rails Tutorial is pretty commonly cited; if you want to do web development, go through this tutorial twice. Maybe three times. Then start building projects on your own. Alternatively, Daniel Kehoe's Learn Ruby on Rails is also pretty commonly cited.
A good understanding of Rails, plus a solid foundation in HTML, CSS, and Javascript/jQuery will make you a reasonably compelling junior developer for a company that builds web applications. Doubly so if you can show off a few good personal projects. A good bootcamp (like the one where I teach) will give you a structured and guided opportunity to learn these skills. A terrible boot camp will also give you this opportunity, but you'll have to work a lot harder on figuring out how to make it all happen.
In addition to self-study and building projects, start attending meetups and actually talk to people.
If you do decide to start looking at different boot camps, here are some questions to ask:
Of course they can lie to you, or use weasel-words to obfuscate, or make stuff up, or.... Of course that's the case.
A good boot camp will give you lots of opportunities to practice AND will help you find your first job. We (where I work) do a lot of talking with recruiters and companies in our network, and we work really hard to make sure that our students get jobs that offer lots of opportunities for growth and development, and, when possible, that align with strengths and interests (there's not usually too big of a disjunct there). So far, we've had quite a bit of success in terms of our students finding employment, and even the companies that have been resistant to hiring students like our grads have started coming around (albeit slowly) as more and more companies hire our grads and have good experiences with them. But it'll be at least another year or two before our grads reliably get hired as junior devs in the bigger corporations (as their first or even second job) without first having a CS degree.
There are lots of different ways you can find success, and almost anything you do (quit your job and self-study, stay at your job and self-study, go to a boot camp, backpack around Europe, and so on) can be reasonably explained in an interview, especially if you can demonstrate that you are someone who is smart and gets things done.
Even your current job can be explained. Sure, your dev skills aren't what you want them to be, but you've got a ton of practice fixing code, which means you've got a huge list in your head of all the different mistakes you might make while writing code (which then means that you can, given adequate leeway, build systems that help you avoid or at least catch those mistakes). Don't discount that. It's important stuff that you learned, even if the way you learned it makes you feel really terrible.
Hope this helps.
I'm doing EE/CS at a top uni. as well, and I was able to land a PM job after some hard work. Some tips I'd give:
> - If you have a creative vision
> - If you love to talk about or review products
> - If you like wearing many hats
> - If you like shaping the big picture
> - If you have a keen eye for design, but also the technical chops to run with the engineers
> - If you are a technical person who doesn’t see yourself simply coding all your life
> - If you are double majoring in computer science and [business, psychology, economics, etc]
> - If you enjoy getting messy with data
> - If you don’t shy away from problems but instead actively look for solutions
> - If you can explain ideas well
> - If you are interested in what the users have to say
> - If you enjoy people
> - If you send well-written, actionable emails
> - If you are the master of your inbox
> - If you like to move around and not sit at your desk all day
> - If you can stay organized and on top of deadlines
> - If you are passionate about what you do
If this list doesn't sound like you at all, then no amount of interview prepping will come through as passion, good vision, and intuition.
Lastly, get the book called Cracking The PM Interview. I won't try to parrot some great interview and company specific knowledge in this book, it helped me a lot.
TL;DR: Make sure you actually want to be a PM, spend a lot of time writing emails/applications and studying for interviews, only take classes useful to PMing, and read that book.
TL/DR: Know what you want to be paid, be specific, show off your work, your resume isn't graded, and interview the company as much as they interview you.
Got my first industry programming job by posting on here about a year ago. I'd just graduated uni and was looking for a serious gig.
It took three or four posts over two months before I finally was starting to get decent offers. The ads that failed were generic, didn't market my skills well, and weren't specific enough as to what I actually needed, thus I got lots of Rev-Share-only offers, lots of $400 a week offers, and lots of "exposure" offers. There were a few offers for positions I was in no way qualified for, either.
For reference, this and this were my unsuccessful ads, this was my successful one.
I'm actually just now starting to look for a new job (my contract is up), and revamp my portfolio site, and my general advice is:
Bonus: If you're a programmer, get "Cracking the Coding Interview". It is amazing and will help you figure out what potential employers are looking for.
edit: ._. oh. This is a bit old. Oh well. Hopefully someone'll see it and get something from it.
Review your basic algorithms and data structures. Sorting, graph traversal, linked lists, structs, arrays, and multi-dimensional arrays.
Know about memory management, know about orders of magnitude in runtime, know about pointers, know about debugging and what to test.
You almost certainly won't be asked one of those wacky brainteasers you hear so much about -- we've found over time they do little else but tell us how good you are at brainteasers.
If you can do every problem in this book then you'll be more than prepared.
Also, give a quick read of our general interview tips.
General advice:
Pay close attention to providing thoughtful, reasoned approaches. Don't get so tied up in providing a clever solution that you forget the simple answer. Points are definitely awarded for really clever or innovative solutions, but that isn't the only way to get through.
Additionally, RELAX! This is definitely easier said than done, I realize, but understand that most interviewers really do want you to succeed. They aren't there to scare or intimidate you, and interviewing isn't even their day job! They're engineers who once sat exactly where you were, answering the same things they're now asking you.
Try and think of your conversation with your interviewer as being a chat with a really good friend of yours that you haven't seen in a really long time. You used to be best buddies, but moved away and you haven't seen them since. You know you've both changed in all that time, so you're being a little restrained, but there's still a foundation of mutual trust and respect -- one that puts you at ease.
Lastly, verbalize your answers. We aren't asking you to write an algorithm to sort a linked list because we're curious how it's done -- we're asking you because we want to know how you think. Verbalize your thought process. Verify all your assumptions. And, if you get stuck, don't be afraid of stating your thought process to your interviewer and asking for some feedback on where to take the solution (this is a heavily team-oriented company, after all).
Hope this helps! Best of luck!
Source: I do interviews at Microsoft, both general technical interviews as well as PM interviews.
I don't think I could do a mock interview exactly... not sure that would be kosher. But I can definitely offer you some tips from my experience with both the intern and full-time interviews.
How to prepare:
How to interview:
What's next:
Good luck!! It's always really exciting for me to hear about young women applying to Google. Hopefully I'll see you rocking the propeller beanie this summer. :)
P.S. I love your username. Avocados are amaze balls and I don't know what I would eat if they didn't exist.
My Story
Hey pal, I was in a similar boat about 8 months ago. It was my senior year as an Economics major, and after taking a programming class, I instantly fell in love with it. I crammed a few more programming classes in before graduating, but in the end, I sure as hell wasn't employable as a software engineer.
​
I had a choice: become a data analyst (the path I was currently on) or follow the software engineering dream. I chose the latter.
​
I decided to go to a (remote) coding bootcamp after college. The program was 6 months. It taught web development (Node, React) and some very basic CS fundamentals. I spent my free time outside the bootcamp inhaling all the computer science and industry information I could. I did this because I wanted to be a competent programmer. I found it fun.
​
This week I had my second onsite. I expect to receive a full-time software engineer offer (my second offer so far) later today, and I have 4 other onsites in the near future (a big 4 + a few startups). It has been a heck of a lot of work to get here, but if you want it badly enough, it's possible.
​
My Tips
​
Happy to answer any other questions you may have. I'm not an expert or an experienced software engineer yet, but I've walked the path you're considering, so hopefully my tips are helpful.
I looked at the FreeCodeCamp curriculum, it looks good for an entry level javascript developer, so since you already started it, you might as well finish it (since, like I said, everybody implicitly expects you to know at least one of python/js/perl as well as HTML+CSS).
2 hours per day is a bit too little IMO - but I understand that it's hard to find time when you have a demanding job and a family that needs time and attention. Just study as much as you can, 2h being the mininum (do keep in mind that CS students, your competition, will be studying at least 8h/day for at least 4 years with tons of homework and more advanced material). So you should probably focus on studying more in the weekends (just typing and thinking about this, I'm actually lucky I started when I was a kid, with all my bills paid for!)
Anyways. You should focus on getting a job first - do keep doing the FreeCodeCamp, as many hours in the day and weekends as you can. Explain to your significant other, if you haven't already done so, your plan - that you're studying hard to upgrade your career, that it might take some time away from them but it will pay off in the long run, etc. Ideally you should be studying at least 4h/day, so try to keep close to that, study more on weekends if necessary. Check this guy for reference on his plan and what he's studying (and note that he's studying full-time - a luxury, I know, but just to put your 2h/day into perspective). This guide is helpful too. Note that you don't need to know all that to get an entry-level development job, but keep that plan in mind for the long run (as you progress your career).
Once you finish the FreeCodeCamp, or even before (I would say, once you finish "Basic Algorithm Scripting"), try doing some local interviews if you can do it without jeopardizing your current job just to get a feel of how interviews work. You won't be trying to get a job (but hey, if you do, awesome), this is just to get your feet wet on interviewing (which is a skill in itself). Since you're not shooting to get a job right now, you won't be as nervous, which is the state of mind you want to be in. If you're relaxed you can talk better, think better, make jokes, be more presentable, which is great - this will put you in the right mood for your future interviews. Try finding people online that can do mock interviews with you in the area you will be focusing on (web/javascript/frontend initially).
Once you're past the basic HTML/CSS part and you start studying JavaScript, I suggest you look into Python as well at the same time. It is a very simple language, quick to learn, and will double your opportunities for employment. As you study both at the same time, you might notice that you like one or the other better - if that happens, focus more on the one you like better, this will accelerate your learning and get you ready for a job faster in your chosen language.
At one point you'll finish HTML/CSS and JavaScript+Python (finish as in be comfortable with them - you'll see that you'll still learn new things as years go by, it will take a few years for you to "master" them). After you're comfortable with JavaScript and Python (and hopefully gainfully employed in development), start studying that book (where you'll learn a GREAT deal about many important things, it will be a dense read, and you will come out of it knowing assembly and C) and then you can focus on algorithms and exercising your thinking with algorithmic puzzles and how computer networks work, operating systems and everything that is generally on this list.
Then after studying all that and with 2-4 years of experience under your belt (and still studying 4h/day), you can start thinking about the next level in your career and preparing for it (larger companies, mid to senior positions, etc) - add a couple more years of experience and you'll be ready to interview for large Valley companies (Google, Apple, FB, etc).
If you plan to self-study all the way through and never join an University, you can look into full-fledged CS courses online and follow that to get a complete theoretical background on CS (that all your colleagues will eventually have and expect of you, at some point in the future).
Employers like degrees, but employers also like people who know how to get things done. At the very least, teaching yourself is a good start for whatever else you're thinking of doing.
I've thought about it a lot: if I were trying to learn to program, today, from scratch, what tools would I want? Well, here are a few of my favorite things...
Free VS 2010 Professional for @edu accounts:
https://www.dreamspark.com/
Free Eclipse IDE for Java EE Developers:
http://www.eclipse.org/downloads/
Free team tools worth understanding:
http://www.perforce.com/ (version control)
http://subversion.apache.org/ (version control - pretty much the same thing as perforce, but not as good)
http://git-scm.com/ (version control - a VERY different way of doing things, but powerful and gaining popularity)
http://www.rallydev.com/ (task management - kind of a pain, but good to play with)
Tutorials:
http://www.khanacademy.org/science/computer-science?k (probably a very good place to start)
http://www.khanacademy.org/exercisedashboard (math - the value of this cannot be overstated)
Online course-ware:
http://mitpress.mit.edu/sicp/
http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science
http://www.stanford.edu/online/
http://edudemic.com/2012/04/the-25-best-places-to-take-free-online-computer-science-classes/
Problem solving challenges:
http://projecteuler.net/ (we should go through these together)
Community:
http://stackoverflow.com/ (Q&A forum)
http://www.reddit.com/r/programming (some good links, okay place to ask questions)
Books:
http://www.amazon.com/Programming-Interviews-Exposed-Secrets-Programmer/dp/047012167X (once you're ready for a job, this is good to work your way through)
Possibly a good discussion about finding a software job, later in life:
http://news.ycombinator.com/item?id=4350827
And then...
Depending on the kind of development you're interested in, there are a TON of other valuable resources, tutorials, tools, etc:
Free Cloud Services - depending on what you're doing, these might be SUPER valuable... Might not want to make an account until you're ready, because the clock starts ticking:
http://aws.amazon.com/free/
https://www.windowsazure.com/en-us/pricing/free-trial/
Free cloud development tools:
https://c9.io/
Sorry to hear about your situation. I'm not sure on the focus of Infomatics, but by the sounds of your post you are well equipped and looking for a programming (web dev) job. So I'll focus on the job part because realistically it's the only thing I feel I have any (possibly) useful advice for. I'm sorry to hear you haven't found a job yet. But you are quite fortunately (unless I mis-read what you want) looking in one of the most in demand, albeit competitive industries around.
So here is my (hopefully semi-useful) advice. Most are things that I was told to do when interviewing that I thought helped me quite a bit. I hope they help you too. You may be doing all of this already so I am sorry if it is obvious things you've been doing.
I strongly recommend buying this book if you can. Read it cover to cover and do as many of the exercises as you can.
https://www.amazon.ca/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=dp_ob_title_bk
Next I recommend applying to any and all tech companies you can find, it doesn't matter if they are asking for a specific framework or language or more experience than you have. A lot of people are put off by the 2 to 3 years in x that most postings have. Usually they just care that you have some experience and seem smart enough to learn. The fact that you have side projects is a giant plus for you, they love seeing that.
These sites are great ways to practice for interview questions:
https://www.hackerrank.com/
https://leetcode.com/
Doing these questions really help with interview questions in my opinion.
From there just cycle, continue to read the book, apply to as many places as you can, do practice problems. Work on your own side projects, the experience gained from them is extremely important.
If you have any public repos on github clean them up. If you do not, register for an account and put your personal projects on some (if you can). That way you can start to include the account on your CV. (If you aren't already)
Practice explaining your projects (what you did and why) and try to think of the questions they could ask you.
In terms of financials/housing/immediate work, I would look at moving out of the downtown core and try to find a basement suite or something affordable. Maybe try to get a roommate. I would try to find a job (starbucks, best buy, london drugs, etc) to support yourself in the short term. If you have a friend that might be willing to let you stay with them while you find a place talk to them now, and let them know the situation. That will help them prepare for you if you can't find a job/place.
Also, don't be afraid to post your resume to subreddits that focus on that sort of thing (remove all personal info!) or feel free to pm me yours and I will be more than happy to try to provide some constructive criticism.
Sorry for the book, I hope at least some of it was useful to you.
Also sorry for the grammar/spelling/shitty writing style I am a programmer, but not a good writer.
If you're working on your math and might pursue a CS degree I'd recommend Cracking the Coding Interview. I actually haven't read it myself but it's a highly recommended book often mentioned on subreddits like /r/cscareerquestions
EDIT: Perhaps pair it up with books on algorithms and data structures so you get comfortable in working with, lists, arrays, trees, graphs etc :)
EDIT: (currently 0) Why would someone down vote this? I just don't understand why?
EDIT: Someone mentioned that it could perhaps be because I hadn't read it myself so I thought I'd add a heartfelt recommendation by /u/amputect that I just read in the authors AMA:
> Gayle, I don't have a question, but I wanted to say that your book helped me get two programming jobs. I used to push grocery carts in the arizona summer, now I work for Google. I also, like, went to college and learned and stuff, but your book was a huge help in prepping for interviews. Thanks to you, I felt more confident and more prepared, and I was able to interview with several major tech companies without fear vomiting a single time which for me was a pretty big deal.
Seriously, thank you, thank you, thank you. Your book is great, I recommend it to everyone. You are a fantastic writer and a brilliant human being. Thank you!
Well, the trick is to do one step at a time. Your goal is a very reasonable one, but you'll want to focus on the foundation first. For a non-programmer, I would recommend starting off with Code Academy or Coursera. The advantage of the second link is that it immediately provides you with a sense of direction while learning a language. Code Academy's Python tutorial is really nice in providing interaction with your code. Regardless, you'll want to first gain a sense of syntax on your language of choice.
After you're familiar with at least one language, the next most important thing is to become familiar with data structures and algorithms. This book on Amazon is amazing for giving beginner advice in the area: http://www.amazon.com/gp/product/1468108867
The book is not overly complex and mathematical compared to many other books, and it provides a fairly reasonable foundation for any beginner. If you ever want to practice writing basic algorithms out (optional), visit Codility's lessons to try things out. Once you can comfortably complete some of their lessons with a high grade and understand their topics, you should be ready to dive into the math/finance side. I feel that at this point, the Max Dama paper is a great way to get an overview of the basics. Regardless of the financial instruments you're trading (I've mainly worked with equities), you'll need a sense of portfolio management. Here's two books that may be worth running through:
http://www.amazon.com/Quantitative-Equity-Portfolio-Management-Construction/dp/0071459391
http://www.amazon.com/Expected-Returns-Investors-Harvesting-Rewards/dp/1119990726
They're both equities based (and I could be wrong here about FX), but it's probably a good idea to get a sense of how to measure returns. Regardless of the asset class you're planning to trade, all algorithms should be rigorously backtested and simulated (traded with virtual money) prior to being moved into production, and one of the best ways to improve your outcome is to know how to measure the returns and risks associated in your backtesting/simulations.
Hope this isn't too much information at once, but it should be a start. The first two courses throw-it-out mentioned in Coursera is a great start too.
Edit: I'd also take some time to browse some of the links on the sidebar in this subreddit. Some of those links are immensely helpful (especially the Statistical Learning one). Many of the strategy links are fairly easy reads and are recommended as well.
You're GPA is great so you don't need to worry about that, IMO I'd list it on your resume.
I would recommend the following:
While concurrently (har har) reading the book, any data structures you don't know, learn. Program them and test that they work.
Further, check out CSC263 materials and see if you can implement the data structures. You should also at the end of CtCI be able to attempt some of the assignments from CSC263 and complete them.
Also try coding problems on hackerrank or leetcode or w/e the sites are called -- note they can be demoralizing on hard but it's worth it and you learn a lot
Pick a language and learn it well, again if you do Java, then know how garbage collection works and other core language features (ex: If I ask you what a GC root is, do you know? [ask yourself this in 4 months] Can you compile from the command line? Do you know what Maven is and how to use it? Can you use lambdas and the new stream API? What is type erasure? etc)
C++ is great at removing your hair, but you'll learn a lot... and if you ever have to work on a C++ project you won't want to kill yourself when you accidentally do object slicing or something funny like this.
Obviously put your work on github or somewhere, though I think you know that this is implied
As you can see, attempting the above will directly benefit the following courses:
Sounds good doesn't it? Though this is probably only possible if you are doing literally nothing over the summer ;)
...continued...
> Test plans - When you apply for QA roles, you'll almost certainly be asked "how would you test ____?". The correct answer is to be methodical. Don't just spew out a stream of test cases as you brainstorm them. Understand the different scopes (unit, functional, integration, maybe end-to-end) and what the goals of each is, and how they differ. Understand that there are different areas of testing like boundary, happy path, special cases (null, " ", 0, -1), exceptions, localization, security, deployment/rollback, code coverage, user-acceptance, a/b, black box vs white box, load/performance/stress/scalability, resiliency, etc. Test various attributes at the intersection of a compenent and a capability (borrowed from the book How Google Tests Software), and I believe you can see a video that goes into this called The 10 Minute Test Plan. Understand how tests fit into your branching strategy - when to run bvts vs integration vs regression tests.
> Test methodologies - Understand the tools that make you an efficient tester. These include data driven tests, oracles, all-pairs / equivalency class, mocking & injection, profiling, debugging, logging, model-based, emulators, harnesses (like JUnit), fuzzing, dependency injection, etc.
> Test frameworks - Knowing all the tests you need to write is good, but then you have to write them. Don't do all of them from scratch. Think of it as a system that needs to be architected so that test cases are simple to write, and new functionality is easy to implement tests for. I can't recommend any books for this because it's something I learned from my peers.
> Test tools - Selenium / WebDriver for web ui, Fiddler for web services (or sites), JUnit/TestNG, JMeter (I have to admit, I don't know this one), integration tools like Jenkins, Github/Stash, git/svn.
> System design - As you're entry-level, this may not be a huge focus in an interview, but know how to sensibly design a system. Know which classes should be used and how they interact with each other. Keep in mind that the system may evolve in the future.
> Whiteboarding - Practice solving problems on a whiteboard. The process is more than just writing the solution, though. This is the process I follow (based loosely on the book Programming Interviews Exposed):
Resources:-
> Learning to test:
> Learning to interview:
> Learning to program:
> Miscellaneous
> What sort of skills should I really hone? I realize I gave you a ton of stuff in this post, so here's a shorter list:
> Examples of projects that make you look valuable
> However, something pulled me away from Marketing, and I decided to try and go the tech route. I took two basic programming courses (Java/C++ & SQL) at school however because of lack of time did not do a minor/major.
From this I would suggest data science, but it looks like you're already into that. If you like programming, maybe find a marketing position that needs some programming rather than going for a full-on programming position. That way you can ease yourself in.
> I consider myself pretty creative, and I think about things deeply/logically
That's great!
> however even when I programmed I never felt like a smart/clever programmer, more so watching what others do and replicating.
Don't worry about that too much. Programming is a trade--a very sophisticated and exacting one, but it's still a trade. There is no silver bullet to gaining great programming skill. You need to make 10,000 mistakes to be a master.
I've been programming for ten years now, others have told me I'm clever or a good programmer so I suspect it's more or less true. All of my clever tricks, good ideas and ability to make difficult things simple come from others. When I see something I like, I remember it. When I build something later I can pull out my bag of tricks and build elegant solutions to complex problems. Study other people's code and learn from it. Try to figure out why they chose to make every decision they did; every line tells a story.
If you want a good place to start with that, look at the JavaScript source files for 2048 (ignore the ones that end with polyfill). It's one of the most beautiful pieces of code I've seen.
To quote this
> Every programmer occasionally, when nobody's home, turns off the lights, pours a glass of scotch, puts on some light German electronica, and opens up a file on their computer. It's a different file for every programmer. Sometimes they wrote it, sometimes they found it and knew they had to save it. They read over the lines, and weep at their beauty, then the tears turn bitter as they remember the rest of the files and the inevitable collapse of all that is good and true in the world.
> I did receive a Data Science internship, as I knew the answers to basic programming questions and was able to think through a problem logically. However, today I had a technical interview where I had to join a chatroom and write pieces of code for the person. I struggled with 2 out of the 3 problems and they were fairly simple-- a little embarrassing.
These types of things are designed to trip you up and separate the people who can't program at all with those that can. The link is short and worth a read. If you want to practice read Cracking The Coding Interview by Gayle McDowell.
> So now I am really doubting going to programming track as maybe I am not 'talented'/capable of really performing that type of thinking, especially for an entire summer & career. Any advice or tips is greatly appreciated!
Impostor Syndrome runs high in CS. There's too much to keep up on and it's impossible to know it all. In a way, we're all constantly beginners. Learn as you go and don't be afraid to ask questions, nobody knows everything.
> He has had one junior developer interview that I found for him (another client of mine, after I talked up his progress and how proud I am of him) but he froze up and didn’t get the job. Since then it’s been mostly daily auto rejection emails. I can tell he is starting to lose hope and shut down because he is very ambitious and hardworking (much more than I’ve ever been).
> So, what actions, steps, courses, books, words of support, etc did the people in your life share with you or do for you that made a long, difficult job search bearable or better or easier? Or what do you wish they had done or said differently?
So I don't know your BF, but one thing to keep make sure is that he welcomes your help. I know some people take offers of assistance as a sign of weakness. It's great you're trying to help him, but it's best to make sure.
I've been through the same process - albeit single at the time. But I understand the stress and fear of uncertainty he's going through. One of the best thing you can do is not involve this in your interactions/dates/etc. Just being a good girlfriend/boyfriend is usually more than enough when someone is going through a stressful time. Having small moments with you where he can destress will do wonders for his mental health.
More than anything - be understanding. I've known some couples that have broken up because the other party didn't understand the stress the other party was going through. For example, having issues with not spending enough time together, closing up, etc. Being understanding and being there for him is really one of the best things you can do even if you don't directly help him. If he needs time alone, don't make it a personal issue - he's probably dealing a lot within his head and he will come to you after he's had time to himself. If he lashes out at you due to his stress (which is quite common since he's trying to find an outlet), try to defuse it or just shrug it off. Of course, don't take it lying down if he crosses the line - but know that it's coming from a place of fear and assuming it's no big deal, just letting it go will work wonders.
When this is all over, he will know all the things you've done for him and will appreciate you that much more as a girlfriend/boyfriend.
One book I do recommend is Cracking the Coding Interview. It's been basically my bible when I went through the interviewing phase and it's helped out tremendously. It goes through in-depth about how to change your mindset during an interview and what to expect. Having more knowledge builds confidence. Having confidence will prevent him from freezing up. I don't know if your BF already owns this book, but it would be a great gift - assuming he's welcoming to your assistance.
This is a great start! I'm going through a similar process of resume refinement right now, so I understand how much work is involved. I'm including a bunch of feedback based on what I've learned so far and had success with. I've also hired a couple of PMs as a part of my current role, which has helped with seeing what "clicked" for me when on the hiring-side of things. Apologies for the length in advance, hopefully this is useful.
Keep at it and don't get discouraged! Your next opportunity is out there.
I'll address your #1 below, but I want to focus on #2 for a second.
The feedback you've gotten regarding your degree choice is correct -- all of it, even though it may seem contradictory. You'll have a tough time finding a job in Art - and artists probably won't appreciate a degree in CS very much. The reverse couldn't be further from the truth.
It is a very rare individual that has the logical and mathematical nature to code efficiently and with broad scope but then uses their artistic creativity to inspire cleverness. Code, or more generally put a system, is a piece of art just like any other. A wide array of pieces which need to cleverly and harmoniously co-exist. The creativity of an artist is essential in recognizing the potential of an application.
I want you to look at this role. Read the job description, and picture it applying to a product where you design the User Interface and the User Experience. Understand that you will work with graphics artists, but it's your vision that determines what the user experiences.
If that feels right, chase it.
----
As for your #1 question, another very good one.
When I'm interviewing SDEs, I want to see mastery of concepts and, to an extent, cleverness of a solution. There are a few things, though, which make me almost immediately discount a candidate:
Starting before you have all the information. Make sure that you have a very clear vision of what the problems is before you begin. Understand that any assumptions you make must be checked first. For example, if I say take a pointer to the head of a linked list and then do X on it, and you assume that the pointer will never be null, you will fail my test. Either code for the case where the ptr is null, or ask the interview "Is it a fair assumption that the pointer will never be null?"
Being satisfied with a naive solution. When solving a problem, it's perfectly fine to give the naive solution -- but don't stop there. Once done, talk with the interviewer. Say things like "Now this is the naive solution, because it finishes in O(n^2) time. We can make this more efficient by doing 'X'" and then press forward.
Internalizing your thoughts. This is weird to do for candidates, but it's critical for a team environment. When you're solving problems, think out loud. I'm not asking you to solve these problems because I'm bored and need a show, I want to know how you think.
There's so many of these I could write a book (and others have). I highly recommend reading Programming Interviews Exposed. It's an awesome resource with spot on practice problems.
TL;DR Improve yourself, invest in your future, don't worry about the mistakes...read the books listed at bottom, and practice!
Few months ago I royally fucked up an interview at Microsoft. A really simple question. But I had no experience doing coding on paper instead of a computer.
I spent a lot of time studying various books and paper coding to make sure it wouldn't happen again.
I then had an interview for another (in my mind at the time) dream job. I did fine for all the phone interviews and they flew me over to the west coast for an in person interview for the day. I did well for the first bit until they started pulling out dynamic programming and integer programming questions on me and expecting me. Once again something I didn't prepare for, and f'd up. Didn't get this job either. For the longest time I was really hard on myself at fucking up on both these interviews one after another. Especially this second one since a lot more was riding on it than just the job (another story).
But then I decided I didn't want to have this sort of experience again and expected better of myself. I made myself further improve and brush up on all those concepts as well. Did a few mock interviews with friends, spent some time working on interview type questions on both the computer and on paper. A month or two later I started interviewing again. By this point I was an interviewing machine - and I'm now able to do just about anything thrown at me. I've had my choice of employers and until just recently, was in the situation where I had so many offers I didn't know which one I wanted most. I'll be heading to silicon valley soon at one of the top tech companies in the world with a fantastic offer considering I just graduated.
The point is - learn from the mistakes and improve yourself. I realize you don't want to be that guy spending heaps of time coding outside of work or whatever... but this is an investment in yourself and your career. Do it once, and then just brush up on your skills from time to time. Get into the interviewing mindset and just rock them so you can have your choice of job - and then you can go about your thing once you have the job locked. The up front investment will be worth it!
Things that helped me:
Having trouble with Algorithm design/analysis? These are some of the go-to books for that:
Throwaway account because I'd rather not have my current coworkers knowing about this.
About a year ago, I heard about Google Foobar from an article on Hacker News. I had never seen that before but it sounded interesting, and I'd always wanted to work for Google (sent my resume some years ago, heard nothing). Long story short, I found a backdoor way into Foobar, and went through the coding challenges until I got past level 3, at which point they ask if you'd like a Google recruiter to contact you. I said yes and gave them my details.
Fast forward to about two months ago. I finally got an email from an internal Google recruiter asking to talk. I freak out a little bit and start madly researching what a first contact entails (as it turns out, just an informal phone call about your career and what you might want to do at Google). During my research I also looked into what the infamous Google technical interviews might look like, and discovered that I needed to brush up on my algorithms and data structures, and fast. I told the recruiter I needed two to three months to prep (this is apparently not too uncommon, thankfully). She said that when I was ready, I should send her my resume and the jobs I'm interested in (probably in the Pittsburgh office so we can stay close to my wife's family), and she'll get the ball rolling. She also mentioned that it's possible that I could skip the standard video tech screen (since they already had a coding sample in the form of my Foobar submissions) and proceed directly to the onsite interviews.
The thing is, I've been primarily doing PHP web development for ages. I've done a bunch of freelance work previously and I've been working for a great startup for the last few years after immigrating to the US from Canada in 2009. But as far as I know, Google doesn't do much / any PHP, and we all know the general opinion on the language. I have, thankfully, done many other languages throughout my career... Javascript (lots), Java (college / some Android development), C++ (in my college days), C (when I was first teaching myself to program in a real language). But my professional experience has been dominated by PHP.
As far as education goes, I have an associate's degree in programming and about two years of a CS program (interrupted to move to the US). I always thought Google had a hard Bachelor's requirement but that's apparently not the case (you just have to show that you have the aptitude, skills, and experience necessary).
My prep so far has been reading through The Algorithm Design Manual (at least the theory part of the book), and more recently, reading through Cracking The Coding Interview and doing the questions, on paper first, and then verifying on my laptop. I am doing these questions in Python, which was the language that I did Foobar in, and probably the language I will interview in. That said, I learned Python for the first time going through Foobar, so I'm far from an expert in the language. I'm doing this prep while managing my current full time job and caring for a four month old, which I wouldn't even come close to managing without my wife's amazing support.
Doing a search here, I found the MIT Hacking a Google Interview site which seems like a goldmine, and Pramp which also seems like a great resource once I'm done with CtCI. Considering Interview Cake but only if people think it's indispensable ($200).
I have about one month left in the original timeframe I gave the recruiter. I am incredibly excited by the prospect and also incredibly intimidated. Do you have any advice for me on how to maximize my chances?
Also, should I apply as a SWE or a SWE-Frontend? My full stack web development experience seems relevant to SWE-Frontend but I don't want to only end up doing frontend work and I don't want it to be career-limiting; I like the backend stuff as well, and I'm definitely not a designer.
Thanks!
Edit: For those looking for the Foobar backdoor, it no longer works. It was a crossword you could solve that randomly generated (easy) CS and crypto clues, and was accessible from an IP apparently found in promos for The Imitation Game, but the crossword entrance has since been shut down. However, I figured out why I couldn't get in through the main method (searching Java- or Python-related CS queries). You have to both be logged into Google, and, crucially, you have to have search history enabled. Once I reenabled search history, the Foobar break-in came right up after a couple Python searches.
This is just my 2 cents, but the first thing you should be asking when learning any language is what problem are you trying to solve with the language?
C# as a language doesn't amount to anything, but it's real potential comes from the frameworks it is associated with.
​
If you're wanting to:
web develop then you would need to look into .NET Core + WebApi + MVC or a front-end framework (Angular, React, Vue).
This is a great course to get you started with. It'll create a basic web application you can modify and play around with from the database to the front-end:
https://www.pluralsight.com/courses/aspdotnetcore-efcore-bootstrap-angular-web-app
​
desktop development then look at Wpf (window presentation forms) or use electron and c#
mobile development then take a look at xamarin
​
from your use of Unity though, it seems as if you are more into game development which I would advise then to go a bit lower and really learn algorithms and good implementations. For this, there are some greats books you can use to help you get started:
Cracking the Coding Interview: 189 Programming Questions and Solutions by Gayle Laakman - Even though this is an interview book it's a great intermediate book to algorithms. The book does assume you have a basic understanding of elementary data structures.
The Algorithm Design Manual by Steven Skiena - This is definitely more advanced and heavy but it's a great book to really dig down into the nitty gritty
A great website for practicing writing algorithms in c# is leetcode.com. It's a site that basically lists a bunch of small questions you can solve with an in browser compiler that includes c#. This way you wouldn't need to download visual studio to practice coding.
if you're up for the challenege, then you can download a framework like SFML.Net and try to develop a game from the ground-up without using an engine like unity. But this is obviously a lot of work ;)
​
Overall it's hard to give really specific advice without knowing where you're trying to head. But it's a good time to get into c# and in general microsoft's development stack. In the past people were shoe horned into using microsoft's technology stack from top to bottom but recently microsoft has made a lot of stride in making there tech more open which is making a lot of people turn heads.
If you are also looking for a more lite-weight ide then I recommend visual studio code or vscodium which is the same but without the trackers :)
>What did/do you find hard about learning programming? If you could be specific about things that frustrated you or roadblocks that got in your way, that would be helpful.
The hardest thing I've found about learning programming is knowing where to start. If you're trying to learn without a mentor its really hard to know what you need to learn and how. To someone inexperienced with the field, learning to program seems as simple as learning a language, but the difficult part is learning to apply that to different problems. Overall, the hardest thing to learn is something that you don't know exists. As for a specific subject, I remember finding recursion and Polymorphism hard to understand the first time I encountered them.
>Did you choose to go to an institute of higher learning for programming instead of using the free resources that are all over the net? If so, why?
I am an undergrad sophomore at Northeastern University, studying Computer Science. I chose to study computer science at university instead of using online resources, because I realized that there was a lot to learn which I couldn't find in a web page. I made the decision shortly into my Junior year of high school when I was taking AP Computer Science. I enjoyed studying the subject so much that I couldn't imaging studying anything else.
>What is something that you wish you could change about your current programming instruction?
My current programming instruction is great. I generally think that my professors are very interactive and experienced in their fields. Something I think is great is that most of my professors lecture without computers. They write code on the board, which gives them much more freedom to move about and ask questions, and it makes that classes interesting. I also think it removes the focus from the language being used and places it on the theory, which is the important part.
>Do you look for career preparation or support? If so, what have you been looking at or what resources do you use? To clarify - I mean interview help, prep questions, advice, etc...about preparing to enter the field.
One of Northeastern's greatest tools is its coop program. Typically students graduate in 5 years with 1.5 years of working experience over three 6-month coops. In preparation of this, I had to take a class to prepare me for applying to companies. The experience was amazing. The advising department brought in employers and other students to talk to us and do mock interviews. As someone looking for their first "real" job, this is invaluable. Technical questions are an important part of the application process, but for entry level programming jobs they aren't too difficult. I've heard that http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X is a great resource.
>For those of you still in school/learning - do you worry about how you will find a job programming? What concerns do you have?
Nope, already got my first job in the field. From my experience over the past semester of interviewing, it you're excited about the field and have a reasonable ability to program, you can find a job somewhere (especially if you live in a city.)
>If you're out of school and in the workforce - do you ever worry about how you will move forward in your career?
Not there yet.
>Does your place of employment (you don't have to tell me who) provide you with feedback or a clear path to advancement? Tell me about your concerns here.
Not there yet.
Hi! I love your username btw.
I'm going to try and find stuff over time, so I may add to this comment. It's going to take a bit to trudge through, but if you get just a little practice with each concept, you'll be pretty set. These companies don't need you to answer everything perfectly, that would give you a 99th percentile or whatever on Leetcode. If you know the basic concept, and you can mold it to the problem and give a time complexity, you'll be fine.
Someone that hires first years here [1]:
Resumes
I can only speak from the perspective of a smaller company, but I have several suggestions, some of which may be more applicable if you're going to apply to somewhere with less than 100 employees:
Cover letters
Some companies will care about cover letters -- I personally count it as a negative if you include a cover letter that is obviously templated:
Dear hiring manager, I see you are doing [some random thing copied from our website] and I am myself very passionate about [that thing]...
If you are actually reaching out specifically to join my company because you know someone else that's worked here, or you've used our product and want to work with us for that reason, a cover letter is probably appropriate.
Interviewing
Interview in as many places as possible. There are really only two things you should be focusing on as a first year: Cracking the Code Interview, and not being too nervous.
Seriously. Buy cracking the code interview [3], and spend a week or so solving problems and learning memoization / pointer manipulation / dynamic programming. You'll be SO much better off.
I find that if you think of every interview as "interview practice for when it matters in later years" you will not be so nervous as a first year. Expect to not know the answers to some questions, and just explain what you are thinking to get "part marks." Freezing up looks much worse than going down the wrong path with confidence.
References
[1] I'm CEO of ParseHub -- you can contact me at colin@parsehub.com
[2] I also do optional lectures for CSC207 on Fridays noon-1PM @ BA1200, one of which will be on how to make open source contributions. Feel free to email me if you want to come.
[3] It's available on amazon
You really don't need a good GPA. Here's the big stuff:
Good luck :)
Search algorithms and data structures will be pretty important for the interview, but if you're a bit rusty, there's probably still time to brush up on stuff before the interview. Books like Cracking the Coding Interview or Programming Interviews Exposed really help.
One thing to be careful about on the interview though is to not get too hung up on finding the best possible answer to a question. Yes, coming up with an efficient solution is good (and if you give a less than optimal solution, your interviewer will probably ask you to improve it or add more constraints), but if you cannot come up with any solution, even a naive one, and aren't able to code it (or run out of time because you spent too long trying to find an efficient solution), you probably won't make it to the next round.
In general though, you shouldn't be asked too many questions that require memorization as long as you know the basics (and you should be able to discuss space and time complexity for any solutions you provide). If you have any more questions though, feel free to send me a PM (I work at Amazon).
I would cross-post this to /r/cscareerquestions since that's the subreddit that's more career focused.
My recommendation is to start building a coding portfolio. Specifically set up an account on www.github.com and start posting some of your projects there. Basically how github works is after you set up an account you download the client and create a folder on your computer. Any code or documents you put into that folder and then "push" will appear online. This will allow you to have lots of code samples to show a prospective employer. Another good idea is to build your own website. There are a couple of good web hosts such as www.bluehost.com and www.nearlyfreespeech.net. I personally use www.nearlyfreespeech.net because it's very very cheap. (You pay only for what you use and since your website will primarily be used to show employers it will be a few cents a month.)
Once you have a website and Github you'll also want to start studying more and learning more and then creating personal projects. There are a lot of good places to continue learning programming. You could sign up on www.pluralsight.com for their $29 a month plan and then follow along with courses. Alternatively you could buy books about programming and go through them and upload code samples to Github as you go through them. (A strategy I use is to look at books on www.amazon.com and buy used copies or copies that are 1 edition older than the current edition, it is very realistic to get books for $4 including shipping and handling.) There are also many free resources such as www.codeacademy.com.
Some good books you could buy that will help you once you get job interviews are: Cracking the Coding Interview, Programming Interviews Exposed, and Elements of Programming Interviews. Out of these books "Programming Interviews Exposed" is the best for beginners while the other two are more meant to get you ready to interview at huge companies like Google or Microsoft.
As far as projects to do just pick some ideas and implement them. For me personally I made a website (www.cslearner.com) and created my own blogging software. There is better blogging software out there then the stuff I wrote for myself but it beefs up my portfolio and gives me something to talk about in job interviews. One idea may be to make some sort of CRUD application/website. CRUD stands for CREATE, RETRIEVE, UPDATE, DELETE. Since a lot of what we do as software developers is data manipulation you can create some sort of app or website that creates and manages information. In my case the first CRUD thing I created was a comment section using PHP and MySQL. Literally all it did was allow people to post comments on a website and then a SELECT statement would display all the comments that people had left. You could do a similar project. The cool thing about CRUD is that you can build apps using a huge assortment of technologies. You could create a CRUD app using ASP.NET, server side Java(JSP), PHP and MySQL(the LAMP stack), or a bunch of other technologies.
Also a huge thing is to apply for jobs even if you don't feel very ready. Check out this YouTube video in particular. Employers put down a wish list of things they'd like in a candidate but know in advance they won't get everything they'd like. If you seem like someone that could learn the technologies they may hire you even though you don't know everything yet. Also you'll want to apply to a lot of places. I've had 15 job interviews so far (I'm graduating this next April) and I have no job offers yet. This means I have to apply to even more places. Even though Computer Science is a very high demand field job hunting is still hard and you still need to put out lots of applications.
Sure, I can tell you how I did it.
First step, find companies/jobs you might be interested in. Biospace is a good place to start, but there's lots of other resources. Ask friends in industry, network at conferences, etc. Find a decent recruiting company that can hook you up with companies you've never heard of. Mirus Search was pretty good to me, and found a company/role that ended up giving me an offer. Figure out what you want --- small company or big company, public or private, location, field of work, and so forth. You're aiming for a list of at least a couple dozen companies and roles that look worth putting more work into researching. I stuck 'em all in a spreadsheet. A common error at this point is to miss lots of potentially good small companies, especially small private companies.
Second, research the company and the job. The goal here is to be able to answer the question "Why are you interested in this company" and "Why do you think you're a good fit for this job"? I had a row for each company/job and literally wrote the answers to these questions in a cell of my spreadsheet so I had them immediately on hand. If you can't answer either of those questions after some research, throw that company/job out.
Third, prepare resumes and cover letters for each one. Cover letters should be just a couple of sentences and personalized to each company. Mash them up out of your answers to the previous research. Again, I pasted this into my spreadsheet. Resumes should be short (1 page, maybe a second page for publications) and contain only stuff relevant to the job you're applying for. If you're applying to multiple different kinds of jobs, emphasize/cut different things. For any kind of job involving programming, link to your github/bitbucket/whatever account, assuming you've got something decent up there. Put something decent up there if you don't have it, just drop all your academic work in. I was told after being hired that my code sample from sourceforge is what got me the interview in the first place.
Fourth, send them off. I colored rows of my spreadsheet to keep track of everything. Blue for "sent off", green for "phone interview", red for "rejected". If you get rejected, be nice and say thanks. I got at least three follow-ups from companies about three months later saying that actually, they did have an opening for someone now. Expect a lot of rejections.
Fifth, prep for interviews. Expect technical questions. I got a lot of statistics questions and some programming questions. Prep for them. I spent a couple of months working through books like Cracking the Coding Interview and practicing questions on a whiteboard. I borrowed a whiteboard from work and did them at home on the board out loud. It helped a lot.
I started with ~30 companies of interest, had phone interviews with ~5, on-site interviews with 3, and offers from 2. Good luck! It's a lot of work.
> My strong suit is ruby/rails which I feel like is pretty rare and specific when it comes to most internship positions. (I can count on 1 hand the people who know rails in my school).
First off, trust me, you're not that special.
> So far, I have had interviews with 6 of the companies, and have yet to miss a question, & every time I am able to solve the technical questions relatively quickly (e.g. 45 min coding problem, done in 20 etc.) and then we go on to talk about interests etc. The thing is EVERY single company, after the technical interview (usually the 2nd-3rd phone interview), I am in limbo. Usually from 2-3 weeks, before I get denied.
So far, I'm picking up an attitude problem.
> I have only now started asking for feedback(but of course nobody replies to my emails).
Yeah, don't do that.
> I know they are large companies (vmware, yahoo, dell, etc.) but is it strange to have an interview go well and then just go into the void?
YMMV, but it's entirely possible. However, for myself I'd say 95% of the time, someone gets back to me.
> Also I am not socially inept, yet it always seems as if me and the recruiter get along great, while the technical people give off a cold disconnect (but still nice).
How often is this happening? I'd say there are some technical people who are just like that, but I'd say the majority of the time I see them acting that way in an interview is because it isn't going well.
> However it seems pretty inefficient to apply to jobs with 2000 kids hunting for 2 open positions, so it may be the lottery effect that is killing me.
Maybe, but if you're applying to 100s of jobs, you'd think something would eventually edge out in your favor.
Honestly, to me it sounds like:
There's nothing much you can do about an attitude problem other than hold your tongue and think before you speak on anything that isn't directly related to the technical question at hand. Explain, don't boast about past projects and experiences. Be open to learning.
As for technical questions, the best I can do is prescribe the usual: Cracking the Coding Interview. Good book for getting the basics down for technical interviews. Others will suggest other books after that, but I've had good luck with geeksforgeeks and the interview section of Glassdoor for companies like Google and Yahoo for going above and beyond.
Entry level "PhD-level jobs" outside of academia are few and far between in Neuroscience, but consistency and planning will land you something eventually:
Start here: [Versatile PhD] (http://versatilephd.com/), [SfN Neurojobs] (http://neurojobs.sfn.org/jobs), ["So what are you gonna do with that?" Book] (http://www.amazon.com/What-Are-Going-With-That/dp/0374526214), [A PhD is not enough! Book] (http://www.amazon.com/PhD-Is-Not-Enough-Survival/dp/0465022227).
Also [www.indeed.com] is probably the best job hunting site I have found out there.
My first piece of advice:
Start job hunting and making connections now. "PhD-level jobs" are hard to find and you will have to lower your expectations a bit, especially on your first job. While long term, the degree can be a huge advantage, that is not the case immediately after grad school and you will need to be flexible.
As you explore, you will see some immediate career options are:
Adjuncting with the hope to land a faculty position at a Community College, academic scientist, medical scientist (at a hospital lab), medical devices, teaching high-school, government (NIH, NIMH etc.), science writing (grants, journals, editing etc.), learning code/stat programs (R, Python, SAS, SQL, MATLAB etc.) and taking those quant skills into 'big data', or going the more typical pharma industry route.
Consulting is another popular option, but they typically like people with some industry experience (I've seen on average 10-15 years).
The pay varies wildly on all of these, but if you are looking for the biggest bang for your buck that lines up with your (hopefully still present) passion for Neuroscience...
The pharmaceutical industry would be a great place where a Neuro PhD could thrive. From my colleagues in Neuroscience who eventually got some type of industry job, two truths rang through before they made the transition:
Unfortunately, a post-doc is almost unavoidable based on today's job market. I've seen people taking industry post-docs, which are competitive, but lead to the nice jobs and salaries you believe your degree entitles you to.
However, there are several who took academic post-docs and bought themselves time, experience, and a bloodlust for a good job, which eventually landed them something that was 70k+ in industry and they can work up from there.
Point is, there are options out there. The key is persistence, research, flexibility, and of course: networking.
Of course. I always encourage people to go into CS but I also tell them it’s going to be a tough road, but not an impossible one.
I have two last pieces of advice. The first is to get your first rejection over with. Be ready for it, take it like a champ, learn from it and move on. If you can be immune to rejection the road will become so much easier.
The second is to buy Cracking the Coding Interview by Gayle Laakman McDowell. This is the field guide to getting a career in CS, and easily the most popular book in the field. I give my degree credit for giving me the knowledge to be a software engineer, and this book credit for giving me the skills I needed to get a career in CS.
It has a roadmap that starts a whole YEAR before your interview, which is perfect because you can start that roadmap today, and a year from now when you apply you’ll be ready to crush that interview. Also, Gayle has been a recruiter at Microsoft, Apple and Google, and she has personally conducted hundreds if not thousands of interviews, so I can’t think of anyone better to author a book like this. It’s on sale right now on Amazon for 30$ and will probably be the best 30$ you ever spend:
Cracking the Coding Interview: 189 Programming Questions and Solutions https://www.amazon.com/dp/0984782850/ref=cm_sw_r_cp_api_i_dEX2Cb9N4AE74
As someone who has alot of friends who received the NIS previously and it has been rebranded to SG:D scholarship, I can you tell that almost all of them want to break their bonds if they could afford to.
Therefore my advice to you is to not take up the scholarship unless you need to for a various reasons:
If you really want to take the scholarships in government agencies, there are some perks too:
To be honest, the first 5 years of your career is extremely important because they setup the stage for your career advancement. My (biased) advice if you are serious about tech and developing skills to do awesome work is stay out of public sector, typical MNCs, banks and consultancies because there's just too much wayang than doing the actual work. Most consultancies in Singapore are just sweatshops than doing good work. Go work in tech firms that are known for their engineering processes and build stuff.
And if you want to get into FAANG, it's not that difficult if you put in the effort to prepare for it and try to do as many internship as possible. You should be willing to work through one of the following books
I'm a CS major that got an internship in college that turned into a full time position after college, then I used that to jump into an engineering firm in my field with the stipulation that I'd be a 100% remote employee. 100% remote work is really hard to get, there's jobs out there but they tend to be extremely competitive. I only got this job because my particular specialty (GIS) is pretty tight-knit and I knew some people who knew some people so I had great references. Granted, I still had to prove myself on my own merits in the interview, but having a network definitely helped. Basically I applied to a non-remote job and wrote on the application that I'd only consider remote work, they took a chance on it, and it worked out.
I can't say much on being self taught or finding a job after being self taught but if you know your stuff you'll be competitive regardless of the degree. If you know your programming languages inside and out and you can answer the questions in this book you'll get hired somewhere as long as you're a good fit. Remote might be harder and it involves a bit of luck, but I wouldn't expect getting that for your first programming job. In my experience people tend to want proof that you can be productive at a previous employer before they'll consider letting you work essentially unsupervised.
Salary went from $12/hour as an intern to $45k/year as a full time on-site contractor at state government to $63k in my current position (I graduated Spring 2014). I could make more elsewhere, especially if I lived closer to a city with multiple firms and I was willing to go into the office, but I'm super happy in my current job.
These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".
I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read
For learning your first language: This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++
Top Recommendations:
Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it doesn't start with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.
The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (very helpful), and an interesting war story of how it Saved The Day.
Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions straight from this book so this book can equal getting a job. Put that way, it's ROI is insane.
The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here
Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.
For Intermediates:
Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing good Java and C++.
Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.
The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)
There's a popular book I used that helped me get great job offers, and it was written by someone who interviewed many candidates at Google: Cracking the Coding Interview: 189 Programming Questions and Solutions. The questions are general enough that you could write solutions in whatever language you want.
> Is it just a balance between knowing the language, putting it to use and demonstrating the thought process to get there?
Syntax doesn't have to be perfect, but it should be mostly correct. I will say back when I was doing interviews sometimes they would be typing what I'm writing on the whiteboard into a compiler to try and find errors. And they might say "you have an error on line 3, do you see what it is?"
Another important thing is asking a candidate to design the big picture for something - let's say a phone app. That app has to send/receive data from a server, so what OS and webserver software would you use? And that server needs to store data in a database - what database would you use?
For things like that it's just drawings of boxes and arrows with names of existing tools you would use to build a project. (There's usually never one right answer, but some designs are better than others.)
> what do you look for when you hire someone? Impressive githubs?
I think it's great when someone puts a url to their github profile on their resume. I don't "deep-dive" into it, but I glance ahead of an interview to see what kinds of projects they've worked on, and how some of their recent code commits look. I might ask questions about that project in the interview.
> Also, is the market saturated or is it pretty easy to get a job?
Definitely not saturated. I would recommend staying away from the Bay Area and New York though. I considered job offers there myself, and I have friends who work still work there. But the cost of living has reached ridiculous levels there (e.g. a 2-bedroom home even 45 minutes from work can cost $900k or more).
Big companies like Google, Apple, Amazon, others have branches at other cities around the country. Find those smaller tech cities with more reasonable commute times and housing prices.
Check out page 11 of this report for average Software
Engineer salaries by city in the US, keep in mind it's 3 years old now (and doesn't include cash/stock bonuses which can be significant): 2016 Tech Salary Report.
Sure. I left three years into my Ph.D. program, between my second qualifying paper and quals proper, circa 2012. (I reenrolled for a hot second in 2013 to brush off my QP, turn it into a masters' thesis, and defend.)
I had some research-related disagreements with my advisor which were the actual flashpoint, but it was really more a matter of weighing my options: looking at just what I would have to do, and what I might be missing out on, over the next 3-5 years just to have that X% chance at a tenure-track job. I'm also really big on work-life balance, and though academia has been making some improvements there very recently, in most areas it's still got a long way to go.
On the whole, it worked out pretty well: I went into science communication, took a few different jobs, and now I'm working for one of the leaders in the field. I'd definitely set the groundwork for a non-academic career, though, long before I actually left -- volunteering for non-profits, keeping in touch with industry connections, etc -- and I was also fairly successful at turning my academic background into an advantage rather than an irrelevancy: highlighting the interplay between linguistics and communications, bringing quantitative analysis to a field that doesn't always know what to do with metrics, working for organizations which handle scientific research and academic affairs, etc.
So I'd definitely recommend anyone considering a non-academic career (which, frankly, based on the numbers, should be most of us) think about those same things; when I was first starting off, I found Versatile Ph.D and So What Are You Going To Do With That? to be the most useful, but there could be other resources that have popped up since then. No matter which path you take, though, best wishes making it happen!
Don't let the lucrative offers some people get, deter you from turning down a very solid offer to get some good experience even if it's a little below your compensation expectations. Being unemployed for 3+ months and never getting that 110K + bonus + relocation @ [Insert Big N Name] is a shitty situation compared to some 65-70k at a less expensive city with a smaller company that has some new tech they're trying to scale.
In a year, you'll be surprised how much you can save and if you play your cards right, network, do a great job, you'll be worth a decent amount of money after a year.
Have friends whiteboard you for practice. Get used to writing "nearly" build ready/compile ready code using built in Java language data structures and functions. Especially get used to the Collections library, iterating over two collections in a single pass while checking for duplicates or comparators on each entry.
Buy this book and this book and sign up for LeetCode on a free account.
Honestly, try to enjoy your spare time. Do something logical but fun like playing strategy games or solving puzzles. Go to meet & greets, club meetings, volunteer at a dog shelter. Don't try to "win" this game because out of all the people that "win", some end up having severe issues with stress, time management, "loving" the job/life and life after college is nowhere near as sunshine and rainbows as during.
I wish I could "skip" a lecture and work from home, watch Netflix or go with some friends to go eat food in a town nearby or catch a convention or watch some concert on campus. All the college fun stuff? It's gone. Now it's just work... Well, work and money but still... Not as much fun college stuff. Some fun college stuff, but not as much.
Congrats on landing the interviews. I don't have any specific advice, but perhaps pick up the book "cracking the coding interview" and give it a once over. It offers some good technical and non-technical advice that may be helpful.
You're probably right in saying that you're not going to become an expert by reading books over the next few weeks. I think the best thing you can do is gain as much knowledge (within reason) in the areas you think you are deficient in.
The ideal candidate doesn't necessarily posses all of the skills at day 0, they're going to be judging you from a standpoint of whether or not you have the prerequisites to grow into the position as well. You've already proven to them that you have talent. So, in addition to last minute gap filling, also focus on your soft skills and your ability to demonstrate a growth mindset... it may take you further.
So there's not a lot for us to go on here, but one thing I'll say is that good software development jobs are not easy, even for those completely qualified for them. If he's in the middle-high range salary-wise, then the challenge and expectations are probably all there. Software engineers are not cheap, so while they're treated very well to attract and retain talent, they're also seen as a big investment that had better pay off.
I was laid off from my first full time job and while my coworkers spoke very highly of my skills and the care I took with my work and went out of their way to emphasize how bright my future was in the industry both in person and in my peer reviews, my managers made things very clear: For the level of work they needed me to do, I simply was either not skilled enough or experienced enough to make the cut. It wasn't personal, or a statement about how smart I was, it was a cold and completely practical business decision.
What did I take away from that? Well after I stopped feeling bad for myself I realized that there wasn't anything wrong with me, that I was perfectly capable of cutting it in this industry, that many engineers less smart than me got along just fine, and that I simply needed to up my game and get a new job. It wasn't about getting smarter, it was about getting my shit together and working out of Cracking the Coding Interview daily, learning the hot frameworks that everyone needs engineers for, building a real portfolio and GitHub profile, and being ready to work that hard even after I got a new job. And I got a new job where I was paid over twice as much and so far I love it.
> Most of the jobs out there are temporary or contract (short/long/C2H)
This sounds patently untrue. I'm certain that the vast majority of people in CS have full-time jobs rather than temp or contract.
> Recruiters won't even look at you if you don't have a knowledge in a specific stack (even for entry level)
Also untrue, especially for entry level, where good companies won't care what tech stacks you know.
> Recruiters don't even look at your resume, all they do is keyword search
Partially true. Resumes are often automatically filtered by how many buzzwords they contain. If you can use buzzwords without making your resume seem over the top, do it.
> I've been told that I shouldn't even apply for SDE jobs because I'm a "tester" and how I probably don't know of any CS fundamentals (because my degree is in CompE, not CS)
Bullshit. Any company worth working for - most companies - will not take that attitude. They might be skeptical, but they would never suggest you don't apply.
> Interviewers don't seem to have interest in interviewing
It doesn't matter; it's their job. And most interviewers are competent at interviewing, so nothing to worry about, regardless of how "interested" they are. (Though an "interested" interviewer, while rare, is a pleasure!)
> Companies have absurd hiring standards (they are all looking for a unicorn for 50-60k/yr pay, through contract)
Depends on the company.
> * Entry level jobs require years of PROFESSIONAL experience in a specific technology
Entirely false.
---
The current job market is fine, prosperous even. Craft a strong resume, post it in the resume advice thread, and send it out to companies. Apply to a bunch of companies, account for a 5-15% response rate (higher if you're more skilled).
Getting interviews will be the easy part; to pass them, you'll need to pass difficult algorithms questions. Books like Cracking the Coding Interview and Elements of Programming Interviews are essential reads; then go on a website like LeetCode and grind away at problems until you can solve easies in 20 minutes or less, mediums in 30 minutes or less, and hards in 60-120 minutes. I'd say a 3:9:1 ratio of easy:medium:hard would be a good ratio to go with, and do as many problems as possible until you're comfortable with where you are (for me, that was about 120 problems). The premium subscription is well worth it for problems tailored to certain companies.
Edit: spelling
Everyone sucks at something at one point, but with practice you'll definitely be able to get better! I highly recommend writing over typing out the solution when you practice. Also, 90% should be dedicated to planning out path to the solution and 10% for writing/typing the solution out. Sooner or later, things should start clicking and making sense. Here's a list of resources that helped me get all the way to the Google on-site interview (Didn't get an offer but it was an amazing learning experience)
Data Structure And Algorithm 1: http://www.youtube.com/playlist?list=PLLH73N9cB21W1TZ6zz1dLkyIm50HylGyg
Interviewcake: https://www.interviewcake.com/
Khan Academy: https://www.khanacademy.org/computing/computer-science/algorithms
Leetcode: https://leetcode.com/
Cracking the Coding Interview: http://www.amazon.com/gp/aw/d/0984782850/ref=pd_aw_sbs_14_1?ie=UTF8&amp;dpID=51F6Lwyq5JL&amp;dpSrc=sims&amp;preST=_AC_UL390_SR390%2C390_&amp;refRID=1PE4XEBQDDHEF4T1ZA9K
Algorithm Design Manual: http://www8.cs.umu.se/kurser/TDBAfl/VT06/algorithms/BOOK/BOOK/BOOK.HTM
Make sure to practice everyday and have a strong understanding of the concepts. Network, contribute to open source projects, and keep on learning!
OK so this is a really simple thing, but if you plan on teaching with PowerPoints behind you, I really recommend this book called "slide:ology: The Art and Science of Creating Great Presentations."
As the title suggests, it's a handbook of visual guides for creating better PowerPoint presentations. It's mostly visual hierarchy and other Gestalt basics, but I found it super useful for making presentations that were actually useful for the students as opposed to just being there. It was recommended to me about eight years ago by my mentor, and I've been following what it says ever since.
I had an internship with Amazon during my Sophomore to Junior summer. I also received offers from Microsoft and Google to intern this upcoming summer (Junior to Senior), but instead took an offer from Fog Creek Software. I have friends that have interned or are full time at Microsoft, Google, and Amazon, all from Rutgers University.
My advice is to anyone looking to get one of these positions is:
This may seem like a lot because well frankly it is. But if you actually enjoy programming and computer science, than this is pretty straight forward and easy. And finally, don't get discouraged. Just because you didn't make it into one of these companies the first time you apply, doesn't mean you'll never make it. Some people don't interview well(it is its own skill, hence #4), some people just can't build out a good resume(seriously use the template that I provided and read cracking the coding interview from front to back), and other people just aren't ready(you really need to program a lot). But that doesn't mean that you will never make it with them, just give it another year, identify your weakness, and work on it.
>I teach myself about 30 minutes to 1 hour of coding per day
you need to spend way more time than this. you're done with your dissertation - you should be spending like 8 hours a day on it.
1 year of full-time study is absolutely plenty of time to be proficient enough to land a job as a quant at a hedgefund.
i never went out for those jobs but the easiest way to figure out what you need to know in order to land a job is to reach out to someone that works at a hedgefund and just ask them. here's a list of the top quantitative hedge funds:
http://www.streetofwalls.com/finance-training-courses/quantitative-hedge-fund-training/quant-firms/
look up people that work there (or have worked there) on linkedin and message them. be polite and brief and succinct. eventually someone will talk to you and give you a good idea of what you need to know.
if you want to build models, off of the top of my head (from what i remember) you'll need to know a lot of undergrad data structure stuff (basically all of CLRS), SDEs (oksendal), optimization (boyd, bertsekas), basic stats (casella). all of this is pretty straightforward - read the books and the do the problems. the harder part is convincing someone you can come up with a strategy that's novel.
if you want to implement models, you need the data structures and optimization but you also need to pretty god damn good at very tight C++ (maybe ocaml if you go to jane street).
in general wilmott is a better place to ask https://forum.wilmott.com/
also wouldn't hurt to read this https://www.amazon.com/Heard-Street-Quantitative-Questions-Interviews/dp/0994103867
though it's mostly for analysts.
Cracking the Coding Interview is a bestseller on Amazon and is extremely helpful. I've read through it on flights out to interviews, and it puts me in a great frame of mind.
If anything, I get more out of the guide for how to approach interview questions more so than the meat of how certain problems or algorithms work themselves.
Make sure you take the science of approaching your answering process for the questions just as seriously and systematically as the mathematics/algorithms involved. Cracking the Coding Interview does a good job of summarizing the approach you should take, and gives a series of questions to practice answering in the manner provided (all sorts of common algorithms and data structures used in interviews are contained in the book, giving you great practice at applying these types of things). You should buy that book right now, and buy a whiteboard and an erasable marker to practice answering some of the questions on. Well well well worth it.
Most of all, have fun! In a certain way, the more fun you have, the better your impression will be on your interviewers.
Also, I wore a suit once to an interview, and I felt like a moron.
Edit: some quick re-wording.
congrats bro.
but word of advice on the programming interviews. literally all they care about is how well you answer the questions. as someone whose been on both sides of the table - many of the people doing the ebaluating are neckbeards so maybe this shit has a subconscious effect but youre evaluated on how well you answer the questions check out: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X.
fwiw: i'm talking about the elite places like google, facebook, etc. maybe lower tier places care about confidence, dress, etc. for programmers but the top don't.
but everyone else in life does so it's def something still hella worth doing.
congrats on your progress, keep it up.
32 here, I was a high school teacher for 6 years. I learned quickly that it was not what I wanted to do long term. I started dabbling in programming and quickly fell in love with it. This past year I attended a year-long program (7 months 9-5 classroom, 5 months internship) for full stack web development. I had a well-paying position at a top tech company lined up before completing my program and am very happy with my career change.
My best advice would be to go for it! There is a huge demand for devs and while I understand it is easy to look at your age as a boon many employers will see it as a positive attribute.
Tips:
Everybody's learning style is different. Here are some books I believe to be essential for any novice or pro.
Programming For Dummies. It has a stupid title, but it is well reviewed for good reasons. I read through this beast in three weeks. There is no coding involved, as it is mostly theory, but it covers most of the bases of computer science and programming logic. Looking back, much of it confused me at first read, but the big ideas are all presented here. Reading this during the summer before first semester was a huge boost for me. All of the major computer languages are discussed in the book.
Cracking the Coding Interview. A book meant for veterans trying to get into highly demanding top tech companies, the book is a great introduction to programming paradigms. There are numerous examples of problems in each chapter with answers at the back of the book. The whole thing is in Java, with a short chapter on C++.
Design Patterns. As you learn more about object oriented programming, the concept of design is introduced. This book is the holy grail of software architecture and recommended by many. I would hold off acquiring it until you are certain that CS is where you want to be, it is quite technical. This book follows C++, although a Java version of the patterns exists on Github.com
A non-technical book just for fun:
The Innovators is essentially the story of computer science and how it got to present day. It follows the characters, human beings, that were involved each step of the way right up until modern day. Your professors will be impressed that you know who Alan Turing, Grace Hopper, and Charles Babbage were. If only I had been at THE MOTHER OF ALL DEMOS! The actual stories of Microsoft, Apple, The internet, the PC, video games, the space program, etc. On Quiz Up, a trivia app, every other question in the CS category involves names from this book. Read it just to be a real geek that knows where this stuff came from, and the drama/tension that led to innovation. The book is actually really funny at times.
there is just no way to go over every data structure/algorithm in a fashion where they are useful to you in a white board situation in one semester.
from my experience, learning how to implement them from scratch is great and all, but practical use of data structure outweighs any shitty homework that requires you to memorize how its done in the book. the class (again my experience) gloats over all these things that introduces you to what is important, but then you need to spend hundreds of hours outside the class to look at a problem and know what you need to use in order to grab the best run time, minimizes time/space complexity, and their tradeoffs. I highly recommend that book and http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/ref=sr_1_1?ie=UTF8&amp;qid=1449310024&amp;sr=8-1&amp;keywords=cracking+the+coding+interview+6th+edition if you are looking to succeed in getting internships. Sites like hackerrank, leetcode, lintcode are all great places to practice. hop over to /r/cscareerquestions for more people in the same boat as you
if you wanna go more in depth regarding 146 at sjsu, feel free to PM me your email and we'll talk more
good luck
/rant Something that concerns me about this sub is how up and coming Software Engineers ask for handouts of information that they can easily acquire by googling and researching. Now I'm going to reward this behavior by pointing you in the right direction.
/endRant
First off: The FAQ https://www.reddit.com/r/cscareerquestions/wiki/index
1.) Resume: https://www.careercup.com/resume
Using Latex: https://www.overleaf.com/gallery/tagged/cv (A lot of people love the Deedy Resume template - note that if you choose to use Latex then your output will be pdf which may not be processed well by automated resume processors)
Using Word: https://templates.office.com/en-us/Resumes-and-Cover-Letters
Notes: White space is valuable. Target your resume to the position(s) (but don't lie). Write it, then proofread it, then edit it, and repeat (grammar/poor wording looks terrible). The easiest way to maintain a good resume is to do just that - periodically (every ~6mo) open it up and add new experience (ignore the proofreading if you want.. just write anything new down).
2.) https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X and https://leetcode.com/
Notes: East Coast/Tier 2 companies typically don't ask as many (or as difficult) programming questions so focus on behavioral and domain knowledge. For the technical questions practice on an actual whiteboard with a partner while explaining your thought process out loud. Communication skills are probably more important than technical skills but this sub doesn't bring that up as much.
3.) See 2.
Final Notes: Maintain & update your LinkedIn. Prepare for your job search to be a grind (mentally). Do lots of research. Try and get referrals to increase the likelihood that you get an interview. There's no magic advice that will enable you to land a BigN job without hard work (though some will achieve it more easily than others - many people interview at Google 2-3+ times before they land a job there). Reading "Clean Code", "The Pragmatic Programmer", "How to Win Friends and Influence People", and at least owning a copy of "Code Complete" are often suggested here as ways to improve your abilities as an SWE.
Grinding problems, haha! I can't answer your more specific questions, but I'll distill the resources that I have found to be most useful. The types of questions will depend on wherever you are applying and you might not even get technical questions at some places.
I would start with CTCI then, if you feel like it, move on to Elements of Programming Interviews which (I think) has more difficult problems. All the while just grind problems on leetcode. Also, make sure to practice answering these questions without coding in an IDE. I have just been using a notebook and pencil. A whiteboard works too. Before beginning any sort of coding, you should have the general algorithm down that you will use to solve the problem.
It also would be helpful to know how to implement / be familiar with the following:
Data Structures
Algorithms
OOP (define these)
Other stuff:
Finally, know Big-O complexity Big-O Cheatsheet! I'm sure there is a lot more but this should be a great start.
Good luck! :)
Mechanical Keyboards: High quality keyboards with tactile feedback. They have a real impact on your typing speed, and also make programming less boring. They are very commonly used by programmers. Mechanical keyboards have different "switches" that make different tactile sounds. "Blue Switches" are considered the most popular. Here are some examples: https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=mechanical+keyboard.
Gaming Mouse: Same usage as keyboards, but not as useful. Its mostly just nice to have.
Textbooks: In computer science, there are one or two textbooks per subfield that are considered to be "Bibles" of the subfield because of their importance. If your bf just started cs, he won't have any interests in any subfield. However, the subfield of algorithms is more or less all encompassing. More crucially, knowledge of algorithms is the most important (and arguably only) thing you need to know to get a job. If you want to work at a top CS company like Facebook or Google, you need to know your algorithms very well in order to pass the interviews. There are two books I can recommend for this:
https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/ref=sr_1_1?ie=UTF8&amp;qid=1503472210&amp;sr=8-1&amp;keywords=algorithms
and
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_5?ie=UTF8&amp;qid=1503472210&amp;sr=8-5&amp;keywords=algorithms
These are the most prolific algorithms books (imo). Another important book is "Cracking the Coding Interview": https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1503471832&amp;sr=1-1&amp;keywords=how+to+crack+the+coding+interview
This is the "Bible" textbook for passing tech interviews. Every computer science student I know at school has at least skimmed through this book once.
Personally, if I were starting in CS, I would appreciate either the mechanical keyboard or the "Cracking the Coding Interview" textbook the most. Good luck!
You'll see this one recommended a lot :
How to Win Friends and Influence People by Dale Carnegie. It's a classic and for good reason. I always find myself going back to it. In fact there are quite a few books I'd argue that build upon it
Another very good one is by Leil Lowndes called
How to Talk to Anyone. It gives a lot of useful tips on how to make conversations exciting and vibrant.
Also, John Sonmez's books are really good too because they focus on communication skills from a developers point of view. I really liked these because it also teaches how to develop your career and start your own brand:
These are just off the top of my head, I'm sure there are plenty more. Hope that helped!
Never ever ever ever ever ever ever EVER ever ever EVER tell a company "I'm not suited for the job". Have some balls! Sure, you messed up, but hold your head high. Everyone messes up in their life at interviews; I know I have many times. Confidence can go a long way in promoting your personal image.
FizzBuzz is probably the most simple, commonly used interview question out there to see if a programmer can actually program. It doesn't get much simpler than that. I hate to break it to you, but Modulus is one of the most basic foundation concepts you need to know, and it's definitely taught in any entry level OOP book or Uni program. I dare you to show me a "Learn programming in Java/C++/Any other OO Language" book that doesn't cover it in the first few chapters.
You are over-thinking the solution here: it's meant to show how well a candidate can easily write clean, short code. There's no reason for you to abstract the functionality of finding whether a number is evenly divisible into a method - that's over complication in design, and it's a red flag for employers. I think you may have believed that isolating specific mathematic processes into methods seemed like a good idea to show off that you know object oriented principles. You're on the right track. However, if the process you're writing can be completed in a single line of code, let alone under 10 characters, you're just adding more dependencies and complication to a simple block of code. I would suggest this as a more clean solution to fizzbuzz (in Java):
for (int x=0; x<=100; x++) {
if(x%3==0 && x%5==0)
System.out.println("FizzBuzz");
else if(x%3==0)
System.out.println("Fizz");
else if(x%5==0)
System.out.println("Buzz");
else
System.out.println(x);
}
I personally struggled with a decent amount of interviews until I started to actually prepare for the interview. I recommend finding time to work through these two books; they'll help prepare you for what kind of questions to expect.
http://www.amazon.com/Programming-Interviews-Exposed-Secrets-Landing/dp/1118261364/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1377704276&amp;sr=1-1&amp;keywords=programming+interviews+exposed
http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1377704294&amp;sr=1-1&amp;keywords=cracking+the+coding+interview
And most important of all: NEVER get down on yourself! Every tough problem or terrible interview you have is just a learning experience. Never tell yourself you aren't good enough, or just outright give up. You aren't allowed. Stick with it, and prepare months in advance, like homework. You don't have to be that person dedicating every waking moment of their life to programming, but if you're serious about keeping your interview skills sharp, you need to dedicate some time to learning the questions. Good luck!
EDIT: Grammar, etc.
I've been pretty fortunate that I've been able to get interviews and job offers pretty easily within the game industry as a programmer.
I wouldn't consider myself a master programmer by any stretch and definitely don't spend as much time practicing on Code-Kata, etc as the poster. (The majority of my spare time is spent on unpaid overtime - if I can get that under control, then maybe I can apply some time to personal projects).
The 3 keys that I have found to make it easier to land the interview and the job is:
I can't really say whether the hiring process is broken or not, much of what they do does weed out people that really don't belong. But if you don't know the game or don't play the game, you may get swept to the side along with them.
I hope this helps - good luck!
There is also http://www.reddit.com/r/EmploymentAssistance/ but the top post is currently "Looks like this reddit fizzled and died." You could also try the programming or coding subreddits for advice particular to CS interviews.
It's good that you're already practicing up on a whiteboard. I think practice and knowing how to prepare are key for interviews (general statement is general). You should consider trying to set up practice interviews if you know anyone in the field with more interview experience. Or you could try explaining CS concepts and solutions to your friends. Perhaps you could get used to being at ease in an interview by practicing with someone you know.
There are various books you could buy, or perhaps find in a library, on interview help and using whiteboards in particular. I think I've seen this book recommended here before but I can't remember the context.
Good luck!
Current industry professional and interviewer. Just got out of one in fact.
Certs won't do much for you. I know some interviewers who actually look down on people who get certs. I personally don't care at all if you see them. Chances are, I don't know enough about the process to get that specific certification to give it proper weight. Did it take a few hours of training? Several weeks? Years of experience? I'm not going to look that up when I have work to do along with better things to grill you on for your resume.
Speaking of those better things: Projects and internships. Projects done OUT OF ASSIGNED CLASS WORK are always more valuable than just showing off that you can do assignments. Everyone will also push the importance of internships. They're great. They show that you know how to work on a team in complicated systems with a different set of demands and people.
School in NY? I'm an RPI grad. Transferred in from HVCC. Big roadblock you won't hear about is how big company interviewers typically completely disregard your CC experience. They didn't care about my 4.0 there.
"Okay, but what's your GPA here?"
In a field/school where many people get internships after their sophomore year, it puts us at a big disadvantage, especially for the schools who do job fairs during your first semester. You won't have a GPA you can tout there. Several online applications require your 4 year university GPA. Doing a 2-3 program will slightly alleviate the issue...but now you graduate a year later. There's a myriad of hidden problems no one will tell you about because they're too busy pushing positives. Also, it's more complicated than just "being a sophomore" again. Feel free to PM me, I wrestled way too much with my administration while I was there.
You'll have some challenges ahead. But two things will help your resume immensely:
I remember reading a study where researchers found that people who were smart generally felt that they were dumb and people who were dumb, generally overestimated their intelligence. So I thought that's something you should maybe think about since you mentioned that you think you're not a smart guy. With that said, I think you should go for it for sure and I think that with enough preparation and planning, you can increase your chances of getting an offer from Google. And if you don't get it the first time, you should try again. I've read that some got in on the 2nd or 3rd try.
Your plan looks sound. I would recommend focusing on a specific language though instead of focusing on functional programming, C, JavaScript (unless you plan on doing front-end work, I don't think JavaScript would be useful in this situation). Java is one of the widely used languages at Google.
Buy Cracking the Coding Interview. It's such a useful book. The material it goes over isn't very in-depth, so don't expect to use it as a way to learn about various algorithms and computer science concepts. Rather, solve the problems in the book. The problems are of varying levels, some easy while some may really challenge you. You will feel really dumb trying to solve some of these problems, but spend as much time as necessary and try to come up with a solution that you then refine. You may not come up with the optimal decision on the first try.
Solve problems on CareerCup. From what I understand, some of the questions on there are actual Google interview questions.
Make sure you have a thorough understanding and know how to implement basic data structures such as Linked Lists Hashtables, Trees, Binary Trees, N-ary trees, Graphs and Di-Graphs. Know how to perform breadth-first search, depth-first search on both trees and graphs. Know post-order, pre-order and in-order tree traversal. There's more but that's what I remember off the top of my head.
The last interview of the on-site interview will be about system design and it requires a more general architecture knowledge (HTTP, SSL, compression, network latency, disk latency, etc...).
Search for blogposts of people who've interviewed at Google. There are like a dozen or more of them. They give you a good overview of the process and some even contain questions.
Best of luck!
Edit: I forgot to mention the Big-O notation. It's important and every interviewer will ask you for the time complexity of the algorithm you just implemented.
Usually the CTCI referred to here is Cracking The Coding Interview. It´s probably the best known interview preparation book. You can easily find the PDF online but I would recommend buying it because it´s like an algorithms/datastructures bible and it will make it easier to take notes (it´s also a tiny investment compared to the potential pay-off). I think if you can comfortably do all of the questions (incl. moderate+hard) then you will be close to ready for Google. It depends from person to person. But I would recommend doing some LeetCode Google flagged questions afterwards to gauge how well prepared you are. For some people CTCI alone is enough while for others an additional 50-100 LeetCode are sufficient (some skip to LeetCode directly and do 150-300 questions on there). Note that CTCI is an alternative to EPI (Elements of Programming Interviews). Doing both would be a bit redundant. From what I gather EPI has more challenging problems so might prepare you better for Google, but if you´re very rusty then CTCI might be an easier start.
There´s plenty of resources available on this; I suggest checking out the relevant FAQs in the sidebar of this subreddit.
Don't. Do not under any circumstances say you would work for them over all other choices. There's a few reasons for this.
This isn't necessarily done on purpose, but I've seen it happen first hand too many times to count. It's almost like the "bad-boy" dilemma in dating- the guys who seem farthest away to reach are usually the most in-demand.
Instead, communicate your passion through the knowledge you have about their company. Talk about their things they've done you admire, ask them questions about how the framework they use and why (Do your research, don't say anything obvious!). If there are company github projects, read through them all. Try to get an idea of what they might be working on next and why.
In a phone interview your goal is not to get the job, just to get to the next interview. Give them what they need without sending across any red-flags. Really look closely at the job description and make sure you check each criteria. Have prepared answers for questions like: "Tell me about yourself," "Where do you see yourself in 5 years," etc.
I'd also recommend buying "Cracking the Coding Interview" if you have some time to prepare: https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
It's extremely helpful.
I see that you've already taken Colt Steele's courses on Udemy. I'm guessing you can work on the front as well as the back end and work with APIs. At this point, a bootcamp is a better option imo. I'm not from the US, so I can't recommend you any. I'm assuming that you're familiar with the basics and you should definitely look into learning frameworks now. It can get overwhelming to select one amongst the plethora of available options, so pick one of the popular ones, you can't go wrong with it. ReactJS for the front end or NodeJS for the back end would be great imo (especially since you're familiar with JavaScript at this point). Udemy courses are cheap and if you follow along, you'd have multiple projects under your belt, that should definitely help you in getting a job. If time permits, you should learn auxiliary subjects, especially Algorithms and Data Structures. That would really help you in your interviews. Eventually, get that Gayle Laakmann book. So, even though you have a long road ahead of you, prioritize and focus on the parts that can get you a job in the shortest time. Maybe work on your front end skills first, get a job and work through the back end or theoretical stuff later. I'm sure you can do it if you keep at it! Good luck with everything 👍
When I went, there were always a few companies where the representatives had a badge that said "I hire frosh." My advice would be to check it out to get a feel for what's going on. I wouldn't expect a whole lot, but at the very least it'll be good prep for the frosh/soph fair.
A word of advice - when I went to the fall career fair during my freshman year, I actually found it quite stressful. I ran into a couple of recruiters who came off as condescending, and the overall atmosphere seemed pretty stressful (gotta hustle for that internship). It was a bit of a contrast from the dorms and even office hours, where people are generally happy to lend a helping hand.
When I took CS 103 later, Keith Schwarz actually had a fairly negative view of the effect/messaging of the fall career fair towards freshmen. He felt that the competitiveness and the inevitable rejection of certain internships would not really provide a positive view of one's learning. Learning is a long process, and getting rejected from a dream CS internship might lead some to feel that their classes were for nothing. It's ultimately up to you whether you want to view your CS education as more of a pipeline into a good job, or an opportunity to intellectually explore (you can of course balance both, and there is no right way to do it).
So if you wanna hustle for an internship, then by all means go for it. However, keep in mind that the career fair is only one way to get your foot in the door. If you wanna be a real snek, network around and find people who can give you referrals for companies you're interested in. Also code up a project or two and put it on GitHub (with a link on your resume). Most importantly, read the good book.
My first year in the Master's program I took a seminar in Culture and Economy. We had a pretty good stack of books we read through out the semester. I highly recommend these.
Stephen Gudeman- The Anthropology of Economy
Wilk and Cligget- Economies and Cultures: Foundations of Economic Anthropology 2nd Ed
Marshall Sahlins- Stone Age Economics
Karen Ho- Liquidated: An Ethnography of Wall Street
Colloredo-Mansfeld- The Native Leisure CLass: Consumption and Cultural Creativity in the Andes
Nancy Munn- The Fame of Gawa: A Symbolic Study of Value Transformation in a Massim Society
Michael T. Taussig- The Devil and Commodity Fetishism in South America
Taussig is a great writer. Wilk and Cligget's book is good for basic foundations Economic Anthropology. Karen Ho's book is also a great institutional ethnography as well. Happy Reading!
>Do you find that the standard system of technical interviews (data structures & algorithms) is an effective way of assessing candidates? Why or why not?
When I was an undergraduate, the dominant interview approach involved brainteasers like "why are manhole covers round?" Initially, these were reliable indicators of future success. But after every other company started copying Microsoft mindlessly and asking the same set of questions, the approach quickly became less effective. People optimized for interview performance with books like How Would You Move Mount Fuji? and How to Ace the Brainteaser Interview.
Brainteasers were mostly phased out after Google introduced the current approach involving data structures and algorithms. Initially, these were reliable indicators of future success. But after every other company started copying Google mindlessly and asking the same set of questions, the approach quickly became less effective. People optimized for interview performance with books like Cracking the Coding Interview and Elements of Programming Interviews.
There are certainly parallels between what happened then and what's happening now. The difference today is that people have taken things to another level with platforms like Pramp and bootcamps like Interview Kickstart. New businesses keep popping up that focus on cracking the current system, and I don't think that bodes well for its future.
But what can we do about it? The fact is that any interviewing process can be cracked once its format becomes popular and standardized. Let's say that some major company like Facebook introduces a new standard that involves candidates giving two-hour presentations about significant personal projects and then answering tough questions from a committee. You may be familiar with this format if you've ever applied for a research position. I actually think this would be great for 2-3 years until everyone starts doing it and Gayle Laakmann McDowell or whoever publishes "Cracking the Personal Project Presentation." And then a bunch of new businesses will pop up to sell you slide templates, professional reviews, etc.
In short, I'm not a big fan of the current system (EDIT: because it's been "cracked") but I honestly don't know of a better one (EDIT: that won't suffer the same fate).
I'm finishing up my BS in Computer Science at The University of Texas at Austin. I've completed 3 internships at Microsoft (Office, Windows, and Visual Studio) in the summers of '10, '11, and '12, and I will be returning to the Visual Studio group in January as a full time employee.
I nonchalantly gave my resume to someone at the Microsoft booth at a job fair for science majors at my school. Got a call and had a short interview at the UT campus. The questions weren't very technical or difficult: "how do you test software?" and "write a function to shuffle a deck of cards." Long story short, I was invited to Redmond to continue the interview process (they do this for all interns). I had 4 different 50-minute interviews in Redmond. The questions were more difficult, but nothing too terrible. After all, these questions were intended for interns.
I wanted to get some experience with a different team for the summer of '11, so I re-applied and re-interviewed. I had 4 more interviews with folks on the Windows team. I got similar questions. I think it's important to say that you don't have to blow all of your interviews out of the park; I certainly didn't. I was very nervous during the first one and didn't connect with the interviewer. I screwed up writing a factorial function, if you can believe that.
I prepared for the second round of interviews by reading this book, and I found it to be fairly helpful. Although it can't possibly have every interview question, it prepares you for the types of questions you can be asked.
After my internship with Windows, I wanted to return to Microsoft, but on the East Coast, where Microsoft has some Visual Studio development. I did a phone interview and was offered the position based on positive feedback from former interviewers.
The link you gave is for research interns, which as far as I know are for Ph.D students. If you're interested in a non-research internship, you should visit http://careers.microsoft.com/careers/en/us/internships.aspx.
Hope that helps! Cheers.
I've found Cracking the coding interview to be an excellent resource. That book together with online sources helped me get several internship offers. The book won't spoon feed you from the ground up - but will cover all the topics necessary. The interview questions are all about PRACTICE! Spend a lot of time thinking about how to solve programming questions, the complexity of your solution, and ways to improve your solution.
After a while, you should reach a point where you start recognizing patterns when you see a new question. There are often existing data structures (that you must know backwards - like hash tables) that you can use to solve a given problem - try and think of which one fits the question nicely.
Finally, read this. Good luck!
Here's my list of the classics:
General Computing
Computer Science
Software Development
Case Studies
Employment
Language-Specific
C
Python
C#
C++
Java
Linux Shell Scripts
Web Development
Ruby and Rails
Assembly
Sorry, got busy for the holidays.
It seems like you're falling victim to the same cycle that a lot of us have. You can't get a job without experience, but you can't get experience without a job. It doesn't make a ton of sense.
Google/Amazon/Uber rely heavily on data structure and algorithm knowledge in their interviews. I have the first edition of this book for JS data structures. I went through it and coded all of them out. It helps to understand them.
In my master's program, I had a class on algorithm design that in hindsight, I wish I had paid more attention to. We used this book but I think there are better ones available now.
I have this book as a general interview reference which may summarize the above two suggestions better for the interviews.
Time/space complexity was also helpful information to know. Big O notation is a useful thing to have in your arsenal to begin with.
These are just suggestions for notorious interviews for infamous tech companies. Not every company is going to grill you about these concepts. But having been someone who has failed several intense programming interviews, and now conducts them for our company, I think all of this information is applicable, and a true tech company likely won't grill you about job experience if you can apply these concepts on a whiteboard without thinking about it.
Data Science is a great spot to be in right now. Spend a little time every day applying some programming principles to big datasets. It should be enough to land you a job at a solid company if even at an entry-level position.
Also, get out of AngularJS and learn Angular 2+. React/React Native also seem to be in high demand. They have become commonplace at most large companies trying to stay on the edge of technology for their users.
>would you say this is critical knowledge to be a good web developer?
Not really. Most people are out there solving business needs. Even if you're working for a web app, the majority of it is taking a business problem and building and designing a solution around it in whatever way makes the most sense. How good the architecture is, is really not super important because you're likely not going to be supporting enough customers that throwing more hardware at it can't solve. Knowing how things work and how to build maintainable software, is more important than knowing obscure CS fundamentals inside and out.
But what you described sounds more like something from Amazon, Apple, FB, MS, Google, or other large tech company. They want true blue software engineers, not someone who can make them a pretty landing page. I know from first hand experience that FB interviews for JS developers hit heavily on memory managment and Amazon doesn't give a shit what language you program in. Cracking the Coding Interview is a good way to study for all of those (but you're not going to memorize that book in the time you have).
Here's my two cents.
Other things to consider: I'm a girl, minority, and have a mental "disability" (diagnosed anxiety and depression). These all come into play when you do apply for tech jobs in some ways.
I was a MCD Biology major last year but switched when UCSF Admissions told me that getting into med school is an honest crapshoot. I literally switched to CE during the summer. It was a pain to switch but it's working out.
Right now I'm taking 29 units, 15 units here and 14 units at another school. The only class I've taken so far that is CS related is CMPS 12A/L in the summer at a CC where I aced it and the professor really liked me. And CMPS 12A/L isn't even part of the CE program.
You know what you should do today? Make a resume. Right now. Already have one? Apply to internships. Right now. Making a LinkedIn also helps so much.
I applied from August - November to 100 companies and got denied to 20 already (Uber, Asana, TwoSigma, Pinterest, some video game companies) but already have 5 offers on the line with offers from $25-40 an hour with other frills like free food and corporate housing. This last end of the quarter I've been getting scheduled for phone interviews, technical tests, on-sites.
This is with one CS class too. Most companies don't look at transcripts or references and all they look for is project work (which I don't have either) and talent. I studied my ass off with this book and have learned so much on how to tackle interviews.
SOE literally thinks I'm silly, but I probably have done more in terms of networking than some Senior CS major. I also still have a pre-med mentality which helps.
TLDR What I'm saying is that even if you don't have a lot on your belt, people see talent easily. Be persistent and optimistic.
I have a personal list of applications if you want them, PM me. Will not disclose to everyone though because this place is already competitive enough.
Saw a similar thread yesterday and I responded with this:
Just thought I'd give some advice as I have learned programming over the last year and was hired as a developer four months after starting my journey.
I was pretty overwhelmed with all the different options there are out there, however I'd recommend to sit down and first think about how you like to learn. Some people like to read, others like to watch or listen. This will help you filter out the methods that may not work for you.
I started with a programming school called launch school. It is $200 USD per month however during my salary negotiation I got my employer to take care of this cost as I can only do the program part time and it will likely take me another year of learning to complete.
I would suggest picking a program or method of learning and sticking to it. Immerse yourself with coding and push yourself through when you get bored or want to give up and try another program or method of learning. If you are like me and have trouble staying on track, take a break and come back to it.
Finally, I just started to read a book called the complete software developers career guide and I wish I read it when I was deciding on how to start learning.
The Complete Software Developer's Career Guide: How to Learn Your Next Programming Language, Ace Your Programming Interview, and Land The Coding Job Of Your Dreams https://www.amazon.ca/dp/B073X6GNJ1/ref=cm_sw_r_cp_apa_i_NisBDbMBN03E1
If someone wants to discuss my journey, let me know! I now work on two very successful SaaS applications and there are only 3 developers where I am employed. It has been a life changing journey from last July!
Kinda late but
Software Engineer, been working 1year ~ 3 months now. I have no Github account and no personal projects on my resume, but I did list relevant class&internship projects, and my resume is also pretty beefed with work experience and extracurriculars, as well as honor societies, even though my GPA isnt super stellar.
This book -> http://www.amazon.com/Cracking-Coding-Interview-Fourth-Edition/dp/145157827X did me wonders during the interview process.
Glassdoor.com is an incredible asset.
Microsoft has a ton of resources available for helping people to do well in interviews(they want you to succeed!), so search their website for info.
This is more for dev but this book http://www.amazon.ca/Programming-Interviews-Exposed-Secrets-Landing/dp/047012167X is really good and they will often pull questions right from it.
You're probably a cs student so I would go over your notes for whatever algorithms/data structures course you've had. Just because you are interviewing for a test position doesn't mean they won't ask you dev or pm questions.
They won't ask you any of those "How do you move mount fiji" questions so don't bother/worry about those.
Most of all though, relax. You'll probably ace it and Microsoft internships are a lot of fun. Good luck!
Practical interviews are pretty much the norm across software development.
Generally they open with some standard interview questions, then move into programming problems.
These problems (ideally) are designed to show the interviewer how you think and solve problems,
while demonstrating some familiarity with the language you are using.
For example, I might give you this function stub:
String ReverseString(String InString)
{
}
and ask you to write the function body that reverses the contents of InString and returns it as a new string.
After you are done writing the function, I might ask you to determine the time and space complexity of your solution.
If your solution is not optimal in space or time, I might ask you leading questions about how we might improve either
the time complexity or space complexity, and see if you can iterate and improve your solution.
If it was optimal, I'd probably move on to something tougher.
The whole time, I'm most interested in how you think and I'm not focused on your end result as much. So don't take the paper away and quietly formulate a solution and pass it to me. It should be fairly interactive, and you should narrate your thought process if you feel comfortable doing so.
If you want more example of the problems you will have to solve, a generic reference text is:
http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850?ie=UTF8&amp;*Version*=1&amp;*entries*=0
Keep in mind though, since its a Unity interview, its likely they will ask game specific questions, basic linear algebra is going to help you out a lot here (dot, cross, basic reasoning about vectors, normals, etc).
Also your mileage may vary, as I'm basing this off of interviews I have either given or been given.
Good luck!
Sorry to hear about your troubles!
Hmm, for job hunting I'd recommend:
Break The Rules: The Secret Code to Finding a Great Job Fast
It has the best way of looking at "selling yourself" to people I've ever seen in a book. Plus it came out in 2001 and you can buy it for a penny + shipping.
If you're interested in working for yourself (starting work now, not waitin around), I'd recommend:
Secrets of a Freelance Writer: How to Make $100,000 a Year or More
Or anything by Robert W. Bly. The guy's a genius.
For idea-generating for non-writing self-professions, I'd recommend:
The $100 Startup: Reinvent the Way You Make a Living, Do What You Love, and Create a New Future
If you create your own start-up, Bly has a marketing book too. I'd get that. Anything business-related written by the guy is worth its weight in gold.
If you don't see a job in sight, I would highly consider self-employment, just because you can start today. I think it's great that anyone, anywhere can say "I'm now employed" if they want to. There is responsibility for paying yourself, of course, but now no one can fire you, and they don't take a percent away from your earnings. You get all the kickback. And it's not a pyramid scheme-ish company like Amway, where layers of people are all getting a chunk of your profit (just like any other job you work for other people).
You sound intelligent and experienced; you should go for it if you've got the gumption.
The Engineering Practicum is the one for, like, freshmen and sophomores, right?
Look, just... be cool about it, haha. Check out LeetCode and get comfortable with the Easy questions. FYI, you probably won't know a lot of the stuff — but that's okay! Mostly you just wanna get comfortable with the types of questions. If you want, you can pick up a copy of Cracking the Coding Interview (CTCI), but I'm not sure it's worth it if you aren't applying to other internships this cycle. Honestly I've just used it for questions mostly, and there are plenty of questions on LeetCode.
Just keep positive and study what you can. Let us know how it goes! :)
"Hope for the best and prepare for the worst"
As someone who's recently been interviewing for senior level positions, this is probably the best way to sum up my experiences. It's not possible to predict with any certainty how hard the questions will be. Try finding a few topics you're unfamiliar with and diving into a book like this one: http://smile.amazon.com/dp/0984782850
In a perfect world the most optimal way to ace these types of interviews is to ALWAYS be ready... even when you have a job you like, 300 hours from now you could be looking for a new one...
EDIT: Online challenges/prep is an awesome way to go also
If I was running an 'Interviewing for PM roles 101' first and foremost I'd go over this article by Ken Norton. It runs the gamut of questions I've had over the course of many interviews and sets expectations around a possible interviewers frame of mind.
For books I have three: Cracking the PM Interview, Swipe to Unlock, and Decode and Conquer. Cracking the PM Interview is a general overview of what PMs do, how to prepare for interviews, and general interview questions. Swipe to Unlock give reasons for why certain PM decisions were made and the strategy behind it. Decode and Conquer has more interview questions, but also sample answers to them and is a bit more technically-focused.
My recommendation is to come up with something you want to build and explore what it would take to do that. For example, what if I was interested in who would win the Oscars? I might use Twitter's Search API and explore which movies come up the most with the hashtag Oscars. What would that take? Well, I would have to integrate with Twitter security so they know it's a valid request, use Twitter's documentation to figure out how to search for terms, and then import that into a data analysis tool to do sentiment analysis. In an interview I discussed what I would build, worked through what features I would want to add, and a roadmap for deployment, which was a fun exercise!
Here's a really good book by someone who used to conduct coding interviews at Microsoft, Amazon, etc.
Cracking the Coding Interview
Still, it's not likely that you'll see the same exact questions on an actual interview. Just practice a lot and get comfortable with solving problems. That will help you when it's time to code on-the-fly at an interview. Also, it's more important to talk through the solutions. Coming up with an innovative, elegant, or efficient solution with pseudocode is more important than getting the syntax exactly right in a particular programming language.
I've found that I gained most of my best experience on the job, and that staying at a job where I wasn't learning anything was a huge mistake and detriment to my career.
That said... I don't think I'm a super genius either. I did well in college and my GPA helped with my first few jobs. But I have lots of hobbies outside of work, and rarely spend my time at home thinking about the office. A lot of times companies aren't looking for the super genius type either... if they were they'd have a hard time filling staffing requirements. I think the keys are learning how to interview well, focusing on letting the interviewer know that you're willing and good at learning and having the basics of OOO down to a T. Come off as confident, even if you don't feel it. It never hurts.
As far as books go, here are some of my favorites:
Programming Interviews Exposed
Programming Pearls
Refactoring
I'm mostly a java programmer, so here are three absolutely necessary java books:
Head First Design Patterns
Core Java 1
Core Java 2 - Advanced
To expand on the above, I would say that you definitely need to learn DS&A before you can get a job. I got lucky getting my first job because they didn't ask me any algorithms questions but trying to find a job is next to impossible if you can't answer their questions on a whiteboard.
Also, practice coding on a whiteboard/paper. I cannot stress this enough. It's amazing how many things you think you know but you realize that your IDE fixes for you/reminds you of. Simple, simple things that make you look completely silly if you don't know them during interviews. Plus, it's just a different process.
It's also quite nerve-wracking to stand in front of a white board and have people watching you write code.....so it's easy for nerves to get in the way as well...
Also, get this book:
http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
There are plenty of other books out there as well...
Good luck!
If that is the case. Look in your area at the software companies. check to see if they are hiring, if so, see what they are looking for in an applicant. It might give you some clarity on what to study. Also look the company up on LinkedIn and reach out. I was always advised that by my professors. I personally want to work for microsoft (i have a few friends in Seattle and it is a "good" company to work for), very demanding I know. It will be a lot harder to focus on one aspect with a large company like that. I am currently reading this https://www.amazon.com/gp/product/B073X6GNJ1/ref=kinw_myk_ro_title I have kindle unlimited so it was free. It is a good resource if you are stuck.
as for the passion part. IDK man, I am in the same boat right now. honestly, I think it is just a wall you have to force your self through. Make a list of 20 projects. 8 easy ones (tic tax toe, calculator etc), 8 intermediate ones, and 4 dream ones. put a lot of detail in the "dream" ones. Then make the 8 intermediate ones parts of the 4 dreams ones. umm like a break down. if you want to make a game. one of the intermediate ones can be a user input program, a second can be a physics one, a third one can be graphic output and so on. I know of me and many others i get lost in the OVERWHELMING complexity of things. I freeze and cant move forward. Maybe learn some programming start to finish processing/design. Do not worry about the code, just get your ideas on paper. Start with the mission statement. then break it up into sections. Pretend you are working with a team of developers, where you are each role. but you act separate. Shrugs. In all honesty the best path might be to take an online course from a college and just get into the work force
Contribute to open source. Create something of your own, and contribute to other projects. Since you are basically self taught and you are going for your first gig, conveying to prospective employers that you care about design, testing, and that you are not a cowboy will help. Read and understand books like Practical Object-Oriented Design in Ruby. Also, don't be a one trick pony. Tackling JavaScript could be a next logical step. Needless to say, all your open source and projects you demonstrate should have good test suites.
Learn about the non-technical stuff as well. I think Land the Tech Job You Love is great, and you probably want to look into Cracking the Coding Interview as a starting point for learning more about algorithms and data structures. Upcase is another great resource for beginning/intermediate Ruby programmers who want to up their game. Start solving challenges on e.g. codewars.com.
I have done a lot of interview prep in the past but would always be interested in keeping my skills sharp. I highly recommend this book it's really the most comprehensive text you can get for any generic coding interview. I am interested in learning but if there is anything I can do to contribute, I would be happy too as well.
If you're serious about going into computer science, I would strongly recommend taking a mathematics course, just to get you thinking logically. (You're going to end up taking 250, but still, it's incredibly helpful)
I'm not going to mention the coursework partly because /u/lordlicorice does a good job already and partly because I'm also a freshman like you, and I can't really advise anything from experience. I'd just suggest reading Introduction to Algorithms, which is a pretty well-known book to get started. I've also picked up Cracking the Coding Interview, just to help with some tech internships I want to get into. (My professor implied sometime back that you should have at least 330 before considering internships, but some of my friends have done some even before 216)
I just wrote a eBook on Flipping on eBay.
https://www.amazon.com/dp/B07C39T9YN
It is FREE until Wednesday. I know people look down upon "get rich type books", all authors use it for clickbait, so give me a break haha. There seriously is a lot of great info in here. Im sure everyone here knows how to buy and sell easily, but the 2nd half of the book I give away my tops sites that i use to source my products. My biggest one is a site where you can buy BULK returned items and brand new items called "shelf pulls" that didnt sell. If you could leave a review or just message me what you think about it or how i can improve it i'd really appreciate it!
I'm sorry you're going through this. Other commenters have said it'll get better and stuff (which it will!), but below I've linked some resources I've collected over the years for you to use. Hopefully this will help!
One of the best things to do is read what other programmers have to say. It opens yourself up to things that you might not normally come across. Schedule a time of the day where you will go on Stackoverflow to answer questions or read answers. Also in that time, read some blogs and any new articles. A few of the websites that I really like:
Have you caught up reading the classics when it comes to software development? A great list of them can be found here. A few that I have found totally eye opening:
Also, have you used any new technology lately to make something cool? Schedule a time everyday (similar to when you read new things) to work on a project no matter what. Close Reddit, close your email, and get programming! Here a few things I had on the top of my head:
Hopefully all of these can give you an idea of how to improve.
I came here to put this same book. This book is crazy, crazy good. It would help to have some knowledge of algorithms and data structures before going in as the examples aren't vast and the information are fairly heavy, but it's a fantastic reference.
I would encourage you to change your thinking from "learning algorithms in Ruby" to "learning algorithms" and then just implementing examples in Ruby. There are a few classic Algorithms book that I'd highly recommend. In addition to The Algorithm Design Manual, Data Structures in C is written in C but fairly generic and gives you the right tools for thinking about performance and algorithms, and Introduction to Algorithms, 3ed is more academic but also stupid inexpensive right now. It's a great learning book as the examples are very detailed. It's aimed at interviewing but Cracking the Coding Interview has a nice short survey of algorithms and data structures too
Can’t recommend this book enough (300 pages):
Cracking the PM Interview: How to Land a Product Manager Job in Technology https://www.amazon.com/dp/0984782818/ref=cm_sw_r_cp_api_i_kWKyCb3XHZKFX
“This is Product Management” Podcast: Great material that’s pretty dense with little bullshit. Could easily snag some great management theories and jot them down.
YouTube Nir Eyal. Wrote the book “Hooked: How to Build Habit-forming Products.” He’s a great speaker. Beyond him there are a ton of great YouTube videos of people in product, ProductCon videos might be a start.
Eric Reis blog.
Please tell him that practicing for interviews is an absolute MUST in this field. I have a CS degree (with a high GPA) and 5 years of experience, and even I need to spend a minimum of three weeks full time reviewing and practicing for interviews to do well (potentially longer if I'm also working). These things are very tough, and a totally different beast than anything you experience at school or work. The payoff is amazing if you do this though, as there is such a high demand for people with tech skills. If you can combine those tech skills with great people skills, even better. You just have to put in the hours and endure the pain of jamming algorithms and datastructures into your brain for a few weeks. Interviews are changing in some places to have a more practical focus, but the traditional type of preparation will still be useful. My recommendations:
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850
https://www.hackerrank.com/domains/tutorials/cracking-the-coding-interview
Interviewing.io
Getting the first job is the hardest, and if he feels like the person who he is talking with could be a good mentor, it might be the right choice. However, it sounds like he didn't prepare as well as he could have, so he might be eligible for other jobs that are better located. Definitely consider his mental health, though, and don't push him to keep going if he clearly is suffering.
Lots of waffling in that last paragraph there, sorry. I just finished the interview process and accepted a job, so I feel his pain. I was lucky to have several job offers all at once, but I would have been very tempted to stop if I had only received one, even if it wasn't great. It's a grueling process!
> Given a few years, could you teach your mom (or dad) to pass a technical interview at Amazon? How about your best friend from high school?
I'm not sure this is the right question to ask. Technical interviews are notoriously bad at selecting for actual competent software engineers. If you spent years just studying a book like Cracking the Coding Interview, to the point that you had memorized most of the problems and solutions and were able to infer patterns from them, you might be able to pass a technical interview loop. But you probably wouldn't actually be a good software engineer.
But to answer your question, I think it would be very hard to teach this to my parents. They're both smart, but they lack the foundations for for computer science, and they're old enough now that I think it would be pretty hard for them to adjust to the ways of thinking required.
My best friend from high school... also unlikely. That person is not dumb either, but I do think that CS requires, as /u/brberg put it, "a certain way of thinking that may not be teachable." Whether or not it's learnable is another question, but if so I think you have to learn it through practice rather than instruction.
This video is a Google interview example so of course the problem is a bit contrived, but I think it is a decent illustration of the process he is referring to. The guy writes the code out in C++, but you could just as easily write in pseudocode.
Solving the problem by hand and writing a sketch of the algorithm builds intuition and makes the actual code much easier to write. People knock interview prep as being nothing like the job, but I find that it can do a lot to boost general problem solving. CTCI and leetcode are good resources. If you are brand new to programming Codingbat might be useful, but it is really just for the basics.
&nbsp;
&nbsp;
That stuff will keep you busy for a while.&nbsp; Once you're comfortable with the basics and get to a point where working on those kinds of exercises becomes more rote than challenging, try to create your own apps/plugins/libraries from start to finish.&nbsp; Working on full-scale projects will require you to learn skills that aren't developed as much during exercises & smaller projects, such as: architecture, design patterns, maintainability, testing, best practices, etc.&nbsp; Even more so if you give yourself a goal to actually publish/release those projects.
&nbsp;
A few other ways to develop those skills:
(Yelp, Imgur, Facebook, Trello, etc.)
(you can usually stay informed of hackathons through MeetUp or your local tech event calendar)
Current Microsoft intern here! You've got your first sentence perfectly in order of increasing importance. Since you interned at IBM, I'm assuming you have a decent grasp of data structures and algorithms. If not, you now know where to start!
Do some thinking around your app -- if that's a highlight for you, then it's going to come up. Who was your audience? What was the goal of the app? What were the design choices you made? What could you have done to make it better? faster? more secure? What did you learn?
Go pick up an interview book or two -- I used Cracking the Coding Interview to prepare. If you notice yourself stumbling anywhere (especially the first two-thirds of the chapters), be sure to do some learning around the things giving you trouble.
I wrote about my interview experience at Microsoft, if that interests you. It's also got some links to other people's experiences.
I've been mostly finding that website coding is insanely helpful.
HackerRank, CodeForces, TopCoder are all great resources for "competition" problems (which translate really well into interview problems and problem-solving in general).
I read this book, it actually proved to be a lot more helpful for my Riot Games interview, since it had to do a lot with "in-depth" thinking, which this book is great at helping break down (I always found "Cracking the Coding Interview" to be way too high level, especially if you're in a pinch): http://www.amazon.com/Data-Structures-Algorithms-Made-Easy/dp/1468108867
(NOTE: If you're a primarily Java developer, there's an equivalent book for the above, just search "Data Structures and Algorithms in Java", from the same author)
I learned a lot more from that book than I did McDowell's, since I found that this author actually cared about doing "deep dives" into each of the topics presented. I own an earlier edition - not to say this one isn't great, I'm actually pretty sure the "algorithmic puzzles" he presents are a lot more relevant to current programming interviews.
There's also the age-old CLRS, which I found to be useful for any kind of theoretical computer science topic (Runtime analysis, big-O, etc): http://www.amazon.com/Introduction-Algorithms-Edition-Thomas-Cormen/dp/0262033844/
Let me know what you think! -- I've been using both of these to get my next job (hopefully full-time)! ^_^
Good news! Very few people code well in interviews, from what I've heard. Boneheaded mistakes are practically expected. Ask lots of questions about the problem--it'll give you more time to think and it'll make it clear that you're trying to figure out exactly what they're asking.
Amazon interviews are just like most technical interviews, in my experience. A FANTASTIC book to prep for interviews with is Programming Interviews Exposed. It goes over a lot of the data structures and common types of problems you'll get in interviews. It's great for day-of refreshers, or for going through more in-depth. HIGHLY recommend it!
Do you have evidence of what you're capable of? (Contributions on Github, a website, a portfolio, published researched papers, etc.) If they have an idea of what you can do before you start the interview, that'll help them a) tailor questions to your skill set and experience, and b) understand that you do know what you're doing.
I've seen Cracking the Coding Interview recommended on this subreddit quite a few times - the author probably has much better advice than anything I can think of. :) Best of luck.
If you get high marks (3.7+) it's not really that hard to get an internship as a freshman. Just be prepared to deal with a ton of reject. But you will get one. Doing your own projects is the real winner, but if you are sufficiently charismatic you can talk your way into research or take some project based courses at ACCAD. Obviously don't bullshit--just show off how passionate you and that you can learn (nobody expects you to already know). I did the research route but a friend of mine went ACCAD and got a much better internship than I did.
If you are planning on going for one of the very selective internships (Google freshman engineering practicum/Microsoft explorer etc) then you should probably buy yourself a copy of Cracking the Coding Interview and just do them all. High rank on TopCoder will also help. Go to a lot of hackathons if you want to get really into the tech atmosphere (but you may just not like it that much).
After looking at your post history, it seems you're a 2nd year majoring in stats? I would just continue on the path you're currently on- best case scenario, do as many 300 / 400 CPSC courses for your electives that you can. Worst case scenario, try the BCS program after you've graduated.
I completed a 5 year CS degree with 16 months of co-op experience and a ~90ish average in CS courses and have been working in the industry for about 3 years. Here is the breakdown of where I learned how to develop:
I totally understand how anxious people would feel after getting rejected from CS but it's honestly not the end of the world. If you're willing to put in the effort, there are so many free resources out there that will help you learn how to develop. I assume you're done with 110/121/210... here are some resources that really helped me out:
Code complete 2 - one of the best coding textbooks I've ever read... released for free: http://aroma.vn/web/wp-content/uploads/2016/11/code-complete-2nd-edition-v413hav.pdf
Practicing for interviews (not taught in school) - https://www.amazon.ca/Cracking-Coding-Interview-Programming-Questions/dp/0984782850
Learn the fundamentals of javascript... then learn typescript / react / whatever flavour of JS you hear about becoming popular... here's some site I found after 2 minutes of looking but I'm sure there are much better ones: https://medium.freecodecamp.org/an-introduction-to-object-oriented-programming-in-javascript-8900124e316a
If you're really worried that your stats degree might hold you back... fill out your resume with hack-a-thons and side projects and apply for CS internships. Email recruiters directly if you don't hear responses from normal application processes. When building your resume, start with the CS stuff and leave the major at the end... make sure that if a human ever reads your resume, they'll be reading about how much you've learned about development on your own rather than which major you happen to earn your degree in.
"Programming Interviews Exposed" suggested by Kaelin is pretty helpful. Personally for me, Cracking coding interviews was extremely helpful. I highly recommend it. Read from the beginning, even the chapters before the technical questions. For technical questions, only once you are satisfied with the solution you come up with or when you have spent enough time trying to solve it, look at the solutions.
I would also suggest looking for questions online and then try to solve them. Again, avoid looking at the solutions as much as possible.
It would help to identify what point you made it in the recruiting process.
Recruiting Step | If you didn't make it here...
---|---
Company Reads your resume | Apply to lots of companies, network (tell everyone you're looking for an internship), and attend recruiting events / career fairs
Company invites you to initial interview | Polish your resume / cover letter
Company invites you to follow-up interview | Improve your interviewing skills
Company offers you an internship | Improve your interviewing skills
Improving your interviewing skills includes learning how to communicate, but more especially for CS related interviews it includes learning how to complete those coding style questions you'll be asked. This book might assist with coding questions.
The few times I have been asked by my employer to participate in recruiting I mostly looked for candidates who correctly knew how to use data structures, understood Big O notation and correctly analyzed their code using it, and also clearly explained what they were doing as they were solving the problem. Candidates were less desirable when they sat there silently not explaining their thoughts to me or writing a really convoluted solution that completely ignores well known data-structures / algorithms (even though we told them they were welcome to use any that they knew).
Not an engineer, but a technical marketer. We get these types of interview questions too. It feels like I'm taking a math quiz and the interviewers are scrutinizing the way I'm holding the expo marker.
You can't avoid these situations in all cases, but if you practice enough at home, I'm sure you can make up for any "dings" in the whiteboarding portion of the interview by offering up code samples via your GitHub, portfolio etc.
This book has been recommended to me many times: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X. The way the author thinks through the problems has been really helpful for me, even in non-coding interviews.
Good luck!
Go to class, visit the career fair every year (or twice if your college does it), have a resume, do projects, DO INTERNSHIPS.
The future is bright for us CS guys, my friend. Just gotta get out there. :)
And read this book. Best money I spent at college. Wish I had it sooner!
Oof yeah sad to say you kina did screw yourself.
&#x200B;
Try to avoid giving the first number for your salary for this reason. When they ask reflect it back to them and ask what they believe is a fair salary for the position.
&#x200B;
Also check Glassdoor beforehand and get an idea of the salary range for the job.
&#x200B;
You CAN techincally counter offer, it will not go over well and they actually may pullback the offer so i wouldnt recommend doing this over $2k a year. Focus on getting a good raise or pass on the job and tray again if you really want somewhere else. Personally. I'd like the $48k if everything is good.
&#x200B;
I feel okay promoting my book here because it is currently free and it will help in the future. The Art of Salary Negotiation: How to Get Paid What You Deserve and Feel Empowered Doing It
While it's a good idea to know a basic idea of what data structures there are, Programming Interviews Exposed was super helpful in reviewing important concepts as well as prepare me for my interviews. Honestly, I didn't learn my data structures properly the first time around for interviews, and that book and Cracking the Coding Interview were immensely useful for both algorithms and data structures.
Some books that could help you practice algorithms and coding challenges are:
If you want some actual practice solving challenges with some guidance and/or help, I'd recommend Coderbyte which provides solutions to the problems along with the ability to view other user solutions so you can learn how others solve the same challenges. This article might help you find some other coding challenge websites as well.
Self taught professional software engineer here.
Which language you learn is not as important as learning about data structures and complexity analysis. Code organization is also very important.
Pick one high level scripting language (like Python, Ruby, Perl, etc) and one low level systems language (C, C++, Rust, etc) and learn them both inside out.
A couple of books I recommend:
As far as practical skills go, you need to learn how to use
git
(or whatever VC system the companies you are interested in use). You need to learn how to use Unix systems. A great introduction is The UNIX Programming Environment. You need to learn how to read other peoples' code, open source projects are great for that.When you are getting ready to interview, there is no better resource than Cracking the Coding Interview.
A great GPA (3.8+) will take you far. Also, put some webdesign-related projects on your resume!
If you can, go to a career fair. Be friendly, be prepared, and follow up with thank you e-mails.
I'm not sure how interviews for UI people go. If companies give technical interviews, I recommend you buy and review one or both of the following:
I recommend: Programming Interviews Exposed: Secrets to Landing Your Next Job
And:
Cracking the Coding Interview, Fourth Edition: 150 Programming Interview Questions and Solutions
If not, I'm not sure. Sorry.
One of the best investments I ever made was buying Cracking the Coding Interview, written by Gayle Laakmann McDowell. It was the required text book for my Data structures and Algorithms course when I was doing my undergrad. It’s useful for 2 reasons: it does a really good job of teaching basics of data structures and algorithms, as well as Big O, and it’s also a great roadmap for applying to and interviewing at tech companies. Link for amazon: Cracking the Coding Interview
Glad to see that you're getting these things covered! That illustrated book on algorithms looks really lovely and seems like a great way to wrap your head around the important concepts.
I can't personally recommend any online course on these topics since I covered these in college, however I can definitely recommend this book.
You might want to dive into it after you have some decent knowledge of data structures and algos. As you work through the problems you can fill out any gaps in your knowledge and look up the info online.
hmm... As for me, i saw a lot of tech companies requiring the knowledge of c++, java and front-end development.
You could also learn either iOS development or Android development.
You definitely need to learn git.
Try "TeamTreeHouse" for 2-3 months, they have a lot of stuff there. Try some of the courses and then create some projects and put them on github to later on add to your resume.
And also, during interview when they give you some technical questions, you need to be ready for them.
https://www.amazon.ca/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Here is the good book for it.
GOod luck :)
Try to find a job and if you dont, try to learn as much as you can during this summer :)
Seconding The Pragmatic Programmer and Cracking the Coding Interview. I'd also recommend:
If you let us know which languages you primarily write, I can probably recommend some good language-specific titles, too.
It's quite faschinating from an anthropological perspective. Our society values degrees over actual knowledge so much. One of the more worrying consequences of this is in Wall Street.
When they hire, they only hire the Smartest^^TM people from the smartest^^TM collages (Harvard, Yale etc). The people that are pulled into the system don't necessarily have to have degrees or an actual valuable education, just having entered the right bachelor program is enough.
These peoples are then rewarded on how well they act within the cultural system of Wall Street. If they conform and manages to do some decent work they survive, and are labeled as fucking geniuses by Wall Street and a society that worship Wall Street.
The longer consequences of it is that Wall Street builds a competence-pool that's not necessarily smart, just able to conform to a system that in-itself isn't always too smart or well designed to created educated people.
Because if Wall Street was so smart, why are we entering recessions every 10th year, and why are we destroying the planet for short-term profits? Why are Wall Street driving bubbles that they know are bubbles?
They believe that loyalty to the wall street system is smartness, because people at Wall Street are "fucking smart".
TLDR: Listen to Liquidated
As anyone working in tech will tell you, landing a job/internship can be attributed to some combination of past work, interview practice and luck.
Some good resources for interview practice are https://www.hackerrank.com/ and https://coderbyte.com/. There's also Cracking the Coding Interview, which is a must have for any technical interview prep.
To find a side project to work on, I would suggest trying to solve a small problem you have in your daily life with software. For example, maybe you want to brush your teeth for longer, or remember to do something everyday. A project like this will allow you to both write actual code, but also talk about your process with deeper understanding to interviewers.
Besides that, there are other great online resources that can help you learn more nuanced aspects of software engineering like https://egghead.io or https://doyen.app.
I wish I could have done double degree/major at my university. I could have taken CS courses but curriculum structure between CE/CS was too big of a difference... Needing a ton of pre-requisitions that I did not have in CS. And department wasn't willing to give me an override (yay overpopulation).
And my CE is mostly hardware focused albeit it is being advertised as CS+EE. And hardware as in... mostly non-computer related. Quantum physics in circuits, microelectronics, etc etc. I'd consider those as more of EE with electrophysics concentration. And you'd be surprised how many low-level embedded programming classes we have.... three. Two of those three aren't scheduled to be offered in the next five years, including previous 3 years, due to budget cuts. So basically one. Every semester we were promised more CE courses would be offered.... except more CE courses were cancelled instead.
Any particular book you would recommend? I'm currently reading through this book and it is helping me a lot.
And congrats on your offers!
Here are the resources that I have used in the past. These are the type of questions that the large bay area software companies ask during phone screens and on site interviews. I've interviewed at a number of these companies and currently work for one of them. They all do similar things both in terms of the coding questions they ask as well as the overall interview process. I've never interviewed for a start up or any other sort of company, so I cannot speak to how it's done outside of large software companies on the west coast.
The following book, Cracking the Coding Interview, is great. Some companies use questions straight out of this thing. Others will ask one of these questions with a little twist.
http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
Either of these sites are good resources for actually writing code. Some of the challenges on Hackerrank are harder than you'll probably ever encounter in an interview, though it's worth noting that I've been asked a couple of the problems marked as hard on OJ Leetcode during onsite interviews (I recall LRU cache and a dynamic programming version of text justification specifically).
https://oj.leetcode.com/problems/
http://hackerrank.com/
For general stuff you need to know, this blog post about how to prepare for an interview at Google is a good resource. Jump down to the Tech Prep Tips for the relevant stuff, or just read the whole thing, it's a good read.
http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
I can only recommend bootcamps for 2 types of people:
But for the rest, I think you're better served biting the bullet and going back to school for an actual diploma or degree program.
For what a bootcamp provides, I think it's really expensive ($8600-9000 over 2-3 months). Ironically, the appeal of a bootcamp is also the main flaw of a bootcamp: time. For people who have no tech background (which is the main target demographic of bootcamps), you're essentially cramming all these tech concepts, languages and frameworks in 2-3 months. Are you going to retain all of this information 6 months later?
When you graduate from a bootcamp, you're competing with CS graduates, diploma students who had years to hone their skills. Give yourself an honest assessment and ask how you'll do against them?
I highly recommend going through a book called: Cracking the Coding Interview
These are the type of questions that the top companies will ask. Good luck with your pursuit!
I can address a couple points from the perspective of a new-grad software engineer in the Silicon Valley with a lot of internship experience.
Having no experience hurts you regardless of your age or school status. I'd recommend actually finishing some personal projects so you have something to show and talk about in an interview.
Charm and enthusiasm are important for CS interviews, but less so than in softer fields. They can easily test your programming strength in an hour interview, unlike with many other professional skills. In a CS interview they are going to want to get an idea about your actual CS abilities.They'll ask questions about algorithm complexity and design and will probably have you do some coding on the whiteboard. I'd recommend reading a book like Cracking the Coding Interview and working through every single exercise in the book.
> I'll also make sure I have the necessary skills before even considering interviewing and preparing more when I do.
No. Interview often and for jobs that might not even fit your skillset. If the company grants you an interview based on your (honest) resume, then they think you have at least a chance at getting the job. But more importantly, it will give you more confidence and make you more comfortable in those intimidating situations.
I got by BS in compsci last year and have been working at an ok company since then. I interviewed about every other month that whole time with other companies, some I didn't even care about. But I just got an offer from one of the Big 5 this week and I think a lot of my success came from interviewing often and becoming comfortable with that situation. Also, Cracking the Coding Interview helped with a lot of the preparation. Knowing what to expect from these types of interviews and preparing for that scenario is a big confidence-booster.
Also, as a side note, what school did you get your degree from that you hadn't heard of the modulus operator before?
I learned binary trees, linked list, and hash tables as a sophomore in high school. It was rare back then, but we had a pretty awesome CS department. I would check this book out. It has a lot of zany, non real world problems that may come up in an interview. Plus, it's kind of fun (imo). I don't do rails, but I think the logic is applicable in any language.
http://www.amazon.com/Cracking-Coding-Interview-6th-Edition/dp/0984782850
Edit: I just read the preview on amazon. It has been a while since I read this book. Buy it. It covers a good amount of data structures, algorithmic run-time complexities, bit manipulation, and all kinds of good stuff.
I'm on my phone, but when I get home I'll link some more stuff for you
Four words, one book: Cracking the Coding Interview
Seriously, it’s the shit. It’s widely recommended because it’s just that good.
Keep applying, keep interviewing, keep studying. I too was worried about throwing away my chances with companies if I interview before I study enough to be 100% prepared but the fact is your first few will probably be throw aways anyway as you learn about how technical interviews go. By your third or forth you’ll be much more comfortable and there are tons of great companies out there, so worry not!
Lots of exciting possibilities! The question, I think, is what is most important to you. Creative writing could happen in -- and be informed by -- any of the contexts you mentioned.
At the risk of sounding like a truly terrible cliche, I think you should follow your heart. I've seen too many people do what they thought they were "supposed to" do and waste years they could have been spending on what they really enjoy.
It couldn't hurt to chat with folks who do all of the things you mentioned -- entering a PhD program in particular, as that can be an expensive and daunting undertaking with no guarantee of a job at the end in certain fields.
You may enjoy browsing through the book So What Are You Going to Do With That? (http://www.amazon.com/What-Are-You-Going-That/dp/0226038823/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1255390727&amp;sr=8-1) It was written for people with PhDs who want to switch gears, but there may be parts that are interesting for you as well.
Practice whiteboarding (solving technical problems on a whiteboard). Try to read Cracking the Coding interview . If you look online you might find a pdf version.
General tips for the interview:
To be clear, I don't work for HP but I do work for a large tech company and I'm on a hiring panel. Good luck!
Make sure you can whiteboard all the easiest questions from this book: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
But do so in a way where you are not memorizing answers but instead learning the concepts and the problem solving techniques. A side benefit is you will almost certainly write better code and find more elegant/performant solutions at your current job as well.
Karen Ho's "Liquidated: An Ethnography of Wall Street" explains how the meritocracy is racist, even though the idea is used to cover up that perception. Check it:
>On Wall Street, “economic outcome” is seen as constituted through skill, merit, and education, not such “externalities” as race, class, and gender.
>...
>The singular pursuit of the bottom line serves as a deterrent against any residual flare-ups of institutionalized racism, sexism, and classism, sweeping the specter of bias onto the terrain of other institutions.
&nbsp;
But here's how the "meritocracy" actually works:
>The complete equating of smartness with these institutions, the identification of historically white colleges as global, universal institutions, as well as the wholesale erasure of the white upper-class male privilege embedded in these universities are part and parcel of how excellence is understood. Central to Wall Street’s construction of its own superiority is the corollary assumption that other corporations and industries are “less than”—less smart, less efficient, less competitive, less global, less hardworking—and thus less likely to survive the demands of global capitalism unless they restructure their cultural values and practices according to the standards of Wall Street. In a meritocratic feedback loop, their growing influence itself becomes further evidence that they are, in fact, “the smartest.”
Wall Street will recruit mostly from Princeton and Harvard and Yale, and then recruit a bit at other less prestigious schools within a certain quota.
>Instead, Princeton and Harvard recruits bring to the table just the right mix of general qualities and associations: they are not too technical or geeky (MIT), not too liberal (Yale), not too far away (Stanford), and their universities carry more historical prestige than the remaining Ivies (Brown, Columbia, Cornell, Dartmouth, University of Pennsylvania). Possessed of a combination of traditional cachet, class standing, and pedigree, they can show prima facie evidence of their “excellence” by virtue of their schools’ (presumably) exclusive selection processes; and they demonstrate a constant striving for further “excellence” by virtue of their participation in the intense process of recruiting and their evident desire for a high-status, upper-crust lifestyle.
>Finally, Wall Street maintains pinnacle status and differentiates between elite schools by utilizing quota systems and other divisive mechanisms that reproduce Wall Street/university hierarchies.
&nbsp;
So, yeah...meritocracy is racist because it favors whites through a complex system of hierarchies. And that's only on Wall Street. Sara Ahmed is currently doing a project on complaints in institutions that confronts racism and sexism in institutional life, often the primary means of proving one's merit in our economy based on skilled labor.
I don't even know why I bothered typing this out. But it's too late, I'm committed and I'm pressing Enter!
Well, I would say you should try to work your way through this: http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
The other thing you might want to do is find a personal project you're interested in and contribute/complete it. When you work on your project you would be able to brush up on your skills and have something to talk about in your interview. As far as tutorials go, you could try Coursera, Udemy, or MIT's open courseware. If you have any of your projects or textbooks from school you could look over those and try to "improve" your work if possible. I'm new to this sub but have been visiting daily for a quite a while and I think these things would all be something to look into. You might also want to look into finding an internship where the pressure might not be as high and the compensation won't be as high as if you were full time but you'd get some experience and if you do a good job you might get an offer at the end of your tenure. Best of luck!
I went through the Google interview process not too long ago. Here's my recommendations:
Just to give you a peace of mind, I'm gonna share that I'm utter shit too. I have almost 20 years of experience and working at a huge worldwide company. I have conducted more than a hundred interviews myself and yet, if I apply to somewhere I can't write a simple parsing script in a coding interview.
Some of us just wired this way. Also interviews are like a date. It is equally up to chemistry and luck along with correct answers to questions if you get the job.
To be useful too, a few links. Check out this for inspiration:
https://rejected.us/
The best book to get an IT job:
https://www.amazon.co.uk/Cracking-Coding-Interview-6th-Programming/dp/0984782850
Can't say I'm surprised with that answer.
I'm going to suggest three things, all of which will require work, although not necessarily more credentials, although they'll help.
Be prepared to move no matter what you do.
To me it sounds like you want to explore product management.
Check out this book:
Cracking the PM Interview
It has a chapter on transitioning into the role from a developer, why technical experience is vital and whether or not you actually need an MBA. It won't have all of the answers but it sounds like it's asking the same types of questions that you are interested in. Hopefully it gives you a better perspective on the role and whether or not you'd really like to pursue that world.
Anything in this series is brilliant. Explains things at a very basic level, in friendly english. It will help you a lot. Good luck!
I think the best way if you really want to get into the tech filed is by reading this book https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850. I would also learn algorithms to allow to at least get a better shot into a entry level coding job. Also check out local tech meetups and see what they are doing sometimes there are job openings and you can directly talk to employers there. Good Luck!
A couple things:
I have been interviewing the past few weeks. The 2 things that have helped me prep:
It happens. Try not to worry about it too much - things are going to be OK. There's a job for you out there.
Practice a lot. Find lists of interview questions online, and try to code all of them - first on paper and then with the help of a computer. Learn them through and through, so that you can easily recognize variations of them. Consider getting this book.
Feel prepared in your next interview. Good luck!
This might be slightly more appropriate for Computer Engineers, but when I was thinking about majoring in CE/EE, a friend who works for Microsoft recommended Programming Interviews Exposed. It has both soft and technical questions and is a pretty easy read.
EDIT: Removed mobile link
A big thing is learning just how they function. Such how a Stack differs from a Queue and so on. Once you understand that you can implement it in any language really. If you are having trouble finding them in C#, you might wanna try looking at python since its pretty close to reading straight english(and there are a fair more courses that use python). Udacity has a really good courses that are free that I believe explain it really well.
My favorite being
https://www.udacity.com/course/technical-interview--ud513
Or even if you arnt looking for a job and just doing this for a hobby, the book Cracking the Coding Interview. It has examples of problems and data structure examples in C#.
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=sr_1_1?ie=UTF8&amp;qid=1473262882&amp;sr=8-1&amp;keywords=cracking+the+coding+interview
After this course, you can take one that goes into the theoretical aspect handling Big'o, time complexity, efficiency, and such =).
As far as courses go just take the math-oriented ones like algos and data structures seriously. It's about developing your problem solving ability more than anything. Strong problem solver, strong interviews. Also developing an intuitive understanding of complexity and problem classes will help you to think clearly.
For interview-specific stuff courses won't help you. Pick up Cracking the Coding Interview and Elements of Programming Interviews. The latter used to be called Algorithms for Interviews which is also good.
Protip: last time I checked all these books were available through Safari Books Online, which most university libraries give you access to for free.
well, since no one has said it yet Cracking the coding interview is a great resource for learning the stuff you'd be tested on.
Over summer, for a project it doesn't have to be amazingly unique, just something you're interested in.
If you have some free time learning a functional language like Haskell really helps learn a different side of programming than the traditional imperative/objective norm.
I can't give any advice for SEA. I don't know how much you've looked into it already, but some assorted resources people seem to like:
Max Dama - On Automated Trading
Jane Street - Probability and Markets
Cliff Asness - A Brief and Biased Survey of Quantitative Investing
Heard On the Street
A practical Guid to Quant Finacne interviews
A summary of quantative trading
[Mark Joshi - On Becoming a quant] (http://www.markjoshi.com/downloads/advice.pdf)
How's your programming and statistics? Those are probably the two things you can improve the most on your own to give you the best chance with interviews.
I'm self taught as well and decided to help bridge the gap in 2 ways:
Read this book...Its not gospel for how every interview will go, but will give you an idea of how a CS heavy interview might go:
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
If you have enough time, follow the videos in this course and also get the pdf of the book. The topics will be quite dense at first, but keep at it and they will eventually make sense:
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/calendar/
To reiterate the same as others, its meant to weed out people who don't have a CS background; but don't be afraid to say you don't know something. Use that as an advantage and come prepared with situations where you didn't know something, but were able to read up/comprehend it and then applied the knowledge as a new skill :) Its impossible for everyone to know everything as a developer, we can only keep learning :)
I think different people have different ways to retain knowledge. Whatever motivates you.
I like to view learning as a game with multiple levels. I'd start with something easier, more practical, this will keep you motivated with faster feedback and will raise the right questions for the next level.
Start with a book of problems that isn't very formal yet, I'm thinking of the likes of Cracking the Coding Interview
Then move to some of the suggestions around The Algorithm Design Manual and Introduction to Algorithms.
At this point you may want to specialise your knowledge in a particular area of algorithms or math.
The good thing about this approach is that you see results earlier and can also start applying your knowledge quickly (even if very limited).
Along the way, as a second vertical of learning that you should pursue, you should take some online courses on algorithms or more specialised applications (biology has a lot going on now).
Have fun
Edit: try HackerRank too!
I was surprised to see that Gayle Laakmann Mcdowell (author of [Cracking the Coding Interview] (http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/ref=asap_bc?ie=UTF8), which I see recommended pretty frequently around here) uses [Square Space for her site] (http://www.gayle.com/). So no, it would seem not to matter so very much, to most people.
However, I still chose to take down my Jekyll site to code one by hand because (1) I wanted to customize things that were difficult/buried in Jekyll and (2) my general front-end newbiness made me feel like it was still the better option.
If you are an old pro like McDowell or a pure back-end dev with few aspirations to be otherwise, it probably doesn't matter. However, if you want to employ or contract someone at the junior level to do front-end work, you'd probably prefer someone who didn't use a template for their own site, would you not?
For finding jobs,
Job Listing Websites:
In larger cities with a lot of tech companies, you can find job fairs where companies recruit.
Lastly, find a few local companies and go directly to their job listings.
Not having a CS degree will be a negative but more and more companies are broadening their backgrounds for Junior level positions.
When interviewing with a company, look them up on glassdoor to see what developer interviews are like there. You can also ask the recruiter at the company what to expect. Technical interviewing is all over the charts in terms of how its conducted, expect a mix of:
In general I would recommend passing on any company that wants more than about a day onsite interview + 8 hours. If they're not respecting your time for an interview, they won't respect your time while working for them.
I'd recommend less focusing on JS/Angular and more focus on drilling for interviews. This book is great: https://www.amazon.com/Programming-Interviews-Exposed-Secrets-Landing/dp/1118261364
There is another one I had called "Work your way around the world"
http://www.amazon.com/Work-Your-Around-World-Edition/dp/1854583670
The first one is about the mindset of traveling and I like that. If you are young and in good health, with the internet you could travel in Europe and Asia probably mostly for free. Everyone I know who has traveled, makes friends around the world and finds places to stay and things to do for free or very cheap.
How old are you?
I would recommend brushing over some basic CS concepts first. Since you've been out of school for a few years now, it might be a good time to start working on little side projects and/or programming exercises if software engineering is what you want to get into.
You can also check out this book, which will help you prepare for a programming/tech interview.
What type of job are you looking to get? Are you interested in software support? development? IT? Your preparation will depend on what route you want to go down.
Learn how to Google for the resources that are already available to you. Be comfortable using the command line, pick your favorite IDE (VS Code is my favorite), learn on your own, develop your own projects (could possibly lead you to research opportunity), lead in university projects, outside of class time attend meetups with professionals already in the industry.
I tend to agree with the notion that college will only be as valuable as the amount of effort you put in to learn. The college degree is just the baseline for the lowest common denominator.
Eventually when it comes time for the interviewing process, you should definitely review Cracking the Code. To truly set yourself apart in addition to the CS workload, do the above mentioned.
While reading this book I've found the website from the authors of this book which has some tips on how to make a good resume, and they also offer a resume review service, but I personally haven't used that so far, so no comments on that one. I also find these tips from ex-googler and ex-microsofter pretty useful. But I'd also like to hear some experiences from anyone who used those resume writing services, my experience is getting close to 10 years and I'm starting finding it a bit troubled to highlight everything important in one-two pages.
https://github.com/jwasham/coding-interview-university
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X
&#x200B;
Those are some solid resources there as well. From my experience with interviews (mainly being internships) a common question is what projects are you currently or have worked on. In my personal opinion focus on developing your own personal projects rather than making small contributions to open source is better for learning. You can reinvent the wheel here, that's the point of it.
&#x200B;
Good luck :)
As /u/Amarkov said, you're not screwed and you really should put in the time to learn basic algorithms and data structures. But, I also think it's a bad idea to go overboard.
For example, you should know why and when you'd use a binary search tree over a hash table, and be comfortable implementing basic graph algorithms (BFS, DFS, shortest path). But, much beyond that, and you are likely better off spending your time actually building stuff and developing your coding skills. I know most of the big tech companies will grill you hard on CS, but many smaller companies will be more concerned with how quickly you'll be productive with their tech stack. Rather than have you implement a graphing algorithm, they'll want to see that you're comfortable with Java's threading model or writing a JQuery plugin or working with Active Record or whatever.
I'd recommend grabbing either of these books and working through at least 2 or 3 questions in the chapters you're weak on. At a minimum, they'll help shine a light on your blind spots.
tldr; You're not screwed, and learning the CS essentials well enough for NotGoogle-level interviews can be done with a few weeks of effort.
Some things to think of:
You're a professional the day you dress up and start trying.
I think people in this comment section will do a good job with the ideas, but here are some questions you should know. Maybe some are fairly hard since you seem to be playing down this interview, but you can never be too prepared. Some of these are from: an Amazon interview me and my friends went to, other interviews I had, internet, and a book I read.
Java Questions:
"Whats the difference between final, finally, and finalize in Java?"
"How does garbage collection work in Java?"
"Whats the difference between HashMap and HashTable in Java?"
"Whats the difference between String, StringBuffer, and StringBuilder? What are the advantages and disadvantages of each one?"
General questions:
"Tell me everything you know about HashMaps and then implement a simple HashMap (lets say key of type String and value of type String, don't bother with any fancy java generics)"
"How do you modify your HashMap implementation so that it can pick a random element in O(1) time?"
"What is the range of a 32 bit Integer"
"How do you rotate a 2D matrix 90 degrees?"
"Explain and give the average and worst case complexity of: Heap Sort, Bucket Sort, Radix Sort, Quick Sort, Merge Sort"
"What is the worst possible set of data for Quick Sort and how long does it take (without any fancy optimizations, just the classic vanilla version). How do we help alleviate this case?"
"Implement Quick Sort (vanilla/classic version) and Merge Sort"
"What are the 4 famous/common simple recursion functions"
"How do you find the biggest substring palindrome in a string in O( n^2 )?"
"How do you reverse a linked list?"
"Explain how Dynamic Programming works."
You should probably also run through fizz buzz, it'll only take you a few minutes, but the last thing you ever want to do is make a stupid mistake on such an easy question haha.
Every interview I have ever had, they grilled me on HashMap, so I would highly recommend you know that data structure in and out.
And of course, if you're going to try and solve these problems, do it in pen and paper. That's how the hardcore interviews work.
Talk out loud explaining your reasoning while you do it. Interviewers want to hear how you think, and why you make your decisions. This is arguably more important then getting the answer right.
Never disagree with your interviewer.
Here is an interactive page where people can visualize how Quicksort works, this is one of the most widely used sorting algorithms, once understood you can pick any of the other popular ones: Bubble, Insertion, Heap, Selection, etc. CtCI — Cracking the Coding Interview is a good book written by an engineer who used to be part of the recruitment team at Google and other "Big 4" companies, I really recommend it, every page is worth its penny*. Leet Code is also a good resource to learn and practice algorithms, most of the exercises have articles with good explanations of how to solve the problems.
Exactly what it sounds like. They're going to be testing your ability to design a clean and efficient solution to a problem.
You don't need to come up with the "correct" solution. They're going to be more interested in how you think through the problem, your communication skills, etc.
I highly recommend [this] (https://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/ref=sr_1_1?ie=UTF8&amp;qid=1465591474&amp;sr=8-1&amp;keywords=Cracking+the+coding+interview) book.
Just throwing this out there:
You don't have to quit your job to see if you can get equal or better pay elsewhere (or at your current soul-sucking job).
I recommend Break The Rules: The Secret Code to Finding a Great Job Fast.
It was written by one of those scumbag corporate shills who are either really good at faking liking their job, or actually like their job (even worse!). They also have a Ph. D. in the subject and seem to specialize in corporate jobs.
Noteworthy things from the book:
Teaches you how to take credit for things that you don't usually take credit for.
Example: Everyone working under you had to be earning money for someone, right? You can take credit for the hours they worked (you scheduled them), the money they made over however much time you've worked there (easily in the millions of dollars; probably hundreds of millions if you're with a company that makes a lot of money, possibly even in the billion range if you've been there long enough and the company is huge, all because you were the "lead" of their projects). Basically, any money that was made under you as the manger....TADA! You get the credit. Why? You would get the blame if everything was messed up. That's all it takes for you to justify using those huge numbers, even if you don't make the policy that leads to you getting those numbers. Doesn't matter, and the numbers impress other bosses. You can also use those numbers to negotiate higher pay from your current employer. "We're not gonna find a boss like GeneralMalaiseRB anytime soon! Pay the man, he makes X amount of money, which he just showed us on his spreadsheet! There's a go-getter there, that GeneralMalaiseRB. Can't fool him into working for pennies anymore!" they'll all say, once they read your numbers. You know what morons people are for spreadsheets in corporate culture. It's almost like they have to be, by some insane logic, or their entire system will crumble.
But even if getting a raise won't work, you can use those numbers to get a job that pays well. Hell, you probably don't even need to stay in your specialized area anymore. You said it yourself; your skill is in being a boss.
Anyway, I am too lazy to type out all the rest the book is good for, but it's a good book, and you don't have to quit your job first to use it.
Honestly you're in a great place with that experience, so the thing to do now is just apply (online!). Apply to the big companies like Google, Amazon, Microsoft (usually a traditional resume + form) and to startups in NYC and SF (often more informal).
You'll also need to learn how to do technical interviews, which comes down to have tight grasp of data structures and thinking on your feet. I'd recommend this book to get started.
God. Goddess. Earth Mother. Whatever... Save us from Wall Street Analysts...
Seriously, these folks don't know their ass from their elbow and make oodles on money in a business where they never have to actually answer to their recommendations and predictions because they change jobs and start analyzing different fields every 12 to 18 months.
These are the same people who, for much of the 1990's kept saying that there was no future in Digital Cameras and that Kodak should pour all of it's development efforts into PhotoCD. (source: http://hbr.org/2010/07/wall-street-is-no-friend-to-radical-innovation/ar/1 and the linked journal article).
There was a terrific ethnography published a few years ago that really gets to all of the underlying issues with the entire Investment Banking and Analyst structure. If you're remotely interested in the topic, it's a great read:
http://www.amazon.com/Liquidated-Ethnography-Street-Franklin-Center/dp/0822345994
Practice doing them as you would for taking a maths test. Most companies don't ask anything remotely original so knowing the answer already is a great help. There are literally books on them.
https://www.amazon.co.uk/Cracking-Coding-Interview-6th-Programming/dp/0984782850
Then go through the list /u/lapislosh has during the interview.
The funnest not-fun whiteboard question I've had was to write a ray-triangle intersection test.
http://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
http://www.amazon.co.uk/Cracking-Coding-Interview-6th-Programming/dp/0984782850/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1452714513&amp;sr=1-1&amp;keywords=cracking+the+coding+interview
http://www.amazon.co.uk/Introduction-Algorithms-T-Cormen/dp/0262533057/ref=pd_sim_14_2?ie=UTF8&amp;dpID=41IHvtO0IxL&amp;dpSrc=sims&amp;preST=_AC_UL160_SR142%2C160_&amp;refRID=1FYKB42A12RXEDF1ZF1V