The Elements of Computing Systems by Noam Nisan and Shimon Schocken