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.
There isn't really a standard foundation that everyone with a BS in CS has. Curriculum are different and different colleges will emphasize different things, not to mention that many courses are elective. 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 compu…
Ask HN: How to best acquire theoretical computer science knowledge?
41–50 of 122 posts
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#42Theoretical 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…
I don't know that I agree with the poster above with respect to:
"a top school would require you to study a bunch of mathematics to gain a certain level of rigor of your thinking"
Most good schools require only two courses in "pure theory": first an introduction to discrete mathematics, where you learn about logic and how to prove stuff, a smattering of number theory/crypto, graph theory, probability, and automata theory; second an algorithms course that teaches you to analyse and construct algorithms according to certain design methods. Together this is really only a year of mathematics, and both courses are quite fun.
Note that discrete mathematics as taught by a good CS program is NOTHING like the math you learned in high school or elementary school, it teaches you to think creatively about mathematical structures and then justify that creativity with logic.
If you're already a developer, you'll probably have a bunch of latent structures hanging around in your brain that will let you have an easy/fun time with the material in these two courses. I suggest that you study discrete mathematics and algorithms in depth, to the level of some decent undergrad course on each. Learning this material will give your thinking the sort of quantitative/logical "edge" you might want -- these two courses contain the basic mathematical tools common to much of computer science. I do agree with the post above that they are not the most practical things in terms of everyday engineering, though.
Addendum: if you find that you really enjoy the mathematical angle and you think machine learning is cool, also learn linear algebra, because a bunch of machine learning theory and implementation relies on linear algebraic algorithms and concepts. Linear algebra actually would be practical to know if you ever do anything with data analysis.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#43Re: Ask HN: How to best acquire theoretical computer science knowledge?
#44So, 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…
You can watch the lectures at 2x speed. ;)
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#45Re: Ask HN: How to best acquire theoretical computer science knowledge?
#46Earlier quoted context omitted.
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…
How do the processes behind your webapps work? Why or why can't your app support 10,000 clients hitting it at once? What's happening at the HTTP level? The TCP/IP level? Just understanding some of the algorithms behind routing and TCP congestion avoidance could give a ton of food for thought, still get you into learning algorithms, notation, and reading CS papers, but still be more directly beneficial to the day job. I wish you luck however you end up approaching it! :-) The only bit I want to repeat is take a lot of notes.. do blog posts, write articles.. anything to ensure you retain that knowledge because it's so easily lost as you get older.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#47Re: Ask HN: How to best acquire theoretical computer science knowledge?
#48In terms of "taking knowledge to the next level", though, it could mean anything from you wish you knew what red-black trees and big-O notation were, to you'd love to be able to design your own programming language and write a compiler, to you wish you could administer a Linux box. I would actually suggest the best approach here is to find someone with the job you want and talk with them 1:1 to figure out where your knowledge could be most improved.
Also, for Coursera, etc, there are local study groups at places like Hacker Dojo you could join to get some of the benefits of college without the expense.
Re: Ask HN: How to best acquire theoretical computer science knowledge?
#49So, 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?
#501. 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 & Multithreading Theory. You usually do a bunch of C language work here. Maybe combine it with a project on an ardunio or similar.
4. Discrete Mathematics
5. Databases
6. (Optional) Compilers. Write your own compiler, do this after the ASM course.
7. (Optional) Artificial Intelligence. Learn cool things such as machine learning. AI can be very statistical at times, so I suggest adding a Statistics & Probability course to supplement. Statistics is used a lot in business, so it's useful to know for life in general.
8. (Optional) Computer Graphics, using OpenGL!
On top of that I suggest you learn a functional language like Clojure or Haskell. Or both of them. Also learn a language where you have to do memory management and deal with pointers (like C, C++, Objective-C) if you don't include it in your Operating Systems course. After that you can basically do anything in software. Any new language and platform will be just covering concepts you already understand at that point, so you'll be able to learn them extremely quickly.