Hello all,
I wish to join the Steering Council to help improve the core developer community.
Here’s how I hope to influence the committee
-
PEP 13 requires that the SC “use their powers as little as possible”. I aim to make that true again and to allow our traditional relationships to flourish.
-
PEP 13 requires the SC “to define a standard process for PEP decision making”. To my knowledge that hasn’t been done and I would make it a first priority.
-
PEP 13 requires the SC to act only on “egregious and ongoing code of conduct violations”. I aim to nudge us back in that direction. No more posts soliciting reports of micro-aggressions. No zero-tolerance policies. No requiring members to post permanently damaging letters of apology.
To me, the CoC is about being welcoming and civil to another. It is also about tolerance (we have members with wildly diverse world views, differing communication patterns, and different temperaments).
We went 28 years without a major CoC issue. Now, in the span of a few months, we’ve lost two members and there is a pipeline of other incidents being adjudicated. I aim to dial that back. IMO the first duty is to deescalate.
-
I also believe the SC would benefit from continuously having new members. We don’t want to lock in a handful of people who always get their way and lose other members who always get overridden. To that end, I make a campaign promise to only serve one term, doing what I can to nudge our governance towards a healthy future.
-
One other area of concern is the stability of the language. On the one hand, there are exciting improvements underway. On the other hand, a number of major endeavors are underway with little oversight. If some ideas are unproven and require extensive changes to the implementation, I will encourage those experiments to done in a separate branch and only be merged into the trunk when they’ve had a solid proof of concept (for example, if you were promised that the speed of Python would double, some demonstration should be offered). Prudence suggests that we don’t risk the core product to hundreds of speculative changes occurring almost daily.
My short story
I’ve been an active core contributor for 18 years and have touched almost every part of the language (see my long story below). I haven’t had a corporation pay me to contribute to Python. 100% of my dev time has been donated outside of regular work hours.
You don’t see me much on python-dev or python-committers. I spend most of my time doing actual development on the issue tracker and on Github.
I’ve long had an interest in fostering diversity and inclusion. I nominated the first two women to the PSF. Against some resistance from members, I personally mentored two of our first female core developers. Against some resistance during the governance discussions, I campaigned for Carol to be a leader in our community. And for this election cycle, I have nominated a prominent community member who is not a core developer. When I served on the PSF board, I voted in favor of all diversity initiatives including our current diversity statement.
My long story
- Currently running a Python training and consulting company
- Recipient of the Python Distinguished Service Award
- Top contributor on StackOverflow (170,000+ points)
- PSF board member for four years.
- Certified Public Accountant
- Certified Internal Auditor
- Python Core Developer (18 years)
- Husband to Rachel
- Father to Matthew
- Former pilot (ASEL, Glider, and Ground Instructor)
- Aspiring pianist
Parts of Python I’ve made:
- any()
- all()
- enumerate()
- local mapping argument to exec() can be any mapping
- filter() – originally itertools.ifilter
- frozenset()
- map() – originally itertools.imap
- pow() – keyword arguments and modular inverses with Mark Dickinson
- reversed()
- zip() – originally itertools.izip
- sorted()
- set()
- dict.fromkeys
- dict.pop
- float.as_integer_ratio
- str.format_map
- str.partition
- str.rpartition
- abc.ABC
- calendar module – many fixups
- collections.ChainMap
- collections.Counter
- collections.OrderedDict
- collections.deque
- collections.namedtuple
- contextlib.redirect_stderr
- contextlib.redirect_stdout
- contextlib.suppress
- decimal module
- difflib.context_diff
- difflib.unified_diff
- fractions.limit_denominator – with Mark Dickinson
- functools.cache
- functools.cmp_to_key
- functools.lru_cache
- functools.total_ordering
- heapq.heappushpop
- heapq.merge
- heapq.nlargest
- heapq.nsmallest
- itertools.accumulate
- itertools.chain
- itertools.chain.from_iterable
- itertools.combinations
- itertools.combinations_with_replacement
- itertools.compress
- itertools.count
- itertools.cycle
- itertools.dropwhile
- itertools.filterfalse
- itertools.groupby
- itertools.islice
- itertools.permutations
- itertools.product
- itertools.repeat
- itertools.starmap
- itertools.takewhile
- itertools.tee
- itertools.zip_longest
- math.dist
- math.fsum – with Mark Dickinson
- math.hypot – improve algorithm and expanded to n-dimensional case
- math.log – added the “base” optional argument
- math.prod – implemented by Pablo Galindo
- operator.attrgetter
- operator.itemgetter
- queue.LifoQueue
- queue.PriorityQueue
- queue.join
- queue.task_done
- random’s MersenneTwister
- random.SystemRandom
- random._randbelow
- random.choices
- random.sample
- random.triangular
- statistics.fmean
- statistics.geometric_mean
- statistics.mode – fixed api
- statistics.multimode
- statistics.NormalDist
- statistics.quantiles
- tokenize.untokenize
- userdict.DictMixin – eventually became collections.MutableMapping
- _slots_ can be a dictionary
Designer of:
- key-functions
- generator expressions
- compact and ordered dictionaries
- the peephole optimizer
- _length_hint_ optimization
- the thousands separator (in string formatting)
- original proponent of exception chaining
- original proponent of sending data and exceptions into generators
- eval-loop opcode prediction
Maintainer of:
- the argparse module (successor to Steven Bethard)
- the bisect module
- the collections module
- the collections.abc module
- the decimal module
- the heapq module
- the itertools module
- the queue module
- the random module
Author of:
- Python How-to: Descriptors
- Python How-to: Sorting
- Python tutorial: Looping Techniques
- Python tutorial: Tour of the standard library
- Python tutorial: Floating Point Arithmetic
- Blog post: Super Considered Super
- Whatsnew 3.1
- Whatsnew 3.2
- Whatsnew 3.8
Early timeline:
Dec 2001: First BPO submissions: Issues #491398 #500078 510373 #510388 #513752
Jan 2002: First PEP: https://www.python.org/dev/peps/pep-0279/
March 2002: First python-dev post: https://mail.python.org/pipermail/python-dev/2002-March/020667.html
April 2002: First C code for d.pop() checked in e027d9818fdb15dd40ab4fd259dd1a33300cc597
April 2002: enumerate() checked in https://mail.python.org/pipermail/python-checkins/2002-April/026587.html
May 12 2002: First commit: 94153096f5bb3dd19989d83ffbc38f140828ae3a