This book has amazing, helpful material on understanding how to use ADT (abstract data types), generics, and comparables to make modules more portable and reusable. The only reason I didn't give it five stars is that each chapter follows the same pattern such that the redundancy is a but painful a few chapters in. The first time, it helped me to think differently. After that, it made more sense to skim for new information; I feel strongly if you have become that boring in your writing that you are failing students. Examples should have been presented in different perspectives so that students who think differently could each have their aha moment, ideally. Otherwise, the instructions for comments syntax and portability in this book are WELL worth it because they are entirely absent from other texts and are absolutely crucial for good programming documentation and being able to reuse your work.