XSL Content

Foundations of Programming

Centre
Faculty of Science and Technology
Degree
Double Degree in Physics and Electronic Engineering
Academic course
2023/24
Academic year
1
No. of credits
6
Languages
Spanish
Basque

TeachingToggle Navigation

Distribution of hours by type of teaching
Study typeHours of face-to-face teachingHours of non classroom-based work by the student
Lecture-based3045
Seminar57.5
Applied classroom-based groups1015
Applied computer-based groups1522.5

Teaching guideToggle Navigation

AimsToggle Navigation

SPECIFIC COMPETENCES

- To know the basics of current programming techniques: data structures, structured programming and object-oriented programming.

- To know and apply methods to study and compare the computational complexity of algorithms.

- To be able to apply a rigorous programming methodology based on the knowledge of data structures and computing methods for the development of software projects.

- To master a general-purpose programming language which is commonly used in today's scientific-technological environments, being able to use it for the implementation of basic algorithms.

- To be able to present a programming project clearly and concisely, and to explain the design decisions made during its development.



LEARNING OUTCOMES

- To know the main features and the most common implementations of basic data structures: linear (list, stacks and queues) and non-linear structures (hash tables, trees and graphs), and to be able to identify the most suitable structures depending on the application and how to integrate them in more general designs.

- To know and apply computational complexity analysis techniques, in order to compare two or more algorithms with each other and choose the best one (in terms of efficiency) for some given problem and context.

- To design new ADTs, exploit existing ADTs and apply basic algorithm design techniques to solve problems in a structured, clear and efficient manner.

- To be a productive part of a team in a real programming environment, using a high level programming language to solve algorithmic problems, analyzing alternative solutions, identifying the ADTs that are required, exploiting those that are already available, designing and implementing those that are not, and using running time profiles to make a decision about the most suitable approach.

TemaryToggle Navigation

CONTENTS



1. Search and sorting algorithms

- Basic search schemes: sequential search and binary search

- Basic sorting schemes: insertion, selection and bubble sort

- Partition sort (quicksort)

- Merge sort



2. Analysis of the computational efficiency of algorithms

- Asymptotic notation versus running time profiles

- Analysis of control structures

- Analysis of recursive algorithms

- Divide and Conquer algorithms



3. Abstract Data Types (ADT)

- ADT-based design

- Object Oriented Programming (OOP)

- Study of cases



4. Linear ADT

- Stacks

- Queues

- Priority queues



5. Non-linear ADT

- Hash tables

- Heaps

- Trees

- Binary search trees



6. Graphs (advanced topic)

- Definitions, operations and representations

- Paths and connectivity

- Minimum spanning trees

- Greedy algorithms

- Shortest paths

- Dynamic programming algorithms



HANDS-ON LEARNING ACTIVITIES



Three open problems (of increasing complexity) are proposed, related to the topics developed in lectures. For each of them, students must develop one or several algorithmic solutions and, depending on the case, write a brief report (results, running time profiles, etc.), which will be uploaded to the e-gela (Moodle-based LMS) platform. The proposed problems will change every year, but their general objectives will be: (1) to strengthen the knowledge about data structures and the programming skills acquired during the first semester in the subject "Introduction to Computer Science"; (2) to study the computational efficiency of algorithms from a practical point of view (that is, by obtaining running time profiles); and (3) to design, develop and apply one or several ADTs in a realistic situation.

MethodologyToggle Navigation

The teaching team employs five different teaching/learning modalities:



(1) Lectures, in which the instructor exposes a topic based on a slide presentation, with notes on the board and often with the development of code examples on the computer. Lectures are fundamentally unidirectional, though students are invited to ask any questions that may arise. Lecture notes, code examples, exercises, and even relevant links for those interested, are provided through the e-gela platform.



(2) Problem-solving sessions, in which the students, with the help of the instructor, present and discuss their solutions to the exercises. This modality is essentially interactive. Eventually, these sessions are also used to solve doubts about the contents exposed in lectures or about the hands-on (programming) sessions. Commented solutions to the exercises are also provided through the e-gela platform.



(3) Hands-on (programming) sessions, in which the students, with the support of the teaching team, write and debug code in a programming environment. Each student goes through seven highly interactive sessions that take place in a computer lab. As noted above, three different problems (of increasing complexity) are proposed, each supplied with the necessary datasets, designed specifically to develop aspects discussed in lectures. Students must encode algorithmic solutions in a programming language and write a brief report with the obtained results. These sessions aim to provide the students with confidence in the application of the acquired knowledge and to develop creative skills through the interaction with the teaching team and other students.



(4) Seminars, in which advanced topics about the programming language are exposed and discussed. Each student attend to five one-hour seminars in a computer lab, just before the first five hands-on sessions, so that they can check and explore the discussed topics by themselves in a programming environment.



(5) Tutorials, in which instructors deal with students at their office, to answer questions about the contents, the proposed exercises or the hands-on sessions. This teaching modality allows for a more direct and personal interaction. Though there is an official time slot for tutorials, students can set an appointment at any time, as long as the instructors are available. Finally, students can also raise questions through e-mail, the instructors placing their answers usually within two days.

Assessment systemsToggle Navigation

In the First Call, there will be two possible assessment paths. In the CONTINUOUS ASSESSMENT path (which is the default path), the final grade is computed as follows:



- Written exam: 60%.

- Hands-on sessions (delivery of reports in term, and where appropriate, explanation or defense): 20%

- Individual / group work (delivery of exercises in term, and if applicable, explanation or defense): 20%



Those students who wish to follow the FINAL ASSESSMENT path should apply for their resignation to the continuous assessment path BEFORE THE WEEK 10 OF THE SEMESTER.



The final grade in the final assessment path will be computed as follows:



- Written exam: 60%.

- Computer programming test: 40%.



The time, place and other conditions of the computer programming test will be announced at least ONE MONTH in advance.



In any case, it will be required a grade of 4 (out of 10) in the written exam to pass the subject.

BibliographyToggle Navigation

Basic bibliography

1. Bradley N. Miller, David L. Ranum. Problem Solving with Algorithms and Data Structures Using Python (Second Edition). Franklin, Beedle & Associates, 2011.

2. Rance D. Necaise. Data Structures and Algorithms Using Python. John Wiley & Sons, 2011.

3. John V. Guttag. Introduction to Computation and Programming Using Python (Third Edition). The MIT Press, 2021.

4. Gilles Brassard, Paul Bratley. Fundamentals of Algorithmics. Pearson, 1996.

5. Mark Summerfield. Programming in Python 3. A Complete Introduction to the Python Language (Second Edition). Addison-Wesley Professional, 2010.

In-depth bibliography

6. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms (Third Edition). The MIT Press, 2009.
7. Steven S. Skiena. The Algorithm Design Manual (Second Edition). Springer, 2008.
8. Naomi Ceder. The Quick Python Book (Third Edition). Manning Publications, 2018.
9. David M. Beazley. Python Essential Reference (4th Edition). Addison-Wesley Professional, 2009.
10. Mark Lutz. Learning Python (Fifth Edition). O'Reilly Media, 2013.

Examining board of the 5th, 6th and exceptional callToggle Navigation

  • COLLANTES METOLA, JUAN MARIA
  • SAGASTABEITIA BURUAGA, IBON
  • VARONA FERNANDEZ, MARIA AMPARO

GroupsToggle Navigation

01 Teórico (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
16-30

13:00-14:00

13:00-14:00

01 Seminar-1 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

01 Seminar-2 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

01 Applied classroom-based groups-1 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

08:30-09:30

01 Applied classroom-based groups-2 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

13:00-14:00

01 Applied computer-based groups-1 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

01 Applied computer-based groups-2 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

02 Teórico (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
16-30

13:00-14:00

13:00-14:00

02 Seminar-1 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

02 Seminar-2 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

02 Applied classroom-based groups-1 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

08:30-09:30

02 Applied classroom-based groups-2 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

13:00-14:00

02 Applied computer-based groups-1 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

02 Applied computer-based groups-2 (Spanish - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

31 Teórico (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
16-30

13:00-14:00

13:00-14:00

31 Seminar-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

31 Seminar-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

31 Seminar-3 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

31 Applied classroom-based groups-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

08:30-09:30

31 Applied classroom-based groups-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

13:00-14:00

31 Applied computer-based groups-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

31 Applied computer-based groups-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

31 Applied computer-based groups-3 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

32 Teórico (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
16-30

13:00-14:00

13:00-14:00

32 Seminar-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

32 Seminar-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

32 Seminar-3 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

32 Applied classroom-based groups-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

08:30-09:30

32 Applied classroom-based groups-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

13:00-14:00

32 Applied computer-based groups-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

32 Applied computer-based groups-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

32 Applied computer-based groups-3 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

33 Teórico (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
16-30

13:00-14:00

13:00-14:00

33 Seminar-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

33 Seminar-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

33 Seminar-3 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

15:00-16:00

25-25

15:00-16:00

Teaching staff

33 Applied classroom-based groups-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

08:30-09:30

33 Applied classroom-based groups-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
17-29

13:00-14:00

33 Applied computer-based groups-1 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

33 Applied computer-based groups-2 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff

33 Applied computer-based groups-3 (Basque - Mañana)Show/hide subpages

Calendar
WeeksMondayTuesdayWednesdayThursdayFriday
20-23

16:00-18:00

25-25

17:00-18:00

25-29

16:00-17:00

27-29

15:00-16:00

Teaching staff