CMPS 350 Programming Languages
Sections 1 and 2 - Fall 2015
Instructor and Contact Information
Instructor: Dr. Melissa Danforth
Office: Sci III 319, 654-3180
Office Hours: MTuWThF 11:30am - 12:30pm and by appointment
Email: melissa@cs.csub.edu

Course website: http://www.cs.csub.edu/~mdanfor/ under Teaching menu
Moodle website: https://moodle.cs.csub.edu/moodle/course/view.php?id=95

Course meets MWF 12:45 - 1:55pm and Tu 12:45 - 3:15pm in Sci III 315

Catalog Description
An examination of underlying concepts in high level programming languages and techniques for the implementation of a representative sample of such languages with regard to considerations such as typing, block structure, scope, recursion, procedures invocation, context, binding, and modularity. Each week lecture meets for 200 minutes and lab meets for 150 minutes. Prerequisite: CMPS 222 with a grade of C- or better AND CMPS 223 with a grade of C- or better
Prerequisites by Topic
Knowledge of a high level programming language
Knowledge of procedural and object-oriented programming languages
Units and Contact Time
5 quarter units. 4 units lecture (200 minutes), 1 unit lab (150 minutes).
Type
Required for CS
Required Textbook
Concepts of Programming Languages by Robert Sebesta. 11th Edition, Pearson, 2016, ISBN-10: 0-13-394302-X.

The digital resources are not required, so earlier editions, editions without the digital access code, and used editions also acceptable.

Recommended Textbook and Other Supplemental Materials
The C Programming Language by Kernighan and Ritchie. Also called K&R, this is a foundational book for C and the C family of languages.
Coordinator(s)
Donna Meyers, Huaqing Wang
Student Learning Outcomes
This course covers the following ACM/IEEE CS2013 (Computer Science) Body of Knowledge student learning outcomes:

PL/Object-Oriented Programming
PL/Functional Programming
PL/Event-Driven and Reactive Programming
PL/Basic Type Systems
PL/Program Representation
PL/Language Translation and Execution
PL/Syntax Analysis

ABET Outcome Coverage
The course maps to the following performance indicators for Computer Science (CAC/ABET):
3i. An ability to use current techniques, skills, and tools necessary for computing practice.
3j. An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices.
Lecture Topics and Rough Schedule
WeekChapter(s)Topics
1Chapters 1 and 14 Introduction to concepts. Exception handling. Lab: C++
2Chapters 2 and 15 History of programming languages. Functional languages. Lab: LISP
3Chapters 3 and 12 Formal models for syntax. Object-oriented programming. Lab: Java
4Chapters 3 and 16 Attributed grammars. Declarative paradigm. Lab: Prolog
5Chapter 5 Names, binding, types, and scope. Lab: Perl
6Chapters 6 and 11 Data types. Data abstraction. Lab: Ada
7Chapters 7 and 14 Expressions. Event-driven programming. Lab: JavaScript and PHP
8Chapter 8 Control statements. Lab: PHP and XML
9Chapter 9 Subprograms. Lab: Python
10Chapter 10 Implementing subprograms. Lab: C#
Design Content Description
Not applicable to this course.
General Notes on the Course
You are expected to be proficient in C++ and the Unix/Linux programming environment. All coding will be done under Unix/Linux on Sleipnir. If you need a Unix/Linux refresher or if you are a transfer student without prior Unix/Linux experience, review the materials on the CMPS 150 "Introduction to Unix" website or attend the course during the first week.
Attendance
Students are responsible for their own attendance. The topics covered in lecture will be listed on the course website. Lab attendance is not required but is strongly encouraged. Weekly quizzes are expected to be completed in class.
Academic Integrity Policy
You may discuss the assignments with others in the class. If the assignment is a group assignment, the group can turn in one assignment for the entire group. If the assignment is an individual assignment, each student must turn in their own work in their own words; no direct copying from any source is allowed. Refer to the Academic Integrity policy in the campus catalog and class schedule for more details.
Computer Labs Outside of Class
The CEE/CS Tutoring Center in Sci III 324 is available for use by students in this course outside of class time on a first come, first serve basis. Priority in the lab is given to students who are completing assignments for CEE/CS courses. See the schedule on the door for hours the lab will be open.

There are also computers available in the CEE/CS Major Study Lounge in Sci III 341 (formerly the CEE/CS Library). This room is only open when faculty members are on campus, e.g. approximately 8am to 5pm on weekdays. If the door is currently locked, see Steve, Erika, myself, or another faculty member to unlock it.

Grading
Homework10%
Labs25%
Weekly Quizzes30%
Final - Quiz Portion10%
Final - Coding Portion25%

No scores will be dropped from any of these categories. Your overall grade will be calculated based on the following scale:

A   >=93%
A-  90% - 92.9%
B+  87% - 89.9%
B   83% - 86.9%
B-  80% - 82.9%
C+  77% - 79.9%
C   73% - 76.9%
C-  70% - 72.9%
D+  67% - 69.9%
D   63% - 66.9%
D-  60% - 62.9%
F   <60%

Grades are posted on Moodle. Note: Moodle shows your "current" overall class percentage based off the classwork graded to-date. This will update as every grade posts.

It is your responsibility to check Moodle for grades and any comments on assignments. If you believe you submitted your assignment on time but the comment field says "assignment not submitted", contact the instructor.

Labs
Lab assignments will be posted on the course website. The labs are due at the beginning of the following week's lab, except for the Week 10 lab, which is due at the start of the final exam. Late labs will not be accepted.

The labs will focus on coding in various programming languages. You can discuss labs with others, but you MUST TURN IN YOUR OWN CODE to get credit for the lab. Labs are NOT a group assignment.

Labs will be submitted by setting up directories on Sleipnir. Once the lab is graded, the grade will be posted to Moodle. See lab_info.php for general lab grading guidelines. Specific guidelines will be posted at the bottom of each lab.

Homework
Homework assignments and due dates will be posted on Moodle and the course website. In general, most homeworks will be due before the start of class on Friday. The final homework will be due before the start of the final exam.

Homeworks consist of multiple choice questions that follow the lecture notes and reading material for that week. You will complete the homework assignments by completing the Moodle modules for the homeworks.

The Moodle module for homeworks can be accessed from any IP address and is not time restricted. You MUST submit the homework by the due date to get credit. Late homeworks will not be accepted.

Moodle will give instant feedback on submission, but Moodle not display your grade for the homework assignment in the Grades tab until after the due date. This is normal behavior for Moodle.

Quizzes
There are required weekly quizzes that will be taken in class on Fridays using the Moodle quiz module. These quizzes take the place of having a comprehensive midterm exam. Quiz modules are IP restricted to the CEE/CS laboratory subnet and must be completed during class time on Fridays.

If you need to take a quiz remotely, you must contact the instructor at least 2 days before the quiz to get permission.

If you finish a quiz before the end of class time on Friday, you can use the remaining time to continue to work on the weekly lab assignment. Once everyone has finished with the quiz, you can ask the instructor questions about the lab assignment.

Final Exam
There are two parts to the final exam: a final quiz on Moodle and a coding exam. Both components must be completed during the final exam period.

The final exam period is Monday November 23, 2015 from 2:00 - 4:50pm.

Due to the complexity of timing the Moodle quiz module and the scripts to grade the coding component, please try to work out any final exam conflicts with other instructors.

Prepared By
Melissa Danforth on 13 September 2015