As systems get more complex, and rely more and more on previously existing subsystems (libraries, frameworks, operating system and internet infrastructure) the skill of developing software is less and less about composing algorithms in code. And more and more about finding and successfully using these other components.
In this sense it's becoming like "law". Programmers, like lawyers, need to absorb a huge history of previous cases (existing libraries) before they can seriously develop anything without re-inventing the wheel.
DesignPatterns are another case in point. It's important to know the literature and apply it correctly.
If SoftwarePatents become more prominent it will become even more so. As the requirement to understand the backlog of libraries merges with the requirement to understand the minefield of existing patent protection. Possibly even the same knowledge-bases will be used to store information for both requirements.
DaveWiner vibes on similar themes : http://archive.scripting.com/2005/10/28#mikeArringtonsNewStream