Course Description:
This course is split up into two parts. In the first half of the
course we will study the theoretical foundations for designing and
implementing modern programming languages. This includes the syntax, type
systems, semantics, and memory structures required to create a programming language.
The second half of the course we will examine the features found in many
different languages and will cover the different programming paradigms of
imperative, functional, logical, and web-based languages. Upon conclusion
of the course the student should feel comfortable programming in many different
languages, feel comfortable learning a new language, and understand the key
features of the major programming paradigms.
Homework Assignments:
Due by Blackboard submission by the date posted.
Approximately six homework assignments will be assigned. Late homeworks will be penalized 10%
per day late up until the date solutions are posted. Unless
otherwise indicated, programming assignments and written assignments must represent your
own work. It is permissible to discuss the assignments with other students, but
do not copy code.
Questions: If you have any questions, feel free to come in to my office. In general, I have an open door policy -- if I am available in my office, you are welcome to come by. An even better way to reach me is through email. I check my email frequently and you should receive a response quickly. Email is preferred over telephone and you will probably receive a faster response since I don't check voicemail very frequently.
Grading: Letter grade. There will be two exams, a midterm and a final exam. The midterm will primarily cover the theory material and the final will primarily cover the different programming language paradigms. Unless prior arrangements are made no make-up exams will be given. Since you will be tested upon your critical thinking and problem solving skills and not your ability to memorize formula, the exams will be open book (any written material and a calculator is acceptable to bring to the test). Cheating on assignments and exams is not acceptable. Written homework and programming projects are individual assignments and it is expected that each student does his own work.
Grading breakdown:
Midterm: 30%
Final:
30%
Homeworks: 40% (Each homework
is worth an equal amount)
The grade scale is shown in the table below. The grading curve may be
lowered if necessary but it will not be raised. This means that if you
received an 89% then you will at least get a B+, but may receive a higher grade
based on the curve. (Final grades don't include a + or -).
Percentage | Grade | Percentage | Grade |
98-100 | A+ | 80-78 | C+ |
93-98 | A | 78-73 | C |
90-93 | A- | 73-70 | C- |
87-89 | B+ | 70-68 | D+ |
83-87 | B | 68-60 | D |
83-80 | B- | 60-0 | F |
An incomplete grade will only be given for a valid excuse (e.g. medical, death in the family). An incomplete grade does not let you take the class over again, your final grade will be assigned based on work submitted in class and work that remains to be submitted.
Cheating: Students are expected to uphold the UAA standard of conduct relating to academic dishonesty outlined in the UAA catalog and student handbook. Cheating is not tolerated and constitutes grounds for dismissal. For this class, it is permissible and encouraged to assist classmates in general discussions of how to attack the homework problems. It is not permissible to copy another's work (or portions of it) and represent it as your own.