Programming Fundamentals 1
The course uses (a subset of) the programming language Racket, but it is not a course about Racket, which we use primarily because of the conceptual clarity of its features. Once you master this course's content, learning another programming language won't be a problem. The course is suitable for students with little or no prior programming experience, but even programmers with experience will have a chance to learn new program design principles and to practice on interesting problems.
This is a first programming course that teaches you how to program well. "Programming well" requires more than writing code until it seems to work. This course emphasizes designing programs: constructing software in a principled manner, following a process that goes from problem statement to implementation and is based on justifiable choices about abstractions, data structures, algorithms, and program organization.
The course's organization includes plenty of opportunities to practice programming — including assignments, exercises, and a final project.
The course's grades is determined by a combination of programming assignments developed during the course, a final course project, a midterm exam, and a final exam.