

##################
Reading Great Code
##################

.. image:: /_static/photos/34689452831_93d7fd0571_k_d.jpg

One of the secrets of becoming a great Python programmer is to read,
understand, and comprehend excellent code.

Excellent code typically follows the guidelines outlined in
:ref:`code_style`, and does its best to express a clear and concise
intent to the reader.

Included below is a list of recommended Python projects for
reading. Each one of these projects is a paragon of Python coding.

- `Howdoi <https://github.com/gleitz/howdoi>`_
  Howdoi is a code search tool, written in Python.

- `Flask <https://github.com/mitsuhiko/flask>`_
  Flask is a microframework for Python based on Werkzeug and Jinja2.
  It's intended for getting started very quickly and was developed with
  best intentions in mind.

- `Diamond <https://github.com/python-diamond/Diamond>`_
  Diamond is a Python daemon that collects metrics
  and publishes them to Graphite or other backends.
  It is capable of collecting CPU, memory, network, I/O, load, and disk metrics.
  Additionally, it features an API for implementing custom collectors
  for gathering metrics from almost any source.

- `Werkzeug <https://github.com/mitsuhiko/werkzeug>`_
  Werkzeug started as a simple collection of various utilities for WSGI
  applications and has become one of the most advanced WSGI utility modules.
  It includes a powerful debugger, full-featured request and response objects,
  HTTP utilities to handle entity tags, cache control headers, HTTP dates,
  cookie handling, file uploads, a powerful URL routing system, and a bunch
  of community-contributed addon modules.

- `Requests <https://github.com/kennethreitz/requests>`_
  Requests is an Apache2 Licensed HTTP library, written in Python,
  for human beings.

- `Tablib <https://github.com/kennethreitz/tablib>`_
  Tablib is a format-agnostic tabular dataset library, written in Python.


.. todo:: Include code examples of exemplary code from each of the projects listed. Explain why it is excellent code. Use complex examples.

.. todo:: Explain techniques to rapidly identify data structures and algorithms and determine what the code is doing.
