©2019 by Doran Bennett


We use GitHub for shared version control of our group codes. You 

should setup up an account soon and make sure you have been added as a collaborator. Here is a good primer and a guide for when we make mistakes.

We often use Fork to manage our local git repositories - especially if you haven't used git before this can ease the transition into shared version control.

We write lots of python code and we use PyCharm to do it. Remember that professional license is free for academics. 

We manage our python environments with anaconda. No python environment is clean for long, but we do our best to make ours maintainable. If you would like some help, this is a nice tutorial

We profile our python code using SnakeViz - you can Conda install it. Just remember -

premature optimization is the root of all evil (in code),

but once you see the bottleneck - fix it. 

We all agree to write our code using a shared style guide. This helps make sure that we can all read our shared libraries. It is also worth looking over the zen of python and PEP8

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.

Readability counts.

-Tim Peters, 1999


If you have not done any coding before then it may be a bit intimidating to get started. We recommend the MOLSSI tutorial as a first introduction to python if you have not seen it before. They also have a number of great coding resources on their site, so make sure to look around a bit from time to time. You might also consider going through the software carpentry course on python and plotting

If you have completed the MOLSSI course but still want more formal education in python before jumping into reading and writing python code on your own, then there are a lot of python courses to choose from. One option is the Python3 specialization from Coursera. Make sure not spend all your time on classes though - read some group code that your colleagues have written and try to contribute!


The Chodera lab has written a nice overview of many aspects a developer needs to think about when writing scientific code. They discuss topics like continuous integration, dealing with python bottle necks, software design and reuse. Many of their discussions are short - so you will need to look else where to learn the details but this provides a great summary to think about. 

Have a suggestion for resources? Let's add it to the list!

This guide by Nathan Shammah outlines a collection of useful tools and a rough framework for open source python development. The discussions are not very detailed - it is intended to give you a starting point for learning more about the tools and approaches to writing maintainable open-source code. 

Most of our code is written in an object-oriented fashion. You will likely want to become comfortable with how classes work in python. Here are some resources that we have found useful. 


Guides to writing papers

If you have not written a paper before (or even if you have!) here are some resources for how we write papers.

1. Storyboard like the paper depends on it

2. Think about the words you use (and the one's you shouldn't)

We use Zotero to manage citations and share bibliography references. Your thesis will thank you.

We use overleaf to write shared latex documents. To help you get used to latex editing the way here is a useful cheat sheet


Spectroscopy arises is many aspects of our research. Understand how experimental measurements are performed and what they mean is essential to developing new theoretical approaches and insightful models.

Photosynthesis is the process by which light can be used to generate chemical energy to support essential cellular functions (e.g. carbon fixation).