Computational Neuroscience Resources

Almost no-one coming to computational neuroscience has a degree in computational neuroscience: most have degrees in biology, physics, mathematics or AI. Therefore, I often receive the question what good introductory material is. Here, I compiled a list of some introductory material I like. And don’t get scared, here’s a nice ‘ten rules’ paper on how to structure your project, or any multi-disciplinary project.



General introduction into computational neuroscience by the Bernstein Centers in Germany:

Explanation of Aeon Magazine about the importance of the definition of information by Claude Shannon:




neuromatch academy logo


The recent Neuromatch Academy provides a complete set of tutorials including videos, assignments, slides and texts on a wide range of computational neuroscience topics:

World Wide Neuro keeps track of all online presentations and workshops in neuroscience!

Finally, for some general inspiration, I really like the ‘Growing up in Science‘ series!


Lists made by others

  • Dan Goodman makes a nice list of freely available resources.
  • The Open Source Brain project also keeps track of the recent and available books
  • This GitHub list contains books, data, courses and much more!

My personal preferences

  • Scholarpedia: peer reviewed short explanations about a plethora of topics, often by the original authors themselves!
  • Dayan, P., & Abbott, L. F. (2001). Theoretical Neuroscience: Computational and Mathematical Modeling of Neural Systems. MIT Press.
  • Gerstner, W., Kistler, W. M., Naud, R., & Paninski, L. (2014). Neuronal Dynamics (freely available online)
  • Izhikevich, E. M. (2007). Dynamical Systems in Neuroscience: The Geometry of Excitability and Bursting. MIT Press. (online)
  • Rieke, F., Warland, D., de Ruyter van Steveninck, R. R., & Bialek, W. (1997). Spikes: Exploring the neural code. In T. J. Sejnowski & T. A. Poggio (Eds.), Computational neuroscience. MIT Press.
  • Miller, P. (2018). An introductory course in computational neuroscience. The MIT Press.
  • To come out soon: Lindsay, G. (2021). MODELS OF THE MIND: How physics, engineering and mathematics have shaped our understanding of the brain. BLOOMSBURY SIGMA.

Online tutorials

Linear Algebra and more essential mathematics

In many Dutch universities, BSc curricula in Biology do not include linear algebra (i.e. doing calculations with vectors/matrices) or Fourier analysis (i.e. looking what frequency oscillations are in a signal). Here are some good introductory courses


Machine learning

  • A great ‘normal language’ explanation: vas3k
  • A great starting kit in Python: scikit-learn

Best Practices for writing code and organising data

Some random tips from myself.  

  1. Separate the simulation (i.e. the code that generates data) and the analysis. So basically, make a folder with code that does the simulations, a folder with results from these simulations (i.e. ‘raw data’) and a separate folder with analysis code and results
  2. Store your simulations settings, your parameters, with your data, so that you can always see what parameters were used for a simulation
  3. Generate data-filenames automatically, in a logical way (i.e. the type of network, the data, maybe a parameter value)
  4. In your code: choose local names for variables and parameters (i.e. not ‘x’and ‘y’ but ‘membrane_potential’ and ‘input_current’)
  5. Comment! Explain what you do and why! And make README files on how to use your code. Start a function with a summary, and what goes in and what goes out. 
  6. Use functions and/or classes/objects to organize your code, no long scripts please! Rule of thumb: more than 20 or so lines of code means a function.
  7. Make a single ‘settings’ structure or library with your chosen variables and parameters, that you both pass to your simulation function and store with your raw data (see 2): this way you can easily add new parameters if you have to, without having to rewrite your functions
  8. Use version control! Otherwise, you will one day ‘break’ your code and not be able to put it back in working order.
  9. Do NOT use global variables, ever!
  10. Do NOT comment out parts of your code if you want to change a setting.
  11. Do NOT copy-paste pieces of code: if you want to do that you have to create a function
  12. Put ‘sanity checks’ in your code, and create logical error messages.
  13. Use the debugging tools that your system provides. For Matlab: try…catch, keyboard, for Python ipdb tools.
  14. For Python: use Anaconda
  15. (Finally, a tip for supervisors: let a new student start with existing code and let him/her update the code with comments. This way, the student will learn what makes a code easy or hard to understand, and the code itself gets improved!).

Tools and references

This is not an exhaustive list, others have thought more deeply about this:

And some helpful tools and courses:


Summer Schools

As a starting PhD student, a summer school is a great way to learn the most recent advanced of the field, and get to know people. I can recommend the following ones:

Courses in Dutch / in the Netherlands

Physical courses in the Netherlands: Marieke van Vugt, Jorge Mejias and me try to keep track of all computational neuroscience university courses in the Netherlands. Please take a look here!

For some introductory slides in Dutch, here are some lectures slides about modelling of neurons and networks (1, 2, 3) an introduction to decoding, some introductory slides about (un)supervised learning (1, 2) and reinforcement learning (1 ,2).