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.
Ask HN: How to best acquire theoretical computer science knowledge?
21–30 of 122 posts
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#22Subjects like that give you a firm grounding in the area of computer science but you could study them for ages especially on your own. These subjects are also not very practical in terms of everyday engineering and on top of that before you even get to that level, a top school would require you to study a bunch of mathematics to gain a certain level of rigor of your thinking. My guess is that this is hard to do on your own.
On the other hand, since you have a related degree already and since you know programming, I would heartily recommend you to study on your own combining two approaches: bottom-up to learn the basics and top-down to immediately start increasing your market value and to start opening doors and to keep yourself motivated to go forward with the more tedious study of the basics.
E.g. say you are interested in distributed systems - you can start reading up on them (top-down) while digressing here and there to learn some of the basics.
Make use of online resources like Coursera for the necessary basics (bottom-up): at least some maths heavy on proofs [1], at least some complexity theory, at least some graph theory, ....
I think a purely bottom-up approach (going to a university) could be a waste of time and money in your case. But you need to emulate it a bit because a purely top-down approach could be too superficial and wouldn't teach you some of the more rigorous thinking you might need.
Whatever you do and learn try to do it in-depth. Superficial knowledge of many things will not benefit you much in the long term while in-depth study of many computer science fields will likely lead you through a series of small enlightenments.
[1] My professor of linear algebra used to insist that we as computer scientists have to know all the proofs of the theorems we were learning - in contrast to mathematicians learning the same subject - simply because we have to know how things are done to the last detail and we have to develop that kind of thinking.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#23So, 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…
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#24So, 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…
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#25Theoretical 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…
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#26I'm going to keep this reply shallow but my advice is dig up a curriculum and course guide for a CS degree (there are many publicly discoverable with Google), establish what all of the main topics and threads are, grab the best/most recommended textbooks for a couple of topics at a time, work through the books a few pages at a time and for anything you don't understand, Google and learn about it. Take copious notes a…
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…
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 really helps in my work, but is surely not for everyone. I already have my dream job for life so my goal is more on becoming well rounded rather than getting a specific job.
From a career POV, should the OP specifically focus on a specific target rather than just aim to get a general CS understanding? Quite possibly! But that's a different discussion/recommendation that I think you could kick off in your own response to OP. So I'm voting you up not because I agree with your criticism, but because perhaps the OP does need to think more solidly about the end goal.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#27My background: I did a BS in CS/Economics but spent most of my time playing online poker and skipping class. I managed to get a job I love on mostly potential, and I've had a great time re-learning all the stuff I was superficially exposed to but didn't work that hard at.
The most important thing is caring about what you do and taking ownership over your own development.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#28If 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…
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#29It 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.
It also depends upon what you consider to be a deep level?
Are you interested in electronics and signal processing, mathematics or the structure/design of programming languages? Are you interested in individual computers or distributed systems? Are you just interested in computers or are you interested in using computers to model other things, like economics, physics or virtual worlds?
At a minimum you could brush up on algorithm / data structure understanding and some of the math behind that. Problem is that as soon you gain understanding of something it will simply expose you to deeper subjects that you don't fully understand. You will never reach the bottom of all of these rabbit holes.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#30I would say pick up a single system, say database (relational or document) or routing, OS, DNS, Web server, A compiler, Filesystem, NFS, etc. and study the hell out of it.
Once you know how to understand a particular system in depth, everything else will start falling in place.