30 secounds of Python codeは,その名の通り「30秒で理解できるPythonのコード集」。リスト要素のソートやシャッフル,数値列の平均の計算など,親しみやすい課題やアルゴリズムをPythonで書いたコード集。それぞれのコードは短いので,プログラムの挙動を文字通り「30秒」で理解できる。
たとえば,リスト要素のシャッフル(ランダムな並べ替え)のコードを見てみよう。
30 secounds of Python codeは,その名の通り「30秒で理解できるPythonのコード集」。リスト要素のソートやシャッフル,数値列の平均の計算など,親しみやすい課題やアルゴリズムをPythonで書いたコード集。それぞれのコードは短いので,プログラムの挙動を文字通り「30秒」で理解できる。
たとえば,リスト要素のシャッフル(ランダムな並べ替え)のコードを見てみよう。
「みんなのPython」はおかげさまで大好評を頂いているようで本当にありがとうございます。外国語版が出るとか出ないとかいう話があって,渾身のネタの数々がどう料理されるのかが目下の感心どころです。
「わかりやすい」「読みやすい」と好評を頂いているみんPyですが,たまにプログラミング初心者には難しい,というご意見を頂くこともあります。それが気になっていたので,プログラミング経験がなくてもエントリーしやすい万人向けのPython入門書を書きました。
初学者にとってプログラミングを難しくしている理由の一つは,プログラムが動いている様子を想像しづらい,という点です。プログラムに,変数,ループや条件分岐があるので,状態によって実行結果が変わります。同じプログラムでも,与えられる条件や内部状態によって違った動きをします。
熟練したプログラマであれば,条件による挙動の変化や内部状態の境界値を巧みに脳内で想像しながら,すいすいとプログラムを作ってゆくことができます。しかし,初心者にはそのようなことが難しい。そのため,とりあえずプログラムを書いてみて動かしてみるのですが,内部状態の遷移による挙動の変化をうまくイメージできないので,間違えるし,また間違いの原因がどこにあるか理解できなかったり,結果として正しく動くプログラムを作ることができないのです。
4月19日(水)に開催される勉強会にお呼ばれして,お話をすることになった。10年間多くの方に読んで頂いているPythonの入門書を書いている関係もあって,つねづね「プログラミングはなぜ難しいのか」について考えたり調べたりすることが多いのだけど,当日はそのことも含め,どうすればよりよく学習できるのか,プログラミングとは何か,ということなどにも言及したいと思っている。
プログラミングが難しいのは,一言で言うと「ロジックの塊」だから,ということなんだけど,そうすると「じゃあ論理的な思考が得意な人だけがプログラミングやればいいじゃん」みたいな話になりかねないので,もう少し砕いて考えてみたいと思う。
たとえば,この手の話題でよく引き合いに出されるFizzBuzz問題。
これを解くプログラムを作るには,二種類のハードルがある。
ひとつは,プログラム言語で実行できることがらの要素を知る,というハードル。演算(割り算の余りを得る),条件分岐,ループ,文字列の表示。
そして二つ目は,問題の条件を満たすよう,機能を組み合わせる方法を考えるというハードル。
一つ目は,言ってみれば暗記で乗り越えられるタイプのハードルなので,それほど難しくはない。問題は二つ目で,このハードルを越えるには,問題を要素に分割して,プログラム言語で実行できる命令に置き換え,問題の要件を満たすように組み上げてゆく必要がある。ここに論理的思考が必要で,このハードルは一般ピープルには容易に超えられない。プログラミングができる人は,この種の論理的思考になれているので,この種の問題を難なく解ける。
では,論理的思考が得意な人とそうでない人を分けるのはなんなのか? そう思っていろいろ調べてみると,面白いことが分かってきた。人間は「論理そのもの」を扱うのがそもそも苦手らしいのだ。
マサカリも受け方で血肉になるよ,という話をします。
しばらく前,みんなのPython第三版のAmazonレビューに誤字のリストを投げた人がいた。誤字があるのは著者として読者の皆様に大変申し訳ない。実際はコスト的に時間あんまかけられないとか諸事情があるのだけど,とにかく恥ずかしい話である。なお,誤字を報告しても連絡が無い,というのは常識的に考えても本当かどうか微妙だ。事実,読者からの質問や誤字の情報については,定期的に編集者の方から連絡をいただいていた。
そうこうしているうちに,今年の初め頃,SBクリエイティブ編集部から改訂のお話をいただいた。
みんなのPython 第四版のサンプルコードを公開に向け整備していたとき,ちょっとしたオマケの文章があるといいかなと思って書いた見たところ,一部に好評だったので公開してみたいと思います。
このNotebookでは,拙著を読んで,その後どうすんだ,ということについて,書籍には載せないような砕けたかんじで書いてみたいと思います。プログラミングを上達させるためのコツについて,つらつら書いてみました。どうぞ。
まずは,Pythonを使ってなにがしたいのか,ゴールを明確にしましょう。
「Webアプリを作りたい」「Raspberry PiでIoTデバイスを作りたい」「人工知能を活用したい」「データ分析をしたい」など,できるだけ具体的な目標を立てましょう。
「世の中を変えたい」「お金を稼ぎたい」「異性にモテたい」「とにかくビッグになりたい」というような抽象的な目標をたててはいけません。
煩悩は知的成長を助けないのです。
まもなく発刊される拙著みんなのPython 第四版の改訂向け執筆を終えた。
初版の発売は2006年で,今年はちょうど10年目になる。そこでふと,もしPythonを使っていなかったらどうなったろう,と考えてみた。そして重大なことに気づいた。
みんなのPythonを書く少し前,2005年ごろの僕は,今以上に後先考えないで行動するオッサンだった。当時まだ日本では無名に近かったPythonのより新し情報を仕入れ,本場のオープンソース関連カンファレンスに行って技術の成長点の雰囲気を味わうべく,ワシントンDCで開催されたPyCon USに行ってみよう,と突然思ったのだった。今以上に英語ができなかった僕は,頭がキレッキレの第一線級エンジニアが繰り出す早口の英語トークも聞き取れるはずもなく,おまけに機内で米国人のパーサーにコーヒーを頼んだらコーラが出てくるような始末であった。