blog @arfyasu

プログラミングとか趣味のこととか

勉強はヤグニでうまくいく?

はじめに

年が改まり2週間が経ちました。
ほんと、早いですね。

今日は、昨年、
「何の勉強しよう」
と悩み考えた挙句、結局ほとんど何も勉強しなかった自分への戒めのために書きます。

Studywww.flickr.com

勉強を前につい考えてしまうこと

僕は何か勉強しようと思う時、つい考えてしまうことがあります。

 「この技術は将来役に立つのだろうか?」
 「勉強して使わなかったら勿体無いな」

時間を無駄にしたくないので、そういうことで悩んでしまうのですよね。
自信が無いのでググって確認します。


すると、

 「今年はこの技術が熱い」
 「次に来るのはこの技術」

そんなサイトがいくつもヒットするわけです。


サイトを見てみると、また別の技術が紹介されていたりします。
あるサイトを見てはそこに書かれている技術が気になり、別のサイトを見てはその技術が気になり...
情報収集して「これを勉強しよう!」という訳には行かず、また最初の問に戻ります。

 「この技術は将来役に立つのだろうか?」

これの無限ループです。


未来の事は誰にも分かりません。
答えなんて出るわけないんですよねw

結局、気になる技術はいくつもあったものの、結局ほとんど勉強できませんでした。 っというより、「これを勉強する」という決断が出来ませんでした。

それじゃいかんなと思っていたわけですが、ふとこれが「YAGNI(ヤグニ)」の考えに反するということに気づきました。

ヤグニとは

Wikiから引用します。

"You ain't gonna need it"、縮めて YAGNI とは、機能は実際に必要となるまでは追加しないのがよいとする、エクストリーム・プログラミングにおける原則である。

YAGNI原則を提唱する人々は、その理由として以下を挙げている。

・あとで使うだろうとの予測の元に作ったものは、実際には10%程度しか使われない。したがってそれに費やした時間の90%は無駄になる。
・余計な機能があると我々の仕事が遅くなり、リソースを浪費する。
・予期しない変更に対しては設計を単純にすることが備えとなるが、今必要とする以上の機能を追加すると設計がより複雑になってしまう。
・あなたの人生の時間は貴重である。あなたの能力は単にコードを書くためではなく、現実の問題に集中するために使うべきである。
・結局はその機能は必要ないかもしれない。もしそうなったら、あなたがその機能を実装するのに費やした時間も、他のみんながそれを読むのに費やした時間も、その機能が占めていたスペースも、すべて無駄になってしまうだろう。

YAGNI - Wikipedia

色々書かれててますが、簡単に言うと「そのときに必要な機能だけを開発しましょう」という考え方です。

開発現場では、「いずれこういう機能も必要になるかもしれない」という可能性を感じたら、それを加味して設計・開発を行う傾向が強いです。(僕もその一人)
すると、その分時間も手間もお金もかかります。
でも、苦労してつけたそのような機能が使われるケースは意外と少ない。
開発者涙目...

っということで生まれたのがヤグニという考え方です。


ヤグニを勉強に当てはめると

 「今、必要な技術の勉強をしましょう」

ということになりますかね。

1年後の受験のための勉強と、翌週に控えたテスト勉強。
どちらが危機感を持って勉強できるかというと、間違いなく後者のはずです。

将来のために勉強するよりも、今、必要な技術を勉強する方が確実に自分の血肉になるはずです。

悩んでいる時間が一番勿体無い!

過去を振り返ってみると、
 「あの時、この勉強をしておけばよかったな」
と思うことがあります。
というか、そう思うことばかりです。

そんな思いをしているからこそ、

 「この技術は将来役に立つのだろうか?」
 「勉強して使わなかったら勿体無いな」

こんな悩みを持つんだと思います。


でも、悩んで何もしない時間が一番勿体ないはずです。

時間を大事に思って慎重になることが、かえって時間を無駄にしているという。
難儀ですね。


情報収集することはもちろん大事です。
将来、役に立つ技術を自分のものにできた方が良いに決まってます。

でも、それが原因でフットワークが重くなるのでは本末転倒です。


「考えてばかりいないでとにかく動け!」

っと、去年と同じことを繰り返さないよう自分に言い聞かせてみる。
なんか、タイトルと違った着地点になってしまったけど、まぁいいかw