Um 21 Years of Python
Um 21 Years of Python
homepages.cwi.nl/~steven/abc/
ABC: Stamp Out BASIC
• ABC’s target audience: professionals
– Not professional programmers
– But serious about programming needs
– E.g. scientists, lab personnel
• Easy to teach, easy to learn, easy to use
– Few constructs, combined for expressivity
– Reuse what you already know (e.g. math, English)
– One tool to handle everything
ABC: The Good Stuff
• Design iterations based on user testing
– E.g. colon before indented blocks
• Simple design: IF, WHILE, FOR, …
• Indentation for grouping (Knuth, occam)
• Tuples, lists, dictionaries (though changed)
• Immutable data types
• No limits
• The >>> prompt
ABC: Critique
• Monolithic design – not extensible
– E.g. no graphics, not easily added
• Invented non-standard terminology
– E.g. “how-to” instead of “procedure”
• ALL'CAPS keywords
• No integration with rest of system
– No file-based I/O (persistent variables instead)
ABC: The Downfall
• Too early; no community
• Intended audience didn’t have the hardware
• Those who did preferred the UNIX way
• Without Internet, hard to reach users
• Lack of extensibility
• Lack of integration
• Missed the boat on exciting new stuff
Fast-forward 4 Years…
• Amoeba distributed systems group @ CWI
• Writing apps: either C or sh
• Wanted something in between
• Management vacuum…
• Started a skunkworks language project
• Amoeba @ CWI stopped, multimedia started
• Python positioned for quick experiments
Skunkworks Design Philosophy
• Borrow ideas whenever it makes sense
• As simple as possible, no simpler (Einstein)
• Do one thing well (UNIX)
• Don’t fret about performance (fix it later)
• Go with the flow (don’t fight environment)
• Perfection is the enemy of the good
• Cutting corners is okay (get back to it later)
User-centric Design Philosophy
• Avoid platform ties, but not religiously
• Don’t bother the user with details
• Discourage but allow coding to the platform
• Offer multiple levels of extensibility
• Errors should not be fatal, if possible
• Errors should never pass silently
• Don’t blame the user for bugs in Python
Language Evolution
• Core language stabilized quickly in 1990-1991
– Earliest version did not have class statement!
• Examples of later changes:
– augmented assignment: x += 1
– comprehensions: [x**2 for x in xs if x%2 == 1]
– unicode: u"\u2043"
– new-style classes: class C(object) …
– decorators: @classmethod
Controlled Change
• Most development in standard library
• Enabling 3rd party libraries is major goal
• PEP process keeps changes in check
• BDFL role keeps PEP process in check
• Community feedback keeps BDFL in check
• [email protected]: core development
• python-ideas@: speculative ideas
• python-list@: general help, discussion
Community: Early Days
• 1990 – internal at CWI
– More internal use than ABC ever had
– Internal contributors
• open design, extensibility work!
• 1991 – first release; [email protected]
• 1994 – USENET group comp.lang.python
– “If Guido was hit by a bus?” thread
• 1994 – first workshop (NIST)
Community: Growth
• 1995-1999 – from workshops to conferences
• 1995 – Python Software Association
• 1997 – www.python.org goes online
• 1999 – Python Consortium
– Modeled after X Consortium
• 2001 – Python Software Foundation
– Modeled after Apache Software Foundation
Community: Present Day
• PSF runs largest annual Python conference
– PyCon Atlanta in 2011: 1500 attendees
– 2012-2013: Toronto; 2014-2015: Bay area
– Also sponsors regional PyCons world-wide
• EuroPython since 2002
• Many local events, user groups
– e.g. baypiggies, Chicago, Atlanta, Germany,
Singapore, Brazil, Argentina, …
Community: Web Presence
• python.org
– docs.python.org, mail.python.org,
bugs.python.org, hg.python.org,
planet.python.org, wiki.python.org
• Stackoverflow etc.
• TIOBE – consistently #6 or #7
– Tiobe Programming Language of the Year (twice!)
Python 2 vs. Python 3
• Fixing deep bugs intrinsic in the design
• Avoid two extremes:
– perpetual backwards compatibility (C++)
– rewrite from scratch (Perl 6)
• Our approach:
– evolve the implementation gradually
– some backwards incompatibilities
– separate tools to help users cope
Python 3: Status
• 2011: The Year of Python 3
• More and more 3rd party packages ported
• Python 3.2 stable and solid
• Python 2.7 is not dead yet!!!!!
Other Pythons
• Jython
• IronPython
• PyPy
Q&A