To software engineers criticizing Neil Ferguson’s epidemics simulation code
What a collection of terrible arguments. I&#x27;m afraid I can&#x27;t help myself here. I&#x27;ve got to eviscerate this USENET-style:<p>&gt; <i>&quot;The scientists who wrote this horrible code most probably had no training in software engineering, and no funding to hire software engineers. And the senior or former scientists who decided to give tax-payer money to this research group are probably even more ignorant of the importance of code for science. Otherwise they would surely have attributed money for software development, and verified the application of best practices.&quot;</i><p>Let&#x27;s start with the observation that this is indeed the main problem here. Planning research that requires software to be developed, without accounting for software development, is a terrible idea. There&#x27;s a good reason why scientific programmers exist: to help researchers write the code they need for their scientific projects. Hire one if you need one. Don&#x27;t blame someone else if you forget to do so.<p>&gt; <i>&quot;It’s you, the software engineering community, that is responsible for tools like C++ that look as if they were designed for shooting yourself in the foot. It’s also you, the software engineering community, that has made no effort to warn the non-expert public of the dangers of these tools.&quot;</i><p>Excuse me? The internet is riddled with jokes about how easy it is to shoot yourself in the foot with C++. Of course you can shoot yourself in the foot with any programming language, but C++ excels at it. Many programmers avoid it because they don&#x27;t want to have to manage their own memory. Follow their example and use something that focuses on the problem area you want to focus on.<p>&gt; <i>&quot;You know, the kind of warning that every instruction manual for a microwave oven starts with: don’t use this to dry your dog after a bath.&quot;</i><p>Anyone who needs that kind of warning is a danger to themselves and others. A scientist who lacks this level of common sense should seek guidance from someone who has it.<p>&gt; <i>&quot;A clear message saying “Unless you are willing to train for many years to become a software engineer yourself, this tool is not for you.”&quot;</i><p>Software engineer is a serious profession that requires lots of training. Should any idiot expect to whip up their own epidemic simulation without knowing what they&#x27;re doing and expect reasonable results?<p>&gt; <i>&quot;But power comes with responsibility. If you want scientists to construct reliable implementations of models that matter for public health decisions, the best you can do is make good tools for that task, but the very least you must do is put clear warning signs on tools that you do not want scientists to use&quot;</i><p>Is it unreasonable to expect someone who needs tools, to either research what tools are suitable for their needs, or otherwise ask advice from an expert on those tools? Nobody grabs just a random tool from their toolbox to solve a specific problem. If it&#x27;s a nail, you grab a hammer, if it&#x27;s a screw, you use a screw driver.<p>&gt; <i>&quot;scientists are not software engineers, and have neither the time nor the motivation to become software engineers.&quot;</i><p>Then hire one. Don&#x27;t blame your lack of motivation on others.<p>&gt; <i>&quot;Consider what you, as a client, expect from engineers in other domains. You expect cars to be safe to use by anyone with a driver’s license.&quot;</i><p>Yeah, with a driver&#x27;s license. We don&#x27;t let random idiots drive off in a car, we expect them to learn how to drive first. If you want to use C++, you&#x27;re going to have to learn about memory management. If you don&#x27;t want to do that, get a different language.<p>&gt; <i>&quot;You expect household appliances to be safe to use for anyone after a cursory glance at the instruction manuals.&quot;</i><p>Is that cursory glance going to be enough to tell them not to put their dog in a microwave? At least C++ is not going to kill your dog.<p>&gt; <i>&quot;It is reasonable then to expect your clients to become proficient in your work just to be able to use your products responsibly?&quot;</i><p>They can use our products just fine, but if they want to use our tools, they need to learn how to use them.<p>Should toolboxes now contain warning labels not to build your own car from scratch? Or not to use these tools to repair a nuclear reactor? It&#x27;s absolutely valuable to learn how to use tools, but if you just grab random power tools without knowing what you&#x27;re doing, and without being willing to learn to use them, you&#x27;re likely to lose a limb.<p>Finally, if you&#x27;re really looking for a programming language to let scientists play around with, try Python. It&#x27;s designed to be easy to learn, and it&#x27;s also very suitable for all sorts of scientific modeling. There&#x27;s a good reason it&#x27;s popular in research. I still recommend putting some effort in learning to use it.