| Up a level |
| Program design |
| Here we look for the ability to work with more complex language structures such as record, classes, functions, generics (templates), and tools and the ability to use them effectively in solving programming problems. |
| 1. Be able to select appropriate structure from a small set of alternatives. |
| Examples are: decide whether to use an arrays implementation of a queue or a linked list based implementation, select the appropriate structure to store a collection of data items. |
| 2. Be able to use a standard structure and adapt it to a particular problem. (Algorithmic integration) |
| Examples are: implement heapsort given array bounded by low and high; use an array of struct; use a queue to represent unordered collection of data where each item has to be updated in a given cycle. |
| 3. Use judgment to evaluate the costs and benefits of using these structures and algorithms. |
| Examples are: when should you not use a complex sorting algorithm; when is sequential search sufficient; is it necessary to use tree-balancing algorithm; the impact of randomization on the behavior of quicksort algorithm. |
| 4. Be familiar with and be able to use some sophisticated techniques. |
| Examples are: lazy evaluation; in general, the strategy of delay; use of hints to improve efficiency for the most likely cases, persistent data structures (free of side effects). |