This page provides an aggregation of computational skills for roughly three reasons:
- To enumerate the wild and wacky things you can do, built on years of shouting at awful error messages
- To centralize the skills we expect of growing computational scientists (so you can see what you should know!)
- To provide a place to roughly measure your growth as a computational scientist over time
When adding skills here, let's aim to focus on common skills or commonly encountered tasks. If we hit 10 skills in one category, make the case in your commit message why your replacement is more common than the one you've taken out.
- Change the
PS1
environmental variable to be more useful - Create a new directory
- Move a file
- Copy a file
- Use a glob to move multiple files at once
- Use
ssh
to get a shell on another computer - Can check a file's permissions
- Can recall and and can occasionally use them correctly to "get a command prompt back."
- Can follow directions for setting up ssh keys on another server or bitbucket
- Can use
ls
andcd
to explore the directory structure of a machine
- Write a loop in a bash script to do something on multiple folders/files
- Write a bash script using conditionals
- Write a bash script using tests
- Pipes
history
togrep
to find that one recent command that they can't remember - Knows to amend their
PATH
,LD_LIBRARY_PATH
, and other environment variables with commands in the appropriate dotfile to make sure the expected executables and libraries are found at runtime - Can use
which
,echo
, and verbose output from an executable to debug unexpected versions of a program running - Can explain the permissions associated with a file and knows how to look up how to change them.
- Can recall and use
cd -
to hop back and forth between two directories when doing something that depends on both of them
- Can remember, and frequently uses, bang-commands (!), to execute commands with arguments from previous commands
- Can remember, and frequently uses, string chopping (%, #) to help with things like renaming files
- Can recall numerical permissions associated with chmod and recursively apply them to a directory tree
- Be able to answer: What are periodic boundary conditions and why are they useful?
- Draw the Lennard-Jones (LJ) potential
- Be able to quantify structure of your simulation using a radial distribution function (rdf) or structure factor.
- Be able to quantify dynamics of your simulation using a measured diffusivity or some other property that quantifies how much particles move in your system (as a function of temperature).
- Recall the physical meanings of the two Lennard-Jones parameters, and what the nearest-neighbor distance should be for a particular instance of the LJ potential.
- Can explain dimensionless units and perform conversions from time and pressure into "real" units.
- Explain, with numbers, which snapshots from a simulation trajectory are representative of the equilibrium distribution and how long one must wait between decorrelated snapshots.
- Perform thermodynamic integration with a bias potential
- Create a C++ plugin for HOOMD
- Write a loop
- Write a function
- Make a plot using matplotlib
- Explain the difference between assignment and checking whether two things are the "same"
- Explain the difference between running a python interpreter, interactive notebook, and executing a python script
- Frequently uses the help() command to look up documentation on functions
- Can explain differences between integer and floating point encoding of numbers
- Can explain what went wrong and where it went wrong, based on an error message (but does not necessarily need to know how to fix)
- Can install "local" python packages and import them in scripts with the appropriate
PATH
updates. - Can check for consistent indentation throughout a file and convert tabs to (preferably 4) spaces.
- Can explain, and utilize differences between, references to and copies of memory in appropriate scenarios
- Frequently profiles and tests code to understand bottlenecks and ensures correctness
- Can call C, C++, fortran, or other code to operate on data structures defined in python
- Be able to explain what microstates and macrostates are
- Be able to explain what an ensemble of microstates is
- Explain what "equilibrium" is and how to check whether a system is at equilibrium or not.
- Explain what "entropy" is
- Can write down the partition functions for all ensembles
- Can look at a radial distribution function and explain what state of matter or what kinds of configurations it could have been calculated from
- Modify the acceptance criteria in a Monte Carlo simulation to enable biased trial moves to be attempted
- Can recall Maxwell's relations and use them to derive all thermodynamic properties of a system with a specified partition function
- Use google scholar and web of science to search for papers on a topic
- Use doi or citation information to look up reference from a paper
- Articulate the steps you are going through when reading a paper
- Articulate what the figures in a paper are trying to say
- Be able to articulate what a paper is about based on the abstract and figures, explaining how these inform the methods and measurements you'd expect to see in the paper.
- Effectively use entire slide
- Use slide titles to summarize main point/objective of slide
- Leverage slide layout to enforce content
- Don't break the chain (write a bit everyday)!
- Can understand and appropriately respond to the concerns from reviewers during a paper's evaluation with a journal (including construction of the easy-to-read reviewer response letter)
- Can recall a dozen papers that are fundamental, must-cite papers for a current project
- Can craft the letter to the editor that accompanies the submission of a paper with an argument of why this paper is the right fit for this journal, and explaining why the six included people are appropriate referees to recommend