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.