A knowledge of algorithms doesn't teach you to pick the right problems to solve.<p>Once you get it down into problems like "sort this list" the code practically writes itself and the correct algorithms are simple to determine.  Figuring out how to take a complex problem and break it down into problems that you then can throw your algorithm knowledge at is a whole art that takes years of study.  A firm grasp of algorithms is essential but not sufficient and it can only help inform your decisions, not provide firm answers.<p>Picking the right problems is the heart of programming.  Figuring out which algorithm to throw at a sub-problem is the heart of contract work.