インドさんの甘口ポエムブログ

カレーのこととか、プログラミングのこととか。

「ハッカーと画家」が凄く好きなので何が好きなのかを語りたい

Ubiregi Advent Calendar 2020 3日目です。

コラムです。読書感想文かも。

美大の学生の頃に「ハッカーと画家」という本に読んだ

今はソフトウェアエンジニアとしてユビレジでプログラミングなどして働いてますが、大学はITとは全く関係のない倉敷芸術科学大学芸術学部美術学科で油絵を描いてました。

大学名に芸術科学と書いてあるとおり「コンピュータ情報学科」というIT系の学科が当時有って(今は無くなった)、大学図書館にはコンピューター関係の本が置いてありました。この「ハッカーと画家」は大学図書館で手にとって読みました。

なぜこの本を手にとったんだろう? タイトルを見て興味を持ったのかも。

新着図書のコーナー(この本の日本語訳本が出たのは2005年。私が大学1年の頃です)にあったので目立ってたのかも知れません。

この本は実は著者のコラム集で全ページに渡ってハッカーと画家について書いているわけではなく「ハッカーと画家」はその中の1コラムでした。

コラムの中にはスパム対策アルゴリズムなんかの専門的な話もありましたが、その中でも「ハッカーと画家」のコラムは今でも凄く好きでたまに読み返したりしています。

無料で読めるサイトがあるので興味あれば是非こちらを。

絵画とプログラミングに共通すること

著者のポール・グレアムは計算機科学を専攻した後に、絵画を学ぶためにアートスクールへ入ったそうです。

私は大学で油絵を専攻した後独学でプログラミングを学びソフトウェアエンジニアになったという経歴なので、ちょうど逆な感じになっていますね。

コラムの中ではハッカーと画家プログラミングと絵画についての共通点としていくつか言及されてますが、プログラミングを仕事にする人達に良い仕事をするための参考にできそうなことがいくつか出てきます。

  • 書きながら学ぶ

  • 例から学ぶ

  • 次第に詳細化しながら創ってゆく

  • 美に対する熱狂的な没頭が必要

私が好きな文を逐一引用しつつ、思ったことを書いていこうかなと思います。

書きながら学ぶ

作家や画家や建築家が、創りながら作品を理解してゆくのと同じで、 プログラマはプログラムを書きながら理解してゆくべきなんだ。

私は今までにいくつかのスタートアップやベンチャー企業を経験してRuby on Railsアプリを開発してきましたが、何度も rails new して沢山のプロトタイプアプリを作ったのがRailsやwebサーバーを理解するために役立ったのかな〜などと思ってます。

例から学ぶ

もの創りが学ぶもうひとつの方法は例から学ぶことだ。 画家にとっては、美術館は技法の例の宝庫だ。 何百年もの間、偉大な画家の作品を模写することは、 画家の教育過程の一環となってきた。 模写することで、絵がどのように描かれているかを 詳しく見るようになるからだ。

通っていた大学が倉敷にある関係というのもあって、エル・グレコなど有名な絵画が展示されてある大原美術館に学生証提示で無料で入れたので在学中は何度も行ってました。また授業で名画の前で模写もやらせてもらえました。

気になる作品があったら至近距離で見たりとか横から見たりとかして「どのように描いているのか」といったちょっと別の視点から見たりしてました。夏休みなんかはもう何回も通ってました。

4年間で100回は行ったんじゃないかな・・・。

www.ohara.or.jp

この本が出た頃と今を比べて、今はGitHub上に沢山のオープンソースソフトウェアがあるのでプログラマにとって凄く学びやすくなりましたね。

コミットログを追うことでそれこそ「どのように書かれているか」がわかりますし。

次第に詳細化しながら創ってゆく

絵画から学べるもうひとつの例は、 次第に詳細化しながら創ってゆく方法だ。 絵画はたいてい、スケッチから始まる。 そして次第に細かい部分が埋められてゆく。 だがそれは、単に隙間を埋めてゆくだけの過程ではない。 ときには元の計画が間違いだったことが分かることもある。 X線で見てみると、 手や足の位置が動かされたり表情が変えられたりしている絵画は 数え切れないくらいある。

私が専攻していた油絵はまさにそれ。いきなり絵の具で描くなんてことはあまりしないです。鉛筆や木炭で何枚もスケッチを描きます。

実際にキャンバスに描く際も、例えば「カマイユ技法」という古典的な技法があるのですが、単色の絵の具で明暗を描いてから色をつけていくという描き方があります。

全体をざっくり描いていって少しずつ詳細を詰めていく描き方ですね。


油絵メイキング"猫" -Oil painting "Nap Cat"

私のプログラミングの「仕事の進め方」の好きなスタイルはまさにこんな感じ。

全体を曖昧に進めて徐々に細部を詰めていくみたいな方法ですね。

美に対する熱狂的な没頭が必要

偉大なソフトウェアも、同じように、美に対する熱狂的な没頭が必要だ。 良いソフトウェアの中身をみてみれば、誰も見ないような箇所でさえ 美しく創られていることがわかるだろう。 私は自分が偉大なソフトウェアを書いているなんていうつもりはないが、 少なくともコードを書く時には、それと同じ調子で日常生活を送ったら 医者から薬を支給されるだろうな、というような調子で書いている。 めちゃくちゃにインデントされたコードとか、ひどい変数名を見ると 気が狂いそうになる。

私もプログラミングする際、美しさを特に重視したりしてます。

何が美しいコードで何が美しくないコードかって自分の主観じゃん! って思うかも知れないんですが・・・。GitHub上にある優れたソースコードを見て「綺麗だなー」と思うコードを真似してみたりとか。

まとめ

大学で美術を学んだのですが、在学中に学んだ絵画の描き方のアプローチ方法や「美」に対する感覚は今の仕事にも多少は活かされているみたいです。

「凄く高い学費だったけど全然関係ない仕事に就いてしまった・・・」みたいな負い目は私はそこまで感じなくても良いのかな、なんて思ったりしました。なんつって。