The work will focus on the seminal ideas, principles, and practices of computer science and is aimed at serious students of the subject who expect, eventually, to contribute to the profession. Accordingly studies and projects will emphasize assembling programs from components that supply operators and data expressed in terms of abstract entities that are made concrete at their points of usage, a fundamental concept in software construction. Other central ideas of computer science introduced in the course include a few of the elementary notions in the fields of text processing, information representation, computer graphics, sorting, and artificial intelligence.
Features of Haskell covered include definitions, sequences, functions, types, classes, intrinsic operators, libraries, higher-order functions, polymorphism, structures, recursive data types, recursive functions, file input/output, and interactive input/output.
Features of C covered include variables, ifs, loops, interactive input/output, file input/output, functions, and arrays, but not structures.
Students successfully completing the course will be able to understand Haskell software of substantial complexity and build programs equivalent to several hundred lines of code in a conventional programming language, such as C. Students will also be able to build and understand C programs as long as a few hundred lines.
Because the work
involves practice with computing systems, students should anticipate
investing substantially more time than they would customarily expect
to spend on a three-credit course.
The amount of work outside of class necessary for
success will, for most students, average more than
10 hours per week and will, for
many students, exceed 20 hours per week.