A first or second year (undergrad) student doing theoretical science to this level is astounding to me. It was an upper-division course for me, albeit a prerequisite for things like compilers and cryptography, so I'm sure it could be put earlier in the journey.
Sipser's "Introduction to the Theory of Computation" was the book I had to read, and it certainly makes this post more accessible.
Sipser's "Introduction to the Theory of Computation" was the book I had to read, and it certainly makes this post more accessible.