Appendix B. More resources
Where should you go next? This book covered a wide swath of topics, and this appendix will connect you with great resources
that will help you explore them further.
B.1 Python
As was stated in the introduction, Classic Computer Science Problems in Python assumes you have at least an intermediate knowledge of the Python language. Here, I list two Python books that I personally
have used and recommend to take your Python knowledge to the next level. These titles are not appropriate for Python beginners
(instead, check out The Quick Python Book by Naomi Ceder [Manning, 2018] for that), but rather can turn intermediate Python users into advanced Python users.
- Luciano Ramalho, Fluent Python: Clear, Concise, and Effective Programming (O’Reilly, 2015)
- One of the only popular Python language books that doesn’t straddle the line between beginner and intermediate/advanced; this
book is clearly aimed at intermediate/advanced programmers
- Covers a large swath of advanced Python topics
- Teaches best practices; this is the book that will teach you to write “Pythonic” code
- Contains numerous code examples for every topic and explains the inner workings of the Python standard library
- Can be a bit verbose in parts, but you can easily skip those bits
- David Beazley and Brian K. Jones, Python Cookbook, 3rd edition (O’Reilly, 2013)
- Teaches common everyday programming tasks by example
- Some of the tasks go well beyond beginners’ tasks.
- Makes strong use of the Python standard library
- A little dated (doesn’t include the latest standard library tools) due to its five-year-old release date; I hope a fourth
edition will come out soon
B.2 Algorithms and data structures
To quote this book’s introduction, “This is not a data structures and algorithms textbook.” There is little use of big-O notation
in this book, and there are no mathematical proofs. This is more of a hands-on tutorial to important programming techniques,
and there is value in having a real textbook too. Not only will it provide you with a more formal explanation of why certain
techniques work, but it will also serve as a useful reference. Online resources are great, but sometimes it is good to have
information that has been meticulously vetted by academics and publishers.
- Thomas Cormen, Charles Leiserson, Ronald Rivest, and Clifford Stein, Introduction to Algorithms, 3rd edition (MIT Press, 2009), https://mitpress.mit.edu/books/introduction-algorithms-third-edition.
- This is one of the most-cited texts in computer science—so definitive that it is often just referred to by the initials of
its authors: CLRS
- Comprehensive and rigorous in its coverage
- Its teaching style is sometimes seen as less approachable than other texts, but it is still an excellent reference.
- Pseudocode is provided for most algorithms.
- A fourth edition is being developed, and because this book is expensive, it may be worth looking into when the fourth edition
is due to be released.
- Robert Sedgewick and Kevin Wayne, Algorithms, 4th edition (Addison-Wesley Professional, 2011), http://algs4.cs.princeton.edu/home/.
- An approachable yet comprehensive introduction to algorithms and data structures
- Well organized with full examples of all algorithms in Java
- Popular in college algorithms classes
- Steven Skiena, The Algorithm Design Manual, 2nd edition (Springer, 2011), http://www.algorist.com.
- Different in its approach from other textbooks in this discipline
- Offers less code but more descriptive discussion of appropriate uses of each algorithm
- Offers a “choose your own adventure”-like guide to a wide range of algorithms
- Aditya Bhargava, Grokking Algorithms (Manning, 2016), https://www.manning.com/books/grokking-algorithms.
- A graphical approach to teaching basic algorithms, with cute cartoons to boot
- Not a reference textbook, but instead a guide to learning some basic selected topics for the first time
B.3 Artificial intelligence
Artificial intelligence is changing our world. In this book you not only were introduced to some traditional artificial intelligence
search techniques like A* and minimax, but also to techniques from its exciting subdiscipline, machine learning, like k-means
and neural networks. Learning more about artificial intelligence is not only interesting, but also will ensure you are prepared
for the next wave of computing.
- Stuart Russell and Peter Norvig, Artificial Intelligence: A Modern Approach, 3rd edition (Pearson, 2009), http://aima.cs.berkeley.edu.
- The definitive textbook on AI, often used in college courses
- Wide in its breadth
- Excellent source code repositories (implemented versions of the pseudocode in the book) available online
- Stephen Lucci and Danny Kopec, Artificial Intelligence in the 21st Century, 2nd edition (Mercury Learning and Information, 2015), http://mng.bz/1N46.
- An approachable text for those looking for a more down-to-earth and colorful guide than Russell and Norvig
- Interesting vignettes on practitioners and many references to real-world applications
- Andrew Ng, “Machine Learning” course (Stanford University), https://www.coursera.org/learn/machine-learning/.
- A free online course that covers many of the fundamental algorithms in machine learning
- Taught by a world-renowned expert
- Often referenced as a great starting point in the field by practitioners
B.4 Functional programming
Python can be programmed in a functional style, but it wasn’t really designed for that. Delving into the reaches of functional
programming is possible in Python itself, but it can also be helpful to work in a purely functional language and then take
some of the ideas you learn from that experience back to Python.
- Harold Abelson and Gerald Jay Sussman with Julie Sussman, Structure and Interpretation of Computer Programs (MIT Press, 1996), https://mitpress.mit.edu/sicp/.
- A classic introduction to functional programming often used in introductory computer science college classes
- Teaches in Scheme, an easy-to-pick-up, purely functional language
- Available online for free
- Aslam Khan, Grokking Functional Programming (Manning, 2018), https://www.manning.com/books/grokking-functional-programming.
- A graphical and friendly introduction to functional programming
- David Mertz, Functional Programming in Python (O’Reilly, 2015), https://www.oreilly.com/programming/free/functional-programming-python.csp.
- Gives a basic introduction to some functional programming utilities in the Python standard library
- Free
- Only 37 pages long—not very comprehensive, but instead a kickstart
B.5 Open source projects useful for machine learning
There are several useful third-party Python libraries optimized for high-performance machine learning. A couple of these projects
were mentioned in chapter 7. These projects offer more features and utility than you can probably develop yourself. For serious machine learning or big
data applications, you should use these libraries (or their equivalents).
- NumPy, http://www.numpy.org.
- The de facto standard Python numeric library
- Implemented largely in C for fast performance
- Underlies many Python machine-learning libraries, including TensorFlow and scikit-learn
- TensorFlow, https://www.tensorflow.org.
- One of the most popular Python libraries for working with neural networks
- pandas, https://pandas.pydata.org.
- Popular library for importing data sets into Python and manipulating them
- scikit-learn, http://scikit-learn.org/stable/.
- Well-tested and feature-full versions of several of the machine-learning algorithms taught in this book (and many, many more)