Summary and Schedule
Writing software is an integral component of the research activities of many astronomers. Increasingly, such software is written in collaborative efforts involving multiple researchers across multiple institutions. Despite this, training for astronomy students and early career researchers in best practices for collaborative software development is often informal and fails to make use of software industry knowledge. The goal of this course is to fill this training gap.
In this course you will be guided through the development of a software package, beginning at proof of concept, and finishing with a project that is findable, accessible, interoperable, reusable (FAIR), and citable by others. This course is presented in lessons which represent development cycles. Each cycle will be another step along the path of making code that you are proud of and can be recognised for.
You can engage with this course as a reading assignment but we recommend that you follow along at home by applying all the lessons learned to your own software project. This course is designed with collaborative software development in mind. Throughout the course there will be self paced ungraded activities to complete that will be marked as either SOLO or GROUP activities. If you are joining this course as part of a group wishing to improve your collaborative software development skills then you should aim to complete all the activities. If you are joining this course on your own then some of the group activities will not be relevant to you and you can skip them as appropriate.
At the beginning of this course you will be taken through a typical research driven development phase. In this phase we will create a proof of concept code which we then build on throughout the course. This project is extremely simple in scope as it intended to be a minimum working example that we can use to demonstrate various development techniques. Many of the examples in this course will refer to the example code. If you have an existing software project we recommend that you use that project when doing the various activities as you will encounter more issues, learn more techniques, and the solutions to the activities will be directly usable and beneficial to you.
| Setup Instructions | Download files required for the lesson | |
| Duration: 00h 00m | 1. Introduction | |
| Duration: 00h 15m | 2. Coding Up A Proof Of Concept |
Where/How do I start a new project? How do I use a function? How do I document and test my code? Can I make a command line interface for my code? |
| Duration: 02h 05m | 3. Developing Software In A Team |
What are some pro/con of developing in a team? What are some common team roles? How can GitHub help managing tasks in a group project? |
| Duration: 05h 05m | 4. Making Code Reusable by You and Your Group |
How do I easily share or re-use my code? When sharing, what information should I provide? Where and how can I easily share code? |
| Duration: 08h 05m | 5. Testing and Documenting Code |
How can I easily document my code? Why is documentation and testing even needed? How do I write and run test on my code? |
| Duration: 11h 05m | 6. Automation and Continuous Integration (on GitHub) |
What is CI? How can I use GitHub to test my code? How do automatically build documentation? |
| Duration: 14h 05m | 7. Sharing Code To The Wider Community |
Why should I share my code? Where and how can I share my code? How can I make my python code easy to obtain/install? |
| Duration: 17h 05m | 8. Recap.md | |
| Duration: 17h 15m | Finish |
The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.
Assumed knowledge and software requirements
This course assumes that you have basic proficiency in python. While python is the language that we’ll be working with primarily, most of the lessons are applicable to any language.
A large part of working in a group will involve keeping track of changes to a shared code base. For this we will be using the git version control system, and in particular we will be using GitHub as the remote repository.
Software requirements
- Python 3.6 +
- A integrated development environment (IDE) or text editor of choice
- We recommend PyCharm or Visual Studio Code
- An operating system which gives you a proper command line
- For windows this means using something like gitbash, WSL, or the Anaconda prompt
- For OSX or Linux the regular terminal will be fine
- git, either from the command line, using a git desktop app, or as an add on to PyCharm or VSCode.
- An account on GitHub is required for some of the activities.
