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.
Ask HN: How to best acquire theoretical computer science knowledge?
61–70 of 122 posts
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#62Theoretical 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…
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#63It 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.
You will learn everything from logic gates/transistors to software.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#64Re: Ask HN: How to best acquire theoretical computer science knowledge?
#65Read 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.…
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?
#66Earlier 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…
I don't think the OP is in it for the certificates.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#67Re: Ask HN: How to best acquire theoretical computer science knowledge?
#68Earlier 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…
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?
#69I 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?
#70This 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…
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.