15-110: Principles of Computing
(Fall 2019)


As defined P. Denning et al. in an 1989 ACM report on Computing as a Discipline, computing is the "systematic study of algorithmic processes that describe and transform information: their theory, analysis, design, efficiency, implementation, and application. The fundamental question underlying all computing is what can be (efficiently) automated?". This course precisely aims at introducing the science (and the art) of computing to students with little or no prior background in the matter.

Given the inherent vastity of the topics involved in computing, the course will focus on a subset of the core aspects of computing, providing a brief, yet substantial introduction to many topics. The goal is to provide an idea of what's possible and how to realize it when it's useful (or, most often, necessary) to employ computation and computers to accomplish a complex goal.

The course will balance the discussion of concepts central to design and understand computation with their practical implementation and testing using a specific programming language, Python. The choice of python is motivated by its widespread use, relative simplicity, availability of tools for scientific, graphical, and web programming, among others.

The course will take the student along the way that starts from a complex, possibly large problem to solve, and then move step by step to its abstraction, to its formalization into an algorithmic recipe, to the encoding of the algorithm using the constructs of the python language, to the run-time execution and error correction of the programming code, to the efficiency analysis of the developed algorithm and code. A number of practical application scenarios will be considered to ground the concepts to problems of interest.

In a nutshell, the course will tackle the following topics:

While the theoretical understanding of the concepts is always fundamental, the course emphasizes hands-on, meaning that learning will be mostly driven by the repeated implementation and application in python of the general concepts.

Almost every class will feature some hands-on and/or solving excercises together with the teacher.

Homework will progressively and incrementally address more complicated problems, asking for designing and implementing relatively large and complex code.

Learning goals




This is a 10 unit course.

Place and time

Sundays and Tuesdays 15:00 to 16:20pm 2035 lectures
Thursdays 15:00 to 16:20 2035 labs

Schedule (Subject to changes)

In the table below, labs are in blue, exams are in red and the next lecture/lab is orange. Green days are in the past, and grey days have no lectures.


Gianni A. Di Caro (Teacher)

Office: 1007
Office hours: by appointment
E-mail: gdicaro@cmu.edu

Andrej Pozderc (CA)

Office: ARC
Office hours:

Maimoon Siddiqui (CA)

Office: ARC
Office hours:

  • Saturday: 1:00pm - 2:30pm
  • Tuesday: 10:00am - 11:30am
E-mail: maimoons@andrew.cmu.edu

Sara Almohanadi (CA)

Office: ARC
Office hours:

  • Sunday: 12:pm - 1:30pm
  • Tuesday: 12:00pm - 1:30pm
E-mail: smohanand@andrew.cmu.edu

Mohammed Yusuf Ansari (CA)

Office: ARC
Office hours:

  • Sunday: 9:30am - 11:00am
  • Monday: 9:30am - 11:00am
E-mail: ma1@andrew.cmu.edu

Kaustubh Iyer (CA)

Office: ARC
Office hours:

  • Wednesday: 3:00pm - 4:30pm
  • Thursday: 10:30am - 12:00pm
E-mail: kiyer@andrew.cmu.edu

Ward Ayan (CA)

Office: ARC
Office hours:

  • Tuesday: 5:00pm - 6:30pm
  • Thursday: 1:00pm - 2:30pm
E-mail: warda@qatar.cmu.edu


Grading will be based on both homework and in-class exams. Both homework and exams can consist of coding a solution to a given problem, completing and understanding given code, answering general questions about computers and computing.

Homework exams will consists of questions only including questions selected from previous homework assignments. Midterm exams will include questions about all the topics considered in the course up to that point. The final exam will include questions about anything studied during the course.

  • Homework: 40%
  • Midterm I: 10%
  • Midterm II: 10%
  • Midterm III: 10%
  • Homework Exam I: 5%
  • Homework Exam II: 5%
  • Final exam: 20%

Homework assignments

There will be weekly homework assignments.

Getting the Assignments

The writeup and starter files for each assignment can be found on Autolab. Log in with your andrewID, select the course and then the assignment. You can see the pdf with the instructions by clicking on "View writeup". The starter code and template for typing your answers are in a zip file which can be downloaded by clicking on "Download handout". Uncompressing this file will create the directory <asgn>-handout with the starter code. If you need to download these files again, be careful not to overwrite your work!

Submitting the Assignments

You need to submit a zip file containing the completed started code.

The zip file needs to be submitted to Autolab. It will immediately run a series of tests on your code and give you a score with some feedback. Make sure to check it! If your code does not pass all tests, you can submit it again until the deadline. You are limited to a total of 10 submissions for each assignment.


Set up your your programming environment by installing the Anaconda distribution (Pyhton 3.7 version):

The download is big, so make sure you are at a place with fast and reliable internet connection. Once installed, you can start the Anaconda-Navigator and launch from there the Spyder editor, which you will use to develop and test your python code.


You are expected to comply with the university policy on academic integrity (see also The Word and Understanding Academic Integrity).

Collaboration is regulated by the whiteboard policy: you can bounce ideas about a homework with other students, but when it comes to typing it down for submission, you are on your own. You are not allowed to use notes, files, pictures, etc, from any previous discussion nor previous versions of this course.

We will run a program that detects code similarity on all your homework submissions. If students are found to have submitted almost the same code, they will be contacted and this may result on an academic integrity violation report.

An Invitation to Students with Learning Disabilities:

Carnegie Mellon University is committed to providing reasonable accommodations for all persons with disabilities. To access accommodation services you are expected to initiate the request and submit a Voluntary Disclosure of Disability Form to the office of Health & Wellness or CaPS-Q. In order to receive services/accommodations, verification of a disability is required as recommended in writing by a doctor, licensed psychologist or psycho-educational specialist. The office of Health & Wellness, CaPS-Q and Office of Disability Resources in Pittsburgh will review the information you provide. All information will be considered confidential and only released to appropriate persons on a need to know basis.

Once the accommodations have been approved, you will be issued a Summary of Accommodations Memorandum documenting the disability and describing the accommodation. You are responsible for providing the Memorandum to your professors at the beginning of each semester.

Take Care of Yourself:

Do your best to maintain a healthy lifestyle this semester by eating well, exercising, getting enough sleep and taking some time to relax. This will help you achieve your goals and cope with stress.

All of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful.

If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. Counseling and Psychological Services (CaPS-Q) is here to help: call 4454 8525 or make an appointment to see the counselor by emailing student-counselling@qatar.cmu.edu. Consider reaching out to a friend, faculty or family member you trust for help.

If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night at 5554 7913. If the situation is life threatening, call 999.