RegistrationRegistration 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 controlDebugging and performance profilingBest practices for writing software in PythonSoftware testingSoftware packaging and publishingContinuous integration and continuous deliveryand 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.LocationThe 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.AgendaThe agenda for the 2-day summer school is shown below:Day 1: Tuesday, July 30, 2024TimeInstructorOverview of the Research Software Engineering Group10:00-10:05 AMD. LuetGood Practices for Research Software Engineering10:05-10:45 AMM. GrzadkowskiText Editors and Integrated Development Environments10:45-11:00 AMJ. HalversonIntroduction to Version Control with Git and GitHub (Part 1)11:00 AM-12:00 PMM. NiznikLunch Break12:00-12:45 PM--Introduction to Version Control with Git and GitHub (Part 2)12:45-1:30 PMM. NiznikDebugging and Profiling Python Code1:30-2:15 PMA. Rios TasconBreak2:15-2:30 PM--Writing Software in Python2:30-4:00 PMH. SchreinerDay 2: Wednesday, July 31, 2024TimeInstructorIntroduction to Software Testing10:00-10:45 AMB. HaslingHow to Package and Publish Your Python Code10:45 AM-12:00 PMA. FangLunch Break12:00-12:45 PM--Continuous Integration and Continuous Delivery12:45-2:15 PMA. Rios TasconBreak2:15-2:30 PM--Linters, Formatters and Other Tools and Practices2:30-3:15 PMR. BiermanA.I. Tools for Software Engineering3:15-4:00 PMA. SolomonOverview of the Research Software Engineering GroupTuesday, July 30 at 10:00-10:05 AMDavid LuetAssociate Director of Research Software EngineeringResearch ComputingDescription: An overview of the Research Computing research software engineering group.Session format: PresentationMaterials: Slides Good Practices for Research Software EngineeringTuesday, July 30 at 10:05-10:45 AMMichal Grzadkowski Senior Research Software EngineerResearch Computing and Computer ScienceDescription: An overview of recommended practices for researchers and students interested in writing better software.Session format: PresentationMaterials: PDFText Editors and Integrated Development EnvironmentsTuesday, July 30 at 10:45-11:00 AMJonathan HalversonResearch Software and Computing Training LeadPICSciE and Research ComputingDescription: A brief survey of text editors (e.g., Vim and Emacs) and IDEs (e.g., VS Code, PyCharm).Session format: Presentation and hands-onMaterials: GitHub repo Introduction to Version Control with Git and GitHubTuesday, July 30 at 11:00 AM-12:00 PM and 12:45-1:30 PMMattie NiznikResearch Software & Programming AnalystPICSciE and Research ComputingDescription: 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-onMaterials: Loosely following and supplementing INTERSECT's collaborative-git; review slides also available; learn git branchingDebugging and Profiling Python CodeTuesday, July 30 at 1:30-2:15 PMAndres Rios TuscanResearch Software Engineer IResearch Computing and IRIS-HEPDescription: 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-onMaterials: GitHub repo; Python Profiling on Research Computing SystemsWriting Software in PythonTuesday, July 30 at 2:30-4:00 PMHenry SchreinerComputational Physicist and LecturerPrinceton Institute for Computational Science and EngineeringDescription: 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-onMaterials: GitHub repoIntroduction to Software TestingWednesday, July 31 at 10:00-10:45 AMWilliam HaslingSenior Research Software EngineerHigh Meadows Environmental Institute and Research ComputingDescription: 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-onMaterials: GitHub repoHow to Package and Publish Your Python CodeWednesday, July 31 at 10:45 AM-12:00 PMAlice FangResearch Software Engineer IResearch Computing and DDSSDescription: 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-onMaterials: GitHub repoContinuous Integration and Continuous DeliveryWednesday, July 31 at 12:45-2:15 PMAndres Rios TasconResearch Software Engineer IResearch Computing and IRIS-HEPDescription: 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-onMaterials: GitHub repoLinters, Formatters and Other Tools and PracticesWednesday, July 31 at 2:30-3:15 PMRob BiermanResearch Software Engineer IIResearch Computing and LSIDescription: This session will cover a variety of specialized tools and practices that are essential to working with code.Session format: Presentation and hands-onMaterials: GitHub repoA.I. Tools for Software EngineeringWednesday, July 31 at 3:15-4:00 PMAmit SolomonSenior Research Software EngineerResearch Computing and ORFEDescription: This session will introduce participants to LLM-based A.I. tools for software engineering.Session format: Presentation and hands-onMaterials: GitHub repoAdditional ResourcesOnline Workshops by INTERSECTOnline Workshops by CodeRefineryQuestionsFor any questions, or for more information, please email [email protected].