Programming Languages

Credits
6
Types
Specialization compulsory (Computing)
Requirements
Department
CS
Programming languages are the basic tool in many of the activities made by a computer engineer. Due to this, knowing how to choose the most appropriate programming language in a given situation is crucial. Note that it is not the same if we are primarily interested in efficiency, reliability or speed of development. The course will give an overview of programming languages, as well as a brief introduction to compilers. We also present in more detail functional languages and use them to introduce new elements of programming languages, such as type systems or higher-order programming. We also show how these languages can be used to specify and model hardware and software or, for instance, in financial applications. Finally, we briefly considered scripting languages, increasingly used in both the prototyping and the development of applications. As a general aim, the course will work the ability to learn new languages.

Teachers

Person in charge

  • Jordi Petit Silvestre ( )

Others

  • Edelmira Pasarella Sanchez ( )
  • Gerard Escudero Bakx ( )
  • Jordi Delgado Pin ( )

Weekly hours

Theory
2
Problems
0
Laboratory
2
Guided learning
0
Autonomous learning
6

Competences

Transversal Competences

Effective oral and written communication

  • G4 [Avaluable] - To communicate with other people knowledge, procedures, results and ideas orally and in a written way. To participate in discussions about topics related to the activity of a technical informatics engineer.
    • G4.3 - To communicate clearly and efficiently in oral and written presentations about complex topics, becoming adapted to the situation, the type of audience and the communication goals, using the strategies and the adequate means. To analyse, value and respond adequately to the questions of the audience.

Information literacy

  • G6 [Avaluable] - To manage the acquisition, structuring, analysis and visualization of data and information of the field of the informatics engineering, and value in a critical way the results of this management.
    • G6.3 - To plan and use the necessary information for an academic essay (for example, the final project of the grade) using critical reflection about the used information resources. To manage information in a competent, independent and autonomous way. To evaluate the found information and identify its deficiencies.

Technical Competences of each Specialization

Computer science specialization

  • CCO1 - To have an in-depth knowledge about the fundamental principles and computations models and be able to apply them to interpret, select, value, model and create new concepts, theories, uses and technological developments, related to informatics.
    • CCO1.2 - To demonstrate knowledge about the theoretical fundamentals of programming languages and the associated lexical, syntactical and semantic processing techniques and be able to apply them to create, design and process languages.

Objectives

  1. Knowing the different compilation steps, including lexical, syntactic and semantic.
    Related competences: CCO1.2,
  2. Conocer herramientas para la creación de analizadores léxicos y sintácticos.
    Related competences: CCO1.2,
  3. Knowing the differences between a compiler and an interpreter.
    Related competences: CCO1.2,
  4. Distinguish the main features of a given programming language. Identify its strengths and weaknesses and be able to justify a choice.
    Related competences: CCO1.2, G4.3,
  5. Understand the main features of functional programming languages​​.
    Related competences: CCO1.2,
  6. Learn advanced programming language concepts
    Related competences: CCO1.2,
  7. Being able to model and specify hardware or software problems using functional languages​​.
    Related competences: CCO1.2, G4.3, G6.3,
  8. Learn the main features of scripting languages​​.
    Related competences: CCO1.2,
  9. Ability to learn new programming languages ​​independently.
    Related competences: CCO1.2, G6.3,

Contents

  1. Introduction to programming languages.
    Turing completeness. Programming paradigms. Main features.
  2. Introduction to compilers.
    Compilers vs interpreters. The lexical analysis. Parsing. Grammars. Table of symbols. Abstract syntax tree. Semantic analysis. Code generation.
  3. Functional languages.
    Foundations. Pattern Matching. Eager/Lazy evaluation. Introduction to Haskell.
  4. Type systems.
    Types in programming languages​​. Types and reliability. Type systems in functional languages ​​and object-oriented languages​​.
  5. Higher-order programming
    Higher-order functions. Applications. Programming higher-order functions in functional and object-oriented languages​​.
  6. Modeling and Specification using functional languages
    Modeling and specification using declarative languages ​​. Prototyping. Executable specifications. Program transformation.
  7. Scripting languages
    Features. Using scripting languages​​. Combining paradigms. Types. Higher-order features. Short introduction to Python.

Activities

Activity Evaluation act


Introduction to programming languages

Es presentaran els continguts a la classe de teoria i es realitzaran treballs pràctics a la sessió de laboratori.
Objectives: 4 5 9
Contents:
Theory
2h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
4h

Introduction to compilers

Presentació dels continguts a les classes de teoria. Realització de pràctiques de laboratori utilitzant analitzadors lèxics i sintàctics i realitzant un petit treball pràctic.
Objectives: 1 2 3
Contents:
Theory
2h
Problems
0h
Laboratory
8h
Guided learning
0h
Autonomous learning
8h

CL

Prova sobre els continguts del tema 2.
Objectives: 1 2 3
Week: 6
Type: theory exam
Theory
2h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
8h

Functional languages

Presentació de continguts i realització de problemes a les classes de teoria. Realització de treballs pràctics en Haskell a les sessions de laboratori.
Objectives: 4 5 9
Contents:
Theory
4h
Problems
0h
Laboratory
6h
Guided learning
0h
Autonomous learning
8h

Type systems

Presentació de continguts a les sessions de teoria, que són treballats per al llenguatge Haskell a les sessió de laboratori.
Objectives: 4 5 6 9
Theory
4h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
6h

Higher-order programming

Presentació de continguts a les sessions de teoria i aplicació al llenguatge Haskell a les sessions de laboratori.. També es veurà quines formes de programació d'ordre superior admeten a d'altres llenguatges coneguts com ara Java.
Objectives: 4 5 6 9
Contents:
Theory
2h
Problems
0h
Laboratory
2h
Guided learning
0h
Autonomous learning
6h

Modeling and specification using functional languages

Presentació de continguts a les sessions de teoria i realització d'algun cas pràctic, que posteriorment es codificat a la sessió de laboratori.
Objectives: 5 7
Contents:
Theory
4h
Problems
0h
Laboratory
2h
Guided learning
0h
Autonomous learning
6h

EP

Examen escrit dels Temes 3 a 5.
Objectives: 5 6
Week: 10
Type: lab exam
Theory
0h
Problems
0h
Laboratory
2h
Guided learning
0h
Autonomous learning
10h

Scripting languages

Presentació de les característiques principals i d'algun exemples de llenguatges a classe de teoria. Utilització de llenguatges de scripting al laboratori, com ara gestors de processos o per navegadors web, etc.
Objectives: 3 4 8 9
Contents:
Theory
2h
Problems
0h
Laboratory
6h
Guided learning
0h
Autonomous learning
6h

Learning a new programming language

L'estudiant haurà d'aprendre un nou llenguatge que se li assignarà.

Theory
2h
Problems
0h
Laboratory
2h
Guided learning
0h
Autonomous learning
4h

CT

En aquest acte s'avaluarà l'aprenentatge
Objectives: 4 9
Week: 14
Type: theory exam
Theory
1h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
6h

Reviewing activities



Theory
2h
Problems
0h
Laboratory
2h
Guided learning
0h
Autonomous learning
6h

EF


Objectives: 4 5 6 7 8
Week: 15 (Outside class hours)
Type: theory exam
Theory
3h
Problems
0h
Laboratory
0h
Guided learning
0h
Autonomous learning
12h

Teaching methodology

Classes are divided into theory and lab sessions.

In the theory sessions the concepts of the subject will be developed. The presentation of new theoretical material is combined with the resolution of examples and the interaction with the students to promote the discussion of introduced concepts.

In the laboratory classes the introduced concepts will be put into practice and applied to specific problems and programming languages​​. There will be three small practices associated with the different evaluation tests.

Evaluation methodology

The grade is

N = 0.40·F + 0.25·P1 + 0.25·P2 + 0.10·D

where:

F = grade of the final exam
P1 = grade of the midterm exam (half course)
P2 = grade of the project (end of course)
D = note of the directed work


The midterm exam will be a computer exam that Haskell assesses. The final exam will be a written exam that will evaluate all the contents of the course. The practice is to use tools to generate compilers and Python to solve a case study.

The directed work consists in preparing a video and a written document about the properties of one or some programming languages. Assessment will be done by peer evaluation (co-evaluation). The qualifications of the transversal competences are obtained from the directed work.

Bibliography

Basic:

Previous capacities

Prior skills on logic acquired in the course on Foundations of Mathematics (FM):
- Knowledge of basic concepts of logic propositions and predicates
- Knowledge of logical inference.

Prior programming skills acquired in the courses on Data structures and algorithms (EDA) and Programming Projects (PROP):
- Knowledge of programming.
- Knowledge of object oriented programming languages