Suggested reading ----------------- These notes are self-contained. Nevertheless, as outlined in :ref:`the unit delivery plan` you are expected to carry out independent reading as part of your studies. Moreover, you'll need to do some wider reading for some parts of the Labs. They won't give step-by-step instructions for everything. More generally, there's no need to restrict your learning to the contents of these notes! When debugging code, most people will find support by searching for topics online or via AI, so search and see works best for you. As programming is a very important skill to learn, there are many different sources of additional information you can make use of. The below are some starting suggestions. Shell scripting ^^^^^^^^^^^^^^^ Windows: - Bruce Payette and R. Siddaway, "Windows PowerShell in Action," 3rd edition, Manning, New York, 2017. - `Microsoft online course `_. macOS/Linux: - Arnold Robbins and N. H. F. Beebe, "Classic Shell Scripting," O'Reilly, Springfield, 2005. - `Google shell style guide `_. Git ^^^ Online training materials: - `GitHub getting started guide `_. Books: - Scott Chacon and B. Straub, "Pro Git," 2nd edition, Apress, New York, 2014. `Available online `_. Python ^^^^^^ Alternative online courses: - `Online tutorial from the makers of Python `_. - `Harvard CS50p online course `_. - `University of Helsinki Python Programming MOOC `_. Books: - Al Sweigart, "Automate the Boring Stuff with Python," 3rd edition, No Starch Press, San Francisco, 2025. A very gentle introduction to Python and using it for common computer based tasks. - David Beazley, "Python Distilled," Pearson, London, 2021. A very good summary of Python. Possibly best used once you already have a little familiarity with Python, rather than as a first text. - Micha Gorelick and I. Ozsvald, "High Performance Python," 3rd edition, O'Reilly, Springfield, 2025. For students wanting to go further and write higher performance code. Rust ^^^^ Alternative online courses: - `The Rust Book `_. - `Online tutorial from the makers of Rust `_. - `Comprehensive Rust by the Android team at Google `_. Books - Steve Klabnik and C. Nichols, "The Rust Programming Language," 3rd edition, No Starch Press, San Francisco, 2025. This is a printed version of `the Rust Book `_. - Jon Gjengset, "Rust for Rustaceans," No Starch Press, San Francisco, 2021. For students wanting to go further. C/C++ ^^^^^ Online training materials: - `C++ core guidelines `_. Books: - Robert C. Seacord, "Effective C: An introduction to professional C programming," 2nd edition, No Starch Press, San Francisco, 2020. - Ivor Horton and P. Van Weert, "Beginning C++23: From Beginner to Pro," seventh edition, Apress, New York, 2023. Programming in general ^^^^^^^^^^^^^^^^^^^^^^ Websites covering a wide number of different topics: - `W3 schools `_. Books: - David Thomas and A. Hunt, "The pragmatic programmer," 2nd edition, Addison-Wesley, Boston, 2019. This focuses more on the *art* of programming and software engineering. That is, how to write code that is correct, easy to debug, and easy to maintain. These are very important for any non-trivial software problem. - Erich Gamma, R. Helm, R. Johnson and J. Vlissides, "Design patterns: Elements of reusable object-oriented software," Addison-Wesley, Boston, 1995. Covers design patterns, particularly for objects. These are common ways of structuring the code for good performance.