Problem-Oriented Programming Comment | Log in | Print | Subscribe to this page

This is the home page for Problem-Oriented Programming in Medical Informatics (BIOINF 2012, ISSP 2062; 3 credits), a graduate course in object-oriented programming taught as part of the University of Pittsburgh Center for Biomedical Informatics medical informatics training program, from 2001-2004. The course contents are maintained here for reference purposes. For the most extensive online lecture notes, see the 2003 course, linked from the lower right of this page. The course description, rationale and grading policies are included below. Resources for the course including the schedule and assignments are listed in the sidebar to the right.

Course description

This course is designed to extend students' programming abilities through review of current program design and coding techniques, including fourth-generation languages, the Unified Modeling Language (UML), object-oriented programming and Extreme Programming. The course includes a strong practical programming component based on the Python language consisting of in-class laboratories, weekly practical programming problems, and an independent programming project. Programming assignments are drawn from areas relevant to medical informatics such as structured text and image processing, network communications, database management, natural language processing, expert systems, etc. Through the course, students learn to understand the programming process at a practical level and gain the ability to independently create useful software tools. Grading is based on weekly programming assignments, the independent programming project and participation in classroom and online discussions.

Instructor:James H. Harrison, Jr., M.D., Ph.D.
Days/Times:Thursdays, 9:00 am to 12:00 noon
Location:The UPMC Cancer Pavilion (Shadyside campus) 3rd Floor Computing Laboratory
Prerequisites:Understanding of basic computer use, file management, etc.
Recitations: None
Expected class size:8-12 students

The course is usually offered in the fall term. Special permission from the instructor is required to register for this course.

Why teach this course?

Students in graduate and professional training programs in areas related to information science (such as medical informatics) need to be familiar with software engineering concepts, they need a common vocabulary with programmers and system engineers, and they benefit from the ability to create specialized software, especially for research or teaching. However, they do not typically become full-time programmers and they tend to work at a relatively high level of abstraction from the hardware. Programming courses in these training programs often focus on system languages such as C and C++, which offer excellent control over computer hardware but also extract substantial effort from the programmer in managing details that have little to do with the primary logic and structure of a program. Informatics students typically do not have time in the curriculum or in later jobs to develop real expertise or carry out software development projects in a system language. Thus a limited exposure to a system language during training often provides little long-term benefit. Recently, several general-purpose rapid development programming languages have become available that are robust and built on generalizable programming concepts but are also practical for serious part-time programming. These languages are likely to be beneficial to information science students who do not intend to be full-time programmers, both for learning software development concepts and for actual development of useful programs.

This course is an experiment that attempts to provide skills with a high level software toolset that will remain useful in the long term and to use this toolset to teach the programming concepts that are most important for graduate students in medical informatics. It is designed to teach rapidly a high-level, general purpose, byte-code-interpreted programming language--Python--which is platform-independent and has a reputation for clear syntax, easy code maintainability, friendliness and rapid progress for beginners, and depth for professionals. Python is useful for both small- and large-scale projects. Application logic in Python is similar to that of system languages, but details of hardware management are handled automatically. Code can be run interactively and is easy to test and modify. This allows rapid learning, rapid software development and more time in the curriculum for higher-level topics. Thus the language is introduced quickly in the first third of the semester and the remainder of the course is dedicated to a series of problems in data modeling, object oriented programming, data structures, database access, communications, image processing, etc., that illustrate real-world applications of programming.

Information about the use of Python as an introductory teaching language is available in Jeff Elkner's Using Python in a High School Computer Science Program and Guido van Rossum's Computer Programming for Everybody. Undergraduate courses include those from CalTech and Mississippi College. Other graduate courses in Python have focused on bioinformatics (the Pasteur Institute and the Univ. of Colorado), programming in the physical sciences, and quantitative reasoning.

Goals, expectations and grading

The goal of this course is to teach core programming skills quickly, using a beginner-friendly but powerful high level programming language (Python), then to use those skills to examine a series of programming and application design areas that are important in medical informatics. Students participating in this course will learn to write limited programs for personal use or research, will be able to discuss application design with programmers and system managers, and will gain skills with a tool that can grow with them in the future.

Students' responsibilities

Students should attend the Thursday 9am-12noon didactic/lab sessions, participate actively in the class discussions and complete the assigned readings (see ClassSchedule). They should complete and upload homework problem assignments on time (see below) and make sure that they understand the material in the readings and assignments. Students should also participate actively in the online class discussion (see DiscussionPage and individual session pages), including posting questions and responding to others' questions. Students are responsible for letting the instructors know if there are areas of confusion and should persist in asking questions until the issues are resolved. Finally students should choose a topic and begin work on the independent programming project (see ClassSchedule) during the second half of the term and should make sure that the project is turned in on time.


Programming problems will be assigned in each session to be done as homework. Students should do their homework individually and submit their programs by email as attached .py files to Dr. Harrison 24 hr prior to class (by 9 am Wed each week). Students should also be prepared to present and discuss their homework programs in the first part of each class period. Homework will be graded (see below) and returned to the student within several days.


Half of the grade will be based on the homework problem assignments (assignments should show adequate effort and progress), one fourth on the independent programming project (quality of work), and one fourth on class and online discussion participation. With respect to the latter, all students should plan to post questions and comments regularly to the online discussion; the number and quality of these postings will affect the grade.


Transportation: Pitt, PAT and UPMC buses run between the Oakland and Shadyside campuses every 10-15 min. See ShuttleMaps? for schedules and maps.

What Programming Lanuage Should You Learn is a thoughtful discussion of the issues though not particularly python-oriented.

Class information

Grades (instructors only)
Slides (instructors only)
• Textbook: Python Programming
Author site
PracticePage, for local Wiki practice

Instructor contacts
Jim Harrison, 647-5529
Jan Walker (Admin asst) 647-5380

Dr. Harrison's office hours
• Mon, 1 - 3 pm, Canc Pav #310
• Thu, 1 - 3 pm, Canc Pav #310
• Fri, 8 - 11 am, CBMI, Forbes Tower

Learning resources

Good books
The Python Cookbook
UML Pocket Reference
Python in a Nutshell
Learning Python, 2nd Ed.

About Python
Python web site
Current Python announcements
• Orbtech's Why Python?
As a first language
Computer Programming for Everybody
Dynamic Languages
Resources for the Python Pro
O'Reilly Network's Python page
• Hetland's Python Page
Beginning Python for Bioinformatics
• Python link listings: 1 and 2
Python FAQTs
Python vs. Java
Comparison of 7 languages

Python 2.3
wxPython, a popular GUI library
Python Imaging Library (PIL)
SciTE, a nice programming editor
Boa Constuctor, Python IDE
Numarray, numerical processing
SciPy, scientific computing & charting
ScientificPython, science and stats
matplotlib, 2D data plotting
EasyGUI, simple dialog boxes
• Natural language processing (1 , 2)
PAIDA, data analysis

Python code
Useless Python
The Vaults of Parnassus
Python Cookbook

Quick reference
Python RefCard
Python 2.3 Quick Reference

Online tutorials and texts
IDLE tutorial
The official Python tutorial
Python for Fun
NM Tech Python Resources
Bembry Python course
Dive Into Python (advanced, good)
Regular expressions in Python resource list
Think like a CS (download)
Intro to Python, U. Chicago
Learn to Program (easy)
Non-programmer's Tutorial (easy)
Python Bibliotheca
Live Wires (easy)
OOP with Python (easy)
Python technical articles
A Byte of Python
Data structures and Algorithms

GUI Programming
Intro to Event-Driven Programming
An Introduction to Tkinter ( PDF )
Thinking in Tkinter
Tkinter Summary
Tkinter, GUI Programming with Python
Bembry Python course
Tkinter FAQTs
wxPython wiki, docs and tutorial

Other Python courses
Bioinformatics and Python, Pasteur Inst.
Intro to Programming in Python
Bioinformatics at U. Colo.
Quantitative Reasoning, Harvard
Computational Linguistics, U. Edinburgh
Artificial Intelligence Progr., U. Edinburgh
Artificial Intell. Appl. Dev., Pitt
Principles of Comp. Graphics, Miss. St.
Python for Climate Science, U. Chicago
Selected Language: Python, Miss. Coll.
Progr for Physical Sci, U Maryland
Python Short Course, Caltech
Intro to Programming, H.S. High School

Previous years courses


This page was last edited 10 years ago by harrison. View page history


    with signature

Powered by Zwiki, Zope, Python, and Mac OSX