Applied algorithmic thinking (2225.YR.014949.1)
General information
Type: |
BAS |
Curs: |
1 |
Period: |
S semester |
ECTS Credits: |
4 ECTS |
Teaching Staff:
Previous Knowledge
There are no specific pre-requisites for this course. Knowledge of basic mathematical operations and functions will be helpful, including exponential and logarithmic functions, and general algebraic expressions. Other than that, the course is basically self-contained. Knowledge of python or any other programming language will be helpful, especially during the first weeks of class, but not required. Students with previous programming background and students with no coding experience should both be able to follow the course and complete the different tasks.
Workload distribution
The course has a study load of 4ECTS, which is equivalent to 100 working hours. These hours will be approximately distributed as follows:
- Online session hours: 39 hours (90 minutes per lesson) - 39%
- Synthesis session hours : 10 hours (120 minutes per lesson) - 10%
- Pre-class work: 26 hours (est. 60 minutes per lesson) - 26%
- Assignments: 15 hours - 15%
COURSE CONTRIBUTION TO PROGRAM
The purpose of this course is to equip students with fundamental algorithmic thinking skills. We will learn how thinking like a computer scientist can improve our everyday lives and how concepts from computer science can be applied to solve real-world problems, such as those related to economic, social or environmental issues. Students will learn how to approach such problems systematically, by breaking them down into parts and solving them separately. They will also learn to design and apply algorithms for searching, sorting and ordering through targeted exercises. To implement these techniques in practice, students will be introduced to Python, a well-known programming language, which is highly established in the industry. They will be introduced to the basic elements of Python programming and learn how to translate solutions into programmatic instructions that can be followed by a computer.
The structure of the course includes sessions in which new concepts are introduced and applied, followed by lab sessions that provide further practice and feedback on how to implement these concepts in code. By the end of the course, students will have a fundamental knowledge of how computational thinking can be applied and be able to implement several algorithmic strategies in practice through Python code.
Course Learning Objectives
By the end of this course, students will be able to:
CO1- Use algorithmic thinking to solve problems. Algorithmic thinking refers to the ability to break down complex problems into simpler tasks, and to do so in a systematic, yet creative way.
CO2- Write effective code in Python using the appropriate programming techniques. Effective programming requires mastering of the Python syntax and effectively using the different methods and data structures.
These two Course Objectives (COs) will lead to the following, more specific, Learning Outcomes (LOs):
LO1 - Algorithmic Knowledge. Students should be able to apply the terminology and concepts of computer science appropriately in different contexts.
LO2 - Computational Thinking. Students should demonstrate ability to think logically and systematically about problems, breaking them down into a clear, ordered set of concrete steps that could be implemented by a machine.
LO3 - Code Readability. Students should be able to generate code that can be easily read and clearly understood by others.
LO4 - Program Design. Students should be able to develop applications which can be used to solve a practical problem for a diverse audience of users.
LO5 - Python Programming. Students should create working programs in the Python language that can solve simple problems; find and fix bugs that appear in them.
Methodology
This course follows the Active Learning methodology.
Students will be required to familiarize themselves with the topics for each session before coming to class. For each lesson there will be a specific pre-class work to bring to class, including readings, exercises or reflection on specific topics and concepts. Students are responsible for their own learning in this regard. A main takeaway from this course will be learning to learn autonomously. Understanding one's needs and dedicating time and effort to them. In terms of dedication, this means that students will have to do most of the work before the class itself. Once in class, they will be asked to show that they have prepared themselves for the session by answering a related poll question, submitting their pre-class work (or some portion of it) as a poll response, or adding their pre-class work into a document in the main classroom or breakout notes. Pre-class preparation assessment polls will be scored on Learning Outcomes.
During the lessons students will be introduced to different activities, including polls, breakout rooms, active debate, or coding exercises. Each of these activities will deepen their understanding of the concepts and will help them draw links between these concepts and real-world problems. Because all classes are interactive, students must be prepared to be full participants. Otherwise, this will limit their learning and undermine the experience for the other students. Students' engagement and performance in class activities will be scored on Learning Outcomes.
As part of their independent work, students will also complete a series of assignments. This will help them solidify their learnings by working on more in-depth, real-world problems where they will get to apply the concepts discussed in class. Students will be allowed to discuss coding approaches to solve the assignments but will be asked to produce the work products they submit on their own unless otherwise indicated in the assignment instructions. Work submitted through assignments will be scored on Learning Outcomes.
This course will be run in Forum, a platform where students will find all the necessary materials, including assigned readings, study guides for the different sessions, and coding exercises, and where the online sessions will take place. Students should familiarize themselves with this environment before the start of the course by completing the pre-course training and checking for updates regularly.
Assessment criteria
Final grades will be based on students' overall performance on the course Learning Outcomes (LOs). Student performance on each LO will be computed as the mean of the weighted LO scores received for all the class activities falling under that LO. The final grade will be calculated taking the mean of all LOs. The purpose of this method is to ensure that each LO contributes equally to determining the student's grade, based on the number of weighted scores it receives. LO scores will be weighted based on the relative importance of the context of assessment according to the following criteria:
- 50% Active contribution to learning. Students will receive LO scores based on class polls. They will also receive LO scores based on their overall contribution to the class, in terms of their attitude in class and their participation in debates and breakout exercises.
- 50% Assignments. The course will include several assignments where students will be asked to apply their learnings to solve real-world problems. This may include individual assignments, group projects, oral presentations or any other form of assessment.
LO scores will be given in the Minerva grading scale. The overall outcome average will then be converted to a letter grade, according to the ESADE scale.
Bibliography
During the course, we will follow the interactive edition of the book "How to Think Like a Computer Scientist" (https://runestone.academy/runestone/books/published/thinkcspy/index.html). Readings for each session will be pubished together with the corresponding study guide in Forum.
In addition, students are also encouraged to review the following references on algorithmic thinking:
- Algorithmic Thinking: A Problem-Based Solution (https://www.amazon.es/Algorithmic-Thinking-Problem-Based-Daniel-Zingaro/dp/1718500807/ref=asc_df_1718500807/?tag=googshopes-21&linkCode=df0&hvadid=469836503237&hvpos=&hvnetw=g&hvrand=11703280272682752595&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1005435&hvtargid=pla-917862693830&psc=1)
- Introduction to Algorithms (https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/ref=as_li_ss_tl?ie=UTF8&linkCode=sl1&tag=laurebradf-20&linkId=32e1738a0108c309fbe060740b445b34&language=en_US)
and Python programming:
- A Bite of Python (https://python.swaroopch.com/)
- The Hitchhiker's Guide to Python (https://docs.python-guide.org/writing/style/)
Many of the existing bibliography, discusses topics that are more advanced than this course. A good introductory overview that covers most of the ceoncepts that we'll discuss in class is this one:
- A Beginner's Guide to Algorithmic Thinking (https://learntocodewith.me/posts/algorithmic-thinking/)