Pythonただの日記です。いままでスクリプト言語はPerlがメインでしたが、これからはPythonがメインになるかも知れない、というお話です。Pythonを持ち上げる(いわゆるマンセー)とか、Perlを貶める(いわゆるdis)という意図は全くありません。Perlを使っていた理由Perlを使い続けていた理由は、わりと消極的なものでした。初心者のころ、サーバーサイドプログラミングをするためにPerlを学んだのが始まりで、それからPerlを中心に学んでいたこともあって簡単なスクリプトなら深く考えなくても書けたので、重宝していました。簡単なテキスト処理なら、私にとってはPerlが一番楽だったのです。RubyとPythonについては、一時期少しかじっていて、Rubyはこのブログでもネタにしていたことがありました。Pythonはネタにはしていませんが少しだけ使っていました。このときに、なぜPerlから切り替えなかったのか。それは、次のような消極的な理由からです。当時の現場では、残念なことに、PythonもRubyも使えなかったのです。サーバーも作業PCも、インストールが制限されていたためです。幸か不幸か、Perlはサーバーにデフォルトで入っていました。作業PCにも、別の製品に同梱されていた実行環境があったので、それを使うことができました。CPANは使えませんでしたが。Encodeが追加されたバージョン5.8は2002年には既に出ていて、それ以上のバージョンが使えたのは救いでした。そのほかにも、潜在的なPerlユーザーが多かったというのもあります。保守的な技術者でも、Unix-like環境に長く携わっているベテランなら、Perlくらいはできる場合が多かったのです。アプリケーションではなく、ツールとして使う分にはPerlは使い勝手が良いものでした。今、これらの制約が無くなったため、Perlを積極的に使い続ける理由が無くなったというわけです。今後Perlをまったく使わないというわけではなく、積極的に新しいことを取り入れないというだけです。Perlをやって良かったことPerlでmap関数に出会っていたのはラッキーだったかも知れません。関数型プログラミングを意識する前から、map関数のありがたみを教えてくれたからです。コレクションは、最低でもfilter,map,foreachの操作ができないと発狂します。Perlでなくても出会いようはあるでしょうが、今のように関数型プログラミングが話題になる前でしたし、初心者だったので「関数型なにそれ」でしたから。ちなみに、Perlの関数型っぽい機能はLisp由来らしいので、map関数もきっとそうなんでしょう。クロージャーの概念はあまり理解できていなかったようで、map関数の第1引数を引数として認識できておらず、特別な処理ブロックのような何かと解釈していた時期もありました。他の言語を学んでいくうちに理解できるようにはなりましたけどね。Perlをやっていたから身に付いたもので、そうでなければ使いこなせていなかったでしょう。いえば、Pythonには正規表現リテラルはありませんが、正規表現リテラルは必要か?という議論が過去に湧き起っていますね。私的には、要るかどうかに関係なく、正規表現オブジェクトと言えば/.../であって欲しいのですけどね。正規表現の時代も終わるのでは?という話もあったりなかったり。Pythonに切り替えようと思ったきっかけAI関連で話題になったという点も少なくないです。大きな理由は、これ↓です。teratailというQ&Aサイトに参加させていただいているのですが、ここ最近teratailでPythonについて回答する機会が多くて、そこで調べながら回答していくにつれて、Python面白いなーと思ったのがもっとも大きな理由です。調べながら回答するのと同時に、新しいことを学習できましたし、興味と意欲が沸いてきました。私はこれを、(質問への)「回答駆動学習」と呼んでいます。Rubyにしなかった理由は、小さいことの積み重ねでPythonのほうが自分的に高評価になったためです。感覚的なものなので説明が難しいのですよね...Pythonの好きなところ私は波カッコが好きではない*1ので、Pythonはそれを書かなくてよい点では、昔から好きでした。昔触っていたときはなんとなく興味をひかれなかったため、自然消滅してしまっていました。私は、コーディングスタイルはお任せできるほうが良いと思っています。PythonにはPEP8というコーディング規約があって、それを自動で適用してくれるautopep8というツールがあります。Javaで言うところの、CheckStyleとフォーマッターを一緒にしたような感じです。自動で適用できないところもあるので、そこは警告を出してくれます。PythonはREPLが標準なところも良いですね。PerlのREPL、perlshを最近になって知りましたが、もっと早く知っていればまた違った状況になっていたかも。内包表記も良いですね。filter,map関数のような処理は、簡潔に、そしていかにも数式っぽくかけるのが望ましいです。内包表記はできれば記号だけで書けると最高ですが、Pythonのでも十分です。ジェネレーターの機能も面白いですね。あと、Perlと比べてという点では、文字列などがオブジェクトとして扱えるところですね。今となっては特に珍しい機能ではありませんが。他にもありますが、上手く説明できません。これも感覚的なものが多分にあります。初心者として導入したことWindowsとMac(OSX)にそれぞれ環境作りました。Oneには、PyDevというPythonプラグインが入っているので、それを使っています。これのフルパッケージには、Pythonの実行環境も同梱されているので、それを使っても良いですが、PyDevからCygwinのPython実行環境を使うこともできますので、実行環境はCygwinのものを使っています。PyDevで、保存時にautopep8をかけるように設定しています。Macでは、pyenvを入れています。複数の実行環境をglobalやlocalで使い分けられるので便利です。便利なんですが、localを設定したディレクトリーでのシェルの動作がおかしくなるのが気になります。Pythonの面倒なところ基本はPython3を使っていく予定ですが、製品の中にはPython2でないと動作しないものがあったりするので、両方の環境を作っておかないといけないのが少し面倒ですね。細かいバージョンの管理も。スクリプト言語全般に言えることですが、ライブラリーが実行環境に結びついているのは、ちょっと扱いづらいところがあります。これを上手に解決する方法があるのかも知れませんが、私はまだ不勉強にして存じませんので、悪しからず。併存できるのでそれほど苦では無いですけどね。あと、Pythonに限ったことではないですが、適当にググったりすると、Python2のコードなのかPython3のコードなのか、見分けがつかなくて困ることがあります。熟練すれば、簡単に見分けられるようになるのでしょうか。いえば、Perlは4と5の端境期に同じような問題がありましたが、Perl6も同じような問題が発生するのでしょうか。最後にということで、ごめんねさようならPerl。言え、Pythonまだ使い始めたばかりですし、具体的に何をするかも決まっていません。PerlでやっていたことはPythonでできるようにしたいですね。3を買ったので、それで少しずつ勉強する予定です。何か面白いことができると良いのですが。2017年・冬ここ半年くらいで参考になった情報のメモ。ラムダ式、メソッド参照、ストリームこのエントリーでは、Java8の新機能のうち、最も大きな変更であ...2011-06-24リストから一意のリストを得る(uniqコマンドを作る+余談)今日は久々にPerlが大活躍したので何か書きます。あら...2008-02-21使い始めたきっかけと今の使い道Perlを始めるきっかけになったのは、CGIプログラム。今で言った...2006-04-11Cを知らなかったときの自分かつて、自分がまだBASICしか知らなかった頃のこと。(2)プロフィールid:argiusはてなブログをはじめよう!argiusさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。