Introduction to Computer Science - Fall 2014

Lecture: Mondays 14:30-16:25, Room 211
Python Practical: Wednesdays 14:30-16:25, Rooms 712, 524
Office hours (for all course-related questions): 
  • Tuesdays 14:00-16:00, Thursdays 10:15-12:15,  Room 1219
  • Monday/Wednesday, 17:00-18:00, Room 1118

This course assumes no prior CS background. It is designed to hit three goals. First, the mastering of a modern programming tool, enough to bootstrap the students to tackle real-world problems. Second and arguably more importantly, the appreciation of computational thinking, a process that lays the very foundations of any such solutions. Finally, providing an overview of the very diverse and exciting modern CS landscape. 

To understand why there are these goals instead of one, think for a moment as a cameraman: there is the camera (the programming tool), the master mind behind it (the computational thinking), and the world to take a shot at (the general CS landscape). We want you to understand and appreciate why Computer Science, a relatively young discipline of science by any measure, has unlocked so many innovation potentials, and why you, too, should think of taking it seriously as a career.

Course Structure:
The course is divided into three units:
  • Unit 1, The Computational Pipeline
  • Unit 2, Computational Thinking
  • Unit 3, The Connected World
The units move progressively from the basic flow of a program and its supporting building blocks (e.g. hardware/system software) (U1), to the framing and practice of computational thinking (U2), and to the modern and complex world where all things are connected and concurrent (U3). 

There are two parallel threads, which are both loosely synchronised with the units:
  • The Lecture series (Mondays, room 211) covers the following: the building blocks to make a program work (history, computer architectures, system software), the "mastermind" that makes it work well (algorithms), the magic that makes it smart (machine learning), why it's getting smarter by the day (distributed and big data computing). Finally, there is a limit to any tool, no matter how powerful it is. So we will end with a discussion about the future of computing, the world of artificial intelligence and possible dilemmas it might set us in, and what is, after all, not computable. The series is expected to be highly interactive.  
  • The Lab series (Wednesdays, room 712 and 524) focuses on learning programming in Python. We will start by working together on Unit Projects. We will demystify something we use everyday, by actually building one ourselves: a multi-user chat that can, when needed, even read Shakespeare poems back to you. Towards the end of the term, we will work on the Presentation Projects (explained shortly). You will learn how to protect your message against noisy communication and eavesdropping spies, and much more. We will even repurpose the chat system to work as a mini-supercomputer!  
The lab series will be divided into two parallel tracks:
Track A:  for students with some programming experience (Room 524)
Track B:  for students with no or very little programming experience (Room 712) 

Unit projects:
The Unit Projects, organised to cover the three units mentioned before, will complete some of the missing functionalities of the chat system. They must be done individually, and on site during the lab days (i.e. Wednesdays), with the help of the tutors. This ensures that every student gets close supervision, and has a working chat system at the end of the term. Very likely, we will ask the students to tutor each other!
Unit projects should be finalised during the week marked in the Python Track calendar, to obtain a full grade. If presented late, unit project grades will be decreased by 20% for each week of delay. 

Presentation projects:
The ultimate test that one has learnt something well is to teach others about it. And, in CS, the best way to learn anything is to implement a working prototype. The Presentation Projects are designed for this purpose. We have prepared a list of such project candidates. Students will work individually to understand an algorithm, and implement it in Python, that they will then present to the class. They are strongly encouraged to make presentations with a working demo. Students can also propose their own topics, but must be approved by the tutors. Presentation Projects are to be completed during the last several weeks of the course.

Class rules:
No connected gadgets are allowed in class (phones, smartphones, etc). Laptops are allowed for programming tasks and taking notes (WIFI OFF). iPads or tablets are allowed for taking notes (WIFI OFF). 

We encourage students to arrive to all classes on time. If one is late for less than 15 minutes, then entrance is possible with the penalty of standing for ten minutes after arrival. After 15 minutes the doors are shut and entrance is forbidden. The following python algorithm describes the procedure:

    if (arrival_time - class_time <15):

If you do not comply to the rules, you will be asked to leave the class, and that will count towards your attendance.

  • There will be two practical exams contributing 45% to the final grade:
    • Mid-term (week 7) - 20% 
    • Final exam (December exam period) - 25% 
  • The unit projects will contribute 15% to the grade (5% for each unit)
  • The presentation project makes up 30%
  • Quizzes during the term will contribute 10% to the grade
  • A bonus for overall activity can be obtained (up to 10%) based on solving tasks in class, answering questions or doing extra project work.
  • Negative bonus: up to -14% for missing classes (0.5% for every class missed).
To complete the course, a final grade of at least 50% is required.

Text book:
Python practicals are based on Gaddis, Tony. Starting out with Python. Addison-Wesley Publishing Company, 2011. 
We will cover chapters 2 to 11. You can find the detailed schedule on the Python tracks pages (Track A, Track B). Additional links to online resources are provided on the References and Documentation page.

A great number of presentation projects come from the book “9 Algorithms that changed the future” (John MacCormick, Princeton University Press, 2013). All students must read the introduction chapter, and selected chapters according to their project selections. For projects not covered by this book, additional references is given on the Lecture Schedule page.

Lectures will be based on a wider set of references, with no one text book covering the whole material. Supporting material for each week is available on the Lecture Schedule page. 

Useful links to all documentation can be found on the References and Documentation page.

The course requires no previous programming experience. Mathematical and logical skills are important. 

The links on the side show detailed schedules for Lectures and Python tracks, including reading and practice references for each week. Students should read the material and solve the practical exercises suggested. Questions related to the material and further practical exercises will be solved in class.