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:
Ben-Ari, 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 tic-tac-toe, 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 e-mail is
extensive used and active participation is expected.
The course is non-technical 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 Pre-programing
(formerly Algorithmic Thinking) |
| Meetings: | WThF 10-11:40 AM, Shaffer 2 |
| Instructor: | Jorge Vasconcelos |
| E-mail: | 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 e-mail, 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 paper-based 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 step-wise 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):
- Top-down 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.
- Black-box testing method.
- Cristal-box 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) One-to-one student-instructor interaction.
c) Extensive use of e-mail (follow up of individual needs).
c) Flexible schedule (if needed).
Grading policy
- Daily homework and in-class activities
- Attendance (mandatory to pass the course)
- Participacion (in-class or by e-mail)
- 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, Addison-Wesley,
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 © 2005-2008 Jorge Vasconcelos. Johns Hopkins
University,
Department of Computer Science.