Principles of programming languages: design, syntax, semantics, information binding, strings, arithmetic, input/output, recursion and extensibility. PRE/COREQ: COMPSCI 342.

Instructor: Alark Joshi


Office: MEC 302A

Office Hours: Monday (10-11am), Wednesday (12-2pm), Friday 10-11am or by appointment

Teaching Assistant: Nathan Riskey


Office: MEC 302D

Office Hours: MWF 2-4pm, TuTh 10am-12pm or by appointment


COMPSCI 342 or PERM/INST. Knowledge of basic data structures like lists, hash tables, binary search trees. Knowledge of elementary sorting and searching algorithms. Prior knowledge of C/Java programming language is required.


  • Identify characteristics of procedural, object-oriented, functional, declarative and scripting languages.
  • Describe the phases of program translation.
  • Explain different forms of binding, visibility, scoping and lifetime management.
  • Demonstrate the differences between call-by-value and call-by-reference parameter passing.
  • Explain the concepts of encapsulation, abstraction, inheritance and polymorphism.
  • Write small programs in languages based on several different programming paradigms.
  • Evaluate a language on the basis of the various features which it supports.



The course will be graded on a A-F scale.

Academic Dishonesty

As per the Office of Student Rights and Responsibilities, the Student Code of Conduct defines Academic Dishonesty as "A violation may include cheating, plagiarism, or other forms of academic dishonesty. All assignments submitted by a student must represent her/his own ideas, concepts, and current understanding or must cite the original source. Academic dishonesty includes assisting a student to cheat, plagiarize, or commit any act of academic dishonesty. Attempts to violate academic integrity do not have to be successful to be considered academic dishonesty. Academic dishonesty includes turning in substantial portions of the same academic work to more than one course without the prior permission of the faculty members."