プログラミングは初めて? じゃあPythonからやりましょう -Pythonと鉛筆画の共通点-

ご注意

この記事の筆者は高校生の頃(執筆時点で10年前?)にUbuntuとPythonに初めて触れて、それ以降使い続けております。かなりバイアスかかってますよ?

プロローグ

新しいパラダイムを学ぶときは、苦労します。
私自身、去年Haskellに手を出してはその理解に苦しみましたし、未だに使いこなせる気がしません。
その前にRustをやりましたが、全くできません。

極端な事を言えば、仕事はGoを使っていますが全くできませんし、Nimも興味があるだけ。
更に言うと、VB.netやC#も大分忘れましたし、Javaは冗長すぎて読む気が失せてしまう程です。
JavaScript, PHP, Smalltalk, Scheme, 仕事であるなし関係なく、色々な言語を触りましたが、どれもいまいちです。

しかし、Pythonは書いたり読んだりする気力が起きます。
なぜでしょう?

素描

「ハッカーと画家」で「プログラミングはスケッチみたいなものだ」
というワードがあった気がします。

久々にPythonでコードを書いて、
「確かにこれは似ている」
と思いました。

ましてやPython3になり、typingモジュールが導入されてから、その気持ちは顕著になった気がします。

まるで4Bの鉛筆でクロッキーを描いている感覚なのです。
頭の中のものを書き出すのが容易なのです。

道具を持ち替えることもなく、色の表現に制限があるものの、紙にひたすら自分の表現を塗っていくように。
Pythonという言語で、実行速度や、他の言語と比べると制限されることはあるものの、テキストエディタの画面にひたすら自分のコードを打っていく。

ディティール

私は輪郭のはっきりしないイラストを描きがちではあります。
Pythonだって、ましてや初学者のうちは特にそうかもしれません。

オブジェクト指向なんて存在は知らず、ひたすらコンピューターにさせたいことを書き連ねる。
条件分岐や反復処理がわかると、早速使い、
ちょっとデータの扱い方のコツがわかったところで、リスト型や辞書型を使う。
ここでリスト形式のデータを効率よく扱いたくなるので、関数化・メソッド化を知るかもしれません。
更に分かってくると、クラスを使い始めます。

そんな頃に自分の目に入ったのは「内包表記」。
これは最初は難解でした。でも後から考えると、一つの「関数型パラダイム」なのかもしれません。

そしてその後Pythonの型管理で悶々としていた頃に、タイプ・ヒンティングが導入されました。

これを絵画で例えると、
おそらくシルエットを力強いタッチで描いていきます。
しかし、鉛筆は力を抜いて紙にこすりつけると、薄い色が表現できるではありませんか。そうして影を表現します。
そして奥行きをつけるために、塗る方向を光の入る方向に対して変えてみたり、
そこから更に影を力強くつけてディティールをはっきりさせてゆく。

自分はそんな具合で絵を覚えた気がします。

今日の動的型付け言語のマルチパラダイムの良さ

実のところを言うと、この様な学習体験はRuby, Julia, Perl, Lua, Javascriptでも行えると思います。
ましてやPythonはC言語ライクではありません。

おそらく今日の動的型付け言語であれば、強力な型推論や関数型パラダイム・オブジェクト指向を取り込んで、簡素なコードが書けます。

とはいえ、初めから関数型パラダイムやオブジェクト指向を学ぶのは少々難しいです。
抽象化された概念を認識することがまだ難しい方にはなおさらだと思います。

ですので、もしこの記事を見ている「プログラミングに興味を持っている方」は、まずは スクリプト言語 と言われるジャンルの言語から取り組むことをおすすめします。

そして、知識や体験を蓄積し、更に速い計算処理を求めるのならば、C, C++, Rust, Go, Nim, Haskell, OCaml, Java, Kotlin etc... などの言語に取り組んでも遅くはないでしょう。

それでもなぜPythonが良いのか

Pythonはテキトーなコード(良く言われる「汚いコード」「異臭のするコード」)は書きにくくなるように、
言語設計レベルが作られています。

自然と、読む際の情報量が制限されるわけです。

コードは書く時間よりも、読む時間のほうが長いことが多いです(自分自身が書いたコードも含めて)
その際に、視界に入ってくる情報量が少ないほうが、処理や計算方法に集中できると思います。

乱暴な言い方ですが、鉛筆画もそうです。
モノクロだからこそ見せたいものに集中できる。私はそう思います。

Pythonは、それが容易な言語です。

Pythonは鉛筆に近い言語

適度な自由度と制約

鉛筆画とPythonによるプログラミングの共通点は、そういうところではないかと私は感じました。

シンプルではあるものの、その表現力は高い。しかし、いくらかの制約はある。

だからこそ、Pythonは初めてのプログラミングには最適な言語かもしれない。と思うのです。


多分5年後〜10年後も、私に、
「プログラミングを教えて」
と尋ねる人がいるなら、きっと私はこう言います。
「プログラミングは初めて? じゃあPythonからやりましょう」
ってね。

追記

なぜPythonはこんなにも遅いのか? | POSTD
この記事ではPythonに対する誤解を解きつつも、Pythonの実行(演算)速度の遅さに対するいくつかの提案をしています。

ツイッターでシェア
みんなに共有、忘れないようにメモ

まんじゅ(´ん`)

CoderDojo Sapporo/Sapporo East の駄メンターです。 オープンソースソフトウェア・フリーソフトウェアの布教と、それらを使った創作活動の布教をしています。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント