Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Just a heads up: this will be a repost from stackoverflow.

As a person who's going to graduate very soon from the university (and who didn't always pay enough attention to what the teacher said) I decided to brush up my "university" CS knowledge (i.e. it's been 3 years since I took my Operating Systems course). I'd like to revise everything (or at least the important stuff) I learned in the past 5 years or so.

The problem is that I don't really need to go through all the presentations/lectures I was given during my courses, since I already know most of that stuff and they tend to be rather lengthy and very detailed. Therefore I'm looking for a book/set of books/presentations that would, very briefly revise all the common CS problems. You know starting with the basics (the definition of an algorithm) and then moving to other topics like algorithms and data structures, programming, databases, networks, operating systems, numerical analysis, probability.

Are there any such materials out there? I tried googling but I always end up finding rather detailed stuff. Obviously it won't be a 10 pages long booklet, but I'm not really looking for a set of 10 books each 1200pages long neither.

share|improve this question
"I work out for the role" - Vin Diesel – Job Sep 4 '11 at 23:19
I don't understand what you're asking for. You're doing this because you didn't pay enough attention, but you don't need to go back over that material because you already know it? Despite knowing all that, you're looking for something that's not too detailed? – Caleb Sep 5 '11 at 1:46
That might be misleading, true - my fault! What I meant by that is that I learned it all but just to pass the exam and forgot a lot right after. Now I want to revise it. – Zenzen Sep 5 '11 at 7:16

You should consider prep books for the Computer Science GRE exam. You'll be expected to know all the stuff you learned in university. My personal recommendation is: Schaum's Outlines: Principles of CS for the GRE.

That books covers algorithms, computer organization, languages, compilers, object oriented programming, operating systems, networking, databases, and social issues. Obviously nothing is in depth, but it's an awesome refresher.

share|improve this answer
Wow that's exactly what I've been looking for! Short, concise and covers all the basics. Of course I dont need too many details since I only want to brush up on what I've already learned. Thanks! – Zenzen Sep 4 '11 at 19:32
Is that book good for someone who doesn't know much about these topics? – Mahmoud Hossam Sep 4 '11 at 19:40
Mahmoud, the main thing is what do you need this knowledge for? – NoChance Sep 4 '11 at 23:15
@Emmad I want to become a better programmer overall, understanding basic CS concepts is one way to being so. – Mahmoud Hossam Sep 5 '11 at 1:38
I just skimmed through the book (will take me probably a few days to read it) but from my understanding it's only a very brief summary of all the topics. So it might be great for people like me who just want to refresh their knowledge. If you want to actually learn it all then I'd suggest getting a separate book for every chapter of that book. – Zenzen Sep 5 '11 at 8:51

Although you implied you might be looking for a book to read, I would suggest reviewing the notes you already have, even if it requires skimming past excess details here and there, could be a much more useful first step.

I'm sure you've covered quite a number of topics, not all of which will be equally useful to you in the future. In practical terms, quite a lot of what you have studied won't be applicable to the particular job you end up doing, let alone interviewing for that posision. Your degree hopefully gives you quite a bit of breadth which will afford you a variety of directions being open to you in the future, however to get hired for a job, you usually need to demonstrate depth of knowledge in specific areas rather than focusing on the breadth. Everything else, you will have the luxury of time (often on the clock even) to go back and review when you actually figure out why its useful to review.

I don't think I've ever had a technical interview that hasn't had questions on data structures and algorithms, for example, but for the types of positions I've applied for I've never been asked about specifics from operating systems, analog systems, etc. Know your data structures solidly, know their big-o time costs for insert, delete, find, and which ones are useful for solving which kinds of problems. Review key topics about the programming language you are applying for jobs in (eg: for java I might review things like inheritance, interfaces, and threading)

If you didn't make study-guides for individual courses when you were studying for your final exams, now would be a great time to go back and skim through the course notes and pick out the "important stuff" and make a to the point "cheat-sheet" you can study and review before interviews.

For data structures, for example, you could make a big chart comparing time costs for certain key operations, make another list that summarizes the pros and cons of each individual data structure. Maybe a brief summary of how that data structure works if you are likely to forget that. Actually taking the time to write (or type) that out (not copy and paste) will help it to sink into your long term memory.

Go through all the notes and materials you have, skimming or skipping over superflouous topics, marking up with notes in the margins about where in the notes important topics are, and decide which materials are even worth saving in the first place. The others either make it hard to find the important stuff, or just become heavy clutter you end up lugging around the next seven times you move, until you toss them.

Think about reviewing from the perspective you would have had studying for final exams, what material out of everything covered was actually important? How could I gather together the most important parts so I don't forget them? For some people, that might mean taking a highligher and pile of post-its to the lecture slides and marking where to start reading about key topics to brush up. For others that might mean writing out in your own words a summary of the key points. Ideally, I would have suggested having already made study guides for yourself in preparing for individual final exams, so that at this point you would only be filtering through your final exam review notes to pick topics to retain.

Periodic review over time is one of the best ways to secure things into long term memory, so creating materials now to facilitate periodic review will help you not lose the recall of important information you've studied. But not everything is important, many things can just be looked up or reviewed if and when they come up in the real world.

Also, I would focus on things you already know, but that aren't so obvious you know them point blank. If there's stuff you "should have covered" but genuinely just don't know, unless its highly relevant to interviews, I would make it a low priority. Not everyone has the same background, or the same knowledge, so the key to interviewing is to convince the interviewer that what you DO know, you know well, and so you can interview confidently. You're never going to know everything, so focus on presenting a solid knowledge of the things you do know.

share|improve this answer
Great piece of advice and I will definitely use it in the nearest future. For now, though, I'm a bit short on time. – Zenzen Sep 5 '11 at 8:54
Shortness of time is why I suggested focusing on the areas of immediate importance :) – Jessica Brown Sep 5 '11 at 17:25
I think filling out the "big O" table by self is a great practice to revise data-structures – nischayn22 Jul 10 '12 at 13:40

I would argue a little with your objective.

If you are trying to prepare yourself for a good job, then you could focus on that job requirements. For example, if you want to be a Java developer, you need to go through some data structures, java, SQL and maybe some Unix, Linux, HTML and CSS.

You can use your course books for most of this if you liked them or see what new editions are out there in each subject. You need to look at the basics otherwise, the task will take forever to complete.

If you want to do web design, you may want to focus on HTML, CSS and your favorite web design tool.

Studying compiler design and finite mathematics may add little value in finding a job as a programmer.

share|improve this answer
Well in my case I'm noot looking for a job I already got a great one. I'm preparing for a PhD entrance exam and of course they will be asking me a ton of stupid unrelated questions. Still I think that there's a bunch of jobs where such revision would be a good idea (i.e. MS, Google etc.). – Zenzen Sep 5 '11 at 7:17

This is probably not exactly what you have in mind, but if you're interested in a hands-on approach, I highly recommend The Elements of Computing Systems (also available as a physical book from Amazon), which will have you simulate a complete, working computer - with its own architecture, instruction set, operating system and even a high-level language - from the ground up in a hierarchic layer-upon-layer fashion, starting from the logic gates level. The website contains everything you need; both the book chapters as well as software resources.

There's really no substitute to learning by doing and experiencing, and anything you learn this way will stick around for much longer. However, the book (which is only 300-odd pages long by the way) only covers a subset of the topics you are expected to study in an undergraduate CS engineering course.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.