"Codes" is absolutely standard and common in settings like numeric or scientific computing (like, fluid dynamic simulation, large matrix linear algebra, constrained optimization). You could say this is because that community more often has old people who talk different.
Or, imho, you could imagine that those pieces of code, for doing very precise things under specific constraints (of memory, or CPU, etc) is software that received maybe thousands of person-hours of attention and wisdom, over many years or decades, so they are battle-tested, esteemed, and highly trusted objects. Software that was written in Fortran when Fortran was the only language with good optimizing compiler, and the software is still running in Fortran because the Elders were wiser than we are. A collection of such software is sensibly called “codes”.
Software in many other circumstances is more of a fluid and maleable thing, shifting in form and purpose in response to a changes in needs and fashion. “Code” here is more like air or bread, a medium we inhale and emit, not a collection of specific venerated objects.
Anyway, that’s how I understand the code vs codes divide, having seen both sides of it.