DOI: 10.5281/zenodo.3899703
title: Computational Skills Students Need to Hit the Ground Running

description: Data from survey of computational physics researchers about which skills students need to know to get started in computational research versus skills they can learn along the way. Possible responses for each skill are:<br> Ideally, students have prior experience with these;<br> Students learn these in natural course of research with me;<br> Students get focused training on these;<br> This skill is unnecessary for my work; Full list of skills:<br> Algorithmic thinking skills [Converting a problem to a step-by-step procedure amenable to coding]<br> Basic coding skills and knowledge [Programming in some language at "hello, world!" level]<br> Basic coding skills and knowledge [Calculation/visualization environment (e.g. Mathematica, Jupyter notebook, Matlab)]<br> Basic coding skills and knowledge [ Numerical arithmetic (e.g. machine precision, data types)]<br> Basic coding skills and knowledge [Flow control (loops, conditionals, etc.)]<br> Basic coding skills and knowledge [Scoping rules particular to a programming language]<br> Basic coding skills and knowledge [Selecting and manipulating data structures]<br> Software engineering [Whiteboarding]<br> Software engineering [Pseudocoding & diagramming ]<br> Software engineering [Software lifecycle best practices (design-code-implement-validate-utilize-archive)]<br> Software engineering [Keeping a TODO list]<br> Software engineering [Documenting code and keeping documentation current]<br> Software engineering [camelType and other strong typing]<br> Software engineering [Interfacing homegrown code with external libraries]<br> Software engineering [Object oriented design principles]<br> Software engineering [Fluency in an object oriented language]<br> Software engineering [Parsing/understanding legacy or inherited code]<br> Software engineering [Extending functionality of existing code]<br> Software engineering [Version control]<br> Software engineering [Creating modular, well-structured code easily passed on to other students]<br> Software engineering [Using an IDE]<br> Scientific project and data management [Keeping a lab notebook or electronic log]<br> Scientific project and data management [In situ documentation (README files, etc)]<br> Scientific project and data management [Recording input parameters when codes are run in production mode]<br> Scientific project and data management [Recording version of code used to produce any set of data]<br> Scientific project and data management [Naming conventions of output files]<br> Scientific project and data management [Backing up and knowing how to restore data/codes]<br> Scientific project and data management [Sharing code effectively with others]<br> Scientific project and data management [Proactive communication of results and issues]<br> Scientific project and data management [Collaborative mindset]<br> Fundamental scientific computing skills [Running an executable code one is given]<br> Fundamental scientific computing skills [Asking people for help with running or writing code]<br> Fundamental scientific computing skills [Reading code documentation]<br> Fundamental scientific computing skills [Googling to answer coding questions]<br> Fundamental scientific computing skills [Locating existing code and libraries on web-based servers]<br> Fundamental scientific computing skills [Terminal / unix shell programming]<br> Fundamental scientific computing skills [Unix shell scripting]<br> Fundamental scientific computing skills [Accessing and utilizing remote platforms (ssh, scp, etc.)]<br> Fundamental scientific computing skills [Submitting jobs to a queue]<br> Fundamental scientific computing skills [Using a terminal-based text editor]<br> Fundamental scientific computing skills [Compiling and making]<br> Fundamental scientific computing skills [Reading formatted data]<br> Fundamental scientific computing skills [Writing formatted data]<br> Fundamental scientific computing skills [Understanding compile-time and runtime errors]<br> Fundamental scientific computing skills [Visualizing line data (plots)]<br> Fundamental scientific computing skills [Visualizing image data (2D)]<br> Fundamental scientific computing skills [Visualizing volumetric data (3D)]<br> Fundamental scientific computing skills [Creating animations]<br> More advanced computational skills [High performance computing]<br> More advanced computational skills [Profiling code and optimizing execution]<br> More advanced computational skills [Specialized hardware (GPUs, etc)]<br> More advanced computational skills [Using a debugging environment]