Many (perhaps most) hard problems don't need to be solved from scratch; rather, it is a matter of applying a well-known solution that somebody has already found.
The example in the article is a good one: there's absolutely no need to attempt to design a Sudoku-solving-algorithm from scratch (except as an exercise), and it is pitiful to see Ron Jeffries flailing around aimlessly in TDD-land when a simple trip to Google would have done the trick.
The difficult part, the part that comes with experience, is recognizing which class of problems the specific problem you are grappling with resembles. In the case of Sudoku, it's an "exact cover problem", and once you realize this, all kinds of solutions present themselves.
In this way, the "incremental progress" is not made on attempting to solve the problem incrementally, but by incrementally sifting through probably solution-spaces for known algorithms.
Well said! Few hard problems are solved entirely from scratch, unless it is to boost one's ego. In almost every field, the key is to identify problems with similar patterns or constraints.
The example in the article is a good one: there's absolutely no need to attempt to design a Sudoku-solving-algorithm from scratch (except as an exercise), and it is pitiful to see Ron Jeffries flailing around aimlessly in TDD-land when a simple trip to Google would have done the trick.
The difficult part, the part that comes with experience, is recognizing which class of problems the specific problem you are grappling with resembles. In the case of Sudoku, it's an "exact cover problem", and once you realize this, all kinds of solutions present themselves.
In this way, the "incremental progress" is not made on attempting to solve the problem incrementally, but by incrementally sifting through probably solution-spaces for known algorithms.