====== Programming Expectations ====== General rule for our system: As much boilerplate as possible, no fancy bashrcs, aliases or IDEs. ===== Requirements for a VM ===== * Browser * WiFi access (should come from base OS) * User account (!) * Python 2.7.x (incl. offline documentation) * IPython * NumPy * Matplotlib * SciPy * ASE * pip * MicroMegas * OOFEM * Text Editor (Sublime Text? - they should at least be able to use the mouse, syntax highlighting) * htop * paraview * jade (DEM) (?) * should use as few resources as conveniently possible * users should be able to install software when they know how to do it * fipy Should be tested on the WW8 CIP pool computers, the WW8 laptops, one OS X machine, one Windows Machine, WW CIP pool, electronical engineering CIP pool Provide a test suite for the tutors/admins to see if everything is working correctly. ===== General Skills ===== * google * working with documentations (especially Python) * with regards to plotting: should the student be in the situation when he has to plot a function with a singularity he should be able to recognize this and adjust the limits accordingly to sensible values. Prime examples: Lennard-Jones-Potential, stress field of a dislocation, etc. etc. * know the relevance of backups * using htop * killing stuck programs (while loops are lame) * knowing the limitations of the computer (memory, cpu speed) * extracting the algorithm from a mathematical formula ===== Shell ===== * navigation in the directory tree * copying files * moving files * deleting files * opening a text editor * working with the text editor ===== Python ===== ==== General ==== * functions * modules * learn how to read exceptions (-> debugging) * debugging * common "pitfalls" (float numbers, numbering starts at 0) * execution of script in the shell (chmod, shebang, starting from ipython console) * proper directory structure for "projects" (doc, tests, bin, output) ==== Standard Library ==== * printing * text formatting * reading a file * parsing a file * as a whole * line by line * writing to a file * boolean logic * binary operators * conditionals * if * elif * else * data containers * tuple + slicing * list + slicing * append * dict * loops * while loop * for loop (with else, introduce iterators before!) * breaking out of a loop * loop-recursing (is that really a loop inside a loop?!) * range ==== NumPy ==== * NumPy array * initializing * zeros + shape * ones + shape * full + shape * zeros_like * ones_like * full_like * shape * slicing * reading from file * writing to file * they should know that the default binary operators act element-wise * arange * linspace * stacking arrays * meshgrid * linear algebra * dot product * cross product * determinant * solving systems of equations ==== Matplotlib ==== * plot types * line plot * scatter plot * pcolormesh * contour plot * working with figures * working with axes * plotting interactively * plot.hold * plot.ion -> ax.set_ydata -> plot.ioff * saving the figure in a file * closing figures * adding a title * adding labels * setting linestyle (color, marker, linetype) * setting limits * subfigures * changing the colorscale * changing the colormap ===== Possible Tasks =====