
Ask HN: If you had three days to learn the most of CS, what would you study? - Student_TA
Hi HN!<p>I&#x27;m going on an interview for a position as Software Engineering Intern. I applied even though I haven&#x27;t (yet) taken any formal classes on algorithms or data structure.<p>I do have some conceptual understanding of such topics: sorting, searching, data structures and their impact of access&#x2F;lookup times, big-o notations, complexity.<p>The thing is, while I do write code, I rely on library-provided abstraction 99.9% of the time (for example I assume sort method of python&#x27;s list or the qsort function from the c stdlib are going to do a good job).<p>Now comes the real question: assuming I have only a few days before the interview and would like to fill this gap a bit... What would you advice me to study? Topics, websites, anything.<p>What is an absolutely-must-know for an intern?
======
patio11
Ship something which proves you have actual coding ability. Have it ready to
talk about at interview, ideally in a fashion that can be demoed. I'd suggest
scope along the lines of "single-function web application which has a front-
end, has a back-end, consumes an external API, and does one cool thing." Be
able to talk about all of it; steer the conversation to whichever is your
strongest suit. An interview is a conversation: if they don't bring up "Hey
have you built anything recently?" you should bring that up.

Personal opinion: the biggest problem with bright young engineers with
substantial academic CS experience is not that they can't write heapsort on
command. It's that they frequently have never built anything outside of "fill
in this 5% of a toy problem" for undergraduate labs.

It is possible you might be having an interview with someone who values hazing
more than they value shipping, in which case you have my sympathy. If you
think that is extraordinarily likely, be able to apply your knowledge of big-o
and hash tables to decrease the run-time of an arbitrary problem which
screamingly needs a hash table. If you have extra time, brush up on quicksort
or heapsort.

------
devnonymous
Three days is not a whole lot of time to learn enough of CS to convince your
interviewer that you know CS. I would recommend rather than learning something
new, just brush up what you already know. Since you say that you rely on
libray-provided abstractions it would be good to be able to describe and
defend your choices rather than be able to actually implement them -- for
example: you should know the complexity of python data structures, if you are
going to tell your interviewer you trust the sort method of python's lists:

[https://wiki.python.org/moin/TimeComplexity](https://wiki.python.org/moin/TimeComplexity)

Here are some resources that might help you do a focused revision/study:

[https://www.interviewcake.com/](https://www.interviewcake.com/)

[http://www.thecshandbook.com/](http://www.thecshandbook.com/)

[https://codility.com/programmers/lessons/](https://codility.com/programmers/lessons/)

Don't sweat it if you get stuck on something, just move on ahead and revisit
the problem later.

Once you've finished the interview though, I would recommend studying things
deeply, reading a whole lot of real code and coding as much as possible.

------
brudgers
I would advise you to start reading _The Art of Computer Programming_. Not
because you'll maximize your learning over three days, but will maximize it
over your career. And gaining useful habits that last a career is the purpose
of an internship. A career isn't like school. It isn't a series of tests that
one studies for. It's a life of learning and applying over many years.

Good luck.

------
jacalata
Study behavioural questions. Have an answer ready for things like "what do you
hope to get out of this internship", "what do you do when you're stuck", "what
would your first step be if I asked you to make me a coffee pot", etc.

