Announcements and homeworks
 First reading:
Kramer, D. "Algorithms should Mind your Business"
 Homework 1:
 Project 1: Battleboats
 Elaborate a detailed description on how to perform one of the
following tasks:
 Make a snowman.
 Elaborate a powerpoint presentation of todays's topic.
 Play solitaire.
 Elaborate a flash animation of a bouncing ball.
 Summarize the minutes of a meeting.
 Draw a squirrel, chipmunk or rabbit.
Some examples
 Second reading:
Colwell, B. "Engineers, Programmers, and Black Boxes"
 Homework 2:
 Project 2: ATM
 Propose a strategy to get a mouse out of a maze.
 Think what could be the simplest activity needed for cooking and for walking.
 Third reading:
Chazelle, B. "
Could Your iPod Be Holding the Greatest Mystery in Modern Science?"
 Homework 3:
 Describe a stepwise procedure (an algorithm) to draw this kind of
figure:
 Find the pattern in the cumulative song The Twelve days
of Christmas
or The
Thirteen days of Halloween.
 Exercises to practice algorithms and programming
(PDF)
 Fourth reading:
BenAri, M. "The Bug That Destroyed a Rocket"
 Homework 4:
 Write in algorithmic fasshion, the way to play "Rock, paper, scissors."
 Think of an strategy to play tictactoe, without ever losing.

Final project options:
 Life's game
 Tamagotchi
 Basic geometric shapes
 Make the program for an adventure game.
Additional material
Programming tools
Course Information
This course is intended for people new to the world of computer
programming, and is recommended prior, or in conjunction, to introduction
to programming courses (600.107, 600.108 or 600.109) or computer fluency
(600.101). Its main purpose
is provide students with tools to solve problems by thinking
in logical and methodological way. Abstract thinking is promoted to create
solutions that can by used in a number of similar situations.
Problems and situations commonly presented in computer programming will
be discussed, along with
some fundamental concepts in creating algorithms and techniques common to
many programming languages. Students primarily
do paper solutions,
but some exercises might require calculator or computer.
Communication through email is
extensive used and active participation is expected.
The course is nontechnical and tends to present a cultural perspective of
topics, making it also suitable for anyone interested in applying
computer science knowledge to daily life.
Course:  600.106 Preprograming
(formerly Algorithmic Thinking) 
Meetings:  WThF 1011:40 AM, Shaffer 2 
Instructor:  Jorge Vasconcelos 
Email:  jorgev@cs.jhu.edu 
Office hours:  By appointment 
The instructor is open to discuss and give follow up to students' specific
interests, and be available any time by email, and as much as possible
outside office hours.
Course Objectives:
 Provide students with logical thinking and methodological tools to
elaborate abstract solutions necessary in writing computer programs.
 Provice learning experiences regarding fundamental concepts of
Algorithmic Thinking
(abstraction, not ambiguity, strict stepwise solution, handtracing, etc.)
involved in most programming languages like Basic, PHP, Assembly, c++, Java.
 Practice algorithmic problem solving with minimal aid of computers,
emphasizing paperbased strategies.
Course topics
This list presents several concepts, abilities, and practices used or
required when learnig a programming language.
Topics  Concept  Exercise  Example 
1. Algorithms and problem solving.
 Notion of problem.
 Methodological stages to solve problems.
 Plans, strategies and algorithms.
 notes  exercises  example 
2. Problem understanding.
 The challenge of understanding a problem.
 Problem context.
 Tools to recognize problems.
 Summarizing a problem.
 Problem statement and specification of requirements.
 Problem types.
 notes  exercises  example 
3. Breaking down big problems (functional decomposition).
 notes  exercises  example 
4. Planning a solution strategy.
 Tools to plan a solution strategy.
 Describing the plan in narrative form.
 Describing the plan in stepwise form.
 Express algorithm in structured English or pseudocode.
 Apply algorithm concepts to review plan.
 Handling special cases (preliminary approach).
 Implementation concerns (assumptions, constraints, computer
limitations).
 notes  exercises  example 
5. Control the sequence of activities (programming control
structures):
 Topdown sequence.
 Block of instructions.
 Selection (conditional execution).
 Iteration (repeating common tasks).
 Modules (subprograms, subroutines, procedures, functions, new
instructions).
 notes  exercises  example 
6. Arithmetic and logic.
 Arithmetic expressions.
 Operators hierarchy.
 Assignment.
 Boolean logic fundamentals.
 Truth tables.
 Boolean expressions and conditions.
 Selection trees.
 notes  exercises  example 
7. Debugging, testing and handtracing (walkthroughs).
 Error types.
 Common errors.
 Unexpected errors.
 Testing data set.
 Blackbox testing method.
 Cristalbox testing method.
 Boolean expressions and conditions.
 notes  exercises  example 
8. Writing statements, comments, documentation.
 notes  exercises  example 
9. The notion of abstraction in computer programming.
 Different perspectives of abstraction.
 Levels of complexity.
 Extracting essential characteristics.
 Modeling (simplifying reality to facilitate its study).
 Implicationns of abstraction when implementing.
 notes  exercises  example 
10. Optional.
 Refining and broadening solutions (succesive refinement, succesive broadening).
 Handling special cases.
 Computer architecture fundamentals (linking computational algorithms with computers).
 Languages with different types of primitives.
 notes  exercises  example 

Main reference
Bailey, T.E. and Lundgaard, Kris. Programming with pseudocode.
Brooks/Cole.
Class description
The class has a workshop format (minimum theory and lots of
exercises):
a) All students and instructor are involved and participate
to solve the proposed problem.
b) Onetoone studentinstructor interaction.
c) Extensive use of email (follow up of individual needs).
c) Flexible schedule (if needed).
Grading policy
 Daily homework and inclass activities
 Attendance (mandatory to pass the course)
 Participacion (inclass or by email)
 Quizes.
 Quality of documents submitted (Paperwork related to homework and
exercises. Examples will be provided.)
Recommended texts
 Schneider, G. Michael and Gersting, Judith L. An Invitation to
Computer Science , Brooks/Cole, 2003.
 Snyder, L. Fluency with Information Technology, AddisonWesley,
2003.
 Farrel, Mary. E. Learning Computer Programming It's not about
Languages. Charles River Media Inc. Hingham, Massachusetts,2202
 Wang, Wallace. Beginning Programming, 2nd Ed. Hungry Minds, NY
2001
Web Links
 Basic Strategy for Algorithmic
Problem Solving

Crawford, C. "How to Think: Algorithmic Thinking," Journal of
Computer Game Design v.7, 1993.

Kramer, D. "Algorithms should Mind your Business,"
OffshoreDev.com, July 23, 2002.

Snyder, L. Interview by F. Olsen "Computer Scientist Says all
Students Should Learn to Think 'Algorithmically'," The Chronicle of
Higher
Education, May 5, 2000.
 Wing, J. M. "Computational Thinking"
 "Princeton
professor foresees computer science
revolution"
 "An Introduction to Computer Science"
 About the instructor
Copyright © 20052008 Jorge Vasconcelos. Johns Hopkins
University,
Department of Computer Science.