This is difficult to answer in general. I have personally used a lot of different solutions depending on the course. For low level courses it may make less difference, but maybe not. I still have many of the text books from fifty years ago that I considered important to my development, and have consulted them.
There are courses in which there are truly ...
I would recommend a mixed strategy. There are two sorts of books that are appropriate for e-books, I think. The first category is books that you need now, but wouldn't intend to keep. This includes books in subjects that are less important to your main objectives. In the US, at the undergraduate level, it might mean books that are required in subjects other ...
I've taught a lot of people SQL in person (over 3000), and I've had to cobble together materials out of a bunch of resources to do it.
For slides, you can use mine, just fork them and remove the branding (they are CC-licensed, the branding is just there to look ...
The fundamental question is, whether your goal is to learn programming (in which case the language doesn't matter at all … theoretically at least) or to learn Java.
If you want to learn programming, the programming language and the version doesn't really matter. It only matters insofar as to understand the examples, and to understand the concepts behind the ...
It is impossible to say which is best, but here are some things to consider.
Some factors: paper books vs e-books
Paper books can be passed on (sold) to pupils in the next year.
E-books can be searched (Depending on Digital Restrictive Management (DRM) ). Sometimes they are less searchable, than paper books. Therefore consider e-books for reference ...
In my experience, students will try to avoid reading even a single full page if they can get away with it. It has also been my experience that most students don't really know how to learn from text, so that they often need a guided activity that utilizes it. This isn't merely to get them to engage with text in the first place, but also to focus their ...
My school district does not buy textbooks anymore. That has been a policy for at least the last five years. I do have a very old set of books for Programming I that I will refer to myself, and that I will check out to students who request one, but they rarely ask for one.
I would guess that this move to a "textbook-less" world will accelerate. School ...
The hardest part of determining anything in computer science is the requirements first. If you don't know what the program should do, then there is no way to do it correctly.
Thus, Winnie the Pooh is a wonderful book on the matter. It clearly describes time and time again how simple misunderstandings of the base assumptions lead to absurdities of action. ...
I'm going to jump the gun a bit here and make a suggestion with less than complete information. Assuming that the students have seen a fair amount of Java and its libraries and also assuming that the book they used isn't terrible on OO concepts then I'd suggest that you run a project course. There are a fair number of possibilities for projects
One is to ...
The timeless way of building — Christopher Alexander (https://www.patternlanguage.com/patterns/justsostory.html)
This is a 3 volume book that includes A Pattern Language. This set of books is probably one of the most influential book from outside of computing to affect computing. It was the seed that started Patterns.
The volume A Pattern Language has ...
Cost can be a HUGE burden on a student or school with textbook prices being absolutely ridiculous.
I think one has to consider how the student will actually be using the book(s). How many times does a textbook go unopened for an entire semester or only brought out due to a required reading.
Do you actually use a textbook lock step with the instruction, is ...
I have read E-books since 2008 (completed one today) and found them useful in:
Save the Trees
Multiple copies enable you to comment out etc.
Searching, etc. is very easy.
Very helpful in finding those books who are unavailable/unheard of/banned in a given jurisdiction.
A course/science may have lot of books and one can't purchase ...
While I like and upped Buffy's answer, I think there's a bit of a pattern that I follow that I'd like to share.
Unless hardware is specifically involved, or the course is heavy on theory, I prefer to avoid textbook use.
When I think a particular book will be useful, I may add it to a recommended reading list.
For Courses with Emphasis on Hardware:
I think you first need to decide what your goals are. Are you interested in computer architecture because:
You want to design computer hardware and so need to understand it at a fundamental level?
Or because you want to write software whose performance is enhanced by an above-average understanding of computer architecture?
Or because you are just mildly ...
For a student, any recent edition will be fine. Don't overthink it. The first task is to become thoroughly familiar with the mental model required of a Java programmer. Or even, for the very experienced, the mental model of a programmer in general.
Most, but not all of the recent changes in Java are in the libraries, but even the more fundamental additions ...
I'll try to give a few actual textbook recommendations.
If the goal is to learn Java for regular programming, I would avoid like the plague any Java book that doesn't at least go through Java 5, at which point it practically became a different language. I have always found David Liang to be quite a clear writer, and his most recent text (finally) introduces ...
My standard answer for this is the following, copied from another answer I've given here.
If you want a thorough study of how to approach and develop algorithms, get a copy of:
David Gries, The Science of Programming
The book will change how you think about algorithms and how they are developed. One of the key ideas is algorithm development from loop-...
Requiring a book makes sense when:
The course is big enough, or vice versa, the book is small enough. If you plan to use 1/10 of the book in your course, maybe you should avoid using a book, or you should search for a smaller book
The topic is well delimited within the scope of the book. There are courses too broad for a book, especially in our field. If ...
We have a class set of textbooks. When I started at this school I was told that I needed to check them out and use them. I talked them down to only issuing me half of the class set and one book went between each pair of computers. They've been in the storeroom for the past 2.5 years.
The first year we also had codes to give out to students so they could ...
Concurrent programming is easy, synchronisation is hard.
Have a look at this video for an alternative to synchronisation: https://www.youtube.com/watch?v=2yXtZ8x7TXw
When you have to synchronize
Use easy (High level) synchronization. see:
Scoop from Eiffel.
Pipelines / message passing
coroutines (for when you don't need parallelisation)
Based on my experience, printed textbook is still the best learning materials. You'll gain maximum benefit for reading comprehension, recite and knowledge understanding from traditional paper based book. Because printed textbook avoid reader from many distraction!
However, you'll able to use eBook for fictional books like novels, comic, etc.
Since the OP asked about functional programming, so I would highly recommend you to read "Learning Concurrent Programming in Scala" by Aleksandar Prokopec, (2014). All the examples for this book are available on GitHub to give you some idea of the book before you purchase it.
I would recommend you to read "Professional Parallel Programming with C#" - ...
Since you said non-programming, rather than non-CS I'd like to add a couple of very small books by V.J Rayward-Smith:
A First Course In Formal Language Theory
First Course in Computability
Both books give an excellent, compact, introduction to important topics and important background for upper-level courses.
Both are available at GoodReads. Hard ...
I find Henry Petroski's book "To Engineer is Human - The Role of Failure in Successful Design" a useful read.
I also suggest Tracy Kidder's "The soul of a new machine", but mainly because I was there...
I also suggest "Scam: Find Out All About Popular Online and Offline Scams and How to Avoid Them" which can be an eyeopener for the naive student.
I also ...
Software Requirements and Specifications — Michael Jackson
The Mythical Man Month, revisited — Fredrick Brooks
Both are software engineering books, however they are very approachable for non computer-scientists / software-engineers. They both have a set essays of various aspects of software engineering.
Examples from the books
De-skilling from SRS:
Your general plan seems good: Do a lot of exercises. An old proverb (Chinese, but maybe more general) is that you don't know something until you've practiced it ten thousand times. (Rule of 10,000).
I've found wikipedia to be quite good, but not perfect, for questions on mathematics. Be a little skeptical if anything seems a bit strange in an article there....
I have found the Shelly Cashman Series® of books to be effective. All too often the focus is on Microsoft products. In this case, Access is the database used in Shelly Cashman Series® Microsoft® Office 365 & Access 2016: Comprehensive, 1st Edition, (2017).
Table of Contents:
Microsoft's New Productivity Tools for School and Work.
A lot has been done since 1973. But for an introduction, the earlier books should be fine.
For a more advanced treatment, choose a modern book, of course.
Another book that I like a lot is On Pascal Compilers by Brinch Hansen from 1985. While it is written in Pascal, it is one of the true pieces of CS Literature. It restricts itself to Recursive Descent ...
I have compiled a set of notes for second Java course that is heavy on OOP. Since the department is switching to Python soon, perhaps these will be useful for somebody else.
The Well Grounded Java Developer has an excellent section on concurrency. The author claims that very few developers correctly implement concurrency. As ctrl-alt-delor put it: concurrency is easy; synchronization is hard.
In fact, avoiding errors from race conditions and unexpected asynchronous behavior is so difficult that the author recommends developers ...