(教材)13【プログラムとは・Pythonとは】
■1 プログラムは手順書である
プログラムとは,仕事の手続き・手順を記したものだ.
料理で言えばレシピ.
最近はIoT電子レンジがレシピをダウンロードして,その通りに火加減とタイマーを設定してくれたりする.
まさにそれがプログラム.
コンピュータはひとつのステップを限りなく正確に高速に行う.
なので,誰でもプログラムを実行すれば同じ働きをする.
※してくれないととても困る
しかしプログラムの書き方がまずいと,わざわざ必要もないことをしたり,経なければならないプロセスを飛ばしたり,意図せぬ動きをする.
それは,コンピュータがプログラムに書かれたこと忠実に実行した結果であり,コンピュータは悪くない.
悪いのはそのプログラムを書いた人である.
■2 プログラムが世界を救う?
コンピュータのハードウェアの処理能力には限界があり,多少回路に改造を加えたところで(そんなことができればだが),向上するのは せいぜい数倍のオーダ-である.
しかし,プログラムの集合体であるソフトウェアがトータルに向上すれば,数百倍,場合によっては数千倍というオーダーで効率を稼ぐことができる.
グローバルネットワークの時代に突入している現代社会では,今まさに,ネットワークを含めた安全性,安定性,効率をトータルにプランニングする能力が,世界的に求められているといってよいだろう.
逆に,みずほ銀行やKDDI,最近ではマイナカード等,大規模なシステムトラブルが社会に大きな影響を及ぼす例が継続的に発生している.
システム管理や保守には膨大な手間と時間がかけられているにもかかわらず,トラブルは生じるものとして対策を講じる必要がある.
とはいえ,それもこれも全てはプログラミングの第一歩から始まる.
以下に,参考サイトを挙げておく.
◀◀ざっくりしたプログラミングの解説記事.流し読みでいいので目を通しておきたい.
◀◀ YouTubeの動画は一見の価値あり ( グラフの信憑性は別問題 ) .
※プログラミング言語の歴史は,コンピュータの歴史と共に,壮大な人智の歴史でもある
■3 プログラム言語の要点はルール,分岐,繰り返し,関数
現存するプログラミング言語の設計思想は様々で,それゆえ文法も多岐にわたる.しかし,PythonやJava,C言語等,現在主流として使われている言語のほとんどは「手続き型」で「関数を中心とした言語」である.
このタイプの言語は「ルール・分岐・繰り返し・関数」という4つの要素を把握すれば,使えるようになる.
これに加え,関数をまとめたライブラリ/モジュールを活用すれば利便性がぐっと向上する.
これらは厳密な意味で言語の形態や類型というわけではないが,学習する上での重要な要素だと思ってほしい.
この5つの要素はPythonのみならず,多くの言語に共通する.新しい言語に出会ったら,この5点をチェックし,言語の概要・特徴を把握しよう.
以下よりひとつずつ検討する.
( 1 ) ルール:
すべての仕事には手順がある.
これを人に伝えるには,伝える手段,言語,ルールが必要だ.
西洋音楽には統一的な表記の「楽譜」がある.
建築には「設計図」「工事手順書」がある.
文科省の「教育指導要領」は主として義務教育に関する膨大な公的教育の設計図であり手順書でもある.
すべては一定のルールに基づいて記述されている.
プログラムもまた,言語によってルールが異なる.
このルールをちゃんとわからずに適当に書いてしまうと,意図しない動きにとまどうことになりかねない.
また,予約語といって,その言語独自の命令文は変数や関数として使うことができない.予約語を一通り眺めれば,その言語の特徴が見えてくる.
( 2 ) 分岐:
プログラムは手順書だが,手順は必ずしも一本道ではない.
「Aをした結果がxだった場合」と「yだった場合」に,違う手順にしなければならないことはよくある.
※例:販売業のマニュアル:店に来た客が普通の人か,クレーマーか,酔っぱらいかで対応を分ける
これが「条件分岐処理」である.
ほとんどの手続き型言語には if~(then)~else の構文が存在する.
C言語等には switch~case という分岐もある(Pythonにはない).
( 3 ) 繰り返し:
世の中には,同じような手順をひたすら繰り返す仕事がある.
数回や10回とかではなく数万回,数十万回繰り返す場合もある.
code:※例:梱包業務のマニュアル
1.商品Aと商品Bを袋に詰めて,
2.運搬用の箱の中に1段4x5個を3段積んだら,箱を封印する.
3.箱が10個あつまればまとめて倉庫に移動する.
4.これを24時間,交代で行う
これをプログラムでは「繰り返し:ループ」という.
繰り返しには forとwhile が繰り返しの中心で,Python以外のほとんどの言語にも備わっている.
◎分岐と繰り返し―― if文とfor/while文を駆使すれば,ほとんどのプログラムは実現可能である.
もちろん現実には複雑な処理をよりわかりやすく効率よくするために,様々な工夫がなされるが,原理としては分岐と繰り返しがあれば,プログラムは書ける.
( 4 ) 関数 ( サブルーチン ):
関数やサブルーチンは,より規模の大きいプログラムを効率よく,多くの人が利用できるように考案されたものだ.
1つのプログラムの中では,他にも応用できる基本的な作業がある.
code:例1:出社してからの手順
1. 社屋のカードゲートを通り,
2. エレベータに並び,
3. 必要な階のボタンを押す.
4. 職場に来たら挨拶をする.
code:例2:会議の準備
1. 次の会議のために会議室を予約する.
2. 参加人数を確認し,書類をコピーする.
これらは会社のどの部署でも同じ手順である.
こういった,ひとまとまりの仕事をまとめて他でも呼び出して利用できるようにしたのが 「関数 (function)」だ.
上の例を試しに関数化すると,以下のようになるだろう(Pythonで記述).
code:例1:出社してからの手順関数
def shussha(my_name, floor1, floor2):
card_gate(my_name)
wait_elevator(floor1)
put_elevator(floor2)
print("Good morning!")
code:例2:会議の準備関数
def kaigi-junbi(room_num, date, members):
reserve_room(room_num,date)
print_paper(members)
※関数内で呼び出すのも関数と想定している
この例のように,プログラム内で関数を定義し,プログラム中に関数を呼び出す機能は,Java,C言語,Perl, Ruby等,多くの言語に広く採用され,これらは関数型言語と呼ばれる.
※まとまった機能を呼び出すことは関数と呼ぶ他に「サブルーチン」「ブロシージャ」 とも呼ぶ言語もあり,両方を使い分ける言語もある
( 5 ) ライブラリ/モジュール
関数を集めて他のプログラムでも利用できるように,ひとつのパッケージのようにしたのが「ライブラリ」「モジュール」である.
※Pythonではモジュールと呼ぶ
ライブラリ/モジュールはどんな関数の組み合わせでも作れるが,実際には使い勝手を考え,画像処理,統計,ゲーム,通信,セキュリティなど,用途にあわせたものとしてまとめられている.
◎Pythonではモジュールを非常によく活用する.
それは「Python本体をシンプルに保つ」という設計思想による.
モジュールを何もimport(利用)しないPythonは裸同然だと考えてよいだろう.この思想は,Pythonインタプリタ本体の実行速度の向上やバグの少なさに貢献している.
関数やモジュールについては本実習ではごく簡単な利用はするものの,学習項目としては特段には取り上げていない.
本格的な活用は計算機実習2 以降の実習や研究室での利用で,しっかり学んでほしい.
■4 Pythonは大人気のインタプリタである
Pythonの特徴や入門記事は検索すれば山ほど出てくる.
大まかだが,Pythonの特徴をまとめると,次のようになるだろう.
1. インタプリタとして:ラビッドプロトタイピングから本格運用までをカバー可能
2. オブジェクト言語として:カプセル化,抽象化,ポリモーフィズム,継承がわかりやすく実装されている
3. 拡張性,開発環境の豊富さ,モジュールの多さ:科学計算,AI開発からネトゲまで
4. ネットでの運用:Instagram,YouTube,Dropbox,Googleのバックエンド等
5. グラフィクス・ネットワークよる汎用性の高さ:バックエンドから3Dインタフェースまで
6. 学術分野での広がり:各種数学ライブラリ,分子生物学,統計学,機械学習(AI研究の一分野),離散シミュレーション等々
以下に,Python関連のサイトをまとめたので一読されたい.
◎実はコンパイラもある
Pythonはインタプリタだが,より高速な実行のためにコンパイラも開発されている(10~数百倍の効率になる).
← コンパイラとインタプリタの違いは自分で調べること
※もちろんコンパイラとしての制約はある
以上.
2023/7/19