Principles of Computing by Scott Rixner, Joe Warren, Luay Nakhleh