<p>Theoretical computer science has many dimensions. One of them is the study of programming languages (in
a general sense). Here is a path into this field.</p>

<ul>
<li><p>An introductory textbook on logic like Dirk van Dalen's "Logic and
Structure". There are plenty of other good books on the subject, but
I recommend one that that talks a little bit about proof theory and intuitionistic
logic as both are at the heart of programming language theory's use of logic.</p></li>
<li><p>Followed by an implementation oriented book like John Harrison's
amazing "Handbook of Practical Logic and Automated Reasoning".
After finishing this book you could start coding, for example
SAT-solvers, a highly interesting field, merging theory and
practise. It's competitive too: <a href="http://www.satcompetition.org/" rel="nofollow">http://www.satcompetition.org/</a></p></li>
<li><p>In parallel you can read an introductory text book on the theory of
programming languages.  Alas there is nothing really up-to-date,
reflecting the last 25 years of progress, but Glynn Winskel's "The
Formal Semantics of Programming Languages" might not be the worst
place to start.</p></li>
<li><p>Some, but not all parts of programming language research is
enamoured with category theory. The usefulness of category theory
for programming languages is fiercely debated. But since you've
already mastered abstract algebra, you should be able to pick up
category theory without too much pain. You could start with
"Category Theory" by Steve Awodey, or "Abstract and Concrete
Categories" by Adamek et al. The categorical viewpoint on a lot of
things can be quite mind-blowing.</p></li>
</ul>

<p>You would be well-qualified to dive into more specialised subfields of programming language research with this background.</p>

<p>None of the above would be very useful for the algorithms / complexity
track of theoretical computer science.</p>

CC BY-SA 3.0
2015-02-15T09:42:18.897Z
Thanks for your answer ... I am interested in complexity theory more than the study if programming languages . Sorry, I forgot to mention that earlier.
Vatsal Limbachia
CC BY-SA 3.0
2015-02-15T10:16:56.787Z
SAT solving is very interesting from a complexity point of view because complexity theory suggests that we can't do it, but in practise we do really well. Moreover the algorithms we use in practise for SAT solving (variants of DPLL) are known to be worse (in the sense of complexity theory) than some approaches we don't use. it's all quite mysterious.
Martin Berger
CC BY-SA 3.0
2015-02-15T09:15:55.127Z
2015-02-15T09:15:55.127Z
Martin Berger
<p>I am sophomore studying electrical engineering and I have immense interest in pure mathematics and theoretical computer science. I have studied abstract algebra ,real analysis and little bit of topology and discrete math too. I am also an enthusiastic coder .</p>

<p>What is the 'roadmap' for an engineer interested in theoretical computer science and the best books for an undergrad student , which I should study in order to go ahead in this field ?</p>

CC BY-SA 3.0
2015-02-15T15:34:04.950Z
I think the roadmap for a sophomore is pretty similar no matter what their current major ... especially since you already have a good math background. (1) Take TCS courses (and math courses don't hurt). (2) Get involved in some TCS research with a professor.
usul
CC BY-SA 3.0
2015-02-16T11:40:24.363Z
It might help to check out a couple of related topics, like [this about learning resources](http://cstheory.stackexchange.com/questions/18522/looking-for-learning-resources), and of course the poorly named "everyone-should" lists, like [this one](http://cstheory.stackexchange.com/questions/4074/what-lecture-notes-should-everyone-read).
Basil
<soft-question>
Electrical engineering student interested in Theoretical computer science
Vatsal Limbachia
# Electrical engineering student interested in Theoretical computer science

(Asked by: username_0 on 2015-02-15)

I am sophomore studying electrical engineering and I have immense interest in pure mathematics and theoretical computer science. I have studied abstract algebra ,real analysis and little bit of topology and discrete math too. I am also an enthusiastic coder .

What is the 'roadmap' for an engineer interested in theoretical computer science and the best books for an undergrad student , which I should study in order to go ahead in this field ?

**Tags:** soft-question
> **Comments:**
> **username_1**: I think the roadmap for a sophomore is pretty similar no matter what their current major ... especially since you already have a good math background. (1) Take TCS courses (and math courses don't hurt). (2) Get involved in some TCS research with a professor.  
> **username_2**: It might help to check out a couple of related topics, like [this about learning resources](http://cstheory.stackexchange.com/questions/18522/looking-for-learning-resources), and of course the poorly named "everyone-should" lists, like [this one](http://cstheory.stackexchange.com/questions/4074/what-lecture-notes-should-everyone-read).  

---

## 1 answers

### Answer by username_3 on 2015-02-15. Score: 1

Theoretical computer science has many dimensions. One of them is the study of programming languages (in
a general sense). Here is a path into this field.

* An introductory textbook on logic like Dirk van Dalen's "Logic and
  Structure". There are plenty of other good books on the subject, but
  I recommend one that that talks a little bit about proof theory and intuitionistic
  logic as both are at the heart of programming language theory's use of logic.
* Followed by an implementation oriented book like John Harrison's
  amazing "Handbook of Practical Logic and Automated Reasoning".
  After finishing this book you could start coding, for example
  SAT-solvers, a highly interesting field, merging theory and
  practise. It's competitive too: <http://www.satcompetition.org/>
* In parallel you can read an introductory text book on the theory of
  programming languages. Alas there is nothing really up-to-date,
  reflecting the last 25 years of progress, but Glynn Winskel's "The
  Formal Semantics of Programming Languages" might not be the worst
  place to start.
* Some, but not all parts of programming language research is
  enamoured with category theory. The usefulness of category theory
  for programming languages is fiercely debated. But since you've
  already mastered abstract algebra, you should be able to pick up
  category theory without too much pain. You could start with
  "Category Theory" by Steve Awodey, or "Abstract and Concrete
  Categories" by Adamek et al. The categorical viewpoint on a lot of
  things can be quite mind-blowing.

You would be well-qualified to dive into more specialised subfields of programming language research with this background.

None of the above would be very useful for the algorithms / complexity
track of theoretical computer science.

> **Comments:**
> **username_0**: Thanks for your answer ... I am interested in complexity theory more than the study if programming languages . Sorry, I forgot to mention that earlier.  
> **username_3**: SAT solving is very interesting from a complexity point of view because complexity theory suggests that we can't do it, but in practise we do really well. Moreover the algorithms we use in practise for SAT solving (variants of DPLL) are known to be worse (in the sense of complexity theory) than some approaches we don't use. it's all quite mysterious.  

---

