UMaine COS 301: Programming Languages

Announcements
9/5: TA office hours announced, etc. – see Announcements menu item above
8/28: Blackboard assignment portal is ready for Project Part 1

This course covers theoretical and design principles underlying computer programming languages. A programming language is a tool for expressing problems and solutions in a formal, precise way so that a computer can carry out the solution. They are therefore a bridge between a human programmer’s way of thinking about a problem and the way a computer can carry out that problem. Computers can only ``understand’’ machine language; a programming language provides a virtual machine to the programmer that is much closer to the way he or she thinks and that is much easier to understand and use than the raw machine.

The course will give you a good understanding of what a programming language is, how a language’s grammar is specified, and the meaning of programs written in a language. Some attention will be given to how the language is translated into machine language or interpreted to carry out the program. We will cover many aspects of imperative, object-oriented, functional, and logic programming languages.

The objectives of the course are that at the end, you will have:

  • a good understanding of what a programming language is;
  • an understanding of the major language paradigms;
  • a grasp of issues having to do with syntax and semantics of programs and programming languages;
  • knowledge of how control and data types are handled in a variety of languages;
  • knowledge of the commonalities and differences between programming languages;
  • a basis for understanding how to select a programming language for a problem;
  • deeper insight into programming languages you already know; and
  • better professional written communication skills.

Our accrediting agency, ABET, specifies outcomes for graduates of accredited computer science programs; this course will advance you toward these achieving these outcomes:

  • An ability to apply knowledge of computing and mathematics appropriate to the discipline. Students are introduced to context-free and regular grammars, finite-state automata, the fundamentals of lexical and syntactic analysis, static semantic analysis, algorithms for expression evaluation.
  • An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution. Students are expected to understand how various programming languages are used in different problem domains by understanding the trade-offs between expressivity, efficiency, readability and security. Students are expected to be able to apply this knowledge to select appropriate programming languages for solving particular problems.
  • An ability to design, implement and evaluate a computer-based system, process, component, or program to meet desired needs. Students are expected to learn a new programming language and implement solutions to given problems in that language.
  • An ability to communicate effectively with a range of audiences. This is a writing intensive course; students write five papers covering aspects of a programming language and are expected to write in a formal, professional manner with appropriate citations and an annotated bibliography. First draft papers are reviewed with comments and students then rewrite the papers, correcting issues addressed by the comments.
  • Recognition of the need for and an ability to engage in continuing professional development. Students are expected to understand the historical development of programming languages from early beginnings to modern and emerging languages. Throughout the course the ability and need to learn new languages quickly is emphasized. Examples are presented in a number of languages with which students are not familiar.