Live data from Hacker News

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

news.ycombinator.com

91–100 of 122 posts

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

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

Would you recommend taking the math classes before starting the classes you pointed out? I only have had Calc 1 and discrete math before.

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

#92

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 dom…

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.

How do you verify your attempted solutions and talk to other researchers? I've always found it hard enough getting a hold of my own advisor or someone else in our department, let alone someone at an official research institution if I weren't in one.

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

#94

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 dom…

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 eval…

That part has always proven to be pretty easy. For most interesting problem areas of theoretical computer science, there is rarely more than a handful of deep experts. Anyone else you talk to would likely need to invest a lot of effort understanding the nuances of the theoretical problem before they could have an informed opinion, which they aren't going to do. Identify the few real experts on the topic and talk to them.

These individuals have two useful characteristics. First, they can identify 99% of non-solutions immediately upon casual inspection. Second, if you show them something novel in their area of expertise that they cannot immediately dismiss, it piques their interest and they will invest the time to actually understand what you've done. I've never run into a case where I developed a novel algorithm or similar where the other experts working in the field were not happy to study it if I sent them a cold email.

However, a big part of the learning experience is being able to show that a particular algorithm must have a desired set of characteristics solely by its description before you show it to another expert. The unique skill you are learning by doing things this way is how to take an arbitrary set of complex behavioral constraints and designing an algorithm or system that conforms to those constraints. This is very different than the more orthodox course approach where you learn the constraints within which a given set of well-known algorithms exist and then select the appropriate algorithm for a use case. There are many real-world cases where all well-known algorithms cannot fit within the necessary constraints. Designing custom algorithms is not particularly difficult, but it requires grokking all the theoretical knobs that can be turned for a problem space rather than memorizing variants of a particular solutions.

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

#95
I'm a current senior Design & Development option at Penn State. The degree is basically worthless in terms of teaching you real software development. I did learn a lot about the social aspects of working for clients and working in teams, but I did not learn the proper structure to actually work on software. I literally spend all of my free time studying software development and computer science, because I know going to school will only yield me a piece of paper that will get me taken more seriously.

Here's a list of what I've done:

- Learn more languages. Penn State only teaches Java. I've worked professionally with Python, have open source projects in Go, and have read books on Erlang, Haskell, Scala, Clojure. The more languages you know the more abstract concepts you'll know that you can apply in any language.

- Watch online lectures in your free time. MIT Open Courseware, UC Berekely, Coursera, YouTube, InfoQ are all really good resources.

- Start a reading collection. I have tons of books and white papers downloaded that I read.

- Get an interest. I like distributed systems. I honestly don't know much about them, but I think the problems are interesting and I've read some of the important white papers that establish the field. Establishing an interest will help guide you down the rabbit hole.

- Get out there and do stuff. Find a project on GitHub or make one with a circle of friends. Pick something outside your comfort zone. Even if the project never sees the light of production use, you'll learn from the experience. Having your name in open source projects AUTHORS/CONTRIBUTORS files is also very nice.

I'm getting closer to graduating, so I've been reading up on algorithms and data structures again because I know I need brushing up on it. I'm close to getting a compsci minor and was recently debating just getting a masters in it instead. If you want someone to vent your experiences at PSU, feel free to drop me an email.

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

#97
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 M…

Thanks for this. I actually like that it's not curated, it's a good way to discover things I didn't know about. The fluid simulation stuff looks especially interesting.

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

#98

Earlier quoted context omitted.

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 M…

Thanks for this. I actually like that it's not curated, it's a good way to discover things I didn't know about. The fluid simulation stuff looks especially interesting.

Sure, no problem. Let me know if you have any questions or want to chat about random compsci topics.

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

#99
post #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.

I did the exact same thing. You only need to do the prerequisites. No, it doesn't matter where you do them, but it's obviously best if you do them at the same school you intend to attend, as you'll be able to get recommendations from professors in the same department, and obviously the courses will transfer fine.

EDIT: FWIW, at the University of Colorado, I had to do 2 courses above calc 1 - for me that was calc 2 and statistics, as well as 5-6 CS courses.

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

#100

Earlier quoted context omitted.

Thanks for this. I actually like that it's not curated, it's a good way to discover things I didn't know about. The fluid simulation stuff looks especially interesting.

Sure, no problem. Let me know if you have any questions or want to chat about random compsci topics.

I'll probably have some questions after looking over some more of the papers. We seem to have a healthy intersection of common interests. What's the best way to get in touch?
Post reply on HN