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…
Ask HN: How to best acquire theoretical computer science knowledge?
91–100 of 122 posts
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#92There 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…
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?
#93Re: Ask HN: How to best acquire theoretical computer science knowledge?
#94There 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…
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?
#95Here'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?
#96Re: Ask HN: How to best acquire theoretical computer science knowledge?
#97Read 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…
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#98Earlier 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.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#99My 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.
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?
#100Earlier 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.