Registration

Registration is open to all current Princeton University students, researchers, faculty or staff.  A single registration covers all sessions. Participants are welcome to attend only specific sessions. The summer school takes place on July 30 and 31 in Lewis Library 138.

CLICK HERE TO REGISTER by Tuesday, July 23 to attend the IN-PERSON ONLY summer school. For questions please email [email protected].

This two-day summer school (July 30 and 31) will provide an introduction to software engineering. Participants will learn about:

  • Version control
  • Debugging and performance profiling
  • Best practices for writing software in Python
  • Software testing
  • Software packaging and publishing
  • Continuous integration and continuous delivery
  • and A.I. tools for software engineering.

This summer school is aimed at Princeton researchers and students looking to transition from simple coding to writing high-quality software that others can use. Each session builds on the previous ones so attendees are strongly encouraged to attend all sessions.

Requirements: Prior experience with Python is required in order to participate in this event. While the exercises are in Python, the lessons learned can be applied to other languages. Knowledge of the Linux command line would be beneficial.

The materials for each session will be posted on this page shortly before each session begins. There will not be video recordings.

Organized and Sponsored by Princeton Institute for Computational Science & Engineering (PICSciE), Research Computing and the Research Software Engineering Group.

Location

The bootcamp takes place in 138 Lewis Library on July 30 and 31. The summer school is in-person only. The materials (e.g., GitHub repositories) will be available on this page after the event.

Agenda

The agenda for the 2-day summer school is shown below:

Day 1: Tuesday, July 30, 2024TimeInstructor
Overview of the Research Software Engineering Group10:00-10:05 AMD. Luet
Good Practices for Research Software Engineering10:05-10:45 AMM. Grzadkowski
Text Editors and Integrated Development Environments10:45-11:00 AMJ. Halverson
Introduction to Version Control with Git and GitHub (Part 1)11:00 AM-12:00 PMM. Niznik
Lunch Break12:00-12:45 PM--
Introduction to Version Control with Git and GitHub (Part 2)12:45-1:30 PMM. Niznik
Debugging and Profiling Python Code1:30-2:15 PMA. Rios Tascon
Break2:15-2:30 PM--
Writing Software in Python2:30-4:00 PMH. Schreiner
Day 2: Wednesday, July 31, 2024TimeInstructor
Introduction to Software Testing10:00-10:45 AMB. Hasling
How to Package and Publish Your Python Code10:45 AM-12:00 PMA. Fang
Lunch Break12:00-12:45 PM--
Continuous Integration and Continuous Delivery12:45-2:15 PMA. Rios Tascon
Break2:15-2:30 PM--
Linters, Formatters and Other Tools and Practices2:30-3:15 PMR. Bierman
A.I. Tools for Software Engineering3:15-4:00 PMA. Solomon

Overview of the Research Software Engineering Group

Tuesday, July 30 at 10:00-10:05 AM

David Luet
Associate Director of Research Software Engineering
Research Computing

Description: An overview of the Research Computing research software engineering group.

Session format: Presentation

Materials: Slides 

Good Practices for Research Software Engineering

Tuesday, July 30 at 10:05-10:45 AM

Michal Grzadkowski 
Senior Research Software Engineer
Research Computing and Computer Science

Description: An overview of recommended practices for researchers and students interested in writing better software.

Session format: Presentation

Materials: PDF

Text Editors and Integrated Development Environments

Tuesday, July 30 at 10:45-11:00 AM

Jonathan Halverson
Research Software and Computing Training Lead
PICSciE and Research Computing

Description: A brief survey of text editors (e.g., Vim and Emacs) and IDEs (e.g., VS Code, PyCharm).

Session format: Presentation and hands-on

Materials: GitHub repo 

Introduction to Version Control with Git and GitHub

Tuesday, July 30 at 11:00 AM-12:00 PM and 12:45-1:30 PM

Mattie Niznik
Research Software & Programming Analyst
PICSciE and Research Computing

Description: This session introduces the fundamentals of Git in an exercise-driven, hands-on format. Even though the emphasis will be on using Git and GitHub for a solo workflow, the material covered will equip participants with the necessary background to start using Git collaboratively as well. It is geared toward anyone looking to learn the basics of using Git to organize their work (and, conversely, how to make their workflows Git-friendly).

Knowledge prerequisites: Comfort with the command line, but no prior experience with Git or other version control systems is assumed.

Hardware/software prerequisites: (1) Participants should have Git installed on their local machines. Chapter 1.5 of "Pro Git" (https://git-scm.com/book/en/v2) describes installation. (2) Participants must have access to a Linux/Unix command line. Mac and Linux users already have this. Windows users can either install an SSH client (https://bit.ly/3QER9Sv) and connect remotely to Adroit, or they can enable access to a Linux command line on their laptop (options include Windows Subsystem for Linux, Cygwin, Git Bash).

Session format: Presentation and hands-on

Materials: Loosely following and supplementing INTERSECT's collaborative-git; review slides also available; learn git branching

Debugging and Profiling Python Code

Tuesday, July 30 at 1:30-2:15 PM

Andres Rios Tuscan
Research Software Engineer I
Research Computing and IRIS-HEP

Description: This session covers the basics of debugging Python code. Performance profiling tools are covered. This allows participants to identify the bottlenecks or the most time-consuming lines in their code.

Session format: Presentation and hands-on

Materials: GitHub repo; Python Profiling on Research Computing Systems

Writing Software in Python

Tuesday, July 30 at 2:30-4:00 PM

Henry Schreiner
Computational Physicist and Lecturer
Princeton Institute for Computational Science and Engineering

Description: The popularity of Python stems in large part from its convenience for creating quick data analyses in Jupyter notebooks. This session will explore how to extend code beyond notebooks to make it easier for your colleagues to validate and extend your analyses. We will cover writing simple scripts as well as more complicated tools with command-line interfaces. Time allowing, we will also discuss the benefits of grouping related scripts into packages, and introduce the basics of structuring packages using object-oriented design.

Session format: Presentation and hands-on

Materials: GitHub repo

Introduction to Software Testing

Wednesday, July 31 at 10:00-10:45 AM

William Hasling
Senior Research Software Engineer
High Meadows Environmental Institute and Research Computing

Description: Software testing is the process of verifying and validating that code works as expected. This workshop covers some best practices for testing code and gives participants a hands-on introduction to testing frameworks for interpreted (Python) with suggestions for compiled languages (C/C++). Though the emphasis will be on unit testing, other forms of testing such as system tests, integration tests, and regression tests will be discussed.

Session format: Presentation and hands-on

Materials: GitHub repo

How to Package and Publish Your Python Code

Wednesday, July 31 at 10:45 AM-12:00 PM

Alice Fang
Research Software Engineer I
Research Computing and DDSS

Description: This workshop will show participants the best practices for making a compatible and installable Python package. Participants will work through a set of hands-on exercises that cover the various steps required to publish a package on the Python Package Index (PyPI).

Session format: Presentation and hands-on

Materials: GitHub repo

Continuous Integration and Continuous Delivery

Wednesday, July 31 at 12:45-2:15 PM

Andres Rios Tascon
Research Software Engineer I
Research Computing and IRIS-HEP

Description: In software engineering, Continuous Integration (CI) is the practice of continuously integrating code changes subject to testing. Continuous Delivery (CD) is the automation of delivering (or deploying) those changes to your community. This workshop provides an introduction to CI/CD using GitHub Actions. Participants will work through hands-on exercises based on a simple Python codebase.

Requirements: Participants will need a GitHub account to work through the hands-on exercises.

Session format: Presentation and hands-on

Materials: GitHub repo

Linters, Formatters and Other Tools and Practices

Wednesday, July 31 at 2:30-3:15 PM

Rob Bierman
Research Software Engineer II
Research Computing and LSI

Description: This session will cover a variety of specialized tools and practices that are essential to working with code.

Session format: Presentation and hands-on

Materials: GitHub repo

A.I. Tools for Software Engineering

Wednesday, July 31 at 3:15-4:00 PM

Amit Solomon
Senior Research Software Engineer
Research Computing and ORFE

Description: This session will introduce participants to LLM-based A.I. tools for software engineering.

Session format: Presentation and hands-on

Materials: GitHub repo

Additional Resources

Online Workshops by INTERSECT
Online Workshops by CodeRefinery

Questions

For any questions, or for more information, please email [email protected].