読者です 読者をやめる 読者になる 読者になる

モラトリアムこじらせた

大人に成り切れない自分を自覚してウジウジと自分探しを延々と繰り返しつつ、気付いてみれば社会人になってからもう何年も経っちゃってて、そういえばローンとかも組んじゃってて、考えてみれば色々と取り返しのつかない年齢になっちゃってて、給料は上がらずリストラに怯えつつ、焦ってみても慌ててみても、やっぱり心に引っ掛るものが何なのか分からず、やっぱりウジウジ自分探しなんかしちゃったりしてる…、そんなモラトリアムをこじらせたあ・な・た(私)にお贈りする技術ブログ

「Python 2.x 対 3.x のアンケート結果」を見てみたよ

Python 本家の wiki2.x-vs-3.x-survey というアンケート結果が載っていました。

2013/12/30〜2014/1/2 という年末年始のたった 4 日程の結果らしいですが、5000人弱が投票しているようです。(年末年始に酒飲んでぐだぐだするのは日本ぐらい?)

アンケートの内容は、

  • Q1. Python 2.x でコードを書いたことはある?
  • Q2. Pyhton 3.x でコードを書いたことはある?
  • Q3. 今 2.x と 3.x のどちらをよく使っている?
  • Q4. Python 3.x は失敗だったと思う?
  • Q5. 今 2.x に依存せざるを得ない状態にある?
  • Q6. Python 2.x のコードを 3.xに移植したことはある?
  • Q7. 2to3 を使ってコードを書いた/移植したことはある?
  • Q8. 3to2 を使ってコードを書いた/移植したことはある?
  • Q9. 2.x と 3.x で修正せずに動くコードを書いた/移植したことはある?

の 9 つです。なかなか興味深い質問になっています。特に 4 は挑発的な質問になっており、hackers news では議論(炎上?)を呼んだようです。この炎上の様子は改めて読んでみたいと思います。

なお、このアンケートがアナウンスされたのは、comp.lang.python, python-dev, hacker news で、つまりは Python 好きな hacker 達が答えた結果になってます。

それでは、結果を見ていきましょう。

Q1. Python 2.x でコードを書いたことはある?

  • Yes: 97.29%
  • No: 2.48%

ほとんどの人が 2.x 系を使ったことがある。Python hacker 達であれば当たり前な結果でしょう。

Q2. Pyhton 3.x でコードを書いたことはある?

  • Yes: 59.75%
  • No: 39.83%

回答者は Python 好きな人達なのに「3.x を使ったことがない」人達が「4割も」いることになります。Python 2.x の作った功績は偉大だと言うことでしょうね。

私もそうです。Python は好きですが、まだ 3.x でちゃんと書いことない。 このブログを機に Python 3 をモノにしようと思ってはいますが。

Q3. 今 2.x と 3.x のどちらをよく使っている?

  • 2.x: 77.08%
  • 3.x: 21.63%

まだ 2.x 系のほうが現役ですね。3.x はいまいち萌えない娘…?

Q2 の回答では 6 割の人が 3.x を使ったことがあるはずですが、おそらく「単に使ってみた」とか「違いがどんなのか試してみた」というレベルなのかもしれません。

Q4. Python 3.x は失敗だったと思う?

  • Yes: 22.36%
  • No: 75.22%

互換性を壊したことについての質問だと思いますが、8割近くの人は Python 3 を肯定的に受け取っていることになります。2.x の言語自体の不満を取り去り、真っ当な姿に進化させたと理解している人が多いということなのでしょう。

それでも現実問題、3.x が「いまいち萌えない娘」的になってしまってる…という懸念があるのも事実で、そいういったモヤモヤが 2 割程度の「失敗だった」と答えている人の感情なのだと思います。

この質問は hackers news でプチ炎上しているようなので、改めて読んで記事にしてみたいと思います。

Q5. 今 2.x に依存せざるを得ない状態にある?

  • Yes: 60.19%
  • No: 37.75%

6割の人が 2.x 依存の環境におかれているのは、使っているモジュールが 2.x 用だからという理由が多いのだと思います。

Python 3.0 が 2008/12 にリリースされてからもう 5 年以上経っていますが、前のエントリーの文書にあるとおり、有名なライブラリでも、まだ 3.x 系をサポートしていないものがあるようです。

Q6. Python 2.x のコードを 3.x に移植したことはある?

  • Yes: 32.44%
  • No: 66.37%

全体の 1/3 が Yes ですが、Q2 の結果から「3.x で書いたことがある」が全体の 2/3 でした。つまり、3.x で書いたことのある人の半数は「2.x から移植したことがある」ことになります。

想像ですが、アンケート対象が Python 開発者達なので、おそらく自分の関わっているプロジェクトで Python 3 対応をしたのでは、と思います。

Q7. 2to3 を使ってコードを書いた/移植したことはある?

  • Yes: 16.03%
  • No: 82.53%

「3.x に移植したことがある」人達のさらに半数が「2to3 を使った」ことになります。

個人的には、2to3 を使ってすんなり行くのか苦労したのかを知りたいのですが、このアンケートからは分かりません。

それでも移植者の半数が使うツールだということは、3.x 対応するには試してみる価値があるツールと言えるのだと思います。

Q8. 3to2 を使ってコードを書いた/移植したことはある?

  • Yes: 1.9%
  • No: 96.6%

これは興味深い結果だと思います。3to2 はほとんど使われてないことが明らかになったという訳です。

3to2 については前のエントリーの文書でもちょこっと紹介されていましたが、現実問題として既存の 3.x のコードを敢えて 2.x に変換する必要はないのでしょう。

「3.x 専用で書く」か、ちょっと頑張れば「3.x と 2.x 両対応のコードを書く」こともできるので。

Q9. 2.x と 3.x で修正せずに動くコードを書いた/移植したことはある?

  • Yes: 31.12%
  • No: 68.88%

これもなかなか興味深いです。そもそも Q2 から 3.x で書いたことがある人は全体の約 6 割なので、そのうちの半数も「両対応のコードを書いた」ことになります。

前のエントリーの「Python 2 と Python 3 を共通のコードベースでサポートする」の冒頭

Unicode リテラルを表わす "u" プレフィックスが Python 3.3 で復活したことは、 Python 2.6 以上で書かれた意味的に正しいコードを、大部分において Python らしさを残しつつも更に、Python 3.3 以上とソース互換にできることを意味する。

にあるように、3.x と 2.x に両対応するコードを書くというのは、ポイントさえ押さえればそれほど難しく無いのかもしれません。

しかし穿った見方をすれば、「3.x と 2.x 互換のコードを書く方法」の虎の巻か何かをちょろっと試してみただけ、という人も多いかもしれません。

Python入門―2&3対応

Python入門―2&3対応