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

oneshotlife-pythonのブログ

Pythonを好んで使っているプログラマです。Pythonこそが最強のプログラミング言語だと思っています。Pythonは使いやすいです。Pythonは書きやすいです。Pythonは読みやすいです。Pythonはパワフルです。Pythonは一貫性があります。Pythonが好きです。

Pythonで食っている俺が語るPythonの魅力(1)生産性や速度 #Python

Pythonとの出会い

Pythonとの出会いは何となくだった。それ以前は、SIerC言語とかC++を使い組込開発なんかをやっていた。C言語をやったことがある人ならわかるだろうが、「Hello,World」までの道のりがやたらと長い。今でこそ、WindowsPCにVirtualBoxなんか入れてLinux仮想マシンなんて作ってしまえば、標準でCコンパイラが入っているけれども当時はそうも行かなかった。Linuxマシンを用意してそこでガリガリ書くか、WindowsPCでガリガリ書いて、FTPか何かでLinuxマシンにアップして、TeraTermなんかでアクセスしコマンドを流す。その辺がめちゃくちゃ面倒だった。

その辺に嫌気が差してプログラミングにも嫌気を刺して辞めていく人間が多いのだが、私は違った。SIerを辞めて、一時期ニートをしていたのだが、そこでPerlを覚えてた。PerlでAmazonAPIなんかを使ってアフィリエイトの記事を自動生成したり、せどりのツールを作ってせどりをやっていたりしたら思いのほか当たった。特に、せどりの存在が大きかった。プログラミングという形の無いものを売るにはけっこうハードルが高い。WEBサイトのような形のものを売るならちょっと楽なのだが、それほどのデザイン力は無かった。せどりは、自分で作ったツールを使って、実際に現場でモノを仕入れて、ツールでいろいろと管理しながら、モノを売れるというところが大きかった。モノがあるか無いかは大きな違い。

そのままPerlを使っていても良かったのだが、Perlの文法の書きづらさに不満を持っていた。あとCPANのモジュールの依存関係など。いろいろなPCで環境を構築しているうちに、動いたり動かなかったりすることが多くなり、メンテナンスに時間を要するようになった。意外と環境周りのコストを軽視しがちだが、環境周りは大事。

その当たりから、外部モジュールを入れるのが容易で、管理もしやすいまとまりのある言語に興味を持ちだした。RubyPythonに興味を持って、いろいろ使ってみて、最終的にはPythonを使うことに決めた。

Hello,World!までの道のり

PythonはHello,World!を出力するまでの道のりが驚くほど簡単だった。
C言語であれば、前述のように環境構築をした後に、以下のようなコードを書かなければならないでしょう。

#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello, World!\n");
    return 0;
}

そして、ファイル名をhello.cなどとして、以下のようなコマンドでコンパイルしてあげる必要がある。

$gcc -o hello hello.c

そして、出来た実行形式のファイルを実行してはじめて、コンソールにHello, World!が出力される。

既にこの時点でいろいろ疑問だ。

  • #include って?
  • int?
  • main???
  • *とか[]とか()と{}とか気持ち悪い
  • return?
  • ;?

初級者向けの書籍だとこの辺りは、おまじないのようなものと教えられるが、意味のわからないものを覚えるという意味では、まさにおまじないだと思ったwwwそして、私はおまじないが大嫌いなのだ。。。

Pythonでは、環境を構築し、IDLEを起動し、コンソールから以下を打ち込むだけで目的のものが出来る。

>>> print "Hello,World!"
Hello,World!

ほら、簡単でしょ?

Python IDLEの魅力

更に、こんなにPOPなカラフルなUI!!!
f:id:oneshotlife_tom:20161115210131p:plain

テキストエディタみたいに範囲選択も出来るし、コピペもCTRL+C,CTRL+Vで出来る。
Windows10でPythonとIDLEを使って開発する #Python - oneshotlife-pythonのブログ

Pythonの平易さ

比較的面倒な日付関連の処理やフォーマット処理も簡単に出来る

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2016, 11, 15, 21, 3, 23, 847000)
>>> "{0:%Y-%m-%d %H:%M:%S}".format(now)
'2016-11-15 21:03:23'

こんなのを、C言語で実装したらどうなるだろう?

Pythonの入門書でお薦めは

もちろん、Python>C言語というわけではないよ。PythonよりC言語のほうが実行速度がだいぶ早い。組込系など、パフォーマンスが重視される製品ではC言語が使われることが非常に多い。ここではPythonの出番は無い。では、何でPythonかというと、C言語よりも簡易な表記で、パワフルなことが出来るからだ。

例えば、あるWEBサイトのコンテンツを丸々取得して、title要素を取り出すという処理は、こなんなにも簡単に実装出来る。

>>> import requests
>>> from bs4 import BeautifulSoup
>>> url = "http://oneshotlife-python.hatenablog.com/"
>>> ret = requests.get(url)
>>> soup = BeautifulSoup(ret.content,"lxml")
>>> print  soup.find("title").text
oneshotlife-pythonのブログ

もちろん、これをC言語で実装出来ないわけではないが、何行かかるだろうか?仮に出来たとしたら、Pythonよりも高速なのは間違い無いが。

Pythonは遅いか?

C言語よりはもちろん遅い。速さはもちろん重要なファクターの一つだ。だが、近年は、マシンスペックが飛躍的に上がっている。私がPCをはじめた当初は、メモリなんてモリモリに積んで256MBだった。回線速度だって、8Mbps(ベストエフォート)だったし。今や、メモリは4GB積んでいるし、回線速度だって1Gbpsだ(ベストエフォート)。軽自動車とフェラーリよりも差がある。歩きとロケットくらいの差がある!!!何が言いたいのかと言うと、マシンスペックが上がったのだから、元々のスピードが驚くほど速くなっているということ。今後、マシンスペックの性能改善は、以前ほど倍々では増えていかないと思うが、緩やかに向上していくだろうし、CPUのコア数なども増えるだろうし、マルチスレッド機構などが標準で備わるようになるだろうから、いろんな環境面が飛躍的にアップしてくる。そんな中、人間がロジックを必死こいて考えて、性能改善なんてする必要は無くなってくるだろうというところだ。なので、C言語で書く機会は減るだろう。そして、Pythonに代表されるようなLL言語がもっともっと普及してくる。Pythonは遅いって?まぁそういうときもあるが、プロファイラで性能測定をしながらパフォーマンスチューニングも出来るし、部分的にC言語で書くことも出来る。なので、ベースはPythonで考えておいて損は無いのだ。

Pythonのパフォーマンスチューニングは

まとめ

ちょっとだけPythonの魅力を語ってみた。今回は、生産性や速度の面に焦点を当ててみた。生産性は火を見るまでもない。そして、速度の遅さは、マシンスペックがカバーしてくれる。プロファイラも充実している。C言語を埋め込むことも出来る。と、良いこと以外思いつかない。

Python知らない雑魚とかおる?