プログラミングに挫折したことがあるデザイナー向け プログラミング学習法
世の中には 2 種類の人間がいる。コードが書ける人間 と 書けない人間 だ。
デザイナーはプログラミングができた方がいいのか、という議論は本当によくされている。議論するまでもなく、できた方が良いのは明白だ。
しかし別に好きでもないプログラミングを、身につけるべき他のスキルへの投資を削ってまでやる必要があるのだろうか。
まして身近にプログラミングが得意で大好きな人がいるのだとしたら、もうその人に任せて、自分が好きで得意なことに没頭したほうがお互いにハッピーじゃないか。プログラミング以外をすごく頑張って、プログラミングが得意な人と仲良くなればいいさ。
...といった具合に、やらない理由を探しつつ、プログラミングを学ぶことを後回しにしているデザイナーは多いと思う。かくいう私もそうだった。
これまでの挫折
とはいえ私も、今まで全くチャレンジしていないわけではない。通算で過去 15 回くらいはチャレンジしているのだ。つまり 15 回挫折している。
私はもともと Web デザイナーだったから HTML も CSS も書いたし、JavaScript とか CGI だとかそういった物と無縁ではなかった。インターネットをさまよい、参考になるソースを探してきてコピペして書き換えたりはしていた。
できるだけ易しそうな本を買い、勉強してみたりもした。変数?代入?...さっぱり分からない。ファンシーなイラストで説明されていても、全然可愛いくない。なんだそのネコの入っている箱は。そして何も楽しくない。仕方なく無心にコードを写してみたりしても、やっぱり何もできるようにならなかった。
Flash も触っていたから、ActionScript だって勉強しようと思った。しかし結局使えるようになったのは gotoAndStop(); だけだった。なぜそう書くのかわからないが、とりあえず()の中にシーン名を入れたらそこに飛ばせることだけ把握していた。完全に魔法の呪文状態だ。ActionScript 3 が出てさらに分からなくなってからは、完全にさようならだ。
本当に酷い。我ながら才能がなさすぎると思う。実は「プログラミングとか全然分からなくって」なんて普段いっているデザイナーでも、ちょっとした正規表現とか JavaScript ぐらいは書けたりする人が多い。「全然分からない」というのは「仕事として使えるレベルではない」という意味で、本当に if 文すら書けないという意味ではない。
小学校でのプログラミング必修化もはじまれば、コードが書ける人はもっと増えるだろう。私はこのままで生きていけるのだろうか。けれど無理なものは無理なのだ。どちらかというと勉強好きな自分が 15 回も挫折するくらいだから。
16 回目の挑戦
そんな風に思っていた私に、16 回目のチャレンジをする日がやってきた。グレアム・ハーマン の『 オブジェクト指向存在論 』の本を読んだのだ。プログラミング全然関係ない。
読んでみたものの、この " オブジェクト指向 " の部分がしっくりこなかった。そして、それはもしかして私が " オブジェクト指向 " が感覚的に理解できていないからではないかと思ったのだった。
これは " オブジェクト指向 " を勉強するっきゃない。16 回目の挑戦だ。しかし プログラミングの本でも" オブジェクト指向 " が出てくるのは結構後の方だ。いきなり " オブジェクト指向 " の章を読んでみても、やはりよく分からない。地道に勉強するしかないか。
しかし私はただのデザイナーではない。今まで何度もプログラミングを挫折してきたデザイナーだ。
16 回目のチャレンジを 16 回目の挫折にしないために、今までの失敗を分析して挑むことにした。これがその結果編みした " プログラミングを挫折したことのあるデザイナー向け " プログラミング学習法だ。
作りたいものを作ろうとしない
よくプログラミングは、自分の作りたいものを作ってみるのが一番いいと言われる。実際エンジニアになった人はそうしてコードが書けるようになったのであろう。しかしこれが大きな罠だ。
デザイナーとしてある程度経験を積んでいる人が、普段接しているエンジニアは、ものすごく優秀だ。そしてデザイナーが作りたいものは、当然その優秀なエンジニアと作っているレベルのものになる。
しかし「小学生の時に紙飛行機を遠くまで飛ばしたくて風の抵抗を計算するためにプログラミングはじめました」とかいうレベルのエンジニアと同じものを、いきなり作れるようになったりはしないのだ。自分が作れるものと、作りたいものの差に絶望すると、早々に挫折する。
たとえば UI デザイナーにとって馴染み深いプログラムといえば、 GUI のあるアプリだ。しかしそれを作るためにはビューとロジックの双方を構築しなければならない。プログラミングの勉強なのだから、ビジュアル面を捨てて、とにかくロジックに集中すればいいのだけど、そんなことはできない。デザイナーはそういう生き物なんだ。そして自分の作った拙いロジックで動く GUI の使いにくさに卒倒しそうになる。
「ああ、やっぱり得意な人に任せた方がいいんだ」
そうやって何度も挫折してきたのは、作りたいものと作れるもののギャップがあまりに大きかったからだ。
作りたいものは 1 回忘れた方がいい。まずはプログラミングというものを理解するため、リニアに行の上から下に処理が実行され、そして終わるようなものにトライすべきだ。いっその事、普段エンジニアとやっているプログラミングとは、全く別の物だと思ってやった方がいい。
自分から遠い言語を選ぶ
せっかくデザイナーがプログラミングを勉強するなら、実務に即役立つ方が良いように思える。
iOS アプリのデザインをやってるなら Swift 、Webやってるなら JavaScript とか。私が今まで挫折した時もそうだった。しかし普段接している身近な言語では、作りたいものと作れるものの差の話と同様、自分がエンジニアとやって出来ていることと、自分の能力だけでできることの差が大きくなってしまう。
過去に JavaScript も ActionScript も挫折している私は、とにかく自分のデザインから遥か遠い言語に挑戦しようと思った。
選んだのは Python だ。なにせ " オブジェクト指向 " きっかけで勉強をはじめたので、オブジェクト指向プログラミング言語でないとダメだったし、本も沢山出ている。何より今まで仕事で触ったことがない言語、というのが良かった。
自分に向いているチュートリアルを選ぶ
プログラミングの学習に挫折しない人は、たぶんゲームが好きなんだと思う。プログラミングの教本にあるチュートリアルは、ほとんど簡単なゲームを作るものだ。
ゲームに何も悪いことはないのだが、私はゲームが好きではない。だからゲームをやることも作ることも苦痛に感じる。
ActionScript のチュートリアルは大概ゲームを作るので、途中でいつも嫌になった。そんな性格なので、できるだけゲームを作るチュートリアルがない教本を選ぶことにした。幸い Python の教本はスクレイピングや、処理の自動化などのチュートリアルが多い。
なお Python の教本は、機械学習が学べるものも沢山出ているが、よっぽど興味があるのでなければ、それも避けたほうがいい。処理が単純なものでないとわけが分からないままコードを写すだけになってしまう。" 分かる " という実感が少ないと、やっていて楽しくない。
とにかくシンプルで、自分が苦痛にならないチュートリアルを採用している教本を選ぼう。探せば色んなアプローチのものがけっこうあるから、こればっかりは慎重に選んだ方がいい。
また最初は、あまり分厚くない本を終わらせることを目標にする、みたいな話もあるが、プログラミングの教本で薄いものは細かい内容の説明が不十分でかえって分かりにくかったりする。だから程よい厚さのものにしたほうがいい。薄い教本は、何らかの言語でプログラミングを習得済みの人が、別の言語の概要を把握するためのものだから。
ちなみに選んだのは『 スラスラわかるPython 』岩崎 圭 ( 著 ), 北川 慎治 ( 著 ), 寺田 学 ( 監修 ) だ。ヤギワタル さんのイラストが素敵だから。完全にジャケ買い。
同じ内容を違う本でやる
人は忘れてしまう生き物だ。だから同じ本を繰り返しやるといい、というアドバイスをよくきく。しかし同じ本を何度もやるのは本当につまらない。
初心者用の教本はどれも似たようなステップで書かれている。だから別の本で同じ内容を復習した方が、楽しく理解を深めるられる。
やりながら「 ああ、この辺あんまり覚えられてないなあ 」みたいなところが出てきても、重要なことは別の本でも出てくるので復習できる。
ちなみに私は『 スラスラわかるPython 』の後、『 スラスラ読める Pythonふりがなプログラミング 』リブロワークス ( 著 ), 株式会社ビープラウド ( 監修 ) をやり、『 Head First Python 第2版 ―頭とからだで覚えるPythonの基本 』Paul Barry ( 著 ), 嶋田 健志 ( 監修 ), 木下 哲也 ( 翻訳 ) を現在進めている。
ふりがなプログラミング は覚えたことの復習に最適だった。そして Head First Python のチュートリアルはすごく楽しい。
プログラミングができると世界が変わる
喜ばしいことに、これまでの挫折をふまえて挑んだ 16 回目の挑戦は、16 回目の挫折にはならなかった。
本当に少しずつではあるが、教本をやりながらプログラミングの楽しさを実感している。私がやっているのは、単純な処理を確かめながら記述するだけなので、ゲームを作れた!とかアプリができた!とかそんな劇的な変化はない。でもこれでいいのだ、趣味だから。
変わったことといえば、情報収集のやり方だ。簡単なスクレイピングができるようになった。チュートリアルのコードを書き換えながら、今までなら手動で収集していた情報を、自動で集められるようになった。
HTML はある程度分かるから、スクレイピングが自分に合っていたというのもあるかもしれない。正直手動でやったほうがトータルの時間は早かったのでは?と思うようなこともあるので、仕事には向かないけれど、何よりも楽しい。
またデザイン時のちょっとした作業の中で、これプログラミングで自動化できるんじゃないか?と思うことも増えた。私にはまだ作れないけど自動化したいことを説明してプラグインを作ってもらったりしている。
自分では作れなくても、できそうなことが分かってそれを説明できるということは大きい。何も知らないと、それが可能だということにすら考えが及ばないのだ。
これまで漠然と " プログラミングができる " 人のイメージとして、一番身近なエンジニアさんを思い浮かべてしまっていた。
でも別に、ゲームが作れなくたって、アプリが作れなくったって構わないのだ。エンジニアさんみたいに出来るようにならなければ、やる意味がないだろう、と思いすぎていた。
私のような人は " プログラミングができる " 人とは言わないのかもしれないけれど、そんな " できる " と " できない " の間の状態でもっと楽しんだっていいはずだ。
学び続けるということ
学習とは分かって終りなのではなく、それを続けることだと思う。大切なのは今できるかではなく、ずっと続けていけるかどうかだ。
私は以前 Web デザインをやっていたので HTML コーディングが出来たが、自分でコーディングすることがなくなり、勉強をやめてしまってからは、ほとんど書けなくなってしまった。もともとそんなにコーディングが好きではなかったというのもあるが、学び続けないと、かつて出来たことも出来なくなってしまう。
私は今、のんびりマイペースにプログラミングを勉強していて、まだアプリも作れないし、プラグインも作れないけど、これをずっと続けていける自信はある。
プログラミングは絵を描くのと同じように、一生楽しめる趣味だと思う。学ぶべきことは沢山あるし、できると日常が少し快適になる。
色々対策をしてみたけど、16 回目の挑戦が挫折にならなかったのは、私にとって今がその時期だったというだけなのかもしれない。学ぶことには最適な時期が人それぞれにあると思う。もっと早い人もいれば、遅い人もいる。
プログラマーは 35 歳で定年とかいう話もあるけれど、私はいま 38 歳だ。
これは今日、 20 代でプログラミングに挫折したデザイナーがいたとしても、その 10 年後に再びはじめたって間に合うということだ。今日挫折したなら、時期が違ったのだ。時間をあけたら案外すんなりできるかもしれない。
過去に挫折したことがある人も、今日やってみたら、意外と続くかもしれない。この文章が、そんな人に少しでも役立てばいいなと思う。
* * *
書き手:デザイン部 高取 藍