Skip to content
Snippets Groups Projects
Commit 2eeca2d4 authored by Rickard Armiento's avatar Rickard Armiento
Browse files

Update collab_proj_course.rst

parent 5fa165d2
No related branches found
No related tags found
No related merge requests found
Pipeline #33751 passed
......@@ -9,38 +9,132 @@
Collaborative Software Engineering Project in Computational Physics
===================================================================
`SeSE PhD course <https://sese.nu>`__, 9 ECTS.
**Register by email to: rickard.armiento [at] liu.se**
Next course start: August 30, 2021.
Info
----
Teacher
-------
Interested participants from academia and industry are most welcome to apply for the course: *Collaborative Software Engineering Project in Computational Physics* given by the Linköping university unit of Materials Design and Informatics and offered within the `Swedish e-Science education (SeSE) <https://sese.nu>`__ initiative.
Rickard Armiento
* Next course start: **August 30, 2021.**
* Course outline: 10 lectures, 4 hands-on exercises, and group work on a collaborative software project in computational physics.
* Teacher: `Rickard Armiento <https://liu.se/en/employee/ricar47>`__, associate professor in Physical Modelling and head of the Materials Design and Informatics unit at Linköping University.
* Homepage: https://mdi.gitlab-pages.liu.se/collab_proj_course.html
Course description
------------------
**Skills**
The course teaches software development and software engineering skills in 10 lectures, 4 hands-on exercises, and a collaborative software project in computational physics. The course is targeted at students who want to elevate their skills beyond "programming" to learn modern practices in collaborative software engineering, applied in the context of a computational physics project. The lectures span both theoretical and practical aspects of a wide range of software engineering topics as well as some selected topics in computational physics. The topics covered include agile project models, software version control, documentation, multi-paradigm programming, testing (unit and integration testing, TDD, CI/CD), currency and parallelism, databases, software development practices in the industry (guest lecture). The lectures also cover the basics of molecular dynamics simulations and exploratory data analysis and visualization. To provide practical training, four hands-on exercises are provided on collaborative version control with git and GitHub, testing/CI, visualization, and computational physics simulations. The students then apply these skills in a larger collaborative project, run according to an agile project model, to develop a software package for molecular dynamics simulations. The project tasks also include executing the software in high-throughput, applying exploratory data analysis and visualization on the results, and collect results in a database. The course will provide sufficient training in essential computational physics and molecular dynamics concepts to allow students with less experience in these topics to participate. Nevertheless, the project also allows engaging more deeply in the computational physics aspects for those with more experience in the topic. After completing the course the students will be able to:
* Evolve your skills from programming → software development → collaborative software engineering.
* Get experience working according to an industry-relevant agile project model.
* The project adds to your software project portfolio (e.g., to show future prospective employees.)
* Train your presentation skills with an oral presentation and a written final report.
**Four hands-on sessions**
* Version control with git, collaborative development on GitHub or GitLab.
* Exploration and visualization of data.
* Molecular dynamics in Python with ASE and ASAP and automated testing (CI).
* High-throughput computations on supercomputers.
The course takes place in the autumn term starting end of august/begninning of september. **For the fall 2021 round (during corona) participation will be possible fully by distance / video link.** (The degree to which this will be offered in the future is not yet determied.)
Dates
-----
**August 30 - October 15** *Introductionary part:* During this time there will be 10 lectures and 4 practical hands-on exercises. During this period the project groups organize, plan, and prepare their projects.
**November 1 - December 17** *Project execution part:* During this time the project groups conduct the project work. The work is coordinated over the Internet using the tools for collaborative software engineering covered in the course.
The project execution part ends with an oral presentation and a written final report. These are meant to be completed before the holidays, but in case the final report needs further revision there is an absolute final deadline in mid-January.
Content details
---------------
The course is aimed at those who want to elevate their skills beyond "programming" and learn modern practices in collaborative software development and software engineering. The course covers methods, tools, and workflows that enables joint software projects. These topics are covered in a series of lectures, hands-on exercises, and a group project in computational physics. The exercises and the project work will primarily use Python.
The lectures span over both theoretical and practical aspects of software engineering as well as computational physics. They introduce agile project models, version control of software, documentation, software testing (automated unit and integration tests, CI/CD), parallel and concurrent execution, databases, exploratory data analysis with visualization, molecular dynamics, and computer simulation of materials.
The hands-on computer exercises provide practical training in version control in collaborative software projects, automated testing (CI), visualization, and computer simulations based on computational physics.
The participants then apply the aquired skills in practice in a collaborative project to develop a software package for molecular dynamics simulations according to an agile project model. The software will be implemented, tested, documented, and run in high-throughput to generate big data which is explored, visualzed, and inserted in a database that is made externally accessible via an open API. The primary part of the project work is ongoing November-December and ends with a final examination in form of an oral presentation by the group and a final report.
The course provides sufficient training on essential computational physics and molecular dynamics to allow students with less experience in these topics to participate. Nevertheless, the project also allows engaging more deeply in the computational physics aspects for those with more experience in the topic.
After completing the course the participants will be able to:
* identify and apply central concepts of collaborative software development and engineering, and be familiar with the basic functions of standard tools.
* design, model, implement, test, document, and deliver a software system using modern practices and methodologies in software engineering, using an agile project model.
* implement, operate, and explore results of software for computational physics simulations.
The course will constructed out of a project in an undergraduate course on the advanced level, which we presently (autumn 2020) run for the first time with good success so far
Preliminary lecture outline
---------------------------
Participation
-------------
**Lecture 1:** Course Introduction and Project Models.
Complete remote participation over the Internet is possible.
- Overview, background, course plan, CDIO, waterfall vs. agile project models, LIPs, Scrum.
Depending on the corona situation, it may also be possible to attend the lectures and hands-on exercises on-site at Linköping University.
**Lecture 2:** Software Versioning and Collaborative Development.
Course dates and organization
-----------------------------
- Version control systems (git, svn), commits/branching/mergning, collaborative workflows with pull requests and reviews (GitHub).
**Hands-on exercise 1:** Git and GitHub.
- Working with a local repository: commits, branches, merging.
- Collaborative software development with pull-requests, reviews, and approvals.
- Creating the shared online repository for your project.
**Lecture 3:** Exploratory Data Analysis by Visualization and Computer simulations.
- Single and multi-property exploration, identifying outliers, descriptors, heatmaps, PCA.
- Introduction to computer simulations in computational physics.
**Lecture 4:** Software Documentation and Licensing.
- Documentation: UML, Comments, Embedded documentation, Sphinx.
- Software licensing: Open and closed source licenses (GPL, MIT, BSD, CC, etc.), CLAs.
**Lecture 5:** Software Engineering in Industry *(intended to be a guest lecture).*
**Hands-on exercise 2:** Exploratory Data Analysis and Documentation.
- Visualization and data exploration in Python (matplotlib, and more.)
- Extracting inline software documentation with Sphinx.
**Lecture 6:** Computational physics.
- Basics of solid state physics.
- Representing materials in computer programs, crystal structures, implementation considerations.
**Lecture 7:** Software Testing, Debugging, and Profiling.
- Unit/integration/system/acceptance tests, black/white box, (non-)functional, test-driven development, coverage, CI/CD.
- Debuggers, profiling tools.
**Lecture 8:** Molecular dynamics.
- Molecular dynamics simulations; integrators, potentials.
- Anatomy of a molecular dynamics simulation program.
**Hands-on exercise 3:** Molecular dynamics and software testing.
- Molecular dynamics with ASE and ASAP.
- Unit tests and continous integration with GitHub actions.
**Lecture 9:** Concurrency and Parallelism.
- Concurrency with coroutines, threads (OpenMP), processes (MPI)
- Supercomputers.
**Hands-on excerise 4:** Supercomputing.
- Supercomputer usage, queue scripts, high-throughput computations, etc.
- Running ASAP-simulations on supercomputers.
**Lecture 10:** Databases, Wrap-up.
- Relational databases, Normalization, Transactions/ACID, SQL; noSQL, mongoDB.
- Access to data via open APIs.
- Computer security aspects in software development.
- Final remarks about the project execution and final phases.
**August 30 - October 15** *Introductionary part:* During this time there will be 10 lectures and 4 practical hands-on exercises. During this period the project groups organize, plan, and prepare their projects.
**November 1 - December 17** *Project execution part:* During this time the project groups conduct the project work. The work is coordinated over the Internet using the tools for collaborative software engineering covered in the course.
The project execution part ends with an oral presentation and a written final report. These are meant to be completed before the holidays, but in case the final report needs further revision final deadline is January 15, 2022.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment