Electrical engineering student interested in Theoretical computer science 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 ?
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.