Brandon Rhodes
Saturday August 3
PyCon AU 2019
anti • podes
Ancient Greek for the “anti-feet” people
How did the ancient Greeks
arrive at the concept?
How did the ancient Greeks
arrive at the concept?
Conjecture!
“In the space of 176 years
the Lower Mississippi has
shortened itself 242 miles.
“Therefore, any calm person…can see
that in the Old Oolitic Silurian Period,
“Therefore, any calm person…can see
that in the Old Oolitic Silurian Period,
just a million years ago next November,
“Therefore, any calm person…can see
that in the Old Oolitic Silurian Period,
just a million years ago next November,
the Lower Mississippi River was upwards
of 1,300,000 miles long…
“And … 742 years from now
the Lower Mississippi will be
“And … 742 years from now
the Lower Mississippi will be
only 1¾ miles long, and Cairo and
New Orleans will have joined…
“There is something
fascinating about science.
“There is something
fascinating about science.
“One gets such wholesale returns of conjecture
“There is something
fascinating about science.
“One gets such wholesale returns of conjecture
out of such a trifling investment of fact.”
Greek conjecture
Symmetry
Temperate at Greece’s latitude south?
Temperate at Greece’s latitude south
Yes!
Temperate at Greece’s latitude south
Would there be both land and water?
Temperate at Greece’s latitude south
Would there be both land and water
Yes!
Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals?
Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals
Yes!
Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals
Would there be humankind?
Temperate at Greece’s latitude south
Would there be both land and water
Would there be plants and animals
Would there be humankind? Yes!
Problem!
You never meet antipodeans
at dinner parties
Problem!
You never meet antipodeans
at dinner parties
“Theory of the Zones”
- frigid (would kill you)
- temperate
- torrid (would kill you)
Maine — Glasgow, Denmark
Pennsylvania — N France
North Carolina — S France
Florida — Spain, Greece
55° Glasgow, Denmark
50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35°
Florida 30°
25°
20°
55° Glasgow, Denmark
Newfoundland 50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35°
Florida 30°
25°
20°
Inuit villages 55° Glasgow, Denmark
Newfoundland 50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35°
Florida 30°
25°
20°
Inuit villages 55° Glasgow, Denmark
Newfoundland 50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35° Tunisia
Florida 30°
25°
20°
Inuit villages 55° Glasgow, Denmark
Newfoundland 50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35° Tunisia
Florida 30° Sahara, Cairo
25°
20°
Inuit villages 55° Glasgow, Denmark
Newfoundland 50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35° Tunisia
Florida 30° Sahara, Cairo
25° Sahara
20°
Inuit villages 55° Glasgow, Denmark
Newfoundland 50° N France
Maine 45° S France
Pennsylvania 40° Spain, Greece
North Carolina 35° Tunisia
Florida 30° Sahara, Cairo
25° Sahara
20° Sahara
What if you wanted to start
in Cairo and cross the desert?
Spoiler alert:
there’s no desert
at the equator
30° N → 30° S
6,500 km of desert provided
a plausible cause for isolation
from the peoples of the South
This let the Greeks retain their belief
in Nature’s symmetry while explaining
why you never see Antipodeans at parties
Debates with “theory
of common descent”
• Poetry
• Comedies
• Relativity
Q:
When am I upside down?
I always try to hide
I/O at the lowest level
main()
└──subroutine()
└──helper()
└──I/O
But this leaves the I/O
coupled with main()
main()
└──subroutine()
└──helper()
└──I/O
main() I/O
└──subroutine()
└──helper()
Solution: turn it
right-side up
But I’ve already given
talks about that
I also sometimes write
Python modules upside down
Where in a module does main() go?
- main()
- subroutine 1
- subroutine 2
- helper A
- helper B
- helper C
#include <stdio.h>
int main() {
printf("%f\n", square(3));
}
float square(float n) {
return n * n;
}
#include <stdio.h>
int main() {
printf("%f\n", square(3));
}
float square(float n) {
return n * n;
}
error: conflicting types for ‘square’
#include <stdio.h>
/* “Forward Declaration” */
float square(float n);
int main() {
printf("%f\n", square(3));
}
float square(float n) {
return n * n;
}
#include <stdio.h>
float square(float n) {
return n * n;
}
int main() {
printf("%f\n", square(3));
}
This gave those of us
who used to be C programmers
an ingrained habit:
- helper C
- helper B
- helper A
- subroutine 2
- subroutine 1
- main()
And I could find
lots of other examples of
technical upside-down-ness
But instead of talking
about architecture or modules,
I want to talk about a personal
upside-down-ness
I was the volunteer Chair
of PyCon in Portland
This turned me into a supplier
of a limited conference resource
This turned me into a supplier
of a limited conference resource
How do I make a decision?
- Wait one day
- Reply to the email
I adopted a guiding principle
A volunteer
waiting for my answer
A volunteer
waiting for my answer
is in pain
- Wait one day
- Reply to the email
I wasn’t waiting one day
because it usually made
my answer better
I was waiting one day
because I was a coward
- Wait one day
- Reply to the email
- Consideration #1
- Consideration #2
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Decision
If waiting is painful,
shouldn’t my answer come first?
Why do I put my arguments first?
Why do I put my arguments first?
1. Usually I think of them first
Why do I put my arguments first?
1. Usually I think of them first
2. Because they’re my defense
I don’t like people to know my
opinion until I’ve surrounded it
with a fortress of rationale
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Decision
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Decision
- Decision
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
In putting the decision first,
I was deciding to be vulnerable
Where could I find the courage
to put my decision first?
“It’s an integrated computer network,
and I will not have it aboard this ship.”
Adopting that gravelly decisive voice
helped me avoid burying my decisions
beneath too deep an avalanche
of reasons
(Side note: I never composed
conference email in Gmail)
Never compose a high stakes email
in an application with a Send button!
Editor
Ctrl C ↓ copy
xclip ... -t text/plain
| pandoc
| xclip ... -t text/html
Ctrl V ↓ paste
Gmail
Having put the reader first,
I developed two more habits
- Decision
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Thanks
- Decision
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Thanks
- Decision
- Next steps
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Thanks
- Decision
- Next steps
- Consideration #1
- Consideration #2
- Consideration #3
- Consideration #4
- Thanks
- Decision
- Next steps
- Consideration #1
- Consideration #3
Is there a bigger pattern here?
me me me me you
↓
you you me me me
Example
let’s look at a single tweet
I received a “thank you” email!
“Yesterday’s NASA
Astronomy Picture of the Day
was made possible by PyEphem”
The galactic core is hidden
by dust, but is visible
to radio telescopes
2°×1° = 1000×500 light years
Here are 8 improvements
that I made to the draft
- Provide context
- What’s PyEphem?
- Why am I tweeting about it?
“My PyEphem library was used to create
today’s NASA picture of the day!”
“My PyEphem library helped produce
today’s NASA picture of the day!”
How did I know
about the photo?
It’s not like I personally
monitor the NASA photo of the day
for photos that use my libraries
It’s not like I personally
monitor the NASA photo of the day
for photos that use my libraries
Let’s tell the full story!
“I just got a ‘thanks’
email letting me know that
my PyEphem library helped produce
today’s NASA picture of the day!”
- Offer credit to the email’s author
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day!”
- Offer my congratulations
So far, the tweet leaves
my own reaction implicit
rather than explicit
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!”
Let’s invite the audience
to become part of this
cycle of thanks
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!
Remember to thank the authors
of open source projects you use.”
Q: How does the tweet look?
Where have I put the audience?
“I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!
Remember to thank the authors
of open source projects you use.”
- Let’s put the audience first
- Let’s put the audience first
• Lead with the general principle
• Follow up with this specific example
“Remember to thank the authors
of open source projects you use.
I just got a ‘thanks’ email
from @llude and the MeerKAT team letting me
know that my PyEphem library helped produce
today’s NASA picture of the day.
Stunning work, MeerKAT!”
This promotes
the general pattern —
the practice of giving thanks —
as the most important
part of the tweet
- Switch to telling myself what to do
“Remember to thank the authors
of open source projects you use. …”
“Remember to thank the authors
of open source projects you use. …”
• Judgy (assumes they’re not already)
“Remember to thank the authors
of open source projects you use. …”
• Judgy (assumes they’re not already)
• Preachy (me telling them what to do)
A neat rule about being human:
A neat rule about being human:
Anything you do
will be interpreted as judging
everyone who does something else!
“I always add docstrings”
“I always add docstrings”
“My projects still support 2.7”
“I always add docstrings”
“My projects still support 2.7”
“I use Emacs”
“Remember to thank the authors
of open source projects you use!”
↓
“Remember to thank the authors
of open source projects you use!”
↓
“I should take more time
to thank the open source
projects I use!”
“I should take more time…”
• Humble: admits that I am not perfect
“I should take more time…”
• Humble: admits that I am not perfect
• While still implying everyone else should
Now the tweet is ready!
It’s no longer upside down
Now the tweet is ready!
It’s no longer upside down
but right-side up
Thank you!
@brandon_rhodes