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

  • Albert Rubio Gimeno ( )

Others

  • Elvira Pino Blanco ( )
  • Gerard Escudero Bakx ( )
  • Jordi Petit Silvestre ( )
  • Jose Carmona Vargas ( )
  • Jose Miguel Rivero Almeida ( )

Weekly hours

Theory
2
Problems
0
Laboratory
2
Guided learning
0.4
Autonomous learning
5.6

Competences

Transversal Competences

Effective oral and written communication

  • G4 - 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.

Solvent use of the information resources

  • G6 - 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

Introduction to programming languages

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

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.
Theory
6
Problems
0
Laboratory
8
Guided learning
0
Autonomous learning
8
Objectives: 1 2 3
Contents:

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.
Theory
4
Problems
0
Laboratory
6
Guided learning
0
Autonomous learning
8
Objectives: 4 5 9
Contents:

Type systems

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

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.
Theory
2
Problems
0
Laboratory
2
Guided learning
0
Autonomous learning
6
Objectives: 4 5 6 9
Contents:

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.
Theory
4
Problems
0
Laboratory
2
Guided learning
0
Autonomous learning
6
Objectives: 5 7
Contents:

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.
Theory
2
Problems
0
Laboratory
6
Guided learning
0
Autonomous learning
6
Objectives: 3 4 8 9
Contents:

Learning a new programming language

L'estudiant haurà d'aprendre un nou llenguatge que se li assignarà.
Theory
2
Problems
0
Laboratory
2
Guided learning
2
Autonomous learning
4

Reviewing activities

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

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

There will be three evaluation tests plus a supervised work (TD) which apart from its value in the final rank of the subject, is also used to rank the generic competences G4.3 and G6.3.

The evaluation tests CL, EP and EF have a little practical work associated to each one and called respectively PCL, PEP and PEF which must be submitted in advance.

The rank of the supervised work will be obtained from the evaluation activity CT, and will be split into three parts:

-TC1 which ranks the knowledge about the assigned programming language.

-TC2 which ranks the general competence G4.3 on the bases of a brief presentation and discussion with the teacher and other students, in addition to the submitted documentation.

-TC3 which ranks the general competence 6.3 on the bases of the given description of the consulted sources and the way they are referenced and the results obtained in TC1.

The final rank is obtained from the following four ranks

NOTA1 = 30%PCL +70%CL
NOTA2 = 30%PEP +70%EP
NOTA3 = 10%PEF +90% EF
NOTA4 = TC1

using the following weighting:

FINAL NOTE NOTA1 = 20%NOTA1 + 30%NOTA2 + 40%NOTA3 + 10% NOTA4

Bibliografy

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