Course Overview

Title: Principles of Computing

Units: 10

Pre-requisites: None


Computing can be defined as the study of computational processes that manipulate information. A computational process is one that can be automated, and thus executed by a computer. Therefore, one of the main underlying questions is: what can be (efficiently) automated? This course aims at introducing the science (and art) of computing to students with little or no prior background in this subject.

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

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.



Prof. Mohammad Hammoud

Email: mhhammou at
Office Number: CMUQ 1006.
Office Hours: Sundays, 10:00 - 11:30 AM.

Prof. Eduardo Feo Flushing

Email: efeoflus at
Office Number: CMUQ 1005.
Office Hours: Mondays, 11:00 AM. - 12:00 PM.

Course Assistants

Name Email
Mohamad El Ghali melghali at
May Khin mkhin at
Maryam Rahmatullah mrahmatu at
Raman Saparkhan rsaparkh at
Ahmed El Fekih Zguir aelfekih at

Class hours


Sundays and Tuesdays, from 02:30PM to 03:45PM, in Room 1202


Thursdays, from 02:30PM to 03:45PM, in Room 1202

Course Objectives

Acquiring and applying core computing skills such as problem-solving, design, and programming are critical for your success as a computer scientist and software developer. This course aims at providing you with these skills in a systematic and practical way. In particular, principles will be motivated and introduced in a natural fashion as an outgrowth of a developing discussion. Afterwards, orderly processes and/or frameworks will be presented for applying and testing these principles. Extensive and interesting programming and conceptual examples will be incorporated throughout the whole semester to make issues always concrete and applied. Principles covered in this course will carry over directly to subsequent studies of computer systems, algorithms, and applications.

Learning Outcomes

This course incorporates seven major learning outcomes. In particular, after finishing this course, you will:

  1. Understand what classes of problems computers are good at or are necessary for.
  2. Be able to analyze and abstract a given problem in a way which is amenable to an algorithmic solution.
  3. Design algorithmic solutions.
  4. Judge the effectiveness of an algorithmic solution, and ways to improve it.
  5. Apply fundamental algorithmic solution techniques when relevant.
  6. Code algorithmic solutions in Python.
  7. Debug and test Python code.

The Python constructs introduced throughout the course include, but are not limited to:

  1. Basic datatypes (integer, strings, booleans, floating point numbers).
  2. Arithmetic operations.
  3. Conditionals.
  4. Iteration/loops.
  5. Composite datatypes (lists and dictionaries).
  6. Functions.
  7. Input/Output and file processing libraries.


There is no required textbook for this course. Lecture slides, notes, and code samples will be provided and posted on the course webpage as necessary.


Each student will receive a numeric score with a corresponding letter grade, based on a weighted average of the following:

1. Homework Assignments (15%):

You will be assigned a weekly homework (except on exam weeks), which encompasses written and programming problems to help you test your understanding of the conceptual parts of the course and constantly improve your problem solving & programming skills. Each homework is to be solved individually (check the course policy on collaboration).

2. Project (10%):

There will be one single large programming project that is to be solved individually (check the course policy on collaboration).

3. Exams (50%):

There will be three in-class midterm exams, each worth 10%. In addition, there will be a final exam that is worth 20%.

4. Quizzes (20%):

There will be a weekly quiz administered at the beginning of a lecture or a recitation.

5. Attendance and Participation (5%):

You are required to attend classes and participate effectively.

The below table shows a breakdown of the above four forms of assessment methods that the course involves, alongside the quantity and overall weight of each method. Please take into account that small differences in scores can make the difference between two letter grades. Letter grades will be determined by absolute standards. Individual cases, especially those near cutoff points, may be adjusted upward or downward based on factors such as class participation, improvement observed throughout the course, final exam performance, and special circumstances.

Type # Weight
Homework Assignments 8-11 15%
Project 1 10%
Exams 4 50%
Quizzes 8-10 20%
Attendance and Participation 40 5%


1. Getting the Assignments:

The writeup and starter files for each assignment can be found on Autolab. Log in with your Andrew ID, select the course and then check 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 on a zip file which can be downloaded by clicking on "Download handout". Uncompressing this file will create the directory -handout with the starter code. If you need to download these files again, be careful not to overwrite your work!

We strongly suggest that you create one folder for each assignment inside a folder dedicated for this course on your machine. Submissions containing code from previous assignments, or old code from the current assignment will not be considered.

2. Submitting the Assignments:

You need to submit a zip file containing the completed solution.

The zip file needs to be submitted through Autolab, which 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.

The score received on Autolab may not reflect your final score for the assignment, since the course staff will check the code for style and similarity between students.

Getting Help

For urgent communication with the professors and the course assistants, it is best to send an email. If you want to talk to any of them in person, remember that their office hours are merely nominal times upon which they guarantee that they will be in their offices. You are always welcome to visit them outside of their office hours if you need help or want to talk about any issue that pertains to the course.

We ask that you follow a few simple guidelines. The professors normally work with their office doors being open. Whenever the office doors are open, they welcome visits from students. However, if the office doors are closed, this means that they are busy with work, meetings, or phone calls; hence, prefer not to be disturbed.

We will use the course webpage as the central repository for all the course material. In particular, on the course webpage you can always:

  • Obtain copies of any homework assignment and lecture slides.
  • View announcements that relate to the course.
  • Find links to any reference or data you need for your studying and assignments.
  • Read clarifications and changes made to any assignments, schedules, or policies.

In addition, we will use Piazza for course announcements and online discussions. Use it to ask questions and to share your experience! The course staff will be happy to answer your questions in a timely manner. However, sometimes we might wait to answer in order to let others answer or for you to think about it a little more. We encourage you to answer each others' questions!

Another important issue appears while asking questions on Piazza. Please do not send your source code to ask questions. Your questions can be related to specific parts of your programs, but while others read your code they will be affected by your solutions. We need to let others find their own solutions for a better learning.

Lastly, all communication on Piazza should not include any inappropriate content or any form of expression that will be unethical or rude. Please find our 15110 Piazza page at:

Academic Integrity

The value of your degree depends on the academic integrity of yourself and your peers in each of your classes. Please read the University Policy on Academic Integrity ( carefully to understand the penalties associated with academic dishonesty at Carnegie Mellon University.

Academic integrity means that any work you submit for this course is your own. This is critical to your learning. The policy's intention is that you never hand in something you do not understand. Your understanding must be deep enough that, if necessary, you could re-do the work completely on your own. In short, do your own work.

We want you to collaborate with other students only if the collaboration improves your understanding. Therefore, you can talk about the homework assignments, but no one may take notes or record the discussion. When you write your solution, it should be yours. Go to a separate area and write your own code or answers. Do this individually so that you do not end up copying someone else's work. Your own solution, even if it is incorrect, is much better than someone else's that you do not understand.

When working on programming assignments, do not look at other students' code or show them your own. If you need that kind of help, get it from the course staff. You may discuss your code at a conceptual level; for example, "do we need a loop for this purpose or just an if statement?". You may collaborate on code at a whiteboard, but you may not take notes or photographs; the purpose of the collaboration is to develop your understanding so that you can then solve the problem yourself, on your own.

If the course staff sees similarities between your work and that of another student, we will attempt to understand what happened. Usually this involves asking you to explain your work and how you did it, and to re-create the work or solve a related problem during our meeting.

For exams, your work must be your own with no communication between you and others (except course staff), and you may use only authorized materials.

If you cannot keep up with the workload due to personal issues, please see your professor. He will help you work toward a solution and will be always happy to assist.

In this class, cheating, copying, or plagiarism means copying all or part of a program or homework solution from another student or unauthorized source, or knowingly giving such information to another student, or handing in a copy of work that you and another student did together, or giving or receiving unauthorized information during an examination. If you use information from another authoritative resource, you must cite the source of this information (and receive permission if required).

Students who violate this policy will be charged with academic dishonesty that can result in failure in this course and possible expulsion from Carnegie Mellon University. Review the official University Code for more information.

Health & Wellness

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.

For more information on policies and procedures, please visit this document.

Taking 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 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.

Class Schedule

Please refer to Schedule for the tentative schedule for the class. The schedule indicates the project and the assignment activities as well. Any changes will be always announced and reflected on this webpage.