Skip to content

Resources

Alicia M. Elliott edited this page Nov 22, 2023 · 10 revisions

Welcome!

This page is for collecting and compiling resources about computational skills and best practices for the group.

Ideas for topics to include:

Fundamental computational skills

  • navigating a terminal
    • basic bash skills
    • scripting
    • things to never ever do bc you could delete your entire OS
  • using IDEs
  • debugging
  • standards and conventions (pep8, etc)
  • conda & environment management
  • version control: git
    • Branch/fork workflows
    • GitHub/GitLab/Bitbucket
    • Atlassian tools: JIRA, Confluence, Bitbucket & GitHub equivalents
  • Software development life cycle/workflows
    • Task management/Kanban/Scrum/Agile-ish concepts
  • pull requests and collaborative code contributing
    • "issues"/tickets and how to use those in branch/fork workflows
    • usage for things like QA documentation practices (NQA-1)
    • Code reviews: like "peer review" process of papers, but for software
  • Documentation: why you need to write it & how to write GOOD documentation
    • No, the code should not document itself (as your sole form of documentation)
    • Sphinx, Doxygen, etc
  • software design concepts
    • Scoping work
    • Technical requirements & requirements management
      • Configuration management
    • QA requirements, risks, failure modes
    • V&V
    • automated testing
  • writing clean reusable code

  • test-driven development

    • fail fast, fail often
  • is this the right tool for the problem at hand?

    • how do you assess that?
  • parallelization: when it's good, when it's not

  • visualization tools (ParaView, etc)

Intermediate to advanced skills

  • Object-oriented programming
  • CI/CD
  • GPU vs MPI
  • CUDA 101
  • CMake
  • Make
  • Dependency management
  • Using open source libraries
  • how to choose a language based on your applications
  • data management
  • memory management
  • precautions re: using pre-existing tools
    • and writing code that "works" but is wrong
    • or writing code that makes "pretty" pictures but is useless
  • design patterns & antipatterns
  • Using IDEs to debug on clusters with ssh/scp connections
  • Debugging with GPUs
  • single vs multidevice GPU
    • precautions
    • when it becomes slower than multithreaded CPUs (data transfers/IO)
  • profiles and formatting tools/linters
  • Meshing (cubit, etc)
  • minimum viable product, "rapid prototyping"

Languages and code skills

  • C++
  • Python
  • FORTRAN
  • CUDA
  • shell scripting
  • API design
  • OOP concepts in general
  • Namespaces/scopes
  • public/private/protected
Clone this wiki locally