I’ve just read “The Low Quality of Scientific Code“, which claims that code written by scientists comes out worse than it would if “software engineers” were involved.
I’ve been working, for more than a decade, in an environment dominated by people with a background in math or physics who often have sparse knowledge of “software engineering”.
Invariably, the biggest messes are made by the minority of people who do define themselves as programmers. I will confess to having made at least a couple of large messes myself that are still not cleaned up. There were also a couple of other big messes where the code luckily went down the drain, meaning that the damage to my employer was limited to the money wasted on my own salary, without negative impact on the productivity of others.
I claim to have repented, mostly. I try rather hard to keep things boringly simple and I don’t think I’ve done, in the last 5-6 years, something that causes a lot of people to look at me funny having spent the better part of the day dealing with the products of my misguided cleverness.
And I know a few programmers who have explicitly not repented. And people look at them funny and they think they’re right and it’s everyone else who is crazy.
In the meanwhile, people who “aren’t” programmers but are more of a mathematician, physicist, algorithm developer, scientist, you name it commit sins mostly of the following kinds:
- Long functions
- Bad names (m, k, longWindedNameThatYouCantReallyReadBTWProgrammersDoThatALotToo)
- Access all over the place – globals/singletons, “god objects” etc.
- Crashes (null pointers, bounds errors), largely mitigated by valgrind/massive testing
- Complete lack of interest in parallelism bugs (almost fully mitigated by tools)
- Insufficient reluctance to use libraries written by clever programmers, with overloaded operators and templates and stuff