この記事はまつもとゆきひろ氏が,2008年3月24日に発売した日経ソフトウエア2008年5月号の特集「はじめてのプログラミング」向けに著したものの再掲です。記述された内容は,執筆当時の情報に基づいています。

 この手紙を読まれるころには桜の便りも聞かれているのではないでしょうか。プログラミングに挑戦したいというお話を聞き,大変うれしい限りです。

 思い返せば,私がプログラミングの道に分け入ったのはまだ中学生のとき。早くも20年以上の年月が流れてしまいました。プログラミングに携わってきた時間は長いものの,常にその密度が高かったとは言い切れないようにも思います。でも,先輩として,いくらかはお役に立てる言葉を残せるのではないかと思い,筆をとります。


 「プログラミングとは何か」。私に言わせれば「人生そのもの」です。私以外の人はそれぞれ別の答えを持つでしょう。ただ,少なくとも言えることは,プログラミングはただ単にコンピュータに仕事を伝えることではないということです。

 プログラミングは“多層的”です。コンピュータに仕事をさせることも重要ですが,それを現実化させるために「考えること」も,その考えをプログラムという形で「表現すること」もまた重要です。

 そして,何より大切なことはプログラミングはコンピュータを使って,無から有を作り出す「創造の業」であることです。このようなクリエーティブな作業は,ほかにはあまりありません。プログラミングはあなたに「創り出す喜び」をもたらしてくれるでしょう。


 もしかしたら,あなたはプログラミングを職業としようと考えるかもしれません。このような,楽しくて創造的なことを職業にできるのはなんてラッキーなことでしょう。ただし,その場合には気をつけてほしいことがあります。残念ながら2008年現在の日本における職業プログラマは,全部が全部希望に満ちた働きができているとはとても言えないからです。もちろん,充実した仕事をしている人もたくさんいます。それ以上にたくさんのプログラマがつらい思いをしています。

 原因の一つは,日本の社会においてソフトウエア開発とはどのようなものであるかという認知がまだまだされていないことです。ソフトウエア開発は,日本の産業が得意としてきた大量生産される自動車や電化製品とはまったく異なります。そのへんを理解しないで,同じ「生産」の原則をあてはめ,ソフトウエア開発を「上流」や「下流」に分割し,プログラマを下流に属するものとして取り扱うIT企業が,まだまだ多すぎます。

 たとえ,あなたがプログラミングを職業として選んでも,そのような「世の中の仕組み」に巻き込まれて,搾取されるような人に,なってほしくありません。プログラミングが,楽しくて創造的な作業であることを,決して忘れないでください。


 プログラミングを職業として選択するにしても,あくまで趣味としてとどまるにしても,卓越したプログラマになるとしたら,世の中の風潮に惑わされず,自分を確立して「キャラの立ったプログラマ」になる必要があります。ほかのプログラマと自分を「差別化」するのです。

 まずは基礎を固めましょう。とりあえずコンピュータ・サイエンスについて,ある程度の知識があったほうがよいでしょう。アルゴリズムやデータ構造,計算量の知識は非常に重要です。本当に重要なのはどの言語,どのツールかを使うかではなく,解決すべき問題に対して適切なアルゴリズムとデータ構造を選択できるかどうかです。コンピュータ・サイエンスの基礎を身に付けているかどうかで,プログラマとしての能力が決まるといっても過言ではないでしょう。

 そのうえで,自分の得意分野を確立するのがよいでしょう。Webプログラミング,セキュリティ,データベース---分野は何でもかまいませんが,無理をしないで興味を持てる分野がよいでしょう。私の場合はプログラミング言語がそれでした。

 知識を身に付けるために,インターネットとオープンソースを活用してください。実用的なソースコードを読むことで,実践的なプログラミングの能力と,その知識が得られます。優れたプログラムを書くためには,優れたプログラムをたくさん読むのが近道です。


 プログラミングはハッピーなことばかりではありません。締め切りに苦しむことも,原因がわからないバグに悩まされることもあるでしょう。それでも,やっぱりプログラミングは楽しいものです。あなたがプログラミングの楽しさを最大限に享受できるプログラミング生活を送られるように祈っています。


 Happy Hacking!


まつもと ゆきひろ
1965年生まれのプログラマ。気軽なオブジェクト指向プログラミングを支援するプログラミング言語「Ruby」の開発者。ネットワーク応用通信研究所 特別研究員。楽天技術研究所フェロー。島根県松江市在住。通称Matz。
http://www.rubyist.net/~matz/