Live data from Hacker News

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

news.ycombinator.com

31–40 of 122 posts

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

#31
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.

Uff, there's so much to go through there. It's turtles all the way down.

Start with a course on computer architecture / digital design. Something that'll have you put together a simple 8 bit CPU. Move your way up with a course on operating systems - processes, swapping, cache invalidation, file systems, drivers.

Then, maybe something on compilers? Or how to write your own interpreter.

Finally, a good networking course is pretty important.

Very little of this is theoretical compsci, but it's something that will get covered in a degree program. That said, knowing how to recognize what kind of class of algorithm we're looking at, and data structures all around.

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

#32

Earlier quoted context omitted.

Frankly I think that's the worst advice you could give anyone for whatever subject: i.e. "when you find something you don't know about, study it". The best course would be to pursue a targeted learning, and by that I mean, do you wanna be a data scientist? Then you should study probability theory and statistics along with the relative algorithms instead of reading something about Prolog. Do you wanna become a softwar…

I concede it's not the best approach if someone has a specific goal like, as you suggest, becoming a "data scientist", a "compiler developer", or a quant, etc. In my case (and what I felt was the case for the OP) a general, broad level of knowledge is paramount. I then study deeper on an as-needed basis off the back of my broad but shallow knowledge. Being able to tie together the basics of many unrelated areas reall…

[deleted]

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

#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. Seek out every citation that's proximal to a sentence in that paper that confuses or excites you. Search on Google Scholar for all the recent papers that cite the one you found and begin eating up the chain that direction. When you find a deep topic you want to learn more of—set theory, logic, formal languages, discrete math, matrix analysis, automata theory, geometry, topology, &c.—don't be afraid to look for a good book on the topic. There are resources around the internet answering "What's a good introductory book to X" for all kinds of X.

If you don't know the general area you're interested in then I recommend the exact same strategy but with greater emphasis on following citations that make connections to other areas of CS. Additionally, pick a few disjoint topics (Category theory, system architecture, graph theory) and follow them all simultaneously looking for connections.

Formal languages, automata, and process algebras form a really fundamental mathematical course of study that I'd highly recommend to anyone interested in "why" CS works. Optimization, matrix analysis/linear algebra, and diffeq form a great basis for simulation and machine learning.

Generally, for any of these routes, learn to find your boundary of knowledge. Studying source material is very challenging because any given paper will tend to assume many things about your background. Most of those assumptions will be false and lead to density of the paper. You can often power through without them, but you can also take it as an indication of a new place to study.

Finally, see if you can find a study group or journal club. I'm not there, so I don't have firsthand experience, but I'm sure there are many in the bay area.

(Oh, and if you read mathematical papers/books don't skip the proofs and exercises. That'd be like reading the iOS documentation without ever programming anything.)

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

#34

The other responses are great. But one meta point I think is worth making. Don't overestimate how much competency you gain from just getting a CS degree. Lots of people coasted their way through undergrad without internalizing a heck of a lot. The fact that you are motivated to go out and get knowledge puts you, IMO, at a great advantage. My background: I did a BS in CS/Economics but spent most of my time playing onl…

This is why I am considering the BS. I already had the college experience at Penn State. Meaning parties, friends, girls, football, etc. This time it would be purely about going to class and learning. I bet I wouldn't even have to do Gen Eds since I already have a BS.

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

#35

The other responses are great. But one meta point I think is worth making. Don't overestimate how much competency you gain from just getting a CS degree. Lots of people coasted their way through undergrad without internalizing a heck of a lot. The fact that you are motivated to go out and get knowledge puts you, IMO, at a great advantage. My background: I did a BS in CS/Economics but spent most of my time playing onl…

I agree.

Education will not teach you anything, but it will give a great opportunity to learn. Many will simply learn enough to get through exams and then promtly forget everything again.

You will also get introduced to concepts and areas you would never even think of exploring otherwise. I thought graph theory sounded boring, but now I enjoy it. Formal languages and automata theory? Physics? Electronics? Hardware design? These are topics I would never have explored if it wasn't for going to university.

Artificial intelligence, compilers and operating systems are topics I probably would have explored, but I sincerely doubt I would go as deep as I have.

Also do not underestimate the effect deadlines can have. Procrastination is a constant evil in my life somewhat negated by school forcing me to do things.

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

#36

Earlier quoted context omitted.

Frankly I think that's the worst advice you could give anyone for whatever subject: i.e. "when you find something you don't know about, study it". The best course would be to pursue a targeted learning, and by that I mean, do you wanna be a data scientist? Then you should study probability theory and statistics along with the relative algorithms instead of reading something about Prolog. Do you wanna become a softwar…

I concede it's not the best approach if someone has a specific goal like, as you suggest, becoming a "data scientist", a "compiler developer", or a quant, etc. In my case (and what I felt was the case for the OP) a general, broad level of knowledge is paramount. I then study deeper on an as-needed basis off the back of my broad but shallow knowledge. Being able to tie together the basics of many unrelated areas reall…

The goal is simply acquire a much deeper understanding of computing that I feel I missed out on by not studying CS in college. I see myself as extremely employable doing app and web development for the immediate future. Under the hood everything is like magic to me and I don't want to feel like that. I also feel like I don't know enough to know what my dream job in computing is yet. Your thoughts are limited by your knowledge.

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

#37

The other responses are great. But one meta point I think is worth making. Don't overestimate how much competency you gain from just getting a CS degree. Lots of people coasted their way through undergrad without internalizing a heck of a lot. The fact that you are motivated to go out and get knowledge puts you, IMO, at a great advantage. My background: I did a BS in CS/Economics but spent most of my time playing onl…

This is very true, having been exposed to something 10 years ago to a sufficient level to score 50% on an exam paper is very different from having an applicable knowledge.

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

#38
post #12

If you're OK learning on your own, you might try buying a book before committing to the cost of tuition, also. If you really mean "theoretical CS" I don't think you can go wrong with Sipser. The latest edition[1] is expensive, but a used copy of the second edition [2] isn't TOO bad, considering the cost of another few years of education. [1] http://www.amazon.com/Introduction-Theory-Computation-Michae... [2] http://w…

I second Sipser's book. Probably the best textbook I used in university. You can find international editions for a very low price.

International Editions:

http://used.addall.com/SuperRare/submitRare.cgi?author=sipse...

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

#39

So, what is the best way for a proven and largely self taught developer to take their knowledge to the next level? 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. For me, reading always works the best, since I can adjust it to my pace. You could look up a curriculum (as someone e…

Any reason to go for Sedgewick and Wayne over CLRS? I haven't read the first one so just curious.

I've read both and they are VERY different algorithms books. Some differences:

* Sedgewick has no proofs in his book (or at least very few). CLRS has a lot of proofs in it.

* CLRS uses pseudocode, while Sedgewick uses actual code. I think they use Java now (it was Pascal in the edition that I had used).

* Sedgewick is really a practitioners introduction. It views the algorithmic problem as the jumping off point. Whereas CLRS is more an intro for people who are going to study computer science -- so it focuses on the methods.

Both good texts. I think for most programmers I'd recommend Sedgewick, but if your goal is to be a computer scientist, then I'd recommend CLRS.

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

#40
The previous suggestions are all good, but here's another tack, possibly better for self-teaching.

Tackle a big project: write an extensible text editor, design and implement a language and runtime, design and implement a new garbage collection system, or the currently quite popular RSS reader and feed provider.

Post reply on HN