Introduction To Algorithms is kind of the gold standard. It's heavily detailed, well written, and I'm pretty sure they put the word "Introduction" in there as a joke(it's 1292 pages).
Long answer is here
Short answer is "stop whining and learn while you still can"
Regards,
Someone who didn't
Cracking the Coding Interview by Gayle Laakmann McDowell
This book goes over every one of those areas and gives tons of example problems. It also talks a lot about the interview process and what companies are looking for in a good candidate.
I mean, there's books out there like this.
In my own experience, it's a matter of coding enough. You have to try to create something and do it naively. Having done something yourself gives you a reference for when you study programming in books or videoes or when talking to others that you can compare new information to, so you can realize how you could have done things better in your own project. If you don't have any reference experience, you wont learn from the information in the same way. It's part of becoming a programmer that you'll write some crap code.
Try to code some simple desktop application, like a text editor, or some other simple program. Make a list of features it should have - for a text editor, you should be able to input text, modify the input text, save the text and load a text file.
If you're serious about getting into software development, I'd recommend you start looking into data structures and algorithms as well. It's something I think a lot of people who were self-taught tend to miss because it's not required knowledge to program, but it will give you a huge competitive advantage.
While I haven't read it, this book seems like a good introduction to the concept: https://smile.amazon.com/dp/1617292230/?coliid=I34MEOIX2VL8U8&colid=MEZKMZI215ZL&psc=0
From there I'd recommend looking at MIT's Intro to Algorithms, 3rd Edition. A bit more advanced, but the topics in there will play a huge role in getting a job in software.
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.
A couple years ago a coworker turned me onto a book he coauthored, <u>Concrete Mathematics</u>. Absolute must read/reference if you write a lot of math-y code.
I've said it a million times and I'll say it again: Get your hands on a copy of Cracking the Coding Interview and read it from cover to cover. If you're going into college now most of the information in this book won't make sense if you don't know how to program, but regardless I would still pick it up. Study this book for interviews. If you start using this book to study for interviews (And you need to study for interviews, treat interview prep like any other class) I guarantee you can land an awesome internship and a great job.
How about this book Think like a programmer. Have a looksie.
Edit: For your problem you could use reverse planning: Start at the end with the result you want and work backwards.
Stupid question on my end perhaps but have you ever read How to Think Like A Programmer?
Think Like a Programmer: An Introduction to Creative Problem Solving https://www.amazon.com/dp/1593274246/ref=cm_sw_r_cp_apa_sjOCAbTSAJPKT
You may want to check out Cracking the Coding Interview. The table of contents can be found here. I'm pretty sure there is a section for each thing on your list.
That book changed my life as a developer. It was so easy and fun to read. It was the software book that grabbed me and given that I was on the path of being a self taught developer, it was essential that I catch up to my potential peers.
Fast forward 15 years and I can see how that book jump started me. I had a 7 year stint at Amazon (ending as a Sr. Engineer), and am currently doing my own start up. Along with a data structures & algorithms book (Algorithms by Sedgewick is great), and a style guide/clean coding kind of book, anyone has a good chance of getting their foot in the door.
I'd recommend stepping away from leetcode and the other sites for a bit. I think they're useful if you need the practice in typing up the algorithms in code when you have the algorithms pretty well memorized.
I would HIGHLY recommend "Cracking the Coding Interview" https://www.amazon.com/dp/0984782850
There are also a few good YouTube videos but I don't have links handy. I will say there's a lot of garbage out there too, so skip through them liberally.
Remember the interview process is a total game. I interview candidates and even we know it's all a sorry game. But we have to check the stupid boxes because no one has come up with a better way to weed out people who can't code a for-loop.
Your ability to pass interviews is not directly correlated to your ability to actually deliver software in the real world. Interviews often don't touch on design or real world tradeoffs or continuous integration or how to manage a large project or so many of the other aspects of software engineering. Instead it comes down to rote memorization of solved algorithms and stupid array problems that never represent an actual problem someone has actually needed to solve.
In an interview: let's spend half an hour writing quicksort.
In real life: can you think of any language written that doesn't have a sort function in the standard lib?
I know you know this but I hope that this has helped.
Good luck.
To me, "leetcode" is the brand name for the concept of solving programming puzzles, just like "Kleenex" is for facial tissues. When I see someone mentioning leetcode, it could mean anything from the actual LeetCode website to Codewars, HackerRank, or any other interactive programming problem solving site.
I've seen leetcode mentioned here and also very heavily on Blind (abbreviated LC there).
This concept is not new, and is the central focus of the very popular interview prep book Cracking the Coding Interview
Skiena's Algorithm Design Manual - It gives you an overview of what classes of problems exist and how real world problems can be expressed as instances of them. It doesn't always give you the step-by-step directions of how certain algorithms work, but it gives you enough of an overview to understand the problem and points you towards existing implementations.
It's certainly one of the most useful books I used when preparing for interviews (and comes in handy in the real world as well). As an anecdote, in one interview at a big-N company, I was presented with a problem, said "based on these factors I'd treat this as a network flow problem by doing X", and that was the only buzzword needed - rather than watch me try to write a solution to a known problem, we were able to move on to other questions. Without knowing that term, I probably would have spent the remainder of the interview trying to optimize a solution to the problem instead.
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
I have been doing these challenges
And also using this book to get better at coding, in general: Here you go
Both links are C++ related and work on challenges which build on each other.
My older brother did! He dropped out of college midway through for personal reasons but he had the code bug for as long as I can remember. It started out kinda crappy, coding websites for not the best pay, but he's really improved over the years and now he has a cushy 6 figure job. It's definitely possible, and when I'm looking to hire people because of this I don't really care about degrees. Now to be fair, usually people with degrees perform better on coding tests, but that doesn't mean the exception doesn't exist.
Also, do yourself a favor and read/practice with this book. It's how I broke away from being a data analyst and got back into coding: https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850
Here's a really good book by someone who used to conduct coding interviews at Microsoft, Amazon, etc.
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.
PEOPLE TREAT THIS AS A JOKE BUT I SWEAR BY THIS. listen. as someone who went through college typing and have a job that's mostly typing with documents nearby, I've found documents or books to be unparalleled in wrist support. particularly Introduction to Algorithms, 3rd Edition puts my wrists at the perfect level for my keyboard. It provides rigidity that some wood wrist supports provide but also some give so that your wrists don't feel stiff as quickly.
The most popular book on this is:
https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850
While every company is different and YMMV, I don't know of any other single resource that has more tips and advice that are pretty generally accurate.
As brief answers, though, what I recommend is:
I don't generally recommend writing out an algorithm. There's no standard way to write pseudocode, and by its very nature, pseudocode is quite often ambiguous. Writing takes time, and it usually doesn't end up helping.
There are occasional exceptions. If you're trying to compare two approaches, writing a brief sketch of two algorithms could be a good use of time.
If you do need to write pseudocode, my advice is to use the syntax of a real programming language, but just make up functions that you need in order to make your code concise.
For example, I've seen interviewers try to write pseudocode like this:
if url doesn't start with "https" then return error
Instead, write it like this:
if (!url.startsWith("https")) return -1;
Or if you prefer Python, something like:
if not url.startsWith("https"): raise Exception()
The idea is that it doesn't matter whether startsWith is a real function or not. If it's not, you could easily write it. But by using real syntax, it's clear what you intend.
While it isn’t necessary a book you flat out read but more of a very useful reference.
Introduction to Algorithms, 3rd Edition (The MIT Press) by Thomas H. Cormen
Introduction to Algorithms, 3rd Edition (The MIT Press) https://www.amazon.com/dp/0262033844/ref=cm_sw_r_cp_api_glc_fabc_TkBbGbPB72YSB
It goes over just about every data structure, the pros and cons of each one, algorithm design, and analysis. Pretty much everything you need to be a software developer and to help prepare for any kind of dev interviews.
Adding on - those sites are great to learn the concepts. If you like books:
Also for practice problems, leetcode.com and hackerrank.com
For DSA I always recommend Cracking the Coding Interview (I think I’ve linked it at least 10 times on this sub... cause it works) it’s on amazon rn for 40$:
Cracking the Coding Interview: 189 Programming Questions and Solutions https://www.amazon.ca/dp/0984782850/ref=cm_sw_r_cp_api_i_QtjXCbCN7EEN4
For Big Data/Github Projects, you want to show you understand the pipeline from start to finish. Your projects should show you can find data, clean and prepare it, preprocess, train, test and then deploy. I’d say 99% of people start with the MNIST data set (people who know MNIST are probably laughing right now reading this). Most people you’ll be interviewing against will likely have an MNIST project on their github, so if you want to outshine them, follow this MNIST tutorial but DON’T put it on your GitHub (or do for now but remove it when you add more projects):
https://www.tensorflow.org/tutorials/keras/basic_classification
After following that tutorial, try to repeat the process but with other datasets. There are millions of free datasets available online, pick ones that are relevant to your hobbies outside of work, so when you interview you can start with “I really love blah blah in my personal time, so I decided to train a neural net to recognize blah blah, and so I found (or even better, created) a dataset for blah”
For example, I love going hiking and often wonder what kinds of birds I’m seeing in the forest, so I found a dataset of bird pictures that were labelled, trained a neural net to recognize them, and hooked it up to an app so I can now point my phone at birds when I’m hiking, and find out what species of bird I’m looking at.
As for the management/marketing thing, I can’t really give you any useful information so I’ll leave that to someone else.
Also, sorry for the formatting, I’m in mobile. Good luck!
I think a good book that covers that basic mathematics needed to understand and use algorithms is Concrete Mathematics. Some of the problem sets are rather challenging, but you don’t need any special math knowledge to get started. It covers both continuous math topics, as well as dis*crete*. It’s co-written by the algorithms god himself, Donald Knuth.
If you struggle with some algebra concepts, I would also recommend Khan Academy. I’ve used it pretty extensively to brush up on topics I haven’t seen in a while.
https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025
There#s a few C# cookbooks. Best practice is running through a set of Kata's. Search for "C# Kata"
Alternatively, get the "Crack the Coding Interview" book (https://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850 ) if you're feeling brave.
If you're majoring in Computer Science at basically any university, a course on the subject will probably be required for the major. So, if you're not in a rush, you can probably tackle it as part of the natural progression.
If you want an easy to digest resource that still does a good job covering the concepts to prepare, though, I would always recommend Grokking Algorithms. I link to Amazon because I like having hard copies of everything on hand, but I believe you can also find this exact book online with some Googling.
> ...gain some experience under my belt
I agree with /u/ivix; it's the wrong kind of experience. If you have a CS degree, then you should be developing, not answering phones.
I recently entered the field, and I found https://pramp.com/ to be super useful for technical interviews both over the phone and in-person. They're live, so it feels a lot like a real interview (i.e., nerve-wracking).
Also, Cracking the Coding Interview is a must. There might even be a copy at your library if you don't want to buy your own copy. This walks you through the interview experience at the big software companies (Microsoft, Amazon, Apple, Google, etc.), and teaches you how to solve an algorithm problem, not what the answer to each problem is.
Finally, as dumb as it is, I'd recommend practicing coding on a white board (or a piece of paper). It's stupid that companies do it, but if you practice it, it'll be easier to think about the problem you've been asked and not about how weird it feels to be writing a loop in marker rather than typing it. Write sort algorithms, BFS/DFS, fibonacci, etc. Not that any of that stuff will necessarily help you, but I felt much more comfortable in the actual interview because I was used to drawing code.
Let me know if you have any questions and goodluck!
I will always and forever tell CS students here to take Algorithm Design with Alper Ungor. If you feel somewhat confident with data structures and discrete math, the class will level you up in terms of interview prep and give you an appreciation for the mathematical side of the major in general.
The class goes over a lot of the topics in the Introduction To Algorithms textbook, starting with sorting algorithms and getting into topics related to dynamic programming, graph traversal, computational geometry, P=NP, etc. Ungor seems to have relaxed with how strict he is with undergraduates, he expressed many times that he prefers teaching undergrads and wanted to make the class more appealing to a larger crowd. He also respected the class a ton and took feedback very seriously