Skip to main content

Programming Languages

Credits
6
Types
  • GRAU: Specialization compulsory (Computing)
  • GCED: Elective
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

Others

Weekly hours

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

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.
  • 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
    Theory
    0h
    Problems
    0h
    Laboratory
    0h
    Guided learning
    0h
    Autonomous learning
    0h

    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
    Theory
    0h
    Problems
    0h
    Laboratory
    0h
    Guided learning
    0h
    Autonomous learning
    0h

    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
    Theory
    0h
    Problems
    0h
    Laboratory
    0h
    Guided learning
    0h
    Autonomous learning
    0h

    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)
    Theory
    0h
    Problems
    0h
    Laboratory
    0h
    Guided learning
    0h
    Autonomous learning
    0h

    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.50·F + 0.20·P1 + 0.20·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