プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

ねえ、ちょっとやってみて!?

また、私が初心者のころ
優秀なプログラマーになるためにはアルゴリズムが必要
と思ってアルゴリズムを勉強した覚えがあります。

しかし、今思えば
学習コストのわりにあまり役立たない知識
だったなという印象です

アルゴリズムの勉強は必要か?不要である3つの理由

私がプログラミングを学び始めた頃は、今のようにコンピュータは普及しておらず、何をするにも自分で作る必要があったように思います。WindowsMacといった、統一された環境もなく、リコンパイルすれば動くといったことはほぼ皆無でした。プログラムを他のプラットフォームに移植するには、プログラムが何をしているのかを理解し、アルゴリズム部分だけをリライトする必要がありました。何か問題があっても情報は雑誌や本を調べるぐらいしかなくて、何日も思い悩むということは日常茶飯事。

いきなり年寄りの昔話ですいません(笑)

そんな不便極まりない環境ではありましたが、今思えば幸運な時期にプログラミングを始めることができたな、と思います。プログラムというものがコンピュータの中でどうやって動き、どう書けば自分の思うように動くのか、体験することができたから。コンピュータの作りが単純で、プログラムを書くことが簡単なのも良かった。CPUの速度が遅いから、どうすればプログラムを効率よく書けばいいのかが分かる。こういったことは、プログラマとなるために良い経験になりましたね。

とか書いてたら

ふと「自分のプログラミング能力って、どの程度なんだろう」って思って、競技プログラミング系のサイトをいくつか試してみました。やってみたのは:

TopCoder
HackerRank
LeetCode

とかですね。

そしたら…

これが思ったほど出来なかったんですよ。プログラマなので、毎日コードは書いてるんですよ。慣れもあるみたいで、問題を解くうち段々と書くのは早くなってくるんだけど、でも自分が思うほど書けなかった。

で、思ったのは、自分はできると思っていても、普段からやってない能力は衰えるってこと。毎日プログラムを書いているって言いましたけど、業務のプログラミングって、分野によって書くプログラムって大体決まってるからかな。例えば私の場合は組み込み系が多いんで、システム寄りのプログラムを書くことが多く、一般的なアプリケーションを作ることはあまりしないです。なので、なおさらプログラミングスキルとしては偏ってるんだろうな、って思います。

別に何でも出来るようになる必要はないと思います。私も先の記事を書いたネットサーフィンの壺さんが言われるように、必要になった時に学習すればいい派です。でも新しいことを学ぶことはそれなりにコストがかかります。ディープに学ぶ必要はなくても、それをどれだけ短い時間でものにできるかは、日々の鍛錬が欠かせないのだな、と感じました。

競技プログラミングのサイト

興味があったら、ぜひやってみて下さい。え!?「こんなの簡単だよ」って!?えっと、精進します^^;