**CS FAQ**

**How do I write data structure or algorithm X?**

I recommend looking wikipedia. They have huge list of them

**What is computer science?**

Computer science is the mathematics/science of computation and related topics. What makes this so difficult to characterize is that "related" is interpreted very loosely. Instead I'll try and give a feel for topics in computer science.

Computability

Computational complexity theory

Mathematical logic (not exclusive to CS)

Automata (somewhat a subset of computability)

Cryptography

Quantum Computing (has overlaps with physics in the way that computer engineering overlaps computer science)

Machine Learning and Artificial intelligence

Information Theory (the study of quantity of information, transmission of information, and storage of information density)

Formal methods

Programming Languages (which itself is rather broad and vaguely defined as involving "related" fields and frankly modern PL research has less to do with making programming languages)

Computational geometry

In general computer science attempts to stray away from implementation details (but not completely) but deals with all other aspects in a more mathematical and rigorous. In general we try to answer questions in the abstract and not in the specific.

**how do I do this in language X?/How do I do this with tool X?**

These are not generally computer science but can be. Tools like Agda/Coq, SAT solvers, and some other things are tools I use on a daily basis at work. Tools like these targeted at helping to solve problems in computer science might be topics worth asking a question about here but might also not be. For instance a question like "can Coq encode the ackermen function?" which is non-obvious (and the answer is yes!!) would fit. A question like "how do I write this grammar using Antlr?" would not be a good fit. However asking "how do I rewrite this grammar into an LL grammar suitable for a tool like Antlr" would be a good fit.

**How do I start/keep learning**

Check out the resources thread below. Online courses are a good way to get started. After a while of drilling into a particular area you start to run out of good content online. At this point a book is a good place to start. And above all else, do! Writing proofs, algorithms, tools that implement some theory of interest, etc... computer science might be an abstract area but a lot of the research revolves around real implementations like Coq, Agda, SAT solvers, actually implementing the algorithms and data structures in papers, etc...

This post has been edited by **ishkabible**: 13 June 2015 - 05:38 PM