Live data from Hacker News

Ask HN: How to best acquire theoretical computer science knowledge?

news.ycombinator.com

61–70 of 122 posts

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#61

Earlier quoted context omitted.

>It depends on how you learn. Some people will recommend Coursera et al., which are great. I tried some Coursera courses, but found that I found the pace too slow and became bored quickly. You can watch the lectures at 2x speed. ;)

Yeah, but you can't jump to the next lesson - unless you wait until the end of the course and see them all at the time, but then you won't get a certificate because you miss the quiz deadlines.

One thing I've noticed with Coursera is that if you join before the course starts, there's often a preview button that seems to show at least the entire course's video lectures. If the content was useful enough to you, you could take the time to download all the videos and could watch them at any pace, and since you'd always be ahead because of your quicker pace you could still do the quizzes, albeit not straight after watching the lectures.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#62
post #42
post #22

Theoretical computer science is probably not what you mean. Theoretical computer science are things like complexity theory (up to arithmetical hierarchy and randomized and approximation algorithms), theory of recursion (up to e.g. Gödel's theorems), (various kinds of) logic, algorithms and datastructures (full of hardcore probability and statistics), etc. Subjects like that give you a firm grounding in the area of co…

IamA graduate student in theoretical computer science. I don't know that I agree with the poster above with respect to: "a top school would require you to study a bunch of mathematics to gain a certain level of rigor of your thinking" Most good schools require only two courses in "pure theory": first an introduction to discrete mathematics, where you learn about logic and how to prove stuff, a smattering of number th…

I think your off base with this. A good school with a good theoretical cs program will always require up to multivariable calc, linear algebra, stats with calc, and discrete math. These are required because they will almost always be essential for doing theoretical work. Sometimes you just need it to properly express and explain complexity of a problem but many times in theoretical work knowledge of advanced mathematics is integral to to the actual research. Your advice is more geared towards what most good schools consider a general cs degree.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#63
post #21

It sounds like you're not quite sure what specifically you are interested in. CS is a very broad field and you could probably study it for a lifetime without scratching the surface. Maybe better to choose a particular hard problem that is interesting and focus on that. Something that would be neat to do but isn't as simple as just calling a few library functions.

I feel like I need to get the foundation that most people get in a BS before i can answer the question specifically. At this point I only know that I have a strong desire to know how computers work on a deep level.

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold

You will learn everything from logic gates/transistors to software.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#65
post #33

Read papers. Read lots of papers. Start with easy ones to learn how to best digest highly academic technical writing then keep pushing. CS is remarkable in how much of its academic knowledge is online, available, for free. Taking advantage of that resource is beyond key. If you know roughly what you want to learn, search out a seminal paper in that area. If it's deep CS, you'll probably find a good one from the 80s.…

In case you want to read papers but don't really know where to get started, here's my collection I've read over the years: http://dl.dropboxusercontent.com/u/315/articles/index.html ... feel free to browse through it and pick up anything that looks interesting. You'll probably want to scroll all the way to the bottom and work your way up the list.

Many of the classics are in there, such as the Plan9 paper and Paxos Made Practical.

If the images are distracting, here's the list without them: http://dl.dropboxusercontent.com/u/315/articles/index_no_ima...

Actually, looking over it, that list isn't very curated. Just Ctrl-F "unix" and that'll take you to some good papers.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#66

Earlier quoted context omitted.

Yeah, but you can't jump to the next lesson - unless you wait until the end of the course and see them all at the time, but then you won't get a certificate because you miss the quiz deadlines.

One thing I've noticed with Coursera is that if you join before the course starts, there's often a preview button that seems to show at least the entire course's video lectures. If the content was useful enough to you, you could take the time to download all the videos and could watch them at any pace, and since you'd always be ahead because of your quicker pace you could still do the quizzes, albeit not straight aft…

You can download the video, and then you can extract the audio and listen to the mp3 wherever you are, as often as you want. At least, that's what I did.

I don't think the OP is in it for the certificates.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#67
Personally I would recommend doing a ms if you can afford it but if you can't I would recommend that you study the following areas Algorithms and data structures (this is a must) Systems organizations and architecture Systems programming Discrete math Math for cs books (generally proof based descrete and calculus based) Statistics and probability Then Start diving into areas that interest you like Metaheuristics Ai Machine learning Computer vision Compilers Device drivers Graph theory Computer Graphics (if your working in theoretical computer graphics strong maths skills are recommended) And the list goes on. Also read papers were in areas of interest. Papers are a great way to learn high level theoretical concepts.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#68
post #42

Earlier quoted context omitted.

IamA graduate student in theoretical computer science. I don't know that I agree with the poster above with respect to: "a top school would require you to study a bunch of mathematics to gain a certain level of rigor of your thinking" Most good schools require only two courses in "pure theory": first an introduction to discrete mathematics, where you learn about logic and how to prove stuff, a smattering of number th…

I think your off base with this. A good school with a good theoretical cs program will always require up to multivariable calc, linear algebra, stats with calc, and discrete math. These are required because they will almost always be essential for doing theoretical work. Sometimes you just need it to properly express and explain complexity of a problem but many times in theoretical work knowledge of advanced mathemat…

My advice is indeed geared towards general CS, it was unclear to me if the original poster wanted to get into heavy-duty theory or just gain a more rigorous understanding of CS in general.

Even at good schools (in the US, anyway) the calc up to multivar that is required isn't done with what I would call good proofs. They'll generally do epsilon-delta definitions of the limit and a few other fun things, but will fall far short of a truly rigorous development of the calculus. Same goes for many introductions to linear algebra and stats with calc courses. Some math departments use linear algebra to introduce proofs and creative mathematical thinking, though, so this isn't always the case.

So if someone is looking to develop how they think in mathematics and they already have a good programming background, they are much better served by taking a discrete math course than any of those sorts of math courses. If they then want to learn calculus, I would recommend self-study from Spivak's "Calculus" book which is a fun and elementary but rigorous treatment of the subject. You get to see not just how calculus works, but why it works, which is sorely lacking in most undergrad calc courses, even up to multivar.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#69
My story is somewhat similar.

I took a BA in Linguistics, worked for a while, then discovered computers. I spent a year on prerequisites and then did an MS in CS. I got good grades and did a thesis and it opened a lot of doors for me.

Some things that an MS CS degree will teach you that you may not have learned as a seasoned developer are: How to invent solutions to cutting edge problems. How to operate at scale using efficient algorithms and appropriate data structures. How to think about problem spaces. How to research. How to operate at the correct level of abstraction and how to get a level deeper when the abstraction leaks. The intersection between math, stats, and software. How to think like a computer.

To me it sounds like that's exactly what you want to do. One way or another you want these skills.

You may want to separate your desire for these skills from your desire to be credentialed for these skills. It is going to take a while to see how employers react to the Georgia Tech online MS. I believe the vast majority will treat it as second-class for a while. The judgment of HR departments is a lagging indicator. But the top tier employers may not care and just test you to see if you walk the walk.

You don't need a top tier school to get a good job. My MS is from a state university, and I work for Amazon.

Re: Ask HN: How to best acquire theoretical computer science knowledge?

#70
post #50

This is the core of a CS degree, each one is class, sometimes multiple classes that go into more detail. All interview questions will basically only cover these topics. 1. Algorithms & Data Structures 2. Baremetal Hardware. ASM, goes into the design of a physical cpu with ALUs, etc. Sometimes you make your own basic CPU. I suggest using a course with ARM ASM, simpler than x86 ASM. 3. Operating Systems & Multithreadin…

4: I've found nothing substitutes for a good teacher. Maybe try Coursera or something of the like?

On 6: You may want to write an interpreter as a first step. Google "bootstrap scheme" for a guy who implemented a scheme-like language in 22 steps. It's pretty cool, I'm following it right now.

If you're looking Look into LLVM. It's a great backend and is practical knowledge if you like what you're doing.

Adding onto languages, if you want the esoteric stuff, look at Factor, or Smalltalk (for more image based programming). Different paradigms are cool.

Post reply on HN