python: the programmer's lingua franca
DESCRIPTION
There are thousands of programming languages, but even if your organization works in one of the more popular languages, it's likely you will eventually interact with others who are unfamiliar with it. Since you can't be proficient in every programming language under the sun, a language that bridges technologies and allows people to communicate their ideas is needed.A few programming languages have tried to fill this role over the years, but none holds as much promise as Python.TRANSCRIPT
Python: The Programmer’s Lingua Franca
Using Python to build bridges betweentechnologies, businesses and people
What we'll talk aboutWhat we'll talk about
• What is a lingua franca?• Why the industry needs one• Acmeism – the Ingy approach• Past and current examples: BASIC, C,
and Java• Why Python is better• TPSL: Teaching Python as a Second (or
third or fourth) Language• Getting past the barriers
What is a lingua franca?What is a lingua franca?
• The original “Lingua Franca” was an amalgam of languages– Made up of Italian, Arabic, French, Greek, Portuguese, Spanish and
Turkish. – Used in the Mediterranean during the Rennaissance
• English functions as the de facto modern lingua franca– For international business, aviation, science and technology
– Integrates words from other languages
• English doesn't fit the strict definition– It is often the mother tongue of at least one party...
– but this example is closer to what we'll talk about
“a language systematically used to make communication possible between people not sharing a mother tongue, in particular when it is a third language, distinct from both mother tongues.”
-- Wikipedia
Why do we need one for Why do we need one for programming?programming?• So many languages
– more than 2500 in all (“The Language List” Bill Kinnersley)– if you just include popular ones, you still can't learn them
all• Programmers need a vehicle to express concepts to
one another• Programs need a vehicle to interact with one another
– open data formats– standard protocols– an API everyone can use
5%
14%
18%
37%
27%
Number of Languages in Organization
1 language2 languages3 languages4 or more languagesUnknown or no answer
What this audience reported:What this audience reported:
• Inventor of YAML• Leader in the Perl Community• 100+ CPAN modules• Several PyPI Modules• Old and New “Activator”• Acmeist• Currently travelling around Europe
Ingy döt Net Ingy döt Net
Acmeism Acmeism
• A different path to mutual comprehension• Ideas (modules) need to be shared across all
language boundaries• Build technology that is programming language
independent– YAML – data serialization for many programming
languages– C'Dent - Acmeist Module Language– Pegex - Acmeist Parser for creating new
languages– TestML - Acmeist Unit test language (like FIT)
Other programming lingua francas Other programming lingua francas
• BASIC– Used to be everywhere, code samples in math and science
textbooks– Many first generation micro-computer hackers started with this
language
• C– Widely used and part of most comp-sci programs– Most experienced programmers are familiar with it– Lower-level language
• Java– Extremely popular, cross-platform, also widely taught– Very verbose– Open source (GPL) only since 2007 (c.f. Apache Harmony)
14%
14%
13%43%
15%
Language Used to Describe Programming Ideas
CJavaPythonOtherNo answer
... used by this audience ... used by this audience
Why Python is betterWhy Python is better
• Free • Easy to read
– Syntax (specifically indentation) enforces sane visual block structure
– Concise, high-level interpreted language• Easy to learn
– Excellent documentation and tutorials– Numerous training resources
• Increasingly popular– Adopted by important organizations: Google, NASA, Disney,
Sony, SEC
ComparisonsComparisons
Which language is most readable and concise?
– Example code adapted from http://www.dmh2000.com/cjpr/– Using object oriented C++ instead of C to be more fair
C++ C++ #include <iostream>#include <sstream>#include <string>#include <vector>
using namespace std;
template<class T> class RedBlackTree { private: static const int red = 0; static const int black = 1;
int m_color; T m_val; RedBlackTree *m_left; RedBlackTree *m_right;
RedBlackTree(RedBlackTree *b) { m_val = b->m_val; m_left = b->m_left; m_right = b->m_right; m_color = red; }
public: RedBlackTree(T x) { m_val = x; m_left = 0; m_right = 0; m_color = red; }
const RedBlackTree *find(const T &key) const { const RedBlackTree *result = 0; if (key == m_val) { result = this; } else if (key < m_val) { if (m_left != 0) { result = m_left->find(key); } } else { if (m_right != 0) { result = m_right->find(key); } } return result; }};
Java Java import java.util.*;
public class RedBlackTree<T extends Comparable<T>> { public static final int red = 0;
public static final int black = 1;
private int __color;
private T __val; private RedBlackTree<T> __left; private RedBlackTree<T> __right;
private RedBlackTree(RedBlackTree<T> b) {
__val = b.__val; __left = b.__left; __right = b.__right;
__color = red; }
public RedBlackTree(T x) { __val = x; __left = null;
__right = null; __color = red; }
public RedBlackTree<T> find(T key) { RedBlackTree<T> result = null;
if (key == __val) { result = this;
} else if (key.compareTo(__val) < 0) { if (__left != null) {
result = __left.find(key); } }
else { if (__right != null) { result = __right.find(key);
} } return result;
}}
Python Python class RedBlackTree:
red, black = range(2)
def __init__(self, val=None):
self.left = None
self.right = None
self.val = val
self.color = RedBlackTree.red
def find(self, key):
result = None
if (key == self.val):
result = self
elif (key < self.val):
if (self.left != None):
result = self.left.find(key)
else:
if (self.right != None):
result = self.right.find(key)
return result
Integration with other languagesIntegration with other languages• Python libraries are commonly written in C or C++ when
performance is a consideration• You can use other languages in Python, and Python in other
languages– Inline, PyInline, Inline::Python etc.
• More projects integrating Python with other programming languages:
– Bridges for C/C++, Java, C#/.NET, PHP, Perl, and more
... and databases... and databases• Commercial / enterprise: Oracle, SQL Server, DB2, SAP DB,
Sybase• Open source: MySQL, PostgreSQL, SQLite, redis, MongoDB
Alternative Python interpretersAlternative Python interpreters
Python is an open source language, implementations of Python are not controlled by a single commercial entity, as was case with Java and is the case with C#.
– Important for avoiding vendor lock-in– PSF license is very permissive
This encourages innovation and allows for alternative implementations:
– Jython: implemented in Java– Stackless Python: CPython variant– unladen-swallow: Google project for a faster Python– Iron Python: for the .NET Framework– PyPy: also focussing on speed and efficiency
Python as a Second LanguagePython as a Second Language
• What makes it easier to read also makes it easier to learn
• Many programmers come to Python from other languages
– lots of resources (Python wiki) for those switching– “Learning Python” by Mark Lutz and David Ascher– Ingy's anecdotal evidence
• Non-English tutorials and documentation– http://wiki.python.org/moin/Languages– there's even a Python tutorial in Esperanto!
Resources for developer-led initiatives to introduce and expand Python usage in your organization
• Commercial support and indemnification• Quality assured, vendor-backed builds• Python training from the best in the field• Development advice• code.activestate.com
• PyPM Index• Recipes
• Komodo Edit and IDE
How ActiveState can helpHow ActiveState can help
Python in the cloudPython in the cloud
Cloud application platform for Python and many others languages
– not a Platform as a Service... it's for creating your own
– based on Cloud Foundry – we've added Python support and a lot more
– supports multiple languages: Python, Perl, Ruby, Node.js, Java...
– all the Python web frameworks: Django, Bottle, Flask, Pyramid
– ... via WSGI
– deploy new applications or migrate existing ones
– http://activestate.com/cloud
Questions?Questions?
Thank You!Thank You!
Troy Topnik: [email protected]
Ingy döt Net: [email protected]
Speak to a representative about ActivePython or Python training:
www.activestate.com