なぜプログラムを書くのか

この投稿は Perl入学式 Advent Calendar 2014 の21日目の記事です。
前日は、同僚である id:t_akms さんの Perl入学式を地方で開催してみたというお話 です。

TL;DR

自分自身が直面する問題や楽しみを感じるポイントと、そのアプローチとしてのプログラミングが重なった時、ポテンシャルは最大になる。
もちろん合致しない時もあるが、最近はプログラミング環境が整い学習が容易になりつつあるので、余暇で日々鍛錬しておくと、自身や世相が変わってプログラミングが必要になった時、全力で行動できるようになる。
その点でPerl入学式の取り組みは素晴らしいし、本業プログラマではない人が参加するととても良い取り組みである。

はじめに

最近はPerl入学式に関係できておらず、申し訳ございません。。。
校長(id:papix)と同じ会社で働いているエンジニアのさいさです。
年末らしく、これまでとこれからの僕を考える意義もあり、技術的な話ではなくエモーショナルな話を書きたいと思います。

何のためにプログラムを書くのかという話

僕は中学校を卒業した後、化学を勉強するために高専という学校に入りました。
そこは工学全般という広い領域を扱う学校であるため、もちろん情報系の学科も設置されています。
当時中二病をこじらせていた僕は、黒い画面に文字を打ち込む友人に感動して、C言語というプログラミング言語を教えてもらいました。
ハッカーへの中二病的あこがれでこの道に入りました。

学生時代

最初はポケコンのおまけ機能みたいなC言語環境でグーしか出せないじゃんけんプログラムを書いたりして遊んでいました。
余暇のみプログラミングに充てていても1年経つ頃にはポケコンC言語に限界を感じ、春休みに地元の煎餅工場でバイトしたお金でPCを買い、C++という言語の勉強を始めました。

このC++が僕にとっては非常に難しく、「プログラムだるいなー分かんないし」とモチベーションが低下してきた18歳の頃、今度は本業の化学でプログラミング需要が発生しました。
それは、実験結果を処理する需要です。
化学や化学工学(化学と化学工学は異なる学問)の実験は、得られたデータを実験条件ごとに処理して、比較検討し相関や傾向を見つけ、原理や原因を考察する、というのが大まかな流れです。
計算する量が段違いになり始めたのがこの頃で、ひとつひとつの計算は四則演算程度の単純なものなのに、実験条件が多くなり、エクセルで条件を変えつつちまちまやるのも面倒に感じていました。
ついに「やってらんねー!」と、思い切ってVBA(エクセルのマクロ)に手を出し、グラフの出力まで一気にやった時に、楽ができた安堵とともに、プログラミングが楽しいと思いました。

社会人

そんなこんなで入社しました。
入社1年目、配属先では、Perl製webアプリケーションの運用を行いました。
プログラムを書く以外の仕事が多く、それが新たな発見の楽しみであり、そして理想とのギャップでもありました。
データベースやネットワークの重要さを知り、また、仕事としてPerlを含めプログラムを書くことの難しさを痛感しました。
何が難しいかというのは今回取り上げませんが、この時には、プログラムを書くことが、運用上の問題への対処という、どちらかと言うと後ろ向きな動機になりがちだったと思います。

新人研修

入社2年目の最初の仕事は、2014年入社の新卒メンバーに対する、新人研修の企画・運営でした。 その新人メンバーには校長もいて、「つまんないと思われたらどうしよう」と泣きそうになりながら企画運営をしていたことも、今となっては良い思い出です。
企画を一人で行ったため、様々な事を考えました。(企画のレビューや運営は上司にかなり手伝ってもらいました)

それが、「何のためにその技術を勉強するのか」ということです。
新しい価値を見つける技術、それをプログラムとして実現する技術、実現したものを維持し価値を高め続ける技術。そのために何が必要なのか。
或いは、会社から何が必要とされているのか。

長らく考えていなかった、または意識していなかった、「何のためにプログラムを書くのか」と自問自答する日々でした。

研修は終わり、残ったのは、「自分はなぜプログラムを書くのか」という問でした。

自分はなぜプログラムを書くのか

これまでの僕の場合、プログラムを書く動機は、以下のものでした。

  • なんとなく「黒い画面にプログラム書いている俺TUEEEEE!」したい
  • 実験結果を処理したい
  • 業務で障害を減らしたい、安全に変更できるようにしたい

これらは、僕を取り巻く環境と共に、変化し続けています。

そして今、僕の中でのその動機は、新しいものになりつつあります。
きっかけは、しばらく前に発生した、輸血によるHIV感染事例です。
僕はよく献血している親の影響もあり、これまでで59回の献血をしてきました。それくらい献血赤十字の活動に意義というか、興味を見出しています。
そんな僕にとって、学生実験のレポートや現在の業務といった目の前の課題ではない、初めて直面する、根源的かつ巨大な課題でした。

献血に協力する以外に、エンジニアとして自分が何かできるかもしれないと考えたとき、「解決策としてのプログラミング」が、パズルのピースのように当てはまるような感じがしました。
ITベンチャーを立ち上げいている方々にとっては当たり前の感覚かもしれませんが、プログラミングで自分の理想を実現するというのは、僕にとって新鮮な感覚です。
自分の理想のためのプログラミングは、きっと楽しいのだろうなと思いながら、この課題のため自分に何ができるのか。
日本赤十字社に問い合わせつつ、今考えています。

他の人はなぜプログラムを書くのか

一方で、コンピューティング環境がよく整備された現在、解決策としてのプログラミングを、多くの人が選択できるようになったと思います。

  • 業務を簡単にしたい
  • 市立図書館の蔵書データを調べたい
  • 動画からモザイクを取り除きたい

こういった要望は、おそらく現代社会に生きる誰にでもあり、そして多くの場合、プログラミングは解決策として有効なものだと思います。
そして、日常生活においては、お金を出して時間を書けてプログラマに頼む方法よりも、自分でプログラムを書いたほうが手軽なことがほとんどです。
しかし、どんなプログラムを書けばいいのか、或いはどうプログラムを書けばいいのかというのは、初学者の前に立ちはだかる大きな壁です。
また、何かを作るまでには、多くのことを学ばなければならないこともあり、ひとりで初めるには困難が多すぎます。
そんなときにPerl入学式で学び、相談できることの良さは、いまさら語るまでもないでしょう。

まとめ

誰もが違う生い立ちで価値観もバラバラな現代。課題と感じていることも楽しみも、人それぞれです。
自分の信念のため、業務上の問題を解決するため、余暇の楽しみのため、或いは何かがあるかもしれない明日のため、プログラムを学ぶ第一歩としてPerl入学式に来てみると、良いことがあるかもしれません。
果たして来年はどのような1年になるでしょうか。とても楽しみです。

明日は同僚のほと氏です。お楽しみに!!