プログラミングへの想いを語る

僕にはいくつかの趣味があり,その1つがプログラミングです.主に書く言語はC/C++で,ちょっとしたアルゴリズムの知識を利用して小さなツールなどを作っています.

この記事では,主にプログラマー以外の人向けに,僕がプログラミングのどういう点に楽しさを感じているか話したいと思います.

ものを作る楽しさ

プログラミングは,傍から見ればコンピュータに向かってキーボードを叩いているだけですが,実際に行われているのは「小さな部品を組み立てて大きなものを作り上げる」という行為です.最終的に何かが完成した瞬間の達成感を味わううちに,1日中コンピュータと向き合ってゴリゴリとコードを書く作業も苦しくなくなります(個人差はあります).そういう意味ではプラモデルとかと似ているのかもしれません.あるいは,小さな歯車を並べて懐中時計を作る作業にたとえることも可能で,この場合,より洗練された精巧な時計を設計する試みは,リファクタリングと呼ばれる作業に対応することになります.
また,使える部品の種類は言語によって違います.例えば昔から使われている C という言語では非常に簡素な部品のみが与えられていますが,もっと新しい言語ではいくつかの部品が組み合わされて使いやすくなったものが多く提供されています.その組み合わせ方の差異が,ウェブ開発に向いている言語,ゲーム開発に向いている言語,スマホアプリ開発に向いている言語などの違いを生んでいます.

思い通りに動く楽しさ

組み立てたプログラムが正しく動くとは限りません.どこか一箇所が間違っているだけで,思いもよらない結果が出力されてしまうこともあります.しかしその分,うまく動いたときの感動は計り知れません.特に僕のやっているアルゴリズム系のプログラミングでは,ある計算をするために一見関係ないような複雑な途中経過を辿ることがあります.ナップザックに荷物を詰め込む最善のやり方を知るために突然大きなタテヨコの表を作ってみたり,文章中のいくつかの単語を置換するために突然文章の先頭から何文字か切り取った残りの部分を並べてみたり…….その途中経過が正しいことは当然理論的に証明できるのですが,それでも実際にやってみて上手く行くことが分かるととてもすっきりします.特にそのアイディアが自ら生んだものであれば,自分は天才なんじゃないかという錯覚に陥るくらいの快感を覚えることができます.

効率の良いコードが書ける楽しさ

プログラミングを始めて間もない頃は,無駄な変数や関数が増えたり,適切な書き方が選べなかったりして,書きにくく読みにくいコードを生んでしまうことがよくあります.しかし慣れてくると,言語のパラダイムに沿って利点を活かした設計などができるようになり,コードを書くのに必要な労力が減ってきます.そしてその分難しいプログラムも作れるようになるのです.語学学習などにも通じるところがあるでしょうか.英語を習いたての頃は適切な語彙選択ができないために冗長な表現ばかりしていたけれど,少しずつ洗練された文法や語法を身に付けることで表現の幅が広がった,というような感じです.

把握できる楽しさ

プログラミングができるようになると,様々なソフトウェアが動く仕組みが少しずつ理解できるようになってきます.ゲームプログラミングに親しめばゲームのバグの原因なども予測できることがあります.目の前で何が起こっているのか掌握できる気分はなかなか良いものです.

自分で決められる楽しさ

自分で作るプログラムの仕様は,自分で決めます.この自由さは趣味プログラミングならではの楽しさです.エディタを作るにしろ言語処理系を作るにしろOSを作るにしろ*1,そこには必ず何らかの仕様が生まれます.そのデザインを自ら考え,実際にプログラムとして作ることで,それが自分のアイデンティティとなります.

ネタとしての楽しさ

プログラミングは本来機械を動かすための「手段」ですが,プログラミング自体を「目的」として楽しむ人もいます.一見何をしているのか分からない難解なコードを書いてみたり,ソースコードで絵を書いてみたり.言語仕様を最大限活用してコードの短さを競うコードゴルフという競技もその1つです.当然そのような遊びにはしびれるほど高度な技術が要求され,他人のそれを見るだけでも大いに楽しめます.あなたの知らない超絶技巧プログラミングの世界 というタイトルの本が出版されるくらいです.

常に学習の余地がある楽しさ

最後に,学ぶことの楽しさについて話します.未知の領域に足を踏み入れるのはとてもわくわくすることです.もちろんプログラミングを始める瞬間にも感じることはできるのですが,実際にはプログラミングと呼ばれる領域はとても多岐に渡っており,その中で新しい分野に手を出すたびに新鮮な気分を味わうことができます.僕も,やりたいなぁと思っているけれどまだ本格的に始められずにいるものを挙げろと言われたら,言語だと Rust とか Haskell とか D とか Coq とか Prolog とか,分野だと Web 系とか機械学習とか,まぁキリがありません.このように目の前にわくわくする世界が広がっているのも,プログラミングの楽しさの1つだと思います.



僕が感じるプログラミングの楽しい点は以上の7つにまとめられます.おそらく今後もプログラミングは趣味としてずっと続けると思います.

これからプログラミングを始めようと思っている人にその楽しさが少しでも伝われば幸いです.

*1:この記事によると,これらはプログラマーの3大欲求なのだそうです.