| Course code | CSCI3180 | 
| Course title | Principles of Programming Languages 程序設計語言原理  | 
| Course description | This course introduces, analyses and evaluates the important concepts found in current programming languages. The concepts are illustrated by contrasting their appearances in different languages. Major topics include: concepts, paradigms and implementation techniques. 本科介紹、分析及評價在現時程序設計語言中的重要概念,並透過比較其在不同語言中的表現予以說明。主要專題包括:概念、範例及實踐技術。  | 
| Unit(s) | 3 | 
| Course level | Undergraduate | 
| Pre-requisite | CSCI2100 or 2520 or ESTR2102 | 
| Exclusion | ESTR3106 | 
| Semester | 2 | 
| Grading basis | Graded | 
| Grade Descriptors | A/A-:  EXCELLENT – exceptionally good performance and far exceeding expectation in all or most of the course learning outcomes; demonstration of superior understanding of the subject matter, the ability to analyze problems and apply extensive knowledge, and skillful use of concepts and materials to derive proper solutions. B+/B/B-: GOOD – good performance in all course learning outcomes and exceeding expectation in some of them; demonstration of good understanding of the subject matter and the ability to use proper concepts and materials to solve most of the problems encountered. C+/C/C-: FAIR – adequate performance and meeting expectation in all course learning outcomes; demonstration of adequate understanding of the subject matter and the ability to solve simple problems. D+/D: MARGINAL – performance barely meets the expectation in the essential course learning outcomes; demonstration of partial understanding of the subject matter and the ability to solve simple problems. F: FAILURE – performance does not meet the expectation in the essential course learning outcomes; demonstration of serious deficiencies and the need to retake the course.  | 
| Learning outcomes | 1. Exposure to, and understanding of all major programming paradigms; 2. The ability to assess new paradigms and languages; 3. The understanding of how to describe and read programming language syntax descriptions; 4. Knowledge of how syntax descriptions are processed by programming languages; 5. Understanding of the different kinds of PL semantic analysis approaches; 6. Ability to identify differences in different semantic analysis conventions; 7. Ability to consider how to design new programming languages; 8. Understanding of how to determine which principles drive which programming language, and how to carry those through to PL design.  | 
| Assessment (for reference only)  | 
Final exam: 40% Project: 30% Assignments: 30%  | 
| Recommended Reading List | 1. PROGRAMMING LANGUAGES, Principles and Practices, By Louden. 2. Concepts of Programming Languages by Sebesta 3. Programming Languages, Design and Implementation, by Pratt and Zelkowitz  | 
| CSCIN programme learning outcomes | Course mapping | 
| Upon completion of their studies, students will be able to: | |
| 1. identify, formulate, and solve computer science problems (K/S); | TPM | 
| 2. design, implement, test, and evaluate a computer system, component, or algorithm to meet desired needs (K/S); | 
TPM | 
| 3. receive the broad education necessary to understand the impact of computer science solutions in a global and societal context (K/V); | |
| 4. communicate effectively (S/V); | 
T | 
| 5. succeed in research or industry related to computer science (K/S/V); | 
T | 
| 6. have solid knowledge in computer science and engineering, including programming and languages, algorithms, theory, databases, etc. (K/S); | TPM | 
| 7. integrate well into and contribute to the local society and the global community related to computer science (K/S/V); | |
| 8. practise high standard of professional ethics (V); | |
| 9. draw on and integrate knowledge from many related areas (K/S/V); | 
|
| Remarks: K = Knowledge outcomes; S = Skills outcomes; V = Values and attitude outcomes; T = Teach; P = Practice; M = Measured | |