|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.
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.
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 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.
Dr. Harrison's office hours
Online tutorials and texts
Other Python courses
Previous years courses
|This page was last edited 10 years ago by harrison.||View page history|