For some types of software, say operating systems, the hard work is writing all the lines of code. No device driver is ground breaking, but all those devices have to have device drivers and someone has to write them. The product you end up selling is those lines of code. Copyright protects those specific lines of code you wrote.
For other types of software, the hard part is figuring out how the software should work. That's where all the research dollars and engineer time gets spent. The actual lines of code are often an afterthought. If someone saw the code, they could easily figure out how it works and write an independent implementation. They can do that because writing the lines of code is the easy part. Copyright only protects the lines of code, so it can't help here. That's where patents come in.
In both cases, the law facilitates a division of labor. Copyright lets one company write an operating system, and sell it to others. Copyright creates and protects the subject matter of that transaction. Patents let one company design an algorithm, and sell it to others. Patent law creates and protects the subject matter of that transaction.
Now, I don't think the law should be concerned with protecting particular business models. However, it should be concerned with facilitating the division of labor. Indeed, that's one of the key purposes of property law. And that's why I think software patents have to exist in some form. Because I think it's good to be able to separate the process of design from the process of implementation, and without being able to protect design you can't do that.
I should point out that ARM is a very good example of this design/implementation separation. What do you think ARM uses to protect its designs?