I'm a software developer, and I think that software patents were always quite problematic and are definitely harmful now.
In the 1980s I wrote some Intel 8086 assembler code to interpret graphics data being sent to an emulated terminal, and I worked out how to draw an arc without using any multiply or divide instructions, just addition and subtraction. When I showed it to our local graphics expert he said I can't use that because it's been patented. (The patent has since expired). To me that's ridiculous; it was just a mathematical algorithm, and the patent rules said at the time that you can't patent software (although you can of course use copyright to protect it). It was also the obvious solution to a specific problem.
I'd say that many software-related patents are also just algorithms, but the rules have been bent to the point where they are broken. A typical workaround used to be to say that a software-related patent could be implemented in hardware, which made it patentable, but it seems people no longer even bother with that.
I joined IBM in 1987 and have come up with five different software-related inventions for them, all of which have been patented (some of them in multiple geographies). The way it used to work is that we reviewed inventions internally quite strictly at a department level, to avoid the wasted effort of having it reviewed by our internal IP department, then the IP department reviewed them, then we submitted them and patent examiners checked them, and eventually we might get a patent. I was a reviewer myself and frequently rejected invention submissions because I found prior art using the same idea, sometimes going back to the 1960s.
The way it works now seems to have hardly any checks; each stage passes most stuff through to the next without checking very much. Some Australian managed to patent the wheel not long ago! The only check now seems to be that if some other company challenges the issued patent, then at that point the IP lawyers really begin looking into it.
Personally, I'd say that the first three of my five patents (two invented by myself alone, and one by another team using a key step invented by myself) definitely contained novel and non-obvious elements and qualified under the generally accepted rules at the time (although I still think that patenting software is dodgy), and the fact that they were all successfully patented was a significant achievement (as most inventions at the time were rejected internally or by the patent examiner). However, the last two (both submitted by other members of my team) were pretty obvious as the best logical solution to a particular requirement, yet they still got through.
Companies such as IBM now generally have a policy of submitting patents even for weak ideas simply in order to protect themselves against someone else getting a patent for it, regardless of how non-obvious it seems to experienced software engineers. However, in many cases it's enough just to make sure that the idea is already known (or that IBM already holds a patent covering it).
IBM and many other companies simply do cross-licensing deals for many of their patents, so in many ways they are enabling each other to share the benefits. However, this works against small companies and individuals who don't have anything to swap.
[Edited to correct typos]