{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "

Encouraging open, exploratory, collaborative and\n", "reproducible scientific computing

" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "\n", "

Brian Granger (ellisonbg)

\n", "\n", "
\n", " \n", "
\n", "\n", "
\n", " \n", "
\n", "\n", "

Code and Data Interoperability Workshop

\n", "

Sustainable Software for Chemistry and Materials

\n", "

Virginia Tech, July 18-19, 2013

\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Let's style this IPython Notebook:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = 10" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "print a" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext load_style\n", "%load_style talk.css" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "My background" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Physics Professor\n", "\n", "* I teach Physics and do research with undergraduates\n", "* [Cal Poly](http://www.calpoly.edu/), San Luis Obispo\n", "* Background in AMO Physics: B-splines, Variational R-Matrix, low T quantum gases\n", "* Research in symbolic quantum mechanics and quantum computing\n", "* A **user** of scientific and technical computing tools and libraries\n", "\n", "Open source hacker\n", "\n", "* I am a **developer** of tools and libraries for scientific and technical computing\n", "* Core developer of [IPython](http://ipython.org) (Interactive computing environment)\n", "* Creator of [PyZMQ](https://github.com/zeromq/pyzmq) (Python bindings to ZeroMQ, high performance messaging library)\n", "* Core developer to [SymPy](http://sympy.org/en/index.html) (symbolic mathematics library for Python)" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Software based science" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Almost all science requires computation\n", "\n", "## Computation requires software\n", "\n", "## Idea 1: Software is one of the foundations of science" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The nature of software and science" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Idea 2: The attributes of science follows from the attributes of software\n", "\n", "## Expensive software = expensive science\n", "\n", "## Buggy software = buggy science\n", "\n", "## Fast software = fast science\n", "\n", "## Friendly software = friendly science\n", "\n", "## Fragmented software = fragmented science" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "What qualities/attributes do we want science to have?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fast, cheap, open, transparent, accessible\n", "\n", "## Efficient, lightweight, flexible\n", "\n", "## Repeatable, testable, verifiable\n", "\n", "## Collaborative, social, societal\n", "\n", "## Error free, bias free\n", "\n", "## Accountable, recordable, teachable\n", "\n", "## Interoperable, friendly\n", "\n", "## Fun!" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "

We need software tools that have these attributes!

" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The role of software extends far beyond simulation and data analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We need to consider the entire **lifecycle** of scientific research:\n", "\n", "* Individual exploration (MATLAB, Mathematica, Python,...)\n", "* Collaborative development (git, svn,...)\n", "* Production execution (C++, C, Fortran, MPI)\n", "* Building and deploying code (autotools, cmake,...)\n", "* Debugging (gdb, Python, valgrind)\n", "* Analysis and visualization (Perl, bash, Python, MATLAB,..)\n", "* Publication (LaTeX, Word)\n", "* Presentation (LaTeX, Powerpoint, Keynote)\n", "* Education (Powerpoint, chalk/white boards,...)\n", "\n", "Traditional software tools provide little help in making the transitions between these\n", "phases. Each phase involves a new set of software tools that don't integrate with the rest.\n", "This is horribly painful for users. The result is an unnecessary and heavy cognitive\n", "load that reduces users ability to do science. " ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Software tools that are transforming scientific computing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Development tools\n", "\n", "* Git/GitHub\n", "* Travis CI\n", "\n", "## Performance tools\n", "\n", "* Cython\n", "* Numba\n", "\n", "## Tools I am working on\n", "\n", "* IPython\n", "* SymPy\n" ] } ], "metadata": {} } ] }