38才からのプログラミング入門

こちらは Perl入学式 Advent Calendar 2014 の4日目の記事です。
昨日は @xtetsuji さんの「いつもの風景」でした。 お寿司いいですね。

はじめに

さて、「Perl入学式」はプログラミング初心者およびPerl入門者のための無料の勉強会です。
最近の傾向としては、他のプログラミング言語の経験はあるけれどPerlには馴染みがないから来た、という参加者も少なくないようですが、僕自身はプログラミング自体まったくの初心者という段階から参加し始めました。

ただ、ひとくちに「初心者」と言っても、「子供の時期から学ぶのか、大人になってから学ぶのか」では大きな違いがあると感じます。
よって以下では、自分の体験にもとづいて、後者の「大人」(とくには30代以降の社会人)がプログラミングに初めて触れることについて、徒然に書いてみたいと思います。

極私的な入門記

僕は現在、39才+7ヶ月で、来年の春には40才になります。そして、プログラミングをやってみようと思い立ったのは去年の5月、38才になってすぐの頃でした。

僕はちょっと変わった書籍(CDブック)の編集者で、それまでもMacInDesignやエディタ(当時はCotEditor)を使用していましたが、ターミナルに触ったことはほとんどありませんでした。(何かの拍子に間違って立ち上げるぐらいで、アプリケーションがどこにあるかも知らなかった)

上では「思い立った」と書きましたが、いきなり「やってみたい!」と思ったわけではなく、以前から何となくやってみたいなあ……とは思っていて、たぶん元々 Remember the milk や delicious のようなWebアプリケーションを使っていたり、Firefoxのアドオンを充実させてみたり(よくわからないままGreasemonkeyをいじったり)、ブックマークレットの一部を書き換えてカスタマイズしてみたりはしていて、またその一方で、@N さんの『ぼんやりと考えたこと』や渡辺千賀さんの『On Off and Beyond』といった読み応えのあるブログ、あるいは37signalsの『Rework』や『リーン・スタートアップ』のような技術者寄りの本も実益をかねてというか、ライフハック(業務効率化)的な見地から時々読んだりしていたので、気がついたら自分が楽しんでいるもの、触れているものが、エンジニア/プログラマーたちのそれと重なってきていたというか、それで半ば必然的に、自分でもプログラミングをやってみたいという気持ちになったのかな、とも思います。

小さなチーム、大きな仕事〔完全版〕: 37シグナルズ成功の法則

小さなチーム、大きな仕事〔完全版〕: 37シグナルズ成功の法則

  • 作者: ジェイソン・フリード,デイヴィッド・ハイネマイヤー・ハンソン,黒沢 健二,松永 肇一,美谷 広海,祐佳 ヤング
  • 出版社/メーカー: 早川書房
  • 発売日: 2012/01/11
  • メディア: 単行本
  • 購入: 21人 クリック: 325回
  • この商品を含むブログ (35件) を見る
リーン・スタートアップ

リーン・スタートアップ

入門書のパラドックス

さて、そのように志したプログラミング入門ですが、いざとなると、どこから始めたらいいのかわかりません。普通に考えると、まあ、本を買いますね。『ノンプログラマのための〜』とか『ゼロからわかる〜』とか、そういういかにも敷居が低そうな、読者を責め立てなさそうな、間違っても全力で否定してきたりしなさそうな書籍を選びます。

しかしながら、そういう本が本当にわかりやすいかというと、これは微妙です。というのは、そうした本の作り手を非難する意味ではなく、至極原理的な問題として、「初心者のための本を作る人は初心者ではないがゆえに初心者の気持ちがわからない」という、ジレンマというかパラドックスというか、そういう有史以来の難問があるわけです。

立ち直りや改善を邪魔するもの

ここで冒頭の話に戻ると、こうしたつまづきに直面したとき、子供と大人とでは生じる対応が異なると思います。

子供は毎日が失敗の連続ですから、簡単に癇癪を起こしたりもする一方、そこからの立ち直りや順応も早いものですが、30代も半ばを過ぎた大人で、何らかの職についていて、たとえば自分の部下や同僚に指示をする立場にもあるような人の場合、すでに人生のスタイルというか、ノウハウというか、固定観念とも言えるオレオレ・ルールが出来上がっていて、どうしても簡単に方針を切り替えたり、順応したりということがしづらいものなのだと思います。(というか、まあ、僕がそうだったわけですが)

それは言い換えると、過去の様々な成功や失敗の体験に縛られて、妥当な判断ができなくなるということでもありますが、同時に、「望まない状況をつい我慢してしまう(できてしまう)」ということでもあると思います。

普段の生活や仕事において、これは不合理で非効率で理不尽だなあ、と感じることがあっても、それを変えないまま何となく乗り切ってしまった経験があると、その後も「こうしたらもっとラクになるのでは?」といった改善の発想をしづらくなるのではないかと。

そしておそらく、大人のプログラミング入門に際して一番足を引っ張るのは、この「つい非効率に耐えてしまう」というやつではないかと僕は考えています。

ショートカットキーとコマンドの組み合わせを使えば一瞬で終わるはずの作業を、延々と何百・何千のコピペ作業で乗り切って(?)しまい、挙句の果てにはそこから達成感・充実感すら得てしまうのがここで言う「大人」であって、これが子供ならば、途中で投げ出して別の方法を考えるなり、別の遊びに飛びつくなりするでしょう。

そしてやがて、我慢の限界に達してしまった「大人」の方はどうなるかと言えば、日毎に訪れる本業の忙しさや煩わしさも手伝って、「こんなのくだらないや」とばかりに入門は断念、という結果に終わることも少なくないのではないかと想像します。

プログラミング学習の利点

しかしそれは、もったいない。プログラミング入門は、「コピペ何百」の習慣から抜け出す絶好のチャンスであり、自分の人生(という名の限られた時間)をより深く味わうための入口になりうるだけでなく、その人の作業が効率化されることにより、周りの人々にも好影響がもたらされるきっかけにもなるからです。

そしてまた、本業がエンジニアではない人がプログラミングの世界に入ることにより、普段プログラミングを生業としている人たちにも、それまでになかった新鮮な空気が送り込まれる可能性が生じます。

普段プログラミングをしている人たちは、書籍編集の世界がどのように動いているかについてはほとんど知らないでしょう。その時、僕はそれについて彼らに何かを教えることができるかもしれませんし*1、それにかぎらず、日々の本業を通して得た知識や経験を持って、エンジニアの世界に何かしら貢献することができるかもしれません。

それは本業が美容師や医師や漁師であっても同じことで、様々な現場で育まれた経験や考え方を持つ人々が、プログラミングという、理知的で論理的な裏付けによって支えられた(時には黒魔術とも呼ばれはするにせよ)世界やその法則を通して、一つの場を共有することができるのです。

なぜ Perl か?

プログラミング言語Perl(パール)は、その貴重な第一歩を踏み出すに相応しいパートナーであると思います。
同じLL(Lightweight Language)と言われるRubyPHPも同様に入門言語として適していると思いますが、僕の印象では、Perlはより手作り感覚に満ちた道具というか、仕組みが見えやすいようなところがあって、言い換えれば、最初にこれを押さえておくと、後からいろいろ応用が利きそうで、その点においてお勧めできます。

喩えて言うなら、Perlは木工細工やブリキの玩具、複雑と言ってもせいぜいモーターを使った科学工作的なもので、すでに商品として仕上がったものであっても、自分で分解して、また戻す、という楽しみ方ができそうです。
(といっても、Rubyやその他の言語をよく知っているわけでもないので、それらと比べてどうという話ではなく、その意味ではあまり説得力もないのですが)

なぜ Perl入学式 か?

そしてまた、ここでようやく再登場する「Perl入学式」は、そのPerlの基礎を学べる勉強会であり、東京・大阪・福岡の三都市で定期的に開催されていること、無料であること、また受講する条件として年齢や所属などの制限を設けていないことなどから、類似する講座などに比べてもとくに参加へのハードルが低くなっていると思います。

講師(あるいは「サポーター」)は、現役のプログラマーや前年度までの卒業生から成り、彼らは必ずしも手練のベテラン技術者や講師業のプロなどではありませんが、そうであるがゆえに、ちょっとした(わざわざ聞くのも申し訳ないような)疑問についても気軽に相談することができます。

書籍を通してプログラミングを学ぶ場合、たしかに本そのものは読者を否定することはありませんが、限られた情報しか掲載できない媒体の性質上、それだけをもとに成長していくことは困難です。(本からのみ多くを学べるのは、すでにその分野にある程度習熟した人でしょう)

一方、時間の捻出や体調管理といった、いくらかの現実的な調整が必要であるとしても、「Perl入学式」のような場を合わせて利用すれば、それまで上手く言語化できなかったような曖昧な疑問についても、現場のサポーターたちと細かく認識を共有することができ、入門初期の幾多の困難も乗り越えやすくなるはずです。
そしてこの恩恵に最も与れるのは、僕の考えでは、子供よりも、固定観念にとらわれてしまった大人の方です。

ブログを書こう

勉強を進めていく際には、共に受講する同期の生徒の動向や、進度も大きな刺激になるでしょう。
そして、この刺激をより活性化させるために、ブログを書くことは非常に役立ちます。一見するとあまりにも愚かに思える、顔から火が出るほど恥ずかしい失敗も、ブログに書いてみると、「案外大したことないな」と思えますし、それを読んだ別の人には思いがけず役立つ知見になったりします。

今回のAdvent Calendarは、Perl入学式に関わる人たちが普段どんなブログでどんなことを書いているのか、一望できる良い機会だと思います。ぜひ引き続きチェックしてみてください。

まとめ

長くなりましたが、ここまでの話を簡単にまとめると、

  • もし大人になってから「プログラミング入門」を志したなら、まずは身にしみついた「思い込み」や「不毛な我慢」を捨て、
  • 初めは本だけを読んでいても大してわからないので、「Perl入学式」のような場で直接質疑応答を重ね、
  • そこで得た学びをブログに書いて、それを繰り返し、少しずつ成長していく中で、
  • 今度は自分が持っている非エンジニアならではの観点や、本業で育んだ知見をフィードバックし、コミュニティに貢献していこう。

みたいなことでした。

なお、僕のプログラミング入門に関わるあれこれについては、以前に発表した以下のスライドにもまとめてあります。
https://speakerdeck.com/note103/hazimarifalseperl

つい先日、その発表時のイベントについて、Perl入学式のサポーターであり、昨日の執筆者でもある @xtetsuji さんがブログを書かれていましたので、よろしければ合わせてどうぞ。
YAPC::Asia Tokyo 2014 Reject con #yapcasia #yapcasiareject | #interest_ae

以上で Perl入学式 Advent Calendar 2014 第4日の記事はおしまいです。
明日は、@trapple さんの「超テスト入門〜サブルーチン復習とrequire, use」です。お楽しみに!

*1:これはじつは言葉の綾で、最初に書いたとおり、僕が作っている本はちょっと特殊な物なので、僕も一般的な書籍編集についてはほとんど何も知りません。