Python Bootcamp

An intense course for programmers who want to learn the essential elements of Python programming.

"Very informative - well worth the time." (Review from on-site training, Feb. 2007)

"Dave's slides are by far the best, most-thorough, and polished slides of any lecture I've attended, college, professional training, or otherwise." (Review from Big Nerd Ranch, May, 2007).

"The concepts were great and useful in real world applications." (Review from Big Nerd Ranch, Nov. 2007)


Python Bootcamp at Kloster Eberbach, Germany (Organized by Big Nerd Ranch, July, 2007).

Overview

This course, designed for software developers, scientists, and engineers, is a comprehensive introduction to the Python programming language, standard library, and Python programming techniques. Although the course assumes no prior experience with Python, the course is strongly focused on real-world applications including data processing, systems integration, network programming, reliability, and testing. In addition, you will learn about programming with objects, and other essential aspects of Python programming.

Syllabus

The course is typically taught in either a 3 or 4 day configuration with the first two days devoted to the "Introduction to Python" and "Object Oriented Programming" sections. The remaining course days are taken from the "Systems Programming" and "Network Programming" sections.

1. Introduction to Python

An introduction to Python for programmers who are new to Python, but generally familiar with programming in some other language. By the end of the day, students will be familiar with most of the major Python features needed to start writing useful programs.

A Tutorial Introduction An introduction to the Python programming language. Covers details of how to start and stop the interpreter and write programs. Introduces Python's basic datatypes, files, functions, and error handling.
Working with Data A detailed tour of how to represent and work with data in Python. Covers tuples, lists, dictionaries, and sets. Students will also learn how to effectively use Python's very powerful list processing primitives such as list comprehensions. Finally, this section covers critical aspects of Python's underlying object model including variables, reference counting, copying, and type checking.
Program Structure, Control Flow, and Functions More information about how to organize larger programs and how to reuse code. Covers more advanced aspects of Python control-flow and expands upon how to define and use functions. Also covers scoping rules, documentation strings, anonymous functions, exec, and eval.
Modules and the Standard Library How to organize programs into modules and further details of Python variable scoping rules and namespaces. This section concludes with a overview of some of the most commonly used library modules and instructions on how to install third party library modules.

2. Object Oriented Programming

This section covers the details of defining and working with new objects in Python. In addition, testing, debugging, and software development practice are covered.

Classes An introduction to object-oriented programming in Python. Describes how to create new objects, overload operators, and utilize Python special methods.
Inside the Python Object Model A detailed look at how objects are implemented in Python. Major topics include the definition of objects, the object lifecycle, object representation, attribute binding, inheritance, and special properties of classes including properties, slots, private attributes, static methods, and class methods.
Working with Objects
A more detailed look at how to effectively design objects in Python. Topics primarily focus on how to encapsulate data and algorithms into classes and common design patterns used in the Python standard library.
Object Persistence How to save, restore, copy, and serialize objects. Covers the marshal, pickle, shelve, and struct modules. The programming API used to interface with relational databases such as MySQL, Oracle, and Sybase is also discussed.
Documentation, Testing, and Debugging This section discusses many isses that are considered important to Python software development. This includes effective use of documentation strings, program testing using both the doctest and unittest modules, and effective use of assertions. The Python debugger and profiler are also described.

3. Python Systems Programming

The major focus of this section is using Python to interact with both common operating system features and with other applications.

Iterators, Generators, and Closures Covers the iteration protocol, iterable objects, generators, generator expressions, and concepts related to "lazy" evaluation of Python statements. A major focus of this section concerns the use of iteration for solving various problems in systems programming (e.g., processing large datafiles and infinite data streams).
Working with Text
A more in-depth look at how to efficiently parse and generate text data in Python. Topics include string splitting, string stripping, string joining, and template strings. This section also covers the re module, Python's module for regular expression pattern matching and substitution.
Files and the file system A more detailed look at file I/O in Python. Topics include how to work with files and directories in a portable manner as well as unicode I/O. Also covers useful modules for working with a wide variety of common file formats such as zip, gzip, bzip, tar, and CSV.
Working with Processes This section covers details of the Python interpreter process including command line options, environment variables, and I/O. The problem of interacting with other processes and applications from Python is then discussed with detailed coveraged of the subprocess module.
Concurrency Detailed coverage on different options for writing concurrent programs in Python. Topics include threads, message queues, co-routines, and co-processes. Special emphasis will be given to a technique of writing concurrent programs that is highly portable and easy to adapt to a variety of different system configurations.

4. Network and Internet Programming

A detailed overview of network programming features of Python. There are three major themes of this section. First, you will learn the basics of networking and how to write your own networked applications using the socket module and related support modules. Second, client-side programming for a wide variety of common Internet protocols is covered including HTTP, FTP, and XML-RPC. Finally, attention is given to common data formats encountered when writing Internet applications.

Network Fundamentals An introduction to the basic concepts of network programming. Covers the essential details of TCP/IP and the essential concepts of socket programming.
Server side programming Modules related to the implementation of Internet servers. Covers the SocketServer module. In addition, you will learn how to quickly write HTTP and XML-RPC servers.
Client-side programming Detailed coverage of modules that allow you to interact with a wide variety of standard Internet services. These include HTTP, FTP, SMTP, and XML-RPC. Special attention will be given to the urllib2 module that allows Python to interact with web servers.
Web Programming Essential elements of web programming in Python. Topics include the HTTP protocol, request parsing, form handing, cookies, CGI scripting, WSGI, templating engines, and an introduction to web frameworks. Note: This section is not specific to any particular Python web framework---the topics are focused on universal concepts.
Internet Data Handling An overview of modules related to processing common Internet data formats. Major topics include Unicode, HTML, and XML.

5. Optional Topics

The following special topics can be added to a course on demand.

Configuration and logging This section focuses on two important problems that are often overlooked in systems programming classes---namely how to deal with application configuration files and how to add a logging capability to a program. Special attention is given to the ConfigParser and logging modules.
Python extension building An introduction to writing C/C++ extensions to Python. The section focuses on the mechanics of creating and compiling an extension module. The essential elements of creating hand-written extensions to Python are described. This is followed by an introduction to common Python extension building tools including Swig, and ctypes.
Embedding Python How to embed the Python interpreter into other applications.

Instruction Format

The course is a mix of presentation slides with hands-on programming exercises. Typically, class time is evenly split between these two activities.

Prerequisites

Although no prior experience with Python is required, this course assumes that students have prior experience with some other programming language such as C++, Java, or Perl. This is not an introductory class on how to program! Participants should already be familiar with the basic concepts of programming such as variables, statements, control-flow, functions, arrays, data structures, and common algorithms (e.g., searching, sorting, etc.).

In addition, it is assumed that students already know how to work with files, folders, editors, command shells, environment settings, internet connections, IDEs, and other essential aspects of using a computer for software development.

About the Instructor

All courses are taught by David Beazley, author of the Python Essential Reference. David has been an active member of the Python community since 1996 and is the creator of several Python-related packages including SWIG and PLY. From 1990-1997, he worked part time at Los Alamos National Laboratory where he helped pioneer the use of Python on massively parallel supercomputers. From 1998-2005, he was an assistant professor in the department of computer science at the University of Chicago where he taught courses in operating systems, networks, and compilers. Dave is a nominated member of the Python Software Foundation. In addition to his work with Python, Dave has extensive experience with C,C++, and assembly language programming. An academic CV is available upon request.

Logistics

The class is best suited for 10-15 students. A larger class size is possible, but I will not teach a class that has more than 25 students.

You are responsible for providing the instruction space, a video projector, and machines where students can work on the programming exercises. The course can be taught on Windows, Linux, or Mac OS-X. However, all machines must be equipped with the latest version of Python (Python 2.5). In addition, some of the hands-on exercises related to Python Systems Integration (Section 5) will require the use of a C/C++ development environment.

Course materials are provided in electronic form (PDF) for duplication. There are approximately 140 printed pages of handouts for each day of instruction.

Although the class notes are extensive, all attendees are encouraged to bring a Python book for reference. Absolute beginners may want to consider a book such as "Learning Python" or "Dive Into Python." If you already have some Python experience, consider a book such as the "Python Essential Reference" or "Python in a Nutshell."

2009 Schedule and pricing

Classes are normally scheduled 8-24 weeks in advance. However, classes in the Chicago area can often be scheduled on shorter notice depending on my availability.

The cost of a class with 12 students is $2400/day plus travel and expenses. Additional students can be added for $200/student per day. Discounts are available for classes offered in the Chicago area and prepaid classes. I am available to teach internationally, but for such classes, you will be billed for business class airfare.

2008 Availability

The following calendar outlines my current training schedule for 2008.

January, 20081. On-site training (Chicago). 1/14-1/16
2. University of Chicago. 1/3, 1/10, 1/17, 1/24, 1/31
3. On-site training (Wisconsin). 1/28-1/30
February, 20081. On-site training (Chicago). 2/11-2/13
2. University of Chicago. 2/7, 2/14, 2/21, 2/28
March, 2008 1. On-site training (Chicago). 3/3-3/5.
2. University of Chicago. 3/6, 3/13.
3. PyCon'08 conference. 3/13-3/16.
4. On-site training (Chicago). 3/17-3/19.
April, 20081. Unavailable. 4/1-4/7.
2. On-site training (Mountain View). 4/21-4/24
3. On-site training (Boston). 4/29-5/1
May, 20081. Big Nerd Ranch, Frankfurt, Germany. 5/5-5/9
2. On-site training (Pasadena). 5/13-15.
3. On-site training (Chicago). 5/20-5/22.
June, 2008 1. On-site training (Maryland). 6/2-6/6.
2. Big Nerd Ranch, Atlanta, Georgia. 6/9-6/13
3. On-site training (Pasadena). 6/17-6/19
4. On-site training (Chicago). 6/25-6/27
July, 2008Available (*) - New!
August, 2008Aavailable (*) - New!
September, 2008 1. On-site training. Chicago. 9/8 - 9/10
2. On-site training. Pasadena. 9/29 - 10/1
3. Available (*)
October, 20081. On-site training. Raleigh. 10/8 - 10/10
2. On-site training. Pasadena. 10/21 - 10/23
3. Available (*)
November, 20081. Big Nerd Ranch, Atlanta, Georgia. 11/10-11/14
2. On-site training. Pasadena, 11/18-11/20.
3. Available (*)
December, 20081. Big Nerd Ranch, Frankfurt, Germany. 12/08 - 12/12
2. Available (*)

(*) News (July 1, 2008): I'm pleased to announce an expansion of training opportunities for 2008 by offering the Python bootcamp in partnership with Dan Klein. Dan is a well known teacher and Unix programming expert. However, he is probably best known as the Education Director for the USENIX association where he has spent the last 18 years organizing the tutorial programs for their various technical conferences. I'm excited to have Dan on board and think that he will bring a unique perspective to Python training.

Contact

For more information, you can contact me by sending email to "dave" at "dabeaz.com".