From fbd428f088a3881259f77e3697ff6f7f6c1261ed Mon Sep 17 00:00:00 2001
From: Blaise Thompson <blaise@untzag.com>
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/chapter.tex')

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

