BBM 101 - Introduction to Programming I

Fall 2017

Mark I Perceptron
Drawing of Analytical Engine. Image: University of Cambridge

Course Information

Course Description

This course serves as an introduction to the fundamentals of computer science and programming. It aims to help students with little or no programming experience to gain necessary skills to work with abstract notions for solving computational problems. The course is structured around basic topics such as control flow, functions, lists, input and output, simple data structures (sets, dictionaries), testing and debugging, recursion and pointers. The class will use the Python and C programming languages as a medium to provide a basic understanding of basic concepts in computer science, and the students will gain hand-on experience via a set of programming assignments supplied in the complementary BBM 103 Introduction to Programming Practicum.

Time and Location

BBM 101

Section 1: Wednesday at 13:00-14:45, Thursday at 09:00-09:45 in Clasroom D1
Section 2: Wednesday at 13:00-14:45, Thursday at 09:00-09:45 in Clasroom D2
Section 3: Wednesday at 13:00-14:45, Thursday at 09:00-09:45 in Clasroom D3

BBM 103

Lab Section 1: Thursday at 10:00-10:45 in Programming Lab (Z11)
Lab Section 2: Thursday at 11:00-11:45 in Programming Lab (Z11)
Lab Section 3: Thursday at 13:00-13:45 in Programming Lab (Z11)
Lab Section 4: Thursday at 14:00-14:45 in Programming Lab (Z11)
Lab Section 5: Friday at 09:00-09:45 in Programming Lab (Z11)
Lab Section 6: Friday at 10:00-10:45 in Programming Lab (Z11)


Erkut Erdem's avatar

Erkut Erdem (Section 1)

Office Hours:
Room 114

Aykut Erdem's avatar

Aykut Erdem (Section 2)

Office Hours:
Room 111

Aydın Kaya's avatar

Aydın Kaya(Section 3)

Office Hours:

Teaching Assistants

Necva Bolucu's avatar

Necva Bolucu

Office Hours:
NLP Lab. (128)

Selma Dilek's avatar

Selma Dilek

Office Hours:
Room Z10

Cemil Zalluhoğlu's avatar

Cemil Zalluhoğlu

Office Hours:
Computer Vision Lab. (Z03)

Selim Yilmaz's avatar

Selim Yilmaz

Office Hours:
Info. Sec. Lab. (Z06)


The course webpage will be updated regularly throughout the semester with lecture notes, programming and reading assignments and important deadlines. All other course related communications will be carried out through Piazza. Please enroll it by following the link


Students are not expected to have any prior programming experience.

Course Requirements and Grading

Grading for BBM 101 will be based on

  • two midterm exams (25%+30%),
  • a final exam (40%), and
  • class participation (5%).
In BBM 103, the grading will be based on
  • a set of quizzes (25%),
  • five programming assignments (5+4*15=65%) (done individually), and
  • class participation (10%)


All work on assignments must be done individually unless stated otherwise. You are encouraged to discuss with your classmates about the given assignments, but these discussions should be carried out in an abstract way. That is, discussions related to a particular solution to a specific problem (either in actual code or in the pseudocode) will not be tolerated.

In short, turning in someone else’s work, in whole or in part, as your own will be considered as a violation of academic integrity. Please note that the former condition also holds for the material found on the web as everything on the web has been written by someone else.

back to top

Reference Books

back to top

Schedule (Tentative)

Week Date Topic Notes
1 Sep 27 Course Introduction, What is computation? [slides]

Week 1 Lab Handout [Using Piazza, BBM103 Grading Policy]
Reading: Guttag 1, Downey 1
Video: The birth of the computer, George Dyson
2 Oct 4 Computers [slides]

Week 2 Lab Handouts [Github Classroom, Linux Commands]
PA1 out [Assignment1]
Reading: Alvarado et al. 4 (excluding 4.5-3-4.5.4)
HMMM Simulator
3 Oct 11 Introduction to Python, Control flow [slides]

Week 3 Lab Handouts [Programming in HMMM] [Hmmm Example]
Reading: Guttag 2.1, Downey 5.1-5.3
4 Oct 18 Control flow, Functions [slides]

Week 4 Lab Handouts [Programming Topics]
PA1 due
Reading: Guttag 2.2-2.4, 3, 4.1-4.2, 4.4, Downey 3, 5.4-5.7
5 Oct 25 Midterm exam 1

Week 5 Lab Handout [Programming Topics]
Sample midterm questions, PA2 out [Assignment2]
6 Nov 1 Collections, File I/O [slides]

Week 6 Lab Handout [Exercises]
Reading: Guttag 4.6, 5.1-5.3, 5.5, Downey 10-12, 14.1-14.4, 14.11
7 Nov 8 Recursion [slides]

Week 7 Lab Handout [Programming Topics]
PA2 due
Reading: Guttag 4.3, Downey 5.8-5.10, 6.5
8 Nov 15 Sorting, List Comprehension, Visualization [slides]

Week 8 Lab Handout [Programming Topics] [Exercise]
PA3 out [Assignment3 - I/O Guide]
Reading: Guttag 5.3.2, 10.2, 11
RiseSetData .zip
9 Nov 22 Testing and Debugging [slides]

Week 9 Lab Handout [Programming Topics] [Exercise]
Reading: Guttag 6, 7, Downey Debugging sections of each chapter, Appendix A
10 Nov 29 Development Strategies, Algorithmic Complexity [slides]

Week 10 Lab Handout [Programming Topics][Exercise]
PA3 due, PA4 out
Reading: Guttag 4.2, 9, Downey 3.12, Appendix B
11 Dec 6 Introduction to C [slides]

Week 11 Lab Handout [Programming Topics]
Reading: Kernighan and Ritchie 2, 3.1-3.3, Deitel & Deitel (C How to Program) 2, 3.1-3.6
12 Dec 13 Midterm exam 2

Week 12 Lab Handout [Programming Topics][Exercise]
PA4 due, PA5 out
Reading: The Resurgence of C Programming: Do You Still Need to Write Code to Build Cool Machines?, Mike Barlow
13 Dec 20 Switch statement, Loops and Functions in C [slides]

Week 13 Lab Handout [Programming Topics]
Reading: Kernighan and Ritchie 3,4, Deitel & Deitel (C How to Program) 4,5.1-5.6,6
14 Dec 27 Pointers and Strings [slides] PA5 due
Reading: Kernighan and Ritchie 5.1-5.5, B3, Deitel & Deitel (C How to Program) 7.1-7.9, 8.1-8.6

back to top

Programming Assignments

back to top


General purpose text editors

Setting up Python

PyCharm Edu Integrated Development Environment (IDE) will be used in laboratory classes for learning how to program with Python.

Resources for C language

Tools for C

Standard Environment

The most efficient way of developing a C program is to use a Unix environment:

  • Command-line
  • Compiler: gcc
  • Debugger: gdb, valgrind
  • Editor: Vim, Emacs, or Sublime Text

To mimic a Unix programming environment on your own computer, you have the following options:

  • On a Linux distribution: sudo apt-get install build-essential or equivalent.
  • On Mac OS 10.6.6 or later: Install Xcode from the App Store, open it, go to Preferences > Downloads > Components and download "Command Line Tools".
  • On Windows: Install cygwin. Please check the packages gcc-core, gcc-g++, gdb.

IDEs for C

Your programs need to work in the standard environment as we evaluate them on However, if you'd like to use a GUI, these are the IDEs that seem to work well:

Previous editions

back to top

© 2017 Hacettepe University