※当サイトの記事には、広告・プロモーションが含まれます。

「Pythonic」とか「Zen of Python」とか具体的にどう体現すれば良いのか

enterprisezine.jp

enterprisezine.jp

pingcap.co.jp

最新のトランザクションアプリケーションに対応した最も先進的なオープンソースMySQL互換の分散型データベース

https://pingcap.co.jp/tidb/

MySQL以外を利用している場合は、導入し辛い感じなんですかね?

何やら、

qiita.com

おことわり

まず、筆者の所属するPingCAP株式会社はこの使い方について言及も推奨もしていないということを明確にしておきます :sweat_smile: 以降の記載は筆者が個人として試したものです。ご利用は自己責任で!

PostgreSQLからTiDBを利用する #mysql_fdw - Qiita

PostgreSQLからTiDB使えないんですか?

気持ちは分かります。というかTiDBのストレージレイヤであるTiKVはSQLからは中立ですし、TiDBにしてもSQLをパースしてASTにしてからは比較的SQLの文法的な部分の影響は薄いはず(未確認)です。なのでpgsqlプロトコルPostgreSQL方言のSQLパーサーがあれば、PostgreSQL互換にもできるはず・・・というところで実際そのような派生プロジェクトも見つけたりしました。

PostgreSQLからTiDBを利用する #mysql_fdw - Qiita

しかし恐らくこのような質問をする方の意図というのは公式リリースのTiDBをPostgreSQLから使いたいということであり、そのような実現方法がないか考えるべきでしょう。いや単に興味あっただけですすいません。

PostgreSQLからTiDBを利用する #mysql_fdw - Qiita

⇧「TiDB」を開発している会社の方が情報発信しておられました。

Wikipediaによると、

TiDB (/’taɪdiːbi:/, "Ti" stands for Titanium) is an open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads. Designed to be MySQL compatible, it is developed and supported primarily by PingCAP and licensed under Apache 2.0. It is also available as a paid product. TiDB drew its initial design inspiration from Google's Spanner and F1 papers.

https://en.wikipedia.org/wiki/TiDB

Main Features

MySQL compatibility

TiDB acts like it is a MySQL 8.0 server to applications. A user can continue to use all of the existing MySQL client libraries. Because TiDB's SQL processing layer is built from scratch, not a MySQL fork.

https://en.wikipedia.org/wiki/TiDB

MySQLの資産を活用できると言っているので、そう言った意味でMySQL互換ということなんかね?

Pythonicとは

Wikipediaの説明だと、

Design philosophy and features

A common neologism in the Python community is pythonic, which has a wide range of meanings related to program style. "Pythonic" code may use Python idioms well, be natural or show fluency in the language, or conform with Python's minimalist philosophy and emphasis on readability. Code that is difficult to understand or reads like a rough transcription from another programming language is called unpythonic.

https://en.wikipedia.org/wiki/Python_(programming_language)

Pythonのコミュニティによる造語だそうな。

「内輪感」が緊緊(ひしひし)と感じられますな...

「アンダーライン」を引いた部分をGoogle翻訳したところ、

『「Python 的」コードは、Python のイディオムをうまく使用していたり​​、自然であったり、言語の流暢さを示したり、Pythonミニマリスト哲学に準拠して読みやすさを重視したりする場合があります。理解するのが難しいコード、または別のプログラミング言語を大まかに書き写したようなコードは、非Python的と呼ばれます。』

⇧ とありますが、「Pythonic」を実現する方法を具体的にしてもらわないと、何をもって「Pythonic」となるかの基準が分からないからして、その状態で「unpythonic」とされたとて理不尽過ぎる気がするんだが...

何と言うか、「京言葉」的な閉じた文化と同じ匂いを感じますな...

会話術

婉曲

依頼や辞退を表す時には、直接的な言い方は避け、婉曲的で非断定的な言い回しを好む。

京言葉 - Wikipedia

例えば、「○○を下さい」と頼む際に「○○おくれやさしまへんやろか」(○○を下さりはしませんでしょうか)のように否定疑問で表現したり、釣銭が足りないことを店員に伝える際に「足りません」などではなく「ちょっと足らんように思いますが」のように間接的に表現したりする

京言葉 - Wikipedia

辞退する時も「おおきに」「考えときまっさ」などと曖昧な表現をすることによって、勧めてきた相手を敬った表現をする。また、「主人に訊かなければ分からない」などと他人を主体化させ、丁重に断る方法も良く用いられる。

京言葉 - Wikipedia

一方で、褒め言葉を使ってイケズ(意地悪)をすることもあり、例えば「おうちえー着物きたはりますな、きれーどすな」(お宅いい着物を着ておられますね、綺麗ですね)と言われても、綺麗と褒めているのは着物のことであり、その人について言っているとは限らないので安易に喜んではいけないという。

京言葉 - Wikipedia

京都の婉曲表現を語る上でよく挙げられるのが「京都で他人の家を訪問した際、その家の人にぶぶ漬け(茶漬けのこと)を勧められたら、それは暗に帰宅を促している」という風習であり、上方落語の演目「京の茶漬け」や北森鴻の小説『ぶぶ漬け伝説の謎』など、これを主題にした作品まで作られるほどである。詳しくは茶漬け#茶漬けにまつわる儀礼を参照。こうした直接的表現を嫌う風土による表現は、京言葉を解さない人からはコミュニケーションを取りにくいと思われている。

京言葉 - Wikipedia

⇧ 上記のように暗黙の掟のようなものを察する必要があるのだとしたら、「Pythonic」の習得は非常に敷居が高いと言わざるを得ないですな…

ちなみに、

togetter.com

⇧ 上記と同じ様な状況が「京言葉」でも起こりそうですな...

つまり、客人に帰宅して欲しいわけではなく、純粋に「ぶぶ漬け(茶漬けのこと)」を勧めたい場合、どうしてるんですかね?

「京言葉」は「ダブルバインド(double bind)」になることが多そうで、ストレスが溜まりそうな気がしてならないが、「京言葉」に習熟している人にとっては、ストレス感じることはないのかしら?

そもそも、

婉曲法(えんきょくほう)とは一般に、否定的な含意を持つ語句を直接用いず、他の語句で置き換える語法である。具体的には聞き手が感じる不快感や困惑を少なくする目的で、あるいは話し手がそのような不都合やタブーへの抵触を避ける目的で用いられる。

婉曲法 - Wikipedia

⇧ 上記の説明にあるように、「婉曲」って本来は相手に与える不快感を軽減する目的であるはずなのに、「京言葉」の「婉曲」はというと、より不快感を増し増しにしてるだけに思えてしまうんよね...

英語圏の「婉曲法」ってどんな感じか確認してみたところ、

wright.jp

⇧ 上記サイト様で、例文が載ってましたが、言い方を変えたところで、事実は変わらないんだよなぁ...

むしろ、人によっては、「煽られてる」と思ってしまうこともありそうなので、「婉曲表現」って難しいですな。

「婉曲表現」って海外では少ないのかと思っていたのですが、

togetter.com

⇧ まさかの事実。

そして、

maidonanews.jp

アメリカでは、お客さんのクレームの言い方がスマートだと話題になっています。きっかけとなったのは「アメリカで接客の仕事をしていると、当然クレームをつけられることもあるが、言い方が上手い人が多い。『君のお寿司を持って帰るって言ったら子供たちが大喜びでさ、今日もエキサイトして待ってるんだけど、カリフォルニアロールをもう1本頼んだ気がするんだ。ちょっと確認してくれる?』こんな感じ」というツイートです。投稿したのは、寿司職人のすけちゃんさん(@AgingAnarchist)で、20万以上のいいねを集めました。

「カリフォルニアロールをもう1本頼んだ気がするんだ」 アメリカ人のクレームがスマートだと話題|まいどなニュース

⇧ 上記サイト様のような事例があるということを鑑みるに、人次第ってことなんですかね。

と言うか、こんな言い回し良く思い付きますな、amazingですわ。

ーーアメリカ人がクレームをつける時は、投稿のように気遣いが感じられることが多いのでしょうか。

「カリフォルニアロールをもう1本頼んだ気がするんだ」 アメリカ人のクレームがスマートだと話題|まいどなニュース

「そうですね。アメリカでよく使われる伝え方で、言いにくい意見(shit)をポジティブな意見(パン)で挟む、shit sandwich というのがあります。例えば、
(パン)いつも頑張っていて感心するよ。ありがとう。
(Shit)この前の資料はこれとあれが改善の必要があるように思う。
(パン)ウチに君のような優秀な人がいてよかった。これからも頼りにしてるよ。
ちょっと雑ですがこんな感じで物を伝えることが自然と出来る人が多いように思います」

「カリフォルニアロールをもう1本頼んだ気がするんだ」 アメリカ人のクレームがスマートだと話題|まいどなニュース

⇧ なるほど、そういう文化があったんですな、勉強になりますな。

話が脱線しまくりましたが、「Pythonic」の具体的な内容については、情報がほとんど見当たりませんと。

Zen of Pythonとは

Wikipediaの説明だと、

The Zen of Python is a collection of 19 "guiding principles" for writing computer programs that influence the design of the Python programming language.

https://en.wikipedia.org/wiki/Zen_of_Python

⇧ こちらについては、19個の原則(principle)がありますと。

Principles

The principles are listed as follows:

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.
  • Sparse is better than dense.
  • Readability counts.
  • Special cases aren't special enough to break the rules.
  • Although practicality beats purity.
  • Errors should never pass silently.
  • Unless explicitly silenced.
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one-- and preferably only one --obvious way to do it.
  • Although that way may not be obvious at first unless you're Dutch.
  • Now is better than never.
  • Although never is often better than right now.
  • If the implementation is hard to explain, it's a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
  • Namespaces are one honking great idea – let's do more of those!

https://en.wikipedia.org/wiki/Zen_of_Python

⇧ う~む、画一的な解釈が難しい...

何か、どう捉えるか人それぞれになってしまう気がしますな...

何やら、

qiita.com

どういうわけか日本では一切話題に上がっていないのですが、Python開発者コミュニティでなんか問題が起きているようです。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

Python財団にはフェローという制度があり、これはPythonエコシステムやコミュニティに優れた貢献をした人に与えられる名誉称号です。
これまでは、このフェローを解任する方法は『全てのメンバーによる投票』しかありませんでした。
今回の提案では、これをPython理事会だけの秘密投票、過半数の賛成で解任できるように規約変更します。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

これはPython理事会への大きな権限集中につながり、また気に食わないフェローを秘密裏に排除することもできるのではないかということで一部に反対意見が上がりました。
とはいえ全面反対という人はおらず、過半数ではなく2/3の賛成や全会一致とかにしたほうがいいだろうという主張がほとんどです。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

さて、ここで全会一致を強硬に主張していたのがTim Petersです。
問題のあるユーザが数人理事会に入ってしまったとしても、全会一致なら暴走を防げるという主張です。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

Tim PetersはCPython初期の主要開発者の一人であり、2000年代前半を中心に2500コミットを行い、2024年現在でもcontribute数第11位を誇っています。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

どこかでこの名を聞いたことのある人もいるかもしれません。
そう、TimSortの実装者です。
そしてまた、かの有名なThe Zen of Pythonの著者でもあります。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

彼は最初期のフェローの一人であり、2017年にはDistinguished Service Awardという賞も受賞しています。
とまあ、Pythonにこれまで多大な貢献をしてきた人物ということです。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

最終的にスレッドの終盤あたりで提案への投票が行われ、該当の提案は81%の賛成で受理されました。

Python理事会が古参開発者を追い出して開発者コミュニティが騒動に #pep - Qiita

discuss.python.org

⇧う~む、『The user showed these repeated violations of the following behaviors expected by the Code of Conduct:』で列挙されている「違反」について、どのように審査されたのかが謎過ぎて、冤罪的な部分が無いのか気になりますな...

今回の「Three month suspension for a Core Developer」の決定は、

peps.python.org

⇧『Act as a "court of final appeal" for decisions where all other methods have failed.』を行った形になるんですかね?

何にせよ、

  • 中立性
  • 公正性
  • 廉潔性

が果たして正常に機能しているのか、不安ではありますな...

Python開発コミュニティは、「Python理事会」が独裁的になってしまうかもしれないリスクを抱える体制を受け入れた感じですかね...

「Pythonic」とか「Zen of Python」とか具体的にどう体現すれば良いのか

で、

の考え方を取り入れてPythonのコーディングをしていくのが良いことは分かったのだけど、具体的にどう習得していけば良いのか?

「Zen of Python」については、19箇条の基本的な考え方を、Wikipediaの「Zen of Python」のページで確認できたのだけど(とは言え、各々で解釈の振れ幅が大きい)、「Pythonic」については、何の指標も無いのでお手上げ状態ですと。

そもそも、

A common neologism in the Python community is pythonic, which has a wide range of meanings related to program style.

というWikipediaの記載によると、「Python community」における共通認識、のように見受けられるのだけど、ネット上で「Pythonic」や「How to Pythonic」などで検索してはみるものの、これといった情報がヒットしないのよね...

stackoverflow.com

www.pythonic-exam.com

⇧ 上記サイト様も「Pythonic」の紹介程度で、実際に「Pythonic」を習得する方法については述べてくれていませんし...

とりあえず、

A common neologism in the Python community is pythonic, which has a wide range of meanings related to program style.

と謳うなら、Pythonコミュニティの皆々様、「Pythonic」を習得するための情報を遍く公開していただけるとありがたいのだが...

それとも、「Pythonic」を習得するための方法は「門外不出」的なものなのだろうか?

こんな学習意欲を下げてるような状況がデフォルトになってしまっているからして、Pythonの学習のモチベーション上がるわけが無いんだよなぁ...

「Pythonic」の習得を促進するような状況になっていないのに、

  • pythonic
  • unpythonic

を言い出すのは絶対に止めて欲しいですな...

最早、「Pythonic」については、情報が具体化されていないのと、公開されていないのとで、後出しじゃんけんの体制にならざるを得ない状態になってしまっているのが誠に遺憾でありますな...

「Pythonic」の調査で無駄にした時間を返して欲しいですわ...

毎度モヤモヤ感が半端ない…

今回はこのへんで。