Many scientists are self-taught coders and struggle to learn the skills that best support collaboration, rigor and reproducibility, good design, extensibility, and wide community adoption. Like so many other aspects of being a scientist, these are all skills that can be taught and learned via practice.
This nanocourse focuses primarily on tools and habits that make it easier to succeed in writing robust, flexible, and widely-adopted code. Process-oriented topics include Git and GitHub, test-driven development, the workflow of continuous integration, and documentation and software releases. More conceptual topics include principles of good design and the mechanisms for writing high-performance code. Students will be introduced to most of these issues via the Julia programming language, although many lessons will apply broadly.
This course is aimed at people who are comfortable in at least one programming language; it is not suitable for programming beginners. Participants should plan to allocate several hours each week for homework assignments.
- Open source culture, Git, and GitHub (this session is programming-language agnostic)
- "Why Julia?" and a brief tour (students will learn Julia before the next session)
- Testing & principles of design
- Continuous integration, documentation, package versioning, and releases
- High performance computing on your laptop I: understanding and measuring performance
- High performance computing on your laptop II: algorithms, compilers, and inference