Pre-programming: Algorithmic Thinking
Problem Solving and Programming Practices

Jorge Vasconcelos.Course #600.106
(Under continous construction)
Intersession 2009



Announcements and homeworks

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:

Course topics

This list presents several concepts, abilities, and practices used or required when learnig a programming language.

TopicsConceptExerciseExample
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


Web Links


Copyright © 2005-2008 Jorge Vasconcelos. Johns Hopkins University, Department of Computer Science.