ボクがやってきたプログラミングを独学で身につけた方法とこれからの学び方

4861007623

おかげさまで今年5月26日に出版させていただくまでになったり、月に一度、企業の会議室をお借りしての勉強会開催、セミナー講師などを経験させていただくようになりました。自分のプログラミングスキルは職業レベルで本当に通用するの?というと疑問は残りますが、個人的な作業効率化やツール作成、サイト作成などにそのスキルは役立っていると思います。

昨日開催した勉強会にて新規で参加された方に質問をいただいたり、コミュニケーションしているなかで、一度どんな勉強方法でやってきたのか、また、今後どうしていくのが良いのか、というのをこちらに書いておきたいと思います。


小学生時代〜中学生時代に出会ったパソコン

一般的に凄腕エンジニアと聞くと、だいたい小さい頃からパソコンとかさわっていて、ずっと絶え間なくその道を究めてきたイメージがあります。
しかし、ボクは中学・高校と吹奏楽部にのめりこんだり、Webをやるまではあまりパソコンに触れる機会にも乏しい状態でプログラミングなどはしてなかったものです。またWebをやってもスクリプト系は一切だめで画像加工とHTMLコーディング、ディレクション、営業、というジョブチェンジで企画・営業の延長線上で食べてきました。

幸い、パソコンを学ぶ機会として小学二年生のころに触れたポケットコンピューターというのがありました。マニュアルは当然のように小学二年生にはわからない漢字や単語が並んでいてあまり役に立ちませんでした。しかし、ゲームなどのプログラムが掲載されている雑誌を与えられて、それを見ては、打ち込んで動かしてみて、遊んでました。ファミコンが買い与えられていなかったので、ゲームがしたい衝動がゲームプログラム入力に向けられていました。
当時、コピペなんてものもなかったので、ひたすら、一文字たりとも間違えずに完璧に打たなければなりません。そこでキーボードの打ち方や、プログラムの命令文や流れなどをなんとなく覚えていったのです。

次第に、打ち込んだ第三者が作ったプログラムを改造して楽しむようになりました。ゲームも難易度を優しくしたり、無敵キャラとかいろいろやっていました。それを繰り返しているうちに自分でゼロからプログラムを書くということにチャレンジできるようになっていたのです。
小学5年生のころに、ゲームプログラムの投稿にチャレンジするところまでいきましたが、「あと一歩」的なコーナーで名前がなんとか載るところまでいっていました。

ここで学んだことは基本的に、参考書、レファレンスに頼っていないことです。とにかく他人が作ったプログラムをひたすら打ち込み、そこから学びました。改造を通じて動作の変化を見てです。これは「試行錯誤」という言葉がふさわしいのですが、意味がわからないものでも行動し、本その試行錯誤の中から学んだと言っても良いでしょう。

わけがわからないことに対してもアウトプットを出す!

大人になってからも、実は同じことをやっていたのです。とにかく行動する、試行錯誤する、その繰り返しでした。

あるときPDA端末(現在でいうスマートフォンのようなもの)向けのWeb開発を命じられた時期があります。その時期はWebデザインの本は書店にならんでいても、これらのデバイス向けの開発に関する参考書籍は皆無だったと記憶します。
ネット上を検索しても英語のサイトしか出てこず、英語アレルギーで断念してしまいそうですが、仕事ですのでそうはいきません。なんとしてでも出来る方法を探し出しました。

なにやらSDKとかシミュレーターがあるのがわかったのですが、米国のそれぞれのデバイス開発元の企業と契約書を締結しなければなりません。当然、全文英語でした。ここから先は会社の法務に任せるという形になりますが、たぶん、個人の興味ではこんな行動は起こせなかったと思います。会社の仕事で納期がある!、という強制力がそうさせたのかもしれません。
もしかしたら「ゆとり世代」は途中で放り出してしまうことかもしれません。

わけがわからないことも、期限や仕事であるという強制力がなんとしてでもアウトプットを出す原動力になったかもしれません(これは個人差があると思います)。

敷居を低くすることと短期間でゴールが見えるようにすること

上記に書いてきたことはいずれも体育会系的なやり方です。
もちろん、これで身につけた技術は強いと思いますが、どうしても習得までにかなりの遠回りをしたり時間がかかってしまい挫折しがちです。

近年、PHPを10日間で学べるといったイメージの本が出ています。これなら、遠回りせずに成功できそう!と思うのですが、ボクはこの類の本で5日目で挫折しました。
今まで何度もPHPができるようになろうと思ったのですが、何度も挫折を繰り返すのです。
少年時代にパソコンをいじっていたボクがそうなのですから、世の中一般的にはそれ以上に苦戦されている方がいるのでは、とも思ってしまいます。

この理由は後でわかったのですが、これらの本はとりあえずPHPの幅広い範囲のエッセンスをあれもこれも、といった感じに一冊に詰め込んでいるということです。つまり、自分が思い描いていたゴールになかなか近づけずに辛くなってしまうのが、ひとつの挫折の原因だと考えています。
また、入門書なのにあきらかにエンジニア視線で書かれた技術用語の多い本も少なくありません。もちろんそれらは悪くないのですが、例えばデザイナーがこれから始めようとするときには、アレルギー反応を起こすとも考えられるわけです。

そこで、敷居を低くして、毎回テーマを決めて、短時間でゴール(画面上でそれっぽく見えるレベルで!)という勉強会を繰り返し開催しています。

勉強会を開催して人に教える行為そのものが最大の勉強

PHPに苦戦していてなかなか思い通りにいかない日が続いていましたが、あるとき、やりたいことに対する非常にシンプルかつ明快な答えが見つかりました。これならできる!と急にモチベーションがあがり、あれこれ試し初めて自分がやりたいことをPHPで実現することができました。

そして、これはすぐにシェアしたい!と思い勉強会を開催するにいたったのです。

そこで勉強会を開催するまでに、日時が決まるのですから少なくともその日までにテキストやサンプルファイルを用意する必要があります。これが納期という強制力を働かしてくれました。
また、人に教えることはあやふやな知識ではいけないのである程度裏付けをとったり、確実に説明できるように調査をします。つまりわけわからないことでもなんとかアウトプット(テキスト、資料)を出すために自分の知識を洗練させるのです。結果として自分のスキルがそこで上がっていくのです。

そして、自分がPHPを勉強して苦労したところ、挫折したところを考えて敷居を低くして短期間でゴールが見えるようにカリキュラムを設計し、またシナリオ、スライドの流れも入門書よりもかみ砕いてステップアップできるようにしたのです。

結果としてそれが好評で「次回は○○について教えて欲しい!」とかそういう意見がでて、次々と企画されていきました。しかし、この時点でボクは○○について実は知らなかったりします。
来月約束された日(納期)までしっかりと勉強して同じようにアウトプットを出す、その繰り返しでさまざまな技術やPHPについて学んでいくことができました。

勉強会コミュニティに参加する、コミュニティを作る

そんな勉強会も便利かもしれませんが、勉強をしていくには勉強会コミュニティに参加する、コミュニティを作る、ということが最適だと思っています。それは勉強を孤独にしていくよりも、第三者から受ける刺激と視線が自分の勉強を進めるモチベーションにつながるからです。

ボクが主催している勉強会では「レビュー会」という手法を用いています。
これは、だれかが開発した物をメンバー全員に公開し、それに対して意見をもらうというものです。
ここで重要なのが、必ず一人一意見を言えるように、発表者は誰か一名を指名します。次の発表者はまだ指名されていないだれかを指名して、かならず全員意見を言う側にも回るのです。
つまり、いつでも意見が言えるように発表者の制作物に関してきちんと聞いて考える、という訓練をするのです。

そうしているうちに、第三者の発表物や意見に刺激され、自分自身も常に考え続けるので、アイデアの広げ方や考え方が自然と身についてきます。
その繰り返しがものづくりのスピードを加速させます。

そして、人前で発表なんて・・・と思われるかもしれませんが、実は発表するためにはきちんと伝えるために物事を整理する技術が必要になります。これが結果として、また勉強となるので、初心者でも恥ずかしがらずどんどん表舞台に立っていただければ、と思います。

まとめ

結果的に表向きに勉強しやすい方法論が出ているようですが、勉強会をやっている本人としては実は体育会系のように自分に対してムチを打っていることには変わっていないのです。
来月も11/5に勉強会があれば、それまでに求められているテーマにたいしての答えとしてのテキストやサンプルファイルを示すことになります。バグがとれなくてストレスになることもありますが、納期までに完成させることで、スキル習得の先送りを防ぐことができ、また、定期的に自分自信のスキルアップになっています。

そこまでのことがやれなくても、勉強会コミュニティに入ることが第三者の力を借りてスキルアップするきっかけになります。
恐れずわけがわからないことでも、とりあえず参加していることが、結果として後から知識としてついてきます。ボクもわけわからない勉強会にも参加していてそう思います。
ぜひ、行動してみてください。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です