Think Java: How To Think Like a Computer Scientist
Chris Mayfield, James Madison University
Allen Downey, Franklin W. Olin College of Engineering
Pub Date: 2016
ISBN 13: 978-1-4919295-6-8
Publisher: Green Tea Press
Conditions of Use
Concepts are presented individually, in a fundamentals-first approach, with examples that are simple for students who are learning to program for the read more
Concepts are presented individually, in a fundamentals-first approach, with examples that are simple for students who are learning to program for the first time. It does not assume any previous knowledge of programming or college-level math. It presents the concepts well, without overwhelming the reader with long and complicated examples. It covers the topics for a fundamentals of programming course and even a good introduction to Object-Oriented Programming. All the code is available on GitHub and instructions to use GitHub are provided in the book. It is a good way to give students some experience using code repositories. The exercises are at the right difficulty level to give students some practice. The vocabulary section at the end of each chapter is useful.The index and table of contents are complete.
I have not found any conceptual errors in the book.
The basic programming concepts in the book will continue to be relevant. The code, tested in Java 8 (in book’s edition 6.1.3), should continue to work with new Java releases. New developments in the programming language can be added in newer editions.
The explanations and examples are clear and easy to follow. The exercise objectives and instructions are easy to understand, not confusing or intimidating. The terms are well-defined and the examples are familiar. The vocabulary section in each chapter is a valuable resource for students who need to review the terminology.
It is great that the author updated the textbook in response to the previous reviews. The book is very consistent now, with introductions in every chapter, as well as exercises and vocabulary. The introduction to OOP was moved to chapter 10 and the section on Java documentation was also moved to an earlier chapter. The terminology used is consistent throughout the book too.
The book is now divided in 14 chapters and 3 appendices. The size and section breakdown is good for a semester-long CS1 course. Some advanced topics can be skipped without disruption. The book is not overly verbose which gives students more time to work on their programs. Every chapter has well-defined exercises and students are encouraged to work on all of them.
The book is well organized and the topics flow in a logical fashion. Some of the issues from previous editions have been fixed. Introductions to every chapter are now available. My suggestion is to add a clear list of student outcomes for each chapter. That would be useful for students and instructors alike.
I reviewed the PDF version and it looks good. The links in the table of contents are working. There are clickable links within the text to different sections, such as appendices, and external websites. Having the code printed in color is very helpful. I also like that when a Java keyword is mentioned in the explanations, the font (face and color) of the keyword matches the font in the code samples.
I have not found any grammatical errors.
The text is neutral. The examples are current and unbiased. I have not found any insensitive references.
I found the book to be very accessible to the first-time programmer. It presents programming logic with simple, short examples. I intend to use it in my introduction course.
“Think Java” intends to provide all the topics needed for the beginners to learn Java programming. The vocabulary, comprehensive index, a variety of read more
“Think Java” intends to provide all the topics needed for the beginners to learn Java programming. The vocabulary, comprehensive index, a variety of practice exercises at the end of each chapter, and the links to related material stimulate the interest to learn. However, the text does not include a precise introduction and a concluding summary in many chapters. A sorted list of the vocabulary of all the terms can be presented as a glossary before the index.
The content is correct, easy to follow. In the online version, the text for the following hyperlink shows ?? in Section 1.10. http://greenteapress.com/thinkjava6/html/thinkjava6001.html#code
Any textbook on programming concepts needs to reflect the evolution in the field by updating it periodically. It is essential to keep the users updated by extending a reference to the current Java 9 API documentation.
The author employs a clear and readable writing style with easy-to-follow illustrations.
The vocabulary section at the end of each chapter is neither sorted nor precise in some definitions. The definition of the term 'void method' is included in the vocabulary section of the value methods chapter.
The textbook consists of organized and manageable sections and sub-sections. Still, the void and value methods may be merged into a single chapter to enable readability and ensure continuity.
The text presents all the relevant information needed for a beginner progressively with a few structural issues. The sections in some chapters are not organized with smoothly flowing content. For instance, Chapter 2 entitled "Variables and Operators" does not introduces all the most basic data types. A list of all the operators in Java is not presented in the same chapter. The modulus, relational, and unary increment and decrement operators are introduced in Chapters 3, 5, and 7 respectively.
The text flows clean and includes a useful collection of web-links for relevant reading material. The online version enhances both readability and interest by linking one concept to another.
No grammatical errors found.
The textbook is culturally unbiased.
Overall, the availability of the text in pdf, online and printed forms makes it a useful resource for the post-secondary learners.
The textbook covers all of topics for a post-secondary introduction to programming course in Java (CS1). The topics are presented in a "late objects" read more
The textbook covers all of topics for a post-secondary introduction to programming course in Java (CS1). The topics are presented in a "late objects" order. Each chapter includes a Vocabulary section that is a glossary of the terms introduced in that chapter. A comprehensive index is provided, as well.
The content is completely accurate, error-free, and unbiased.
The computer science concepts are up-to-date, generally. The only error that I found was with a link to the development tool, Checkstyle, in Appendix A. The project has moved from sourceforge.net to github at https://github.com/checkstyle/checkstyle. Because this was located in the Development Tools appendix, it should be easy to update in a future release.
One of the strengths of Think Java is how easily understood the writing is. Keeping the language clear is critical in explaining complex computer science concepts and this book does an excellent job.
I found it to be very consistent.
Reading sections are broken up into sections that are clearly distinguished in the table of contents. This is helpful if you choose to skip, for example, sections 5.8 Recursive methods and 5.9 Recursive stack diagrams because you don't teach recursion until the following semester.
Think Java is very well organized. It covers the core computer science topics using the Java programming language, while gently introducing more advanced concepts, such as the description of Java as a Turing complete programming language in section 6.7.
I read the book with iBook reader on my iPad and MacBook. In both cases it was very easy to navigate and all of the figures appeared correctly. I tested it briefly in Acrobat Reader and had no issues with navigating to the various sections.
I found no grammatical errors.
I found the tone culturally neutral. The examples are mathematics based or with familiar objects, such as a deck of cards.
It has covered the topics that are expected to be covered in a beginning programming course. However, the structure and arrangement of the material read more
It has covered the topics that are expected to be covered in a beginning programming course. However, the structure and arrangement of the material is not smooth. Consistency in presentation is missing.
It is accurate, error-free and unbiased.
The links to the java documentation are provided with explicit URLs. It is unavoidable to update these when a new version of Java is released. The life of programming text books is directly related to the evolution of the programming languages. For example, the latest version of Java is Java 8 and this text book is referring to Version 6.
Abstraction (giving and seeing big picture) is very important concept in Java. Some treatment with real world examples would be useful. Some sub-sections in the individual chapters are out of place. For example "(8.5) Reading Documentation" is applicable to any chapter. It is best to cover and provide details on how to search and navigate java documentation in general in the first chapter itself. It would be good to cover "Chapter 15. Object oriented programming" prior to chapters 12,13, 14.
This book lacks consistency. Many chapters jump directly into the material while some chapters start with an introduction (example: 12 Arrays)
The text is well divided into chapters, sections and sub-sections
It is expected that each chapter starts with the goals of that chapter. "What is covered? What will I learn? Why should I read this chapter?" -- these questions should be addressed in the first few paragraphs of each chapter. Many chapter directly jump to the topic and only a couple of chapters have this introduction.
Here are some issues I have found While navigating the PDF, I can jump to a topic by clicking on the page number in the INDEX. However, you can not do the same thing from TABLE OF CONTENTS. It is very limiting to manually nagivate using "page down" or "search"
Didn't find any issues.
There are no offensive or insensitive references.
Chapters (3) and (6) can be combined into "methods". All the concepts explained in these two chapters are same with one distinguishing feature - one type returns nothing. Another type returns something. Rest of the concepts are same.
The book does a great job on providing fundamental programming concepts in a manner that will make it easy for Students to grasp. Materials are read more
The book does a great job on providing fundamental programming concepts in a manner that will make it easy for Students to grasp. Materials are organized in a reasonable manner, although the chapter on loops could be presented sooner. Each chapter ends with Glossary to further help explain the terms used in the chapter. Each chapter had a good amount of exercises at the end. Overall, the book is very well done, and one that I would use in the classroom.
I did not find any errors. I reviewed about 80% of the presented code, and could not find any issues.
The book’s concepts on programming fundamentals will be long lasting. Java may change with new Versions, but the code/syntax presented in this book is standard stuff, so it also should be long lasting (at least as long as Java is in use).
The author is very deliberate in his explanations of using Java in solving problems and in the overall programming concepts. The author does a very good job with presenting examples and explaining in detail each part of the example. Also there is a consistency in how each example, or programming concept is presented.
As stated in the clarity part of the review, the author is very consistent in how he presents examples and concepts. This is one of the strong points of the book, along with the easy simplistic way things are presented. Very easy for Students to see the concept being presented and to understand how it is coded in Java. Some text books over complicate the example, that is not the case in this book.
The text contains 16 chapters and four appendixes. All the chapters were fairly short in size, so that a Student would not get over whelmed with anyone concept. Each chapter was broken down into concise parts, so that an instructor could easily assign the whole chapter or sub-sections. The chapters are arranged in an order, such that the Student can easily flow from one concept to the next, if reading the book in sequence. The one issue, the chapter on Loops should be presented earlier.
Please refer to the comments in the modularity section. Overall, book is very well organized and structured to the point a Student should have no issue going through the book and following the concepts from one to the other.
The text was very clean and loaded with links to relevant material. The book would benefit if there were some links with in the text to assist in navigation. So one concept or example could be linked to another.
Did not find any grammar errors. Assume the text has been scanned multiple times by now.
The text deals with programming fundamentals, Java syntax, and logic. Not much in the way of cultural relevance in this topic, so it should not be offensive to any group.
Overall very impressed with the book and definitely one I would use in my classroom.
Table of Contents
1. The way of the program
2. Variables and operators
3. Input and output
4. Void methods
5. Conditionals and logic
6. Value methods
9. Strings and things
12. Arrays of objects
13. Objects of arrays
14. Objects of objects
A. Development tools
B. Java 2D graphics
About the Book
Think Java is an introduction to computer science and programming intended for readers with little or no experience. We start with the most basic concepts and are careful to define all terms when they are first used. The book presents each new idea in a logical progression. Larger topics, like recursion and objectoriented programming, are divided into smaller examples and introduced over the course of several chapters.
This book is intentionally concise. Each chapter is 12–14 pages and covers the material for one week of a college course. It is not meant to be a comprehensive presentation of Java, but rather, an initial exposure to programming constructs and techniques. We begin with small problems and basic algorithms and work up to object-oriented design. In the vocabulary of computer science pedagogy, this book uses the “objects late” approach.
About the Contributors
Chris Mayfield, PhD, is an Assistant Professor of Computer Science at James Madison University. His research focuses on CS education and professional development, particularly in K-12 schools. Over the past several years, he has taught introductory CS courses using POGIL and the flipped classroom.
Allen Downey is an American computer scientist, Professor of Computer Science at the Franklin W. Olin College of Engineering and writer of free textbooks.
Downey received in 1989 his BS and in 1990 his MA, both in Civil Engineering from the Massachusetts Institute of Technology, and his PhD in Computer Science from the University of California at Berkeley in 1997.
He started his career as Research Fellow in the San Diego Supercomputer Center in 1995. In 1997 he became Assistant Professor of Computer Science at Colby College, and in 2000 at Wellesley College. He was Research Fellow at Boston University in 2002 and Professor of Computer Science at the Franklin W. Olin College of Engineering since 2003. In 2009-2010 he was also Visiting Scientist at Google Inc.