(sec:readings)=
Resources, Readings, and References
===================================

:::{include} Textbooks.md
:::

## Bayesian Analysis

For a serious introduction to Bayesian Analysis, read sections I through III.A of
{cite:p}`Toussaint:2011`.

## Gaussian Processes

* {cite:p}`Gelman:2013`: A good comprehensive reference.  Available for non-commercial
  from the [author's webpage](https://www.stat.columbia.edu/~gelman/book/).
* {cite:p}`Melendez:2019`: An application to nuclear theory with associated code [`gsum`][].
* {cite:p}`Rasmussen:2006`: Another nice book that formed the basis for the
  implementations in [scikit-learn][].

(sec:linear_algebra_resources)=
## Linear Algebra

* [Essence of linear algebra][]: A great set of highly visual videos by [3Blue1Brown][]
  getting you up to abstract vector spaces.
* [MIT 18.06 Linear Algebra]: A set of [video
  lectures](https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/video_galleries/video-lectures/)
  and accompanying material for the MIT Linear Algebra course.
* [Qiskit Linear Algebra](https://qiskit.org/textbook/ch-appendix/linear_algebra.html):
  A short introduction that is part of the [Qiskit][] platform.
* Appendix A of {cite:p}`Mermin:2007` has a nice short review of Dirac notation.

Somewhat related is
* {cite}`Moler:2003`: **19 Dubious Ways to Compute the Matrix Exponential** is fun
  way to see how a given scientific problem -- computing $e^{\mat{A}}$ -- can be solved
  with many different approaches, each having their own advantages and disadvantages.

## Matrix Cookbook

The Matrix Cookbook {cite:p}`Petersen:2012` contains many useful formulae for working
with matrices (without proof).  This version is rather old, so the following updates may
also be useful:

* [Matrix Forensics](https://github.com/r-barnes/MatrixForensics): An open-source
  repository with a compendium of formulae.
* [The Matrix Reference Manual](http://www.ee.ic.ac.uk/hp/staff/dmb/matrix/intro.html).


## Floating Point Numbers

* {cite}`Goldberg:1991`, **"What every computer scientist should know about
  floating-point arithmetic"** is a bit challenging, but contains all of the details you
  might need to understand about how numbers are represented on computers.

## Programming Problems

Solving problems is a great way to test and improve your programming abilities.  Here
are some collections of fun and interesting problems.

* [Project Euler][]: Mathematical problems (often number theory) that often lend
  themselves to programming solutions.
* [icpc][]: Past problems from the International Collegiate Programming Competitions are
  another useful source.  These have more of a computer-science focus, but can be useful
  practice for some interviews.
* [leetcode][]: Mostly CS and interview types of questions.  One nice feature is that it
  has solutions in multiple languages, thus it acts as a sort of Rosetta stone.
* [Codeforces][]:

:::{toggle} Others
* <https://www.geeksforgeeks.org/top-algorithms-and-data-structures-for-competitive-programming>
  * But see
    <https://www.reddit.com/r/learnprogramming/comments/lot6ah/geeksforgeeks_not_a_good_place_to_get_started/>:
    No quality assurance.
* <https://www.freecodecamp.org/>
* <https://cp-algorithms.com/>
:::

[Project Euler]: <https://projecteuler.net/>
[Codeforces]: <https://codeforces.com/>
[icpc]: <https://icpc.global/worldfinals/past-problems>
[leetcode]: <https://leetcode.com/>


## [Learn X in Y minutes][]

A nice resource for quickly seeing the syntax and features of various languages.  For
example:

* [Python](https://learnxinyminutes.com/python/)
* [Julia](https://learnxinyminutes.com/julia/)


[Learn X in Y minutes]: <https://learnxinyminutes.com/>

## [Software Carpentry][]

If you are not familiar with a distributed version control system like [Mercurial][] or
[Git][], the [Software Carpentry][] program has two relevant courses you should work
through completely:

* [Software Carpentry: The Unix Shell](http://swcarpentry.github.io/shell-novice/).
  Please work-though the course (about 4.5h) if you are not familiar with the Unix
  command line.
* [Software Carpentry: Version Control with
  Git](http://swcarpentry.github.io/git-novice/). Please work-though the course (about
  3h) if you are not familiar with [Git][].



## Tips

These are specific tips and tricks we will accumulate during the course.

```{toctree}
---
maxdepth: 1
glob:
---
Tips/*
```

(sec:references)=
References
==========

```{bibliography}
:style: alpha
```



[MIT 18.06 Linear Algebra]: <https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/>
[3Blue1Brown]: <https://www.youtube.com/c/3blue1brown>
[Essence of linear algebra]: <https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab>
[Qiskit]: https://qiskit.org
[The Pragmatic Programmer]: <https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/>

