From fbd428f088a3881259f77e3697ff6f7f6c1261ed Mon Sep 17 00:00:00 2001 From: Blaise Thompson Date: Sat, 7 Apr 2018 23:18:17 -0500 Subject: 2018-04-07 23:18 --- software/chapter.tex | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'software') diff --git a/software/chapter.tex b/software/chapter.tex index 26636f1..14693ee 100644 --- a/software/chapter.tex +++ b/software/chapter.tex @@ -158,17 +158,30 @@ written by generation upon generation of student. % Worse, software is sometimes abandoned or left untouched to become a crucial but arcane component of a scientific research project. % -\textbf{Testing.} \cite{SandersRebecca2008a, PrabhuPrakash2011a} +\textbf{Lack of testing.} \cite{SandersRebecca2008a, PrabhuPrakash2011a, JoppaLucasN2013a} Testing is a huge part of software development practices, but many researchers do not engage in -sufficient testing of their software... % -The issue of testing is also consistent with the system of peer review... -Software is not typically peer reviewed... +sufficient testing of their software. % +Without testing, even small software projects can rapidly ``get out of hand''---they can become +unsustainable and unmaintainable. % Especially for domain-specific computational software, determining the ``correct outcome'' to test against is often infeasible. % - -\textbf{Optimization.} \cite{PrabhuPrakash2011a} -Scientists do not optimize for the common case. % -Scientists are unaware of parallelization paradigms. % +Software is not typically peer reviewed, so a lack of software testing is often a weak link in the +loop of critical self assessment that science depends upon. % +On the positive side, testing can be an easy-to-add development practice with huge rewards. % +Well written tests can be a programmers best friend: helping her to ensure that her code has met +all of the given requirements. % +Well written tests allow programmers to optimize without worrying about breaking crucial components +of their software. % + +\textbf{Struggles with optimization.} \cite{PrabhuPrakash2011a} +Sometimes, a scientific application requires performant code. % +Scientists typically struggle to write such code. % +They may struggle with parallelization paradigms, or they may not understand what is limiting the +speed of their software. % +They may not have good intuitions about how long certain operations should take, or what patterns +could be used to speed up execution. % +Scientists typically do not use profiling tools which help them see which parts of their program +would benefit most from optimization. % \section{Good-enough practices} % ================================================================ @@ -274,7 +287,7 @@ Don't be afraid to be verbose, most programming environments have tab completion not all that hard to type. % Try to follow the recommended style for your language, but don't obsess about it. % -\textbf{Avoid premature optimization.} \cite{WilsonGreg2017a} +\textbf{Avoid premature optimization.} \cite{WilsonGreg2014a, WilsonGreg2017a} Don't get pulled into the trap of trying to make things perfect the first time. % Software design is typically a very iterative process, and for good reason. % Write for correctness first, and if it works, consider optimization. % -- cgit v1.2.3