This paper describes the development of a course in Programming Concepts over a period of a decade. Initially we present educational principles that underlie the approach, as well as specific and generic aims for this course. We then proceed to show how an integrated program of assessment and instruction has allowed teaching and comparison of multiple programming paradigms and concepts within a common framework. The specifiation of specific and generic skills and the extents to which they are expected to be covered has been closely validated with surveys framed around them. We also address some general issues in modern education.