Live data from Hacker News

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

news.ycombinator.com

81–90 of 122 posts

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

#81
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…

A precursor to the compilers class is the Formal Automata one. This is very useful in understanding fundamental computation models (what is computation, why, how can we do it etc..). I was recently reading [1] to refresh some concepts and found it to be more engaging than some of the older books on the topic.

[1] http://www.valorebooks.com/textbooks/automata-theory-and-app...

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

#82
post #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 usin…

In order to get into an MS program would I need to do a BS in CS or just do the prerequisites I am missing. Off the top of my head I know that I am missing Calc 2, Calc 3, Linear Algebra, Algorithms, and Operating Systems. Does it matter where I do the prerequisites? I imagine I could just do the maths at a community college.

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

#83
post #79

Doing a BS in CS would be the best, otherwise you will need a ton of self-discipline to learn even a half of what you would learn in a degree program. If you decide to self study, and have enough "mathematical maturity", you will find everything you need on MIT OpenCourseWare, they have all the core courses available online with video lectures, solved homeworks etc. I would start with going through those two first: S…

This is how I am doing it. Currently working through CLRS, but I don't really like the lectures. Also taking Linear Algebra, which is just amazing, btw.

Others have suggested Coursera, but so far, I don't think it is prime time for those who are really serious. I've found that many of the classes are somewhat watered down and I feel as though I am reviewing concepts I already know instead of learning. Too bad there is no mention of EdX here. Their classes are much more intense, complete, and CS-heavy than anything I've seen from Coursera. The grading system is far superior as well. I wish EdX had more love, but maybe the problem is that it is too intense.

A note one SICP. There is so much in that book and it is certainly worth every moment. Just expect to grind long time with it. I wasn't sure how much I really learned from the book until I started making my own projects. I was quite astounded to see how much really did sink in and how much I just understood without any extra searching. I was also saddened to see how certain programming languages don't bend to the ideals found in that book.

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

#84
post #68

Earlier quoted context omitted.

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…

What do you call good proofs? I think what you consider a "good school" is not what I consider a good school. In my calc classes we studied tons of awesome proofs that were very applicable to theoretical cs stuff. Plus most of my linear algebra classes and stats classes were just engineering, cs, and math majors so we once again focused on very useful real world applications and fields of active research.

If someone wants to develop their mathematical thinking and is good at programming descrete math isn't going to help them much because they have probably already seen much of it. They need to be exposed to high level calc and linear algebra to develop their mathematical thinking.

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

#85
post #79

Doing a BS in CS would be the best, otherwise you will need a ton of self-discipline to learn even a half of what you would learn in a degree program. If you decide to self study, and have enough "mathematical maturity", you will find everything you need on MIT OpenCourseWare, they have all the core courses available online with video lectures, solved homeworks etc. I would start with going through those two first: S…

It is hard to beat a good CS curriculum with real teachers, peers, assignments, tests and grades. These things don't work well for everyone, and the pressure can be pretty intense at times, but damnit that pressure can really burn stuff into your neurons that would otherwise go in one ear and out the other. The overlapping of topics and repetition of important concepts are also typically lacking in a self-learning environment, and these things really helped me to pick out what was important in terms of building blocks for more complex things. Coursera et al. are great, they fill a niche, just probably not what you are really looking for.

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

#86
post #79

Doing a BS in CS would be the best, otherwise you will need a ton of self-discipline to learn even a half of what you would learn in a degree program. If you decide to self study, and have enough "mathematical maturity", you will find everything you need on MIT OpenCourseWare, they have all the core courses available online with video lectures, solved homeworks etc. I would start with going through those two first: S…

+1 to this, they distill the 'tricky bits' into examples and homework problems so you move through the common cases as efficiently as possible.

If you actually get the degree it will save you a lot of talk time in interviews and take away your primary disadvantage with the 'big guns' (who basically won't hire you to do theoretical CS type problems without one since they have a bunch of people with CS degrees already applying and so the risk that you're assertion you've done all the work is eliminated by hiring someone with a certificate from a third party saying that you have done all the work)

Without a CS degree you're path is to join doing something non-CS critical and then using networking and influence inside the company to move into the role you want. Takes longer and not as quick until you get to the 'fun stuff.'

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

#87

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…

I'm hearing a lot of companies talking about the desire for "T-Shaped" Developers. I believe this means they do have deep knowledge in at least one area, but also have more general knowledge in a range of topics besides their specialty.

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

#88
There is an alternative approach that inadvertently worked for me that may work well for you, particularly if your goal is to learn things beyond a conventional computer science curriculum. I have been working in high-end theoretical computer science for many years, with significant advances to my credit, but I went to school for chemical engineering. People are often curious as to how I acquired so much esoteric domain expertise in theoretical computer science without spending any time in a computer science class.

Pick an interesting "hard" problem in computer science and attempt to solve it. This works best if either there are no published solutions (e.g. massively parallelizing ad hoc graph search) or the solution space varies widely under the possible parameters (e.g. the design of a unique high-performance database kernel). Iterate, be creative, search the literature for interesting ideas that you can borrow from, and evaluate new designs you come up with. If something does not work, understand how and why and try to fix it. Wash, rinse, repeat.

This sounds like a lot of work, and it is, but there are three unique upsides. First, the challenge of it can be quite a bit of fun in its own right and there is a clear goal of what you are trying to achieve which helps keep you motivated and measures progress. Second, you will cover more of the phase space and explore some tangential theoretical areas while hunting for solutions to narrow sub-problems that you would never be exposed to in a more structured setting. Third, you will invariably explore some unusual or unorthodox ideas that you simply would not be exposed to in a directed, formal program. From the standpoint of being an effective theoretical computer scientist, it will help you develop a unique perspective of the problem space that is different than the perspective that arises from more structured programs.

Also, you might actually solve one of the unsolved theoretical computer science problems you have as your challenge in addition to developing a deep understanding of the surrounding problem space. That happened to me (and then replicated later once I realized it was possible) and it would never happen if I was simply taking courses on the subject matter.

This was an effective way for me to gain in-depth understanding of a diverse range of theoretical computer science areas on an informal basis. One of the downsides is that your rote knowledge will not perfectly overlap what is taught in CS curricula even though what you do know will likely be more valuable (e.g. in spatial indexing some CS courses teach priority trees even though they have no memorable theoretical value).

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

#89
post #63
post #21

Earlier quoted context omitted.

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.

I've already read it. Definitely one of my all time favorites.
Post reply on HN