Course Overview

Title: Principles of Computing

Units: 10

Pre-requisites: None


This course introduces fundamental computing principles for students with little to no computing background. To demonstrate these principles, the Python programming language will be used, especially for being characterized with simple, clean, and well-designed basic programming structures. As a result, this will allow students to primarily focus on understanding and applying these principles, without getting bogged down in arcane language details.

To this end, the major principles this course will teach include: (1) an orderly software development process, which encompasses problem analysis, program specification, design, implementation, debugging, testing, and maintenance, (2) programming constructs, which involve conditioning, sequencing, selection, iteration, and recursion, (3) data organization such as lists, tuples, and dictionaries, (4) reduction of code duplication and increase of program modularity using functions and objects, (5) design and implementation of moderately complex programs using object-oriented techniques such as encapsulation, polymorphism and inheritance, (6) use of computational principles in problem-solving like divide and conquer, randomness, and simulation, and (7) classification of computational problems based on complexity and non-computable functions, among others.

To help students hone their programming skills and deepen their understanding of computing principles, the course will include a weekly homework, which involves two types of problems, programming and conceptual. In addition, each student will design, implement, and debug a large programming project by the end of the semester, thus getting the chance to piece together all the principles and skills covered throughout the semester in one solid crucible.


Instructor: Prof. Mohammad Hammoud, CMUQ 1006, 4454-8506,
Office hours: Monday, 10:30 - 11:59 AM.

Teaching Assistants

Name Email Office Hours
Sameer Ahmad TBD
Mohammed Yusuf Ansari TBD
Kaustubh Iyer TBD
Akhyar Kamili TBD
Maimoon Siddiqui TBD

Class hours


Sundays and Tuesdays, from 10:30AM to 11:50AM, in Room 2035


Thursdays, from 10:30AM to 11:50AM, in Room 2035

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 seventeen major learning outcomes. In particular, after finishing this course, each student will:

  1. Appreciate the basic design of a modern computer.
  2. Differentiate between low-level and high-level programming languages.
  3. Distinguish between compiling and interpreting high-level programming languages.
  4. Apply the steps of an orderly software development process, including problem analysis, program specification, design, implementation, debugging, testing, and maintenance.
  5. Use programming constructs like names, expressions, assignments, inputs, outputs, conditions, iterations, and recursion.
  6. Understand the fundamental principles of data types and representations on computers.
  7. Define functions to reduce code duplication and increase program modularity.
  8. Appreciate the fundamental concepts of computer graphics, especially the role of coordinate systems and coordinate transformations.
  9. Organize and manipulate a collection of related data in various data structures, including lists (arrays), tuples, and dictionaries.
  10. Apply basic indexing, searching, and sorting techniques over collections of data.
  11. Use basic file-processing techniques for reading and writing files.
  12. Comprehend the concept of objects and how they can be used to simplify programming.
  13. Design moderately complex programs using object-oriented techniques, including encapsulation, polymorphism and inheritance.
  14. Appreciate the idea of exception handling and write programs that catch run-time errors.
  15. Appreciate how the analysis of algorithms can demonstrate that some problems are intractable and others are unsolvable.
  16. Grasp the idea of pseudo random numbers and apply it in simulation as a way to solve real-world problems.
  17. Apply unit-testing when implementing and debugging complex programs.


There is no required textbook for this course. We will provide lecture slides and draft lecture notes as needed. Nonetheless, here is a good reference to use for optional reading:

  • "Python Programming: An Introduction to Computer Science," 3rd Edition, By John Zelle.


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

1. Homework Assignments (35%):

You will be assigned a weekly homework, which encompasses written and programming problems to help you test your understanding of the conceptual parts of the course and constantly improve your programming skills. Each homework will be out on Thursday after lab and due on the next Thursday before lab. Homework will evaluated based on correct functionality, code readability (in 2 years from now, you should be able to read your code and know what it does), solution elegance, and clarity and objectivity. Early submissions are rewarded with 1 extra point per day. At the end of the semester, we will drop two of your homework assignments with the lowest scores.

2. Project (15%):

You will select a problem to work on for a complete month as a large programming project. You will communicate and coordinate with your professor on the problem that you want to work on at least one week before the beginning of the project. Afterwards, you will design, implement, debug, submit, and present your project one week before the end of the semester. All projects are supposed to be done individually.

3. Exams (35%):

There will be two in-class exams, midterm and final. The midterm is worth 15% and the final is worth 20%. Both exams will include written and programming problems.

4. Quizzes (10%):

There will be 2 quizzes, one around 2 weeks before the midterm and another around 2 weeks as well before the final exam. Each quiz accounts for 5% of your final score and is primarily meant to test your understanding of the principles covered in class thus far as well as prepare you for the upcoming exam.

5. Class-Recitation Participation and Attendance (5%):

There will be two lectures and one recitation every week. Your attendance of both, lectures and recitations, as well as your participation in discussions during presentations will count for 5% of your final score.

The below table shows a breakdown of the above five 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 6 35%
Project 1 15%
Exams 2 35%
Quizzes 2 10%
Participation and Attendance 40 5%

Getting Help

For urgent communication with the professor and teaching 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 professor normally works with his office door being open. Whenever the office door is open, he welcomes visits from students. However, if the office door is closed, this means that he is busy with work, meetings, or phone calls; hence, prefers 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 from 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.