Tortoise Shell

Webサービスの会社で働くエンジニアが、デザインやプログラミング、ライフハックについてゆるく書くブログです。

プログラミングに限らず、物事の学び方について思うこと

Twitterで「プログラミングの学び方」について話題になっていた。

スクールには通う必要がないだとか、大学に行くのが一番だとか、独学には限界があるといった言説が見られた。

おそらく、どの意見も正しい。自分の場合、理想を言えば「大学に通う」のが良いと思っている。

数ある選択肢の中で、最も体系的に学ぶことができ、かつ自由に試せる環境とリソースを得られるからだ。

プログラミングと話は異なるが、先日「デザインはどうやって学んだらいいのか」と尋ねられ、少し考え込んでしまった。

また「ツールの使い方に関する本はたくさんあるが、根本的な内容の学び方が分からない」とも言われて、たしかにその通りだなと思った。

だからこそ、やはり「大学か専門学校に行くのが王道ではないか」と思った。

どんな分野にも関わらず、独学の場合、全体像を掴んだり、道しるべがなく迷ってしまうことがある。

デザインの場合、PhotoshopやIllustratorについて扱った本はあるが、全ての基礎となる色彩設計や平面構成を扱った本は少ない。

そもそも、そうした基礎理論の必要性について、気づけるきっかけも与えられない。

デザインにしても、プログラミングにしても、よく「作りたいもの(目的)から逆算して学べばいい」という言説も目にする。

これについては、わたしも賛成しているが、プロとして現場で働くレベルが身につくとは保証できない。

ただし、挫折せずに楽しく学び続けられる点では、優れた方法ではないだろうか。必要だから学ばざるを得なくなるのは、モチベーション的にも学習効果が高まるはずだ。

わたしの場合、プログラミングの原体験は、学生時代にFlashでゲームを作ったことだ。

デザイナーの場合、ゲームの素材を自前で用意できるのが良いところだ。ロゴやボタンといった素材をIllustratorで作り、Flashに読み込ませる。

そうしたオブジェクトを、プログラミングで自由に動かすのは、とても楽しい経験だった。

それから5年も経たずにFlashは廃れてしまったけれど、ある程度成熟した技術だからこそ、本やネットの情報が充実していたことは幸運だった。

当時「Flashゲームテクニック」という分厚い本で勉強していて、マリオ風の横スクロールゲームを作りながら、変数や配列、条件分岐、またオブジェクト指向の考え方に触れることができた。

Flashゲームテクニック

Flashゲームテクニック

  • 作者:Rex van der Spuy
  • 発売日: 2010/11/22
  • メディア: 単行本(ソフトカバー)
 

それから、就職活動のためにポートフォリオを作る必要があり、そのためにHTMLやCSS、jQuery、そしてWordPressを取っ掛かりとしてPHPを学んだ。

このときも、ひとまずポートフォリオを作るという目的駆動でインプットしていたので、挫折しなかったのだと思う。

素直に「Webって楽しいな」「世界中に自分の作品を公開できるなんてすごい」と感動したのを覚えている。

当時はデザイナー志望だったので、そのままエンジニアを目指したりはしなかったが、とにかく目的駆動で勉強するのは効果的だった。

ちなみに、Twitterなどを見ていると、いかにも再現性があるかのように様々な方法論が語られているが、基本的には生存バイアスでしかないと思う。

例えば、社会人になって最初の環境があまり良くないものだと、デザインにしてもプログラミングにしても、嫌いになる可能性がある。

わたしの場合、新卒で入った会社で、社長しか仕様が分からない、フレームワークも使っておらず、バージョン管理もされていない、生PHPで書かれたプロダクトに触れて、それで何となくエンジニアはやりたくないなと思ってしまった。

しょっちゅう障害を起こして徹夜騒ぎになっていたし、誰もそのプロダクトに愛を持っているように見えなかった。

本当にプログラミングが好きなら、どんな環境でも成長できたはず、という見方もあるかもしれない。

しかし、健全な現場がどんなものなのか知らず、相対化する経験がない新卒の人間を、プログラミングから遠ざけさせるには十分だった。

またその頃、個人的に勉強しようと思って、PHPの本を買ったりしたが、全然面白くなくてすぐに挫折してしまった。

そうした経験もあったので、作りたいものが不明確な状態でプログラミングを学ぶのは、やはりおすすめできない。

作りたいものが明確でないと、闇雲にインプットするしかなく、そうなるとソフトウェア開発の世界はあまりにも広すぎる。学ぶことなど無限にあるからだ。

結局何が言いたいのかというと、堂々巡りになってしまうが、完全に再現性のある学び方など無いということだ。特に変化の激しい分野においては。

そのため、理想的には、大学(ないし近い効果を得られる環境)で体系的に基礎知識を身につけ、それから実務経験を積むのが手っ取り早いのだろう。

また、最終的にどこに行き着くのかは保証できないが、独学の場合は「作りたいもの(目的)」から逆算して学ぶ方法は、楽しく継続しやすいという点でおすすめできる。

これが、わたしの個人的な結論、ということになるだろう。

ところで、もし何を作るか悩んでいるのであれば、Webサービスなどよりもゲームを作ってみるのが良いのではないだろうか。

個人的に、Webサービスを作るのは、周辺技術のキャッチアップが大変でハードルが高いと思っている。

言語はもちろん、フレームワーク、ライブラリ、DB、ホスティングなど、作り進めて行く中で覚えなければならないことが多すぎる。

ゲームなら、簡単なものであればクライアントサイドで完結するし、パブリッシュもとても簡単だ。

そういう意味では、Webであっても、JavaScriptでゲームを作ったり、インタラクティブアートを作るのは良いかもしれない。

わたしの場合は、大学の卒業制作ではFlashでゲームを作って、それをiPadアプリとしてパブリッシュしてストアに出すことができた。

今であれば、Unity + C#での開発が、ハードルが低くておすすめだ。

FlashにしてもUnityにしても、優れた統合開発環境があって、その中でだいたい完結する世界の方が、シンプルで分かりやすいように思える。

とにかく、プログラミングの学び方について話題になっていて、色々思うことがあったので、こんな散文になってしまった。

物事の学び方というのは、実は一段抽象化すれば、だいたい同じだったりする。

プログラミングであろうと何だろうと、既に何かしら培ってきた知識があるのであれば、それをどうやって身につけていったのか思い返すのもヒントになるかもしれない。

学び方とは、とても奥深いものだ。わたし自身も、さらに突き詰めていきたい。