gwu-libraries / OSPO

GW's Open Source Programs Office
2 stars 0 forks source link

Develop the first set of learning modules #42

Open labarba opened 7 months ago

labarba commented 7 months ago

First, essential topics to develop teaching materials for:

Ideas:

Scanned Documents.pdf

labarba commented 7 months ago

Example JupyterBook for Python Camp: https://gwu-libraries.github.io/python-camp/intro.html

labarba commented 4 months ago

Michael proposed a list of workshops on a Google spreadsheet.

It is titled EMSE 6992 / SEAS 6800 - Management of Research and Software Development in Python indicating that this is a WIP for a credit-bearing course.

labarba commented 4 months ago

Converted Google sheets content to Markdown, and pasted below.

Module Number Module Class Number Topics Learning Objectives
1 Local Development 1 Course Introduction; Python Language Review; Python Notebooks w/ Google Colab Learn about the course and course tools
Review Python notebooks (specifically Google Colab) as a tool for research and software development
1 Local Development 2 Local Development Tools: Text Editor (VS Code), Command Line Computing; Virtual Environments w/ Anaconda, Package Installation Management w/ Pip; Jupyter Notebooks Download and install and become familiar with local development tools like a text editor
Create and activate virtual environments to manage installations of different versions of the Python language
Install and manage code dependencies using pip, and use a requirements file to list package dependencies
1 Local Development 3 Version Control w/ Git; Code Repository Management Understand version control workflow, including staging, committing, pushing, and pulling
Practice using Git to save incremental versions of your code, and upload them to GitHub
2 Code Maintenance and Quality Control 4 Code Simplification; Refactoring; Code Organization and Modularity Learn how to organize your code in a modular way
Simplify your code to remove duplication and improve maintainability
2 Code Maintenance and Quality Control 5 Automated Testing; Continuous Integration w/ GitHub Actions Implement automated tests and discuss their benefits
Run automated tests on a Continuous Integration server
2 Code Maintenance and Quality Control 6 Developer Collaboration w/ GitHub; Pull Request Workflow; Code Reviews Practice collaborating in the open with other researchers and developers
Understand pull request workflow, which provides an opportunity for automated checks and collaboration
3 Open Science 7 Authoring, Releasing, and Maintaining Python Packages Publish a package to the PYPI, so others can install and use your code.
Use GitHub Actions to automate the package release process
3 Open Science 8 Package Documentation, Docstrings, and Documentation Site; Documetnation Site Publishing Tools (Jupyter Book vs Quarto); Publishing to GitHub Pages) Document your code, and publish a documentation site to help others understand how to use it
Automate the documation site generation process using autodoc tools
3 Open Science 9 Scholarly Writing and Open Science; Article Structure; Citations; Journal Submission Process; Quarto Manuscript Template; Reproducible Research Familiarize yourself with scolarly article publishing tools and workflow
Publish your scholarly research in the open
4 Production Software 10 User Facing Applications w/ Flask, Part I (Routing and Views) Develop user-facing web application software
4 Production Software 11 User Facing Applications w/ Flask, Part II (Authentication and Datastores) ... continued
4 Production Software 12 Server Management; Deploying Applications to Production Practice deploying research and application code to a user-facing production server
N/A [Group Projects] 13 [Project Working Session]
N/A [Group Projects] 14 [Project Presentations]
labarba commented 4 months ago

I worked with Jupyter AI to generate more detailed LOs for each module:

SEAS-6800.pdf

labarba commented 4 months ago

Here are short descriptions for Michael's proposed modules (generated with get-3.5 using the LOs above)


This course module focuses on utilizing Jupyter notebooks, such as Google Colab, to write and execute Python code for research and software development. Students will demonstrate proficiency in Python language essentials, including variables, data types, loops, and functions, as well as analyze and troubleshoot Python code in Jupyter notebooks. Collaboration with peers in sharing Jupyter notebooks, providing feedback on Python code, and evaluating the benefits of using Jupyter notebooks for projects will be emphasized. Students will also develop and present a project to showcase their understanding of course concepts and critically assess the impact of Python language essentials and Jupyter notebooks in computer science.

This course module will guide you through setting up a coding environment by downloading and installing a text editor and creating virtual environments using Anaconda. You will learn how to activate and manage virtual environments, install code dependencies using pip, create requirements files, and utilize Jupyter Notebooks for interactive coding and data visualization. Additionally, you will gain skills in effectively managing package installations within virtual environments using pip.

In this module, students will learn how to set up a Git repository for version control and effectively track changes in code using the staging and committing process. They will also explore Git commands to push code to a remote repository on GitHub, employ branching strategies to manage different versions of code, and collaborate with peers by pulling and merging changes from a shared repository. Additionally, students will develop the skills to troubleshoot common Git errors and conflicts and evaluate the importance of version control in software development projects.

In this module, you will learn how to identify and refactor areas in code to enhance readability and maintainability. You will practice simplifying complex logic, removing duplicate code, and applying principles of code organization to improve modularity and reusability. By developing a structured approach and using tools effectively, you will be able to organize code into modules for scalability and evaluate the impact of code simplification on software quality and efficiency.

This course module will focus on the benefits of implementing automated tests in software development projects, teaching participants how to write and execute automated tests on a Continuous Integration server. Students will learn to analyze test results, collaborate with team members to troubleshoot issues, and evaluate the impact of Continuous Integration on the development process. By the end of the module, participants will be able to develop a plan for integrating automated testing into a Continuous Integration workflow.

Students will learn how to collaborate with researchers and developers in an open environment, using the pull request workflow to propose changes and provide feedback. They will implement automated checks to maintain code quality and engage in code reviews to enhance their peers' work. Through GitHub, they will apply version control principles and communicate effectively with team members using features like issues, comments, and notifications.

In this course module, students will learn how to develop a Python package ready for publication on PYPI and implement GitHub Actions to automate the release process. They will demonstrate their ability to release a Python package to PYPI for public use and evaluate the importance of maintaining and updating packages for long-term usability. Additionally, students will analyze the benefits of using version control systems like Git for package development and create documentation to enhance usability for other users.

This course module focuses on the importance of writing clear and concise documentation for code readability and maintainability. Participants will learn how to create a documentation site using tools like Jupyter Book or Quarto, and publish it to GitHub Pages for wider accessibility. By utilizing autodoc tools, students will automate the generation of documentation for code elements, demonstrating proficiency in documenting code and publishing a documentation site for a software project. Additionally, they will evaluate and select appropriate tools for publishing documentation based on project requirements and audience needs.

This course module will cover the key components of scholarly writing, including formatting, tone, and language, to help students enhance their academic writing skills. Students will learn how to structure an academic article effectively by understanding and implementing the introduction, methods, results, and discussion sections. Additionally, students will be guided on applying correct citation styles, selecting appropriate journals for submission, and utilizing the Quarto Manuscript Template for formatting research papers according to industry standards.

In this course module, students will learn how to utilize Flask to create routes and views for user-facing applications. They will demonstrate proficiency in creating dynamic routes and views, as well as designing user-friendly interfaces for web applications using Flask. Additionally, students will learn how to implement error handling and redirection, analyze and troubleshoot routing and view-related issues, evaluate best practices for structuring routes and views, and collaborate with peers to peer-review and provide feedback on Flask applications.

This course module will focus on designing and implementing user authentication functionality using Flask and Flask-Login. Participants will learn how to create and manage user accounts, including registration, login, and logout processes, in a Flask application. Additionally, they will explore integrating Flask applications with relational databases, implementing secure data handling techniques, developing RESTful APIs, and testing and debugging user-facing applications for functionality and security.

This course module will cover the necessary steps to deploy research and application code to a user-facing production server. Participants will learn how to set up and configure a server environment for hosting research and application code, as well as troubleshoot common issues that may arise during deployment. Additionally, students will explore security measures, performance metrics, and develop a plan for maintaining and updating code on a production server.

labarba commented 4 months ago

@s2t2 posted on Slack:

Current progress for the proposed workshop list is here (in the "lai-workshops" sheet): https://docs.google.com/spreadsheets/d/1RChK3lSHD7TjZ8euWfIWVaxReYFHWuI7wh2LdgGe7PQ/edit?gid=806894323#gid=806894323

s2t2 commented 4 months ago

Proposed Workshops

Fall 2024

Local Development Tools for Python Programming

Status: FALL

Description: Install and configure tools to help you manage and develop Python programs like a professional. Attendees will become familiar with development tools such as a text editor and command line application.

Learning Objectives:

  1. Use GitHub Desktop software to download existing Python repositories from GitHub.
  2. Utilize local development tools to write and execute Python code for research and software development.
  3. Use a text editor to read, write, and save files of Python code.
  4. Create and manage virtual environments using Anaconda.
  5. Manage package installations effectively using pip within a virtual environment
  6. use a requirements file to list package dependencies for a given project.
  7. Discuss security measures needed to protect secret credentials used by research and application code.
  8. Run Python programs on your computer.

Required Software:

Offerings and Desired Dates: 3 (Sept, Oct, Nov)

Presenter(s): Michael Rossetti

Audience: All GW community


Collaborate through Code (Version Control Basics)

Status: FALL

Description: Demystify the version control process and learn how to manage and collaborate on coding projects with other researchers and developers. Attendees will become familar with Git and GitHub.

Learning Objectives:

  1. Discuss the importance of version control in software and research development projects.
  2. Set up a GitHub repository for version control purposes.
  3. Use GitHub Desktop software to manage the code staging and committing process, and to interface with a remote repository on GitHub.
  4. Employ Git branching strategies to manage different versions of code.
  5. Collaborate with peers by pulling and merging changes from a shared repository.
  6. Troubleshoot common Git errors and conflicts during version control.

Required Software:

Offerings and Desired Dates: 3 (Sept, Oct, Nov)

Presenter(s): Michael Rossetti

Audience: All GW Community


Organizing Code for Python Applications

Status: FALL

Description: Improve the maintainability and quality of your code. Attendees will become familiar with code modularity and organization principles.

Learning Objectives:

  1. Translate Python notebook code into a local development repository.
  2. Identify areas in code that can be simplified for improved readability and maintainability.
  3. Refactor code by simplifying complex logic and removing duplication.
  4. Discuss code organization concepts such as the single responsibility principle, and the DRY principle.
  5. Organize code into modules to enhance scalability and maintainability, and practice importing code across multiple files.
  6. Use automated tools such as Code Climate to perform code maintainability assessments.

Required Software:

Offerings and Desired Dates: 1 (late Sept)

Presenter(s): Michael Rossetti

Audience: All GW community


Testing Python Applications

Status: FALL

Description: Improve the maintainability and quality of your code. Attendees will become familiar with automated testing.

Learning Objectives:

  1. Discuss the benefits of implementing automated tests in a software development project.
  2. Write automated tests for Python applications.
  3. Execute automated tests locally using the pytest package.
  4. Execute automated tests automatically on a Continuous Integration server, using GitHub Actions workflow.

Required Software:

Offerings and Desired Dates: 1 (early Oct)

Presenter(s): Michael Rossetti

Audience: All GW community


Open Science and Scholarly Publications

Status: FALL

Description: Share your research with the world. Attendees will publish a scholarly article online and discuss the journal submission process.

Learning Objectives:

  1. Discuss the importance of open science principles in promoting collaboration, transparency, and reproducibility in research.
  2. Structure an academic article effectively, including introduction, methods, results, and discussion sections.
  3. Apply correct citation styles (e.g., APA, MLA) to acknowledge sources and avoid plagiarism.
  4. Explain the journal submission process, including selecting appropriate (open access) journals, including Arxiv for pre-prints.
  5. Utilize the Quarto Manuscript Template to publish your own research paper to the Internet.
  6. Implement reproducible research practices to ensure transparency and reliability in research findings.

Required Software:

Offerings and Desired Dates: 3 (Sept, Oct, Nov)

Presenter(s): Michael Rossetti, Lorena Barba?

Audience:


Spring 2025

Authoring Python Packages

Status: SPRING

Description: Write your own Python package, and share it with the world. Attendees will publish their own package to the Python Package Index (PyPI).

Learning Objectives:

  1. Discuss the benefits of open source, and sharing your Python code with others.
  2. Become familiar with the PyPI, the centralized repository which hosts all official Python packages.
  3. Release a Python package to the PyPI for public use.
  4. Automate the package release process using GitHub Actions.

Required Software:

Offerings and Desired Dates: 1 (late Jan)

Presenter(s): Michael Rossetti

Audience: All GW community


Documenting Python Packages

Status: SPRING

Description: Document your Python code and publish a documentation site so others can learn how to use your code. Attendees will publish a documentation site for a Python package.

Learning Objectives:

  1. Document the code in your Python package, using docstrings and type hints.
  2. Publish a documentation site for a Python package, using GitHub Actions and GitHub Pages.
  3. Automate the documation site generation process using autodoc tools.

Required Software:

Offerings and Desired Dates: 1 (early Feb)

Presenter(s): Michael Rossetti

Audience: All GW community


Deploying Python Applications

Status: SPRING

Description: Get your code in the hands of end users. Attendees will host a Python application on a user-facing production server.

Learning Objectives:

  1. Set up and configure a server environment for hosting research and application code.
  2. Deploy research and application code to a user-facing production server.
  3. Discuss security measures needed to protect secret credentials used by research and application code on a user-facing production server.
  4. Schedule background jobs to run on the server at specified intervals.

Required Software:

Offerings and Desired Dates: 1 (late Feb)

Presenter(s): Michael Rossetti

Audience: All GW community


s2t2 commented 4 months ago

Fall 2024 Schedule:

See also: https://library.gwu.edu/events?f%5B0%5D=series%3A365