Welcome!
This page is for collecting and compiling resources about computational skills and best practices for the group.
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
- QA requirements, risks, failure modes
- V&V
- automated testing
- writing clean reusable code
- test-driven development
- is this the right tool for the problem at hand?
- parallelization: when it’s good, when it’s not
- Object-oriented programming
- GPU vs MPI
- CUDA 101
- CMake
- Dependency management
- 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