Pythonってどんなプログラミング言語なの?Rubyとの違いは?【社内勉強会用資料】

2019-04-17 15:45:17 438

Pythonのロゴ

はじめに

この記事は社内勉強会用に作ったものですが、勿体無いのでメモとして残しておきます。

そもそもプログラミング言語とは

ここでは、コンピュータプログラムを記述するための形式言語をさします。

コンピュータプログラムとは、コンピュータに対する命令(処理)を記述したものです。

すなわち、プログラミング言語とは、あなたが、コンピュータに対して何かしらの行動を指示するために、コンピュータが理解しやすい形で表現するための手段ということになります。


可読性が伴っていなくては、プログラミング言語ではない。

※ここで記述することは個人的な意見です。


コンピュータに対する命令を言語化するといっても、コンピュータにとっては、01がもっとも理解しやすいものです。

しかしながら、所詮ヒトがコンピュータに対して命令を下すわけなので、

プログラミング言語の大前提は、ヒトが理解できる言葉でなければならないと考えています。

ただし、ヒトが読みやすい方向に持っていけば行くほど、コンピュータにとって理解しにくいものとなり得ます。
可能な限り、コンピューターが処理しやすいように、かつ、ヒトが読みやすいように書くのが重要です。


ここでは余談ですが、
プログラミング言語で記述された命令を、コンピュータが実行可能な形式に翻訳する作業が必要になります。

これをコンパイルといいます。

ヒトにとっての可読性

例えば、「なでしこ」というプログラミング言語があります。
この言語の一番の特徴は、すべて日本語でプログラムが書けてしまうことにあります。


これは一見、日本人の私達にとってとても便利で、書きやすいと思わせてくれるでしょう。

しかし、実際のコードをみてみると、それはヒトにとっての可読性すらも損なわれています。

たとえば、以下の結果を出すプログラムについて、
亀を走らせてぐるぐる回る

なでしこのコード例

50にカメ速度設定
カメ作成
N=1
200回
  Nだけカメ進む
  35だけカメ右回転
  N=N+0.5
  もし、N%3=2ならば
    紫色にカメペン色設定
  違えば
    黒色にカメペン色設定。
  ここまで
ここまで

何をやっているのかはすぐに分かりますが、これを編集しろと言われたら、どこから文法なのか全く分かりません

もしのあとに「、」は必要なのか?必要ならばなぜ必要なのか?「違えば」の後になぜ「、」はないのか?

これと同じプログラムをPythonで書くと、次のようになります。

python

import turtle

t = turtle
#亀を設定
t.pendown() #ペンを置く

N = 1
for i in range(200):
t.forward(N) #前にNだけ進む
t.right(35) #右に35度回転

N += 0.5 #歩く長さを0.5ずつプラス
# Nの値によってペンの色を変える
if N % 3 == 2:
t.color('purple')
else:
t.color('black')


例えば、亀が逆方向に進むコードに書き換える場合、前者では「進む」を「後退」にするのか、「後ろに下がる」とすれば良いのかさっぱり見当がつきません。
後者のPythonでは、forwardとあるところを、backとすれば良さそうだと基本的な英語の知識がある人ならば、誰もが分かります。

このように、ヒト(日本人ですら)が読んでもよくわからない言語は使うことをオススメしません。

僕がなぜPythonを採用したのか

Pythonは、前述の(ヒトにとっての)可読性において、随一の言語だと考えています。
記述がシンプルなおかつ、理にかなった表現方法です。

コロン(:)とインデント(余白)のルール以外、奇妙な記号は使いません。

これは初心者にとって大変助かります。


また、多くの人が利用していることは、これから言語を学ぶ人にとって何よりのサポートとなります。

まだなにもわからない時、頼りになるのは同じ言語を使っている身近な人か、ネットの情報(たまに一方通行の書籍)だけです。

未知の現象に対するリファレンスがあればあるほど、助かります。

学んだ結果をウェブサーバー上で披露したり、周りのみんなに配布したくなった場合、まずどうすれば良いか、なでしこを使っていたらまず情報は得られません。
その時点で、これまで学んできたことは水の泡となります。


Pythonは誰もが知っている大手のWebサービス(Facebookや、インスタグラム、YouTube、Dropbox等)で実際にビジネス利用されています。


今では、世界中であらゆる人種がPythonに親しみ、Javaとともに人気言語のトップに上がっています。

そのため、圧倒的に多くのTipsやエラーに対するリファレンスがネット上に転がっています。(英語が理解できることが前提)

さらに、Pythonはライブラリが豊富です。
これは世界中のプログラマーが日々新しいライブラリを公開し、誰もが利用することのできる環境が揃っているからです。
ライブラリとは、Pythonをレゴブロックの集合体と考えた場合、レゴの〇〇セットのようなものです。

ゼロからブロックを組合わせてディズニーランド城を作ることは可能ですが、テーマパークのキットや各アトラクションのキットがあれば、それを利用することができるのです。

また、レゴキットを別の形に組み直し、オリジナルのセットを構築することも可能なように、Pythonでも同じことができます。


Pythonと他の言語との比較


一番シンプルなプログラムコードが、「Hello, world!」と表示させるものです。
これはどのプログラミング言語を始めるにあたっても必ず最初に書くことが慣例となっています。(理由はよく知らない)


これをPythonで表現するとこうなります。

Python

print("Hello, world")

何をしてるのかすぐに分かります。
ダブルクォーテーションで囲まれた文字列をprintします。

rubyではこのようになります。

ruby

puts "Hello, World!"

実にシンプルです。
rubyは日本人がpythonに飽きて作った(と思っている)ので、Pythonとよく似た言語です。
実際に、国内ではPHPと並び、トップレベルのシェアを誇っています。
ただし、世界的にはマイナーな言語であるため、ガラパゴス化しているといって良いでしょう。
日本語のリファレンスなら豊富なので、どうしても英語がダメという人はrubyを始めてもよいと思います。


原始的な言語の1つであるC言語は以下のようになります。

C

int main(void)
{
printf("Hello World!");
return 0;
}

まず、なんとか何をやっているのかわかりますが、このなかに多くののルールが隠れていることがわかります。
少なくとも、今画面を閉じて、さぁ同じものを書いてみてくださいと言われたら、書けません。

最初のintはinitialの略でしょうか。
なぜprintではなく、printfなのでしょうか。
一行ずつ「;」が付いています。たぶん書き忘れると、エラーが起きます。
「return 0」はなにを目的として値を返しているのでしょうか。

C言語は速度の面で圧倒的な強さを誇りますが、初心者の私にはとっつきにくい言語です。


余談ですが、最も原始的なプログラミング言語の一つである、Assembler(x86)で同じことを書くと、以下のようになります。

Assembler(x86)



section .text
global _start

_start: ; entry point
mov edx,len
mov ecx,msg
mov ebx,1 ; file descriptor(stdout)
mov eax,4 ; system call number (sys_write)
int 0x80; ; system call

mov eax,1 ; system call number (sys_exit)
int 0x80 ; system call

section .data

msg db 'Hello, World!',0xa
len equ $ - msg

もはやコンピュータに寄りそいすぎて、理解が追いつきません。
とはいえ、これらの初期言語を学ぶことは、今となってはブラックボックスになっているヒトとコンピュータの対話の具体的な中身を知ることにつながります。

Pythonを使うメリット・デメリットのまとめ

さて、ここまでダラダラと説明しましたが、Pythonを選ぶメリットは以下の2点です。
  • ヒトにとって読みやすい(=書きやすい)
  • 使っている人が多い(=ライブラリや情報が豊富)

  • しかし、pythonにも良い点ばかりではありません。

    人にとって読みやすいとは、すなわちコンピューターにとっては、理解しにくい、コンパイルしにくいことに繋がります。
    したがって、Pyhonは実行速度が遅い部類に位置します。

    他言語との速度比較は以下の記事が参考になります。



    もうひとつ、ライブラリが豊富=中身を知らずに立派なプログラムが書けてしまうことで、プログラムの本質部分を理解できずに進めていってしまう可能性があります。

    実際、私もインストールしたパッケージやライブラリの関数がどのように働きかけて結果をもたらすのか、全て説明することはできません。

    パソコンはいっちょ前に扱えるけど、PCの仕組みについて知らない人と似ています。

    まとめ

    以上が、Pythonを選択する上での私の考え方、Pythonのメリットとデメリットの紹介でした。

    Pythonはヒトにとって読みやすいように作られているので、コードを書く上でそれなりの厳しいルールや問題も発生しますが、
    純粋に書いていて楽しい言語であることは断言できます。

    好きこそものの上手なれという諺通り、楽しくかければ、上達も早いです。

    関連記事