Programming Language Tourism

Leave Python and see the world!

Paul Ivanov

PyCon Taiwan 2019

Thanks for your interest in my talk! This slide in the presentation was blank, so I kept it here to keep alignment with the numbered slides in the original presentation, which you can watch here. Originally presented at 1920x1080 resolution, but should mostly work using something else. Press 'm' to zoom out to an overview of all slides. Use arrow keys (or spacebar) to advance slides.


$ whoami
Scientific Python developer (2007-)
Matplotlib core developer (2010-)
IPython + Jupyter core developer (2011-)
Jupyter steering council member
Software Engineer at Bloomberg

lightning talk host at SciPy Conference.
Paul Ivanov
pi @ berkeley . edu
@ivanov on github and twitter

where are we?

PyCon Taiwan, 2019

Room R0
Humanities and Social Science Building
Academia Sinica
No. 128, Sec. 2, Academia Rd
Nankang, Taipei, Taiwan

You know you're at a Python conference because the rooms are zero-indexed!

this is my first time in Taipei!

geographic identity

"Where are you coming from?"

"Planet Earth"

"The United States"


"San Francisco" or "The Bay Area"

"The East Bay"

down to naming the city ("Oakland" or "Berkeley")

and again "which part?"

Paul's autobiography of physical places

I have lived in (that I can remember) in 17 different places, only in two countries.

we will now go through each one of them in excruciating detail...

occupational identity

"What kind of work do you do?"

depending on where you're asked, or what you know about the person, your answers could be



"Python programing"

"Scientific Python"

"matplotlib" or "jupyter" or "numpy"

and again, within those "which part?"

programmer identity

"I am a Python programmer"

StackOverflow Trends

StackOverflow Developer Survey 2018

language popularity, stack overflow

language popularity, stack overflow

StackOverflow data indicates that

Python programmers are active

Python programmers are happy

Python programmers are growing

GitHub 2018 State of the Octoverse

Top programming languages by repositories created, 2008-2018

Top programming languages by contributors as of September 30, 2018

Geographic trends in languages by contributors as of September 30, 2018

Fastest growing languages by contributors as of September 30, 2018

Why Leave?

"I just got here!"

it's great, enjoy it! ...but do take programming vacations

My frozen ear?

IndendationError: unindent does not match any outer indentation level
A mix of tabs and spaces thanks to a lab mate.

After seeing Kir Chou's talk from yesterday: "The str/bytes nightmare before the Python 2 EOL"

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 314: ordinal not in range(128))

Places Change

and we change...

Ian Bicking's "Saying goodbye to Python" (February 2014)

Python 2.7 will stop being supported on January 1st, 2020

Goodbye, Python2

from __past__ import nostalgia

Goodbye old friend, dear Python2
A dozen years since I met you

It seems like only yesterday
print was a statement
range returned a list
and xrange was a thing

no stars or slashes in my def
life was simpler, unicode was...u"fun"
async await were waiting in the wings

Thanks for the memories, you were great
And in memoriam, after you're gone in 2020
I'll still fondly wear a shirt that says: 2.8

programmer identity

"I am a Python programmer"

"Python" here is an adjective, replaceable with a geographic marker.

"I am a Taiwanese programmer"

"I am a programmer "

How do I know I'm ready?

Recall our friend the hyperbolic tangent from Shou-de Lin's keynote yesterday?

0 serves as the middle point here,
start thinking about a vacation after you get there.

back to Basic

"I was born in Basic"

not long after the story about my frozen ear,
we had a computer in the house


 The first programs I wrote ... 


1998 - Quake binary is 276k (!!!)

"this must be the best operating system EVER!"


      C++ I learned in the summer of 1999 through 2000 is quite different from  C++11 and C++17

Before we leave Python, let's go for a quiet walk, and reflect...

"How did I get here?"

Alright, now before we go, some caveats...

There's no substitute for experience

Hearing about visiting Japan or Germany is not the same as being there.

oh, by the way...

Do you know PyCon JP?

We're all different

My idea of fun isn't necessarily yours

the mountaineering developer

self-sufficient.... alone (frontier). community and individuality. freedom without security.


The original full-stack development

The original full-stack development

Scratch -

Look Familiar?

First lightning talk yesterday (Day 1):
Daisuke Saito mentioned MakeCode Arcade.

MakeCode Arcade

MakeCode Arcade - Javascript mode

Greetings from Golang

      here's a confession -
      I read and write Go without syntax highlighting
      (I actually do this for Elm, Haskell, and Idris, too)

      (started with my foray into Plan9 where the acme editor doesn't even use a fixed-width font!)

      I find it quieter... I have never owned a smartphone.

      Tooling is important - not enough to have good climate... GOOS= and GOARCH=... go fmt; go fix;
      optimized for teams... nothing too clever...

     errors return pattern, dealt with by user

     elegant and robust concurrency model: Goroutines and channels (typed pipes)

     interfaces provide safer duck-typing


Experience Elm

    clean architecture:
        - a model
        - an update function (takes a model and a command, returns model)
        - a rendering of a model (including command triggers)

    eliminate runtime errors
    compile time error

    interop with Javascript (via "Ports")

    Semantic versioning ENFORCED by language tools


Invest in Idris

          hardest to explain, most Academic

          build airtight programs...

          dependent types

          proofs, guarantees

          autogeneration of code
          -  dialog with the compiler & runtime

          types that utilize functions.... functions can return types


all work and no play

In spirit similar to a local event

37 events since 2012!
Very impressive!

A Quest Appears!

Zoom in and enhance!

Your mission:

change is on line 4 "date: 2019/07/20" should be date: "2019/09/07"
(possibly also) file to change: jothon-net/static/events/index.html change is on line 8 (a very long line)

With a little help from my friends...

Stéfan van der Walt
scikit-image, NumPy, NumFocus Board 
  Hi Paul,

  I love the premise of your PyCon TW talk.  Where can I see it!


van der Walt

NumFocus Board 
I love how functional thinking can make you use Python in an entirely different way (and, thus, I think it is important to use languages from various origins).

Just consider `functools.partial`, list iteration, generators, etc.  These things would not be in Python if the authors did not peek over at functional languages.  Reminds me a bit of

Without having worked in C, you'll have a hard time understanding NumPy array layout.

From somewhere (JavaScript?) we gleaned the idea of Futures (Promises), which gave us Dask.  But maybe sometimes we are misled?—I haven't followed through -

Also, I think typing turns out to be important, and we missed the boat on Python.  We're trying hard to get it back so that Numba, Cython, etc. can optimize our code.  Adding types after the fact is really hard—how do you describe, e.g., the type changes that happened in np.sum(..., axis=) where axis can be a scalar, or a list of axes.

I look at elisp, and think of beautiful concepts that other communities have developed, such as rx-Macro—a way of building regexps, while we still live in primitive specify-by-string landfeatures:

Anyway, all this incoherent rambling just to say that your idea appeals to me, and that I look forward to many future travels!

Thank You

Related work and Resources