非エンジニアに向けてPythonを簡単に説明してみた

##はじめに
去年の9月ごろ、社内にて営業や人事といった技術以外の部署の人間を巻き込んで、
リテラシー向上のためのIT講習会を行いました。

その際の事前質問で、今流行りの言語を教えて欲しいと言われたので、その時の内容です。
眠らせておくのも勿体無かったのでQiitaにも載せておきたいと思います。

※この記事には、私の独断と偏見が結構含まれています。

##資料

<iframe src="https://docs.google.com/presentation/d/e/2PACX-1vR0jmYdBIdbEaW-_Pus35tW42SZGcg5ic_DF0BYsCl-Rgkltaw-OmENxdrWT4m7zZErRqhGLL9XRFjo/embed?start=false&loop=false&delayms=3000" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

 
30分という枠の中で、Zoomの画面共有で資料のスライドを進めながら質問や解説を入れていたので、
少し説明が足りない＆分かりづらいところもあるかもしれません。


#今流行りのプログラミング言語とは

##なにをもって流行りと判断するか？

ソースコードのバージョン管理システム
GitHubの使用ランキング(2021)によると

1位.JavaScript
2位.Python
3位.Java
4位.TypeScript
5位.C#
6位.PHP
7位.C++
8位.C
9位.Shell
10位.Ruby

これらは業務での使用率が高い言語と言えるが、良い意味で枯れている(比較的安定した)言語も多い。

##枯れている言語が果たして流行っていると言えるのだろうか？

広辞苑によると、「流行」とは、
①流れ行くこと。
②急にある現象が世間一般にひろくゆきわたること、特に、衣服・化粧・思想などの様式が一時的にひろく行われること、はやり。 
③(芭蕉の用語)不易 流行(ふえきりゅうこう)
と定義されている。

Qiitaのプログラミング記事の
月間Post数(2021/9)によると

1位.Python 879post
2位.JavaScript 503post
3位.Ruby (Rails含む) 440post
4位.Swift 246post

今、話題になっている言語はこれらと言える。

JavaScriptに関しては、Node.jsの存在もありフロントエンド、バックエンド共に記事がpostされており、
Pythonに関しては機械学習やデータ分析系の記事が多い。

今回は記事のPost数が一番多い、Pythonを流行っている言語として紹介する。

##どんな特徴があるのか？

Python言語の特徴として

1.シンプルな構文で汎用性が高い。
2.フレームワークやライブラリといったOSSも豊富。
3.人工知能を始めとした様々な分野で使われている。

###1.シンプルな構文で汎用性が高い
・「テキスト読み取り処理」を他言語と比較すると
C言語の場合

```C
#include <stdio.h>
int main(void)
{
    FILE *f = fopen("sample.txt", "r");
    if (!f) return -1;
    char *line = NULL;
    size_t len = 0;
    while (getline(&line, &len, f) > 0)
        printf("%s", line);
}
```

Pythonの場合

```python
import sys
try:
    with open("sample.txt", "r") as f:
        for line in f:
            print(line, end="")
except OSError:
    sys.exit(-1)
```

またPythonは、ブロックをインデントで指定する「Off-side Rule（オフサイドルール）」を採用しているので、他人が書いたコードも比較的読みやすいと言われている。

###2.フレームワークやライブラリといったOSSも豊富

・Django（ジャンゴ）/ FW
Webシステム開発用のフレームワークで、ユーザ認証やRSSフィードといった基本的なWebの機能が備わっている。

・Flask（フラスク）、bottle（ボトル）/ FW
WSGI（Web Server Gateway Interface）であり、Webサーバへのリクエストを複数のWebアプリケーションを利用して処理するシステム。

・Anaconda（アナコンダ）/ ライブラリパッケージ
大規模データ処理や予測分析などで使用される各種データサイエンスライブラリをインストール出来る。

:::note warn
補足

WSGIは、PythonでWebアプリケーションとWebサーバーを接続する際に考案されたインターフェース定義。
その昔、PythonのWebフレームワークが急増したことにより、 フレームワークごとにサーバーと接続するためのインターフェースが異なっていたため、同一のアプリケーションであっても、接続できるサーバーが制限される（あるサーバーには接続できるのに、別のサーバーには接続できない）という事態が生じてしまった。 
そのため、インターフェースを統一して、どのフレームワークでも同じように各種サーバーに接続できるようにしよう、ということで生まれたのがWSGIである。
WSGIアプリケーションの定義として、 WSGIアプリケーションは、呼び出し可能なオブジェクトとして定義する。
このオブジェクトが呼び出される際、第一引数に環境変数が渡され、第二引数にステータスコードとレスポンスヘッダを受け取る呼び出し可能なオブジェクトが渡される。 
第二引数に渡されたオブジェクトを呼び出して、ステータスコードとレスポンスヘッダ情報を渡す。 
戻り値として、バイト文字列をyieldするiterableなオブジェクトを返す。 といったものがある。
:::


###3.人工知能を始めとした様々な分野で使われている

・実は、
Pythonといったら機械学習やAIといった人工知能をイメージするが、
実は1990年から存在する言語なので、もともとAIのために作られた言語ではない。
Webシステム等、汎用的に様々なシステムを作れる。
機械学習の際に、非常に重要なビックデータ処理やデータ分析のフレームワークやライブラリがPythonに多い。シンプルに記述出来るためOSS作成の際にエンジニアに選ばれる。コミュニティも活発。

データ分析には主に3段階
・クローリング（クローラーがWeb上を巡回して情報を集める工程）
・スクレイピング（Web上で抽出したデータを分析、格納可能なデータに変換）
・データ前処理（収集したデータを扱いやすいように変換）
それぞれの工程でライブラリが用意されており、Pythonでのデータ処理、分析がやりやすい。

##では、実際にPythonはどんなシステムに使用されているのか？

一部抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392337/cb508bb2-a6d8-b3bf-a37c-dd007d823601.png)

サーバサイドのデータ読み込みや動画処理等に使用されている。
YouTubuの開発者によると、「Pythonは私たちのサイトにとって十分に高速であり、最小限の開発者で、記録的な速さで保守可能な機能を作成することができます」といっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392337/823b6cc2-bea1-733c-b7a8-c3104f140e5a.png)

GmailやGoogle MapsのサーバサイドでPythonが使用されている。

instagram, spotify, Pepper　etc...

##まとめ

Pythonは今、世界で最も人気の高いプログラミング言語の一つであり、
日本においてもPythonエンジニアの需要は年々高まってきている。
これからプログラミングを学び始める人はもちろん、他言語を扱う現役エンジニアも新たに勉強しておいて損はない言語といえるだろう。

近年、Pythonをメイン言語として選定する会社や、サービスが増加傾向にあるので、今後もさらなる人気の向上が見込まれる言語であることは間違いないだろう。

###おわり