CSE 428: Lecture 1 - Introduction and Overview


Introduction

The aim of the course is to offer a comparative overview of the main programming paradigms: For each paradigm, we will examine: For each paradigm we will consider one or two real programming language for exercises and practice. We will not study any particular programming language in detail: The purpose of the course is not to learn the skills of programming in a particular language, but rather to understand the general principles of programming languages. This course should provide the ability to:

Overview of programming paradigms

The languages in blue indicate the languages which we will probably choose for exercises and practice during the course
 
Functional Programming
Logic Programming and Constraint Logic Programming
Imperative Programming
Object-Oriented Programming
Concurrent and Distributed Programming

Levels of programming Languages

We can trace a brief history of programming languages according to their generations.
 
First Generation: Machine Languages.
  • The native language of machines.
  • Binary representation.
  • Machine dependent
Second Generation: Assembly Languages.
  • Uses Mnemonics to abstract from binary representation
  • Uses symbolic addresses to abstract from absolute adressing
Third Generation: High-level Languages.
  • Uses Data and Control structures as high-level abstractions of programming concepts coded directly in assembly languages
  • Machine independence
  • Examples: FORTRAN, Algol60, Algol68, Pascal, C, Ada, ...
Fourth Generation: Declarative Languages.
  • Departs from traditional approach to programming languages by using declarative notions from mathematics to provide the notion of computation.
  • Not an abstraction of a previous generation: new paradigms.
  • Much harder to produce efficient implementations.
  • Examples: Standard ML, Lisp, Haskell, Prolog, lambdaProlog
Fifth Generation Languages.
  • Term coined by the Japanese in the early 1980's ("Fifth Generation Project) during their attempt to develop of new style of programming languages and new hardware on which to implement these languages.
  • Examples: Constraint Logic Programming (CLP)?