aboutsummaryrefslogtreecommitdiff
path: root/software
diff options
context:
space:
mode:
Diffstat (limited to 'software')
-rw-r--r--software/chapter.tex31
1 files changed, 22 insertions, 9 deletions
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. %