.. _tut-whatnow:

*********
What Now?
*********

Reading this tutorial has probably reinforced your interest in using Python ---
you should be eager to apply Python to solving your real-world problems. Where
should you go to learn more?

This tutorial is part of Python's documentation set.   Some other documents in
the set are:

* :ref:`library-index`:

  You should browse through this manual, which gives complete (though terse)
  reference material about types, functions, and the modules in the standard
  library.  The standard Python distribution includes a *lot* of additional code.
  There are modules to read Unix mailboxes, retrieve documents via HTTP, generate
  random numbers, parse command-line options, write CGI programs, compress data,
  and many other tasks. Skimming through the Library Reference will give you an
  idea of what's available.

* :ref:`install-index` explains how to install external modules written by other
  Python users.

* :ref:`reference-index`: A detailed explanation of Python's syntax and
  semantics.  It's heavy reading, but is useful as a complete guide to the
  language itself.

More Python resources:

* http://www.python.org:  The major Python Web site.  It contains code,
  documentation, and pointers to Python-related pages around the Web.  This Web
  site is mirrored in various places around the world, such as Europe, Japan, and
  Australia; a mirror may be faster than the main site, depending on your
  geographical location.

* http://docs.python.org:  Fast access to Python's  documentation.

* http://pypi.python.org: The Python Package Index, previously also nicknamed
  the Cheese Shop, is an index of user-created Python modules that are available
  for download.  Once you begin releasing code, you can register it here so that
  others can find it.

* http://aspn.activestate.com/ASPN/Python/Cookbook/: The Python Cookbook is a
  sizable collection of code examples, larger modules, and useful scripts.
  Particularly notable contributions are collected in a book also titled Python
  Cookbook (O'Reilly & Associates, ISBN 0-596-00797-3.)

* http://scipy.org: The Scientific Python project includes modules for fast
  array computations and manipulations plus a host of packages for such
  things as linear algebra, Fourier transforms, non-linear solvers,
  random number distributions, statistical analysis and the like.

For Python-related questions and problem reports, you can post to the newsgroup
:newsgroup:`comp.lang.python`, or send them to the mailing list at
python-list@python.org.  The newsgroup and mailing list are gatewayed, so
messages posted to one will automatically be forwarded to the other.  There are
around 120 postings a day (with peaks up to several hundred), asking (and
answering) questions, suggesting new features, and announcing new modules.
Before posting, be sure to check the list of `Frequently Asked Questions
<http://www.python.org/doc/faq/>`_ (also called the FAQ), or look for it in the
:file:`Misc/` directory of the Python source distribution.  Mailing list
archives are available at http://mail.python.org/pipermail/. The FAQ answers
many of the questions that come up again and again, and may already contain the
solution for your problem.

.. Postings figure based on average of last six months activity as
   reported by www.egroups.com; Jan. 2000 - June 2000: 21272 msgs / 182
   days = 116.9 msgs / day and steadily increasing. (XXX up to date figures?)


