step01 プログラミングとは
この講座の目的
この「極・楽python講座」では、自分でプログラムを作ることにより、パソコンやインターネットを含むICT環境を思いのままに動かし、自分の生活を「ごく、楽に、楽しく」するスキルを学ぶ。プログラミングは、成果物を売って金を稼ぐこともできるが、まずは人生を楽に、楽しくするための手段なのである。
講座は【基礎編】と【応用編】に分かれていて、どちらも大学の1学期1コマ程度の時間で修了できる。ICTに興味のある人なら、中高生にも読めるだろう。講義資料として作成したが、独習教材としても使えるはずだ。
この【基礎編】では、テキストに掲載したサンプルプログラムを入力・実行することで、python言語の文法やプログラム書法の基本を学ぶ。処理対象となるデータは、主としてテキスト情報(文字情報)であり、しかもサンプル向けの簡単なものが多い。このような実用以前のプログラムを、「トイプログラム」という。トイプログラムを「写経」し、実行させてみるのは、どのプログラミング言語の学習でも最初のステップとして欠かせない。
【応用編】に進むと、「コマンドプロンプト」というCUI環境だけでなく、WindowsというGUI環境で画像や音声などのマルチメディア情報を扱うプログラムや、Web上のサービスを利用するクラウドコンピューティングにまでテーマが広がるので、みなさんの作るプログラムも、玩具(toy)から実用的なツールや、本格的なゲームへと進化することになる。同時に、与えられた課題に沿ってプログラミングする段階を卒業して、「自分がコンピュータにさせたいこと」をプログラムとして表現できるようになる。つまりプログラマが誕生するわけだ。
これが、プログラムを作ってみたいと思ったときの目標であったはずだ。python言語のコミュニティでは、pythonを魔術師のように自由自在に使いこなせる人を、pythonistaという。残り少ない21世紀を楽に楽しく過ごすために、講師と一緒にpythonistaを目指そう!
プログラムとは? プログラミングとは?
プログラムとは、ある課題を解くために、コンピュータがどのような手順で処理するかを記述した指示書のことである。その指示書を書く作業がプログラミングだ。つまり、プログラムを書くのは人間、読むのは機械である。
だから、プログラムは細部にいたるまで指示しないといけないし、完全に正確に書かないといけない。読んで実行するのはパソコンやロボットなどの機械なのだから、役人のように、大まかな指示や間違った指示でもこちらの意図を忖度して動いてはくれない。あくまで「言われた通り」「書かれた通り」に動くだけだ。つまり、プログラムは最終的には「100点満点」でなければならない。
プログラムを書くには、プログラミング言語と呼ばれる人工言語を使う。
- 自然言語
- 日本語、英語、中国語など
- プログラミング言語
- python、C、perl、HSP、java、javascript、HTMLなど
1 自然言語の文法は不完全であり、細かいところは文法学者の間でも見解の相違がある。ある1つの文に格助詞「が」を2度使ってよいか、とか。
プログラムを作る手順
プログラムは、以下の手順は作る。
- その言語の命令(コマンド)を組み合わせて、自分がパソコンにさせたいことの「手順」を、細部にいたるまで残さず、正確に記述する。
- 作成したプログラムを、
- スクリプト(インタープリタ)言語※2の場合:その言語の処理系に読ませて実行する。
- コンパイラ言語の場合:直接実行できる実行形式(*.exe)に変換し、それを実行する。
2 pythonはスクリプト言語に属する。
- 実行してみて、動作が自分の意図通りでないときには、プログラムに間違った箇所があるので、探し出して修正する。この作業を「デバッグ」※3という。デバッグが終わった(と思った)ら、再び実行してみる。この、「デバッグしてテストする」手順のくり返しを、デバッグサイクルと呼ぶ。当然、デバッグサイクルが短時間で済む言語や開発環境の方が、プログラミング作業ははかどる。
3 「虫取り」という意味である。プログラマが「虫」の話を始めたら、それはプログラム中の間違い(バグ)のことだと思って間違いない。
- 意図通りに実行できれば、プログラムは一応完成である。
- プロのSEが作成する業務用プログラムの場合、さらに、実行性能を追求したり、セキュリティホールをふさぐ作業が続くこともある。
反対に、身の回りのことを片付けてもらうための簡単なプログラム(ユーティリティー:実用アプリ)なら、数百ステップか、せいぜい1,000ステップであり、慣れれば数時間で書ける。皆さんは1年間をかけて、まずそのレベルを目指そう。
なぜプログラミングを学ぶのか
そう、プログラミングは、煩雑で手間のかかる、間違いの許されない作業である。
ではなぜ、SEを目指すわけでもない皆さんが、苦労の多いプログラミングを学ばなくてはならないのだろうか。※4
実際、多くのユーザは、パソコン上でワープロや表計算などのアプリを使うだけであり、プログラムは書かない。それはプロの仕事だと思っている。実際、たいていの場合、それでも用は足りる。
しかし、たとえばテキスト情報処理を中心とした仕事では、必要に応じて、簡単なプログラムを作って使うことで、膨大な手間を省ける場合がある。そのとき、簡単なプログラムを自分で書けるユーザと、アプリしか使えないユーザとでは、仕事の効率に10倍も100倍も差が出るのである。プログラム抜きの人力ではとうてい実行できない(やる気にならない)作業だってある。
こう考えてみたらどうだろうか。
仕事のゴールを、自分が行きたい目的地だとすれば、市販やフリーのアプリ(ワープロや表計算)は鉄道や飛行機のようなもので、最寄りの駅や空港までは連れて行ってくれるが、そこから先は、別の交通手段を探すか、徒歩(つまり、人力)しかない。一方、自分で作ったプログラムは、マイカーやバイク、ときには自転車であるから、真の目的地までピンポイントに連れて行ってくれる。
いいかえれば、自作プログラムは、自分の目的に特化した、自分専用のアプリである。パソコンを含むICT環境の真価は、自分でプログラムを書いてこそ、100%発揮できるのだ。※5
4 「ごく、楽に、しかも楽しく」と言ったのは嘘だったの? えらいところに連れてこられてしまった……というみなさんの怪訝な表情が目に浮かぶようだ。
5 もちろん、プロではない私たちが、年がら年中プログラムを書く必要はない。「伝家の宝刀を抜く(。そして快刀乱麻を断つ)」と言った風情か。
プログラミング言語Python
この講座は、プロのSEを養成するものではない。それ以外の一般の人たちが、仕事や勉強や趣味や日常生活のために、プログラムの恩恵にあずかれるようになることを目指している。そこで、専門的な内容は極力減らし、学ぶプログラミング言語の選択については、特に配慮した。
自然言語が無数にあるように、プログラミング言語にもおそらく数百種類はあり、それぞれ一長一短がある。自然言語は人種毎に違うが、プログラミング言語は主に用途に応じて選ばれる。また、数百万人のユーザーが使うメジャーな言語もあれば、数百人しかユーザーがいないマイナーな言語もある。なので、初心者が新たに学ぶプログラミング言語を選ぶときには、
- できるだけ応用範囲(その言語で書ける、または書きやすいプログラムの範囲)が広く、
- 多くのユーザーが世界中にいる、つまりコミュニティが広い
C#やFORTRAN、COBOLといった、手続き型のコンパイラと呼ばれる言語は、実行性能を要求される、ハードウェアを細かく、リアルタイムで制御するような目的に利用される。どちらかと言えばプロ向きの言語である。
それに対し、この講座では、私たちアマチュア・プログラマが比較的簡単に使えるスクリプト(インタープリタ)言語として、pythonを使う。比較的新しい言語ながら、前述の条件を2つとも満たしている。
pythonは、汎用の手続き型言語である※6。
6 pythonやC#のような汎用言語に対して、たとえばhtmlやcssは、Webのページを記述することしかできない専用言語だ。

Perl同様、テキスト(文字情報)処理を得意とするが、図1-1に示すように、豊富なライブラリが簡単に利用でき、
- 画像処理
- GUIプログラミング
- ゲーム
- 行列演算などの数値計算・統計処理
- 深層学習など、人工知能(AI)開発
- Webスクレイピング(Webサイトから情報を自動的に取得すること)
こうした利点が知れわたることで、現在では学習者が世界一多い言語とされている。つまりpythonコミュニティはただいま大盛況なのだ。新たなライブラリも次々に開発され、応用範囲は拡大の一途をたどっている。新たな言語を学ぶのに、この事実は心強い。困ったときの相談相手が世界中にいるし、当分は廃れないことも確実だ。
また、pythonは、書いたプログラムをすぐに実行できるスクリプト言語なので、初心者の学習に適している。デバッグをして再実行までのデバッグサイクルが短く、試行錯誤しやすいからだ。
ただし、初心者向けとは言っても、最新版のpython(python3.6)の言語仕様はかなり大きく、この講座で隅々まで学ぶのは無理である。だが、そんな必要もないのだ。学んだ範囲の機能を使ってプログラムを作り始め、必要に応じてより高度な機能をつまみ食い式に学んでいけば、それでよいのである。
どのようにプログラミングを学ぶか
この【基礎編】講座では、最初に、以下のような基本事項を学ぶ。- 変数
- 制御構造
- リスト
- 入出力
- 集合とディクショナリ(辞書)
- 関数(サブルーチン)
- 正規表現による文字列処理
はじめのうちは、この講座資料にあるサンプルプログラムを入力して動かしてみることで基本機能を学ぶ。つぎに、節目ごとに、与えられた要求仕様を満たすようなプログラムを自分で考えながら作ることで、python言語の概要を学んでもらう。これら2つの段階をくぐり抜けた先に、「自分のやりたいことを仕様として表現し、プログラミングする」という、「楽で、楽しい」道が開けている。pythonだけでなく、どのプログラミング言語の学習でも同じである。
参考書や参考サイト
pythonを学ぶのに参考となる本やサイトを紹介する。それぞれの本やサイトで使っているpythonのバージョンには注意が必要だ。この講座は2018年初頭における最新版であるpython3.6を利用しているので、python3の解説はそのまま役立つ。だが、python2.7など、python2世代の解説は、文字通りに真似しても動作しないことが多い。python3はpython2に対する上位互換性がなく、極端に言えば別の言語だからだ。言語仕様の変更に伴う書き直しが必要だが、この作業は初心者には難しいだろう。
参考書
プログラミングを学んだり、自分でプログラムを書く時には、1冊でよいからよい本を手元に置いて、いつも参照するとよい。俗に「座右の書」という。この講座資料でも、できるだけ分かりやすく、ていねいな解説を心がけたが、1つのプログラミング言語を隅々まで説明するには、やはり1冊分のボリュームが必要だ。
わからない文法を調べるリファレンス本として使うから、最小限の記述しかない本より、サンプルプログラムをたくさん載せた大部な本の方がよい。必ずしも通読するわけではないのだから。
プログラムの世界では、わからないことには2種類ある。考えればわかることと、考えてもわかるはずがないことである。言語の文法などは、誰か他人がそう決めたことにすぎないのだから、後者の典型である。「考えるな、読め!※7」
7 別バージョンに、「感じるな、考えるんだ!」がある。
講師自身が折に触れて参考にしているのは、図1-2に示す本である※8。日本で手に入るpythonの参考書は、多分この数倍はあるが、代表的なものは含まれているだろう。8 普段は門外不出の「山之口電子文庫」の一角。自炊した電子本と、紙で所有している本(「実書籍」と呼んでいる)を一元管理するには、基本ソフトのファイルシステムを利用するこの方法が最も優れている。

特に、初心者のための「最初の1冊」としてお奨めしたいのは、つぎの本である。この講座では、これを教科書として指定する。必ず持って来ること。
『入門 Python 3』 ビル・ルバノヴィック、斎藤康毅監修/長尾高弘訳 (オライリー・ジャパン) ISBN 978-4-87311-738-6
やや値が張るけれど、これ1冊で将来にわたって十分にメインのリファレンス本が務まる良書だ。この本の内容を完全に理解したら(その時にはもう、ひとかどのプログラマになっていようが)、その兄弟編
『実践 Python 3』 マーク・サマーフィールド、斎藤康毅訳 (オライリー・ジャパン) ISBN 978-4-87311-739-3
に進むのもよいし、各自の興味次第で、ライブラリを利用した各種分野の参考書に手を出している。ここには、講師自身が興味を持っている、GUI、ゲーム、Webスクレイピング、画像処理、機械学習などの参考書が含まれている。また、
『Pythonチュートリアル 第3版』 ギィド・ヴァン・ロッサム、鴨澤眞夫訳 (オライリー・ジャパン) ISBN 978-4-87311-753-9
は、pythonの「生みの親」による最も権威ある解説書、いわゆるバイブルであり、中級者用リファレンス本としては最適だ。ただし、記述が簡潔すぎて、初心者にはやや難しいので、少なくともこの【基礎編】講座を修了してから手に取る方がよいだろう。
参考サイト
いまどき、プログラミング言語を学ぶ者は、「座右の書」以外にも、頼れるWebサイトをブラウザでブックマークしておくべきだ。プログラミング言語はつねにバージョンアップされ、新しい版がリリースされている。pythonのようにコミュニティの大きい、勢いのある言語はなおさらだ。主要な参考書も改訂されるが、かなり大きい(数ヶ月から年単位)タイムラグがあるので、最新の仕様や機能、動向を知りたければ、Webに勝るものはない。英語の情報が多いが、英語ったってたかが言語解説だから、苦にするほどではない。
さいわい、pythonには日本語で読める詳細なドキュメントもある。
Python 3.6.3 ドキュメント
ここはpython言語の開発や管理を行っている非営利団体Python Software Foundation(PDF)による公式ドキュメントを網羅している。特に言語リファレンスとFAQ(Frequently Asked Questions: よくある質問(と回答))が役立つ。また、Webサイトはプログラミング相談室としても役立つ。バグが取れなくて困ったことや、やりたいことを実現するための機能などは、 などのサイトで訊くとよい。pythonの言語コミュニティは世界一巨大なので、あなたがハマったのと同じ穴ににハマり、しかも這い出てきた人は大勢おり、一部は奇特にもWebに情報をアップしてくれている。前インターネット時代の孤独なプログラマ(#MeToo)に比べ、皆さんはなんと恵まれていることか。この恩恵をフル活用しない手はない。