It’s hard to say, really. For the most part some programmer comes across something that they perceive as ineffecient or that they see a need for and writes the thing. Sometimes those things wind up as commercial successes (Netscape, Apache) or academic boons (TeX).The real question is why? Programming is a process frought with frustration and errors. It’s difficult, especially considering most significant programs today require concurrency, web deployment, database back ends, and decent interfaces. Errors don’t just creep in - they flood over the bulwarks and invade.
As soon as we started programming, we found to our surprise that it wasn’t as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs.
Maurice Wilkes discovers debugging, 1949
So what kind of idiot gets into a profession that is going to involve continuously chasing down bugs in programs that they themselves introduced? There’s got to be some masochism involved someplace - whenever something goes wrong, there’s no one to blame but one’s self. Not a great profession for someone as hard on myself as I am. After all - the computer does exactly what you tell it to do. So there’s no one to blame but yourself for what goes wrong.I think this is part of why I’m interested in some of the theoretical aspects of computer science as well - it gives me a break from the coding.