“Some books should be tasted, some devoured, but only a few should be chewed and digested thoroughly.”
- Sir Francis Bacon
Initial Thoughts:
While taking courses we usually have a "Required Course Text" that we study in detail to acquire specific bits of technology.
The books I recommend here serve a different purpose; most discuss a philosophy of development or the foundations of a
technology that we consume by reflecting on the material as well as practicing specific skills.
Developing skills with detailed study and practice is an essential beginning. These books help us polish
skills into professional expertise. I think it is a really good idea to pick one concept book each summer to read and digest,
especially if its topics are outside your normal sphere of work and thought.
While I worked in industry we would form a group of a half dozen or so people with a common interest, pick a good book, and
digest it over a a couple of months of lunch-time discussions. Each of us would take a chapter, digest it, and present to the
others. That way we all came away with a working knowledge of an area with relatively little effort and a lot of enjoyment.
Anyway, here's my list of books that will profitably take you out of your comfort zones, listed roughly in order of effort
required, with the quickest first.
Books for Summer Reading:
A Philosophy of Software Design, John Ousterhout, Yaknyam Press, 2018
Why read?
Very well written opinions about what makes good and bad software design. I haven't
finished the book yet, but I agree with most things the author says, so far, and commend
the book to you.
Required Time:
One week of evenings.
Selected Topics:
The nature of complexity, Working code isn't enough, Modules should be deep, Information
hiding (and leakage), General-purpose modules are deeper, Different layer, different abstraction,
Pull complexity downwards, Better togeather or better apart?, Define errors out of existance,
Design it twice, Comments should ....
Effective C++, Third Edition, Scott Meyers, Addison-Wesley, 2005
Why read?
Very well written coverage of most of the essential language features discussed in CSE687-OOD.
This is a nice review of a significant part of the course.
Required Time:
Two weeks of evenings.
Selected Topics:
Most of the things covered in the first ten lectures, excluding project design discussions.
Effective Modern C++, Scott Meyers, O'Reilly, 2014
Why read?
Very well written coverage of most of the essential language features added to C++ in the
standards: C++11, C++14, and C++17.
This focuses on how the new standards have reshaped the language.
Required Time:
Three weeks of evenings.
Selected Topics:
Type deduction, initialization, aliases, smart pointers, move semantics and perfect forwarding,
lambda expressions, and concurrency.
The Art of Readable Code, Boswell and Foucher, O'Reilly, 2012
Why read?
This book offers very practical advice about writing code that has implications for design as well as implementation.
Required Time: Two weeks of evenings.
Topics:
Code should be easy to understand, Packing information into names, Names that can't be misconstrued, Aesthetics, Knowing what to comment,
Making comments precise and compact, Making control flow easy to read, breaking down giant expressions, variables and readability,
extracting unrelated subproblems, One task at a time, turning thoughts into code, writing less code, testing and readability.
Implementation Patterns, Kent Beck, Addison-Wesley, 2008
Why read?
This book offers very practical patterns for code implementation at the idiom and refactoring level.
Note:
This book is one of the best books for you to learn how to write software - even though it has noting to do with software. The ideas
and advice are very appropriate - Thinking well, Getting Launched, Readability, Critical Analysis, Revising, and Proofreading are
particularly appropriate.
Probably Approximately Correct
Why read?
Written by a Computer Scientist, this book looks at learning and evolution of Biological and Artificially Intelligent Systems.
Required Time:
Two or three weeks of evenings.
Selected Topics:
Ecorithms, Prediction and adaption, The computable, Mechanistic explanations of nature,
The evolvable, The deductible, Humans as ecorithms, Machines as echorithms, Questions.
Secure Coding in C and C++, 2nd Edition, Robert Seacord, Addison-Wesley, 2013
Why Read?
This is an important topic for all software professionals and one that my course sequence does not emphasize.
I think it would be a really good idea to read this book, practice its methods, and take one or two of Dr. Du's
security-based courses.
Required Time:
A summer of not so casual reading and probing.
Topics:
Gauging the threat, Security concepts, C and C++, Development platforms, Strings [this chapter is a comprehensive discussion of string types],
Pointer subterfuge, Dynamic memory management, Integer security, Formatted output, Concurrency, File I/O, Recommended Practices.
Why Read?
This book presents essays on Software Architecture. Some are very interesting views into thoughts and processes you may not be
exposed to anywhere else.
Required Time:
Half a Summer of evenings.
Topics:
What is Architecture?, A tale of two systems, Architecting for scale, Making memories, Resource-oriented architectures, Data grows up,
Xen and the beauty of virtualization, Guardian: a fault-tolerant operating system environment, JPC: an x86 emulatore in pure java,
The strength of metacircular virtual machines, GNU Emacs: creeping featurism is a strength, When the bazaar sets out to build cathedrals,
Software architecture: object-oriented versus functional, Rereading the classics.
C++ Coding Standards, Sutter and Alexandrescu, Addison-Wesley, 2005
Why Read?
This book presents guidelines for writing correct, robust, and flexible C++ by two of the best.
Required Time:
Half a Summer of evenings reading and testing ideas.
Topics:
Organizational and policy issues, Design style, Coding style, Functions and operators, Class design and inheritance,
Construction, destruction, and copying, Namespaces and modules, Templates and genericity, Error handling and exceptions,
STL containers, STL algorithms, Type safety.
CLR via C#, Fourth Edition, Jeffrey Richter, Microsoft Press
Why Read?
If you want to know the foundations on which the .Net environment is built, this is an excellent place to acquire that knowledge.
Required Time:
A Summer of evenings if you've already taken CSE681 - Software Modeling and Analysis.
Topics:
CLR Basics: Execution model, Life cycle of applications and types, Shared assemblies
Designing Types: Fundaments, primitive, reference, and value types, ...
Fundamental types: ...
Core Facilities: Exceptions, Managed heap, CLR hosting, Assembly loading and reflection, Runtime serialization, Interoperating with WinRT
Threading: Basics, Compute bound asynchronous operations, I/O bound asynchronous operations, Primitive synchronization, Hybrid synchronization.
Java Concurrency in Practice, Goetz, et. al., Addison-Wesley, 2006
Why Read?
Discusses essential concurrency concepts in a clear, and very complete manner. Much of the material is language agnostic.
Required Time:
A year of careful reading and experimenting, perhaps 8 hours per week.
Selected Topics:
Benefits of threads, Risks of threads, What is thread safety?, Atomicity, Locking, Guarding state with locks, Liveness and performance,
Visibility, Publication and escape, Thread confinement, Immutability, Safe publication,
Designing a thread-safe class, Instance confinement, Delegating thread safety, Adding functionality to existing thread-safe classes,
Documenting synchronization policies, Synchronized collections, Concurrent collections, Blocking queues, Blocking and interruptable methods,
Synchronizers, Building an efficient, scalable result cache,
Executing tasks in threads, The executor framework, Finding exploitable parallelism, Task cancellation, Stopping a thread-based service,
Handling abnormal thread termination, JVM shutdown,
Implicit couplings between tasks and execution policies, Sizing thread pools, Configuring ThreadPoolExecutor, Parallelizing recursive algorithms,
Why are GUIs single-threaded?, Short-running tasks, Long-running tasks, Shared data mode3ls, Other forms of single-threaded systems,
Deadlock, Avoiding and diagnosing deadlocks, Other liveness hazards,
Thinking about performance, Amdahl's law, Costs introduced by threads, Reducing lock contention,
Testing for correctness, Testing for performance, Avoiding performance testing pitfalls, Complementary testing approaches.
Note:
There obviously is a lot of material here - more than you can digest in one Summer. A sensible approach would take one quarter of the book
each season and work on lots of probing examples as you go.
Artificial Intelligence, A Modern Approach, Third Edition, Russell and Novig, Prentice Hall, 2010
Why Read?
Artificial Intelligence technology has been evolving for a long time, has had some significant successes and frustrations. It appears
that AI will play an increasing role in the development of systems in many areas and is likely to be important over the span of your
careers.
Required Time:
A Summer and Fall of careful reading and testing ideas, perhaps 8 hours per week.
Topics:
Introduction, Intelligent agents, Solving problems by searching, Beyond classical search, Adversarial search, Constraint satisfaction,
Logical agents, First-order logic, Inference in first-order logic, Classical planning, Planning and acting in the real world,
Knowledge representation, Quantifying uncertainty, Probabilistic reasoning, Probabilistic reasoning over time, Making simple decisions,
Making complex decisions, Learning from examples, Knowledge in learning, Learning probabilistic models, Reinforcement learning,
Natural language processing, Natural language for communication, Perception, Robotics, Conclusions.
Note:
You aren't going to master AI in a summer reading of this book. But doing a lunch-time seminar using this text for a half year with
enough participants to spread the load would be a really good idea. The idea is to learn about the concepts and know where to look
for more details when you need them.
Other Books Worth Visiting:
The Developer's Code: What Real Programmers Do, Ka Wai Cheung, The Pragmatic Programmers, 2012
Effective JavaScript, David Herman, Addison-Wesley, 2013
Windows via C/C++, Richter and Nasarre, Microsoft Press, 2008