15-110: Principles of Computing

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.

Announcements

  • December 11: Final Exam will be on Wednesday, December 19th, from 1.30PM to 4.30PM !
  • November 27: HA06 is out. It is due on December 06
  • November 11: Project is out. It is due on December 11!
  • November 08: HA05 is out. It is due on November 18
  • October 25: HA04 is out. It is due on November 04
  • October 08: Midterm to be held in class.
  • October 09: Quiz I to be held in class.
  • September 30: HA03 is out. It is due on October 07
  • September 18: HA02 is out. It is due on September 27
  • September 08: All the office hours of TAs are now finalized. Please check below under logistics for details
  • September 06: HA01 is out. It is due on September 13 by 10:00AM
  • September 02: First week of classes

Course Overview

Title: Principles of Computing

Units: 10

Pre-requisites: None

Description:

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.

Logistics

Instructor: Prof. Mohammad Hammoud

mhhammou@qatar.cmu.edu, CMUQ 1006, 4454-8506,
Office hours: Monday, 10:30 - 11:59 AM.

Teaching Assistants

Name Email Office Hours
Sameer Ahmad sjahmad@andrew.cmu.edu Sunday, 3:00PM-5:00PM
Monday, 3:00PM-5:00PM
Mohammed Yusuf Ansari ma1@andrew.cmu.edu Monday, 10:30AM-12:30PM,
Wednesday, 1:00PM-3:00PM
Kaustubh Iyer kkiyer@andrew.cmu.edu Monday, 1:00PM-3:00PM
Wednesday, 4:30PM-6:30PM
Akhyar Kamili akamili@cmu.edu Sunday, 4:00PM-6:00PM
Saturday, 1:00PM-3:00PM
Maimoon Siddiqui maimoons@andrew.cmu.edu Sunday, 10:30AM- 12:30PM
Tuesday, 10:30AM-11:30AM
Thursday, 10:30AM-11:30AM

Class hours

Lectures:

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

Recitation:

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