Over most of the second half of the twentieth century, much of the curriculum debate in Computer Science assumed programming was the fundamental tool of the discipline, and a key subject of debate was the first programming language. By 2020, the focus had changed to one of emphasizing the fundamentals first, and developing skills related to coding later in the curriculum. The intent was to ensure that real fundamentals were taught first, reducing the need for frequent curriculm upheavals in introductory courses, where stability was most important. Also, the new curriculum ordering was intended to break away from the hacker culture which is hard to avoid with students who learn programming before they have developed design and abstraction skills. This paper presents a proposal for Curriculum 2020, in which the order of topics is designed to produce graduates with a solid theoretical foundation, for whom programming is almost a clerical task. The basic educational philosophy is called abstraction-first. Students are first introduced to abstraction as a client of predesigned abstractions, and gradually led to the point of designing their own abstractions. Theoretical foundations are introduced first, followed by practical application, also following the abstraction-first philosophy.