【409日目】ソースの美しさとは何たるかを何となく理解できた話

2020.03.15

前回の記事でお金を稼ぐスキルの話をして、その上で「今年1000万稼ぎます!」みたいなことを言いました。

というわけでだらだらしている時間が全くなくなったので本気出して色々なところにお仕事いただけませんかメールを送信しまくっていたのですが、ありがたいことにLaravelのお仕事を受注することができました。

というわけで今週1週間は本当にそのLaravelのお仕事ばっかりやってました。そんな話。

「美しいコード」の意味がわかった

美しいすぎる風景

「今回仕事を進めていくにあたって参考にしてほしいソースがある」とのことでいただいたソースの読み込みを初めに行ったのですが、そのソースを読んでいく中で「美しいソースってこういうことか!!!」と初めて理解しました。

今まで何となく聞いてはいたんですよ。美しいとか美しくないとかそう言う話。

何となく世の中では「美しい」=「めちゃめちゃメソッドに切り出したソース」みたいに解釈することが多いイメージがあったのですが、個人的にはそれはいまいちな考え方だったんですよね。

だってメソッドに切り出しまくったソースって見辛いじゃないですか。どこに何が書いてるのかもよくわかんなくなるし。

だからソースの美しさについては個人的には結構どうでもいいと思うことが多くて、結論動けばいいだろと。そう言う風に考えていました。

しかし、いただいたソースを見てそれを読み込む内に初めて美しいソースの意味がわかりました。

美しいソースとは「メソッドがたくさんあるソース」ではなくて「機能などの人間が見てわかりやすい単位でメソッドを切り出したソース」のことなんですね。(違ってたら誰か教えてください)

ある単位で切り出してあえて冗長化した構成をとることで、メンテのしやすさだったり共通化のしやすさだったり様々なメリットがあると言うわけなんですね。すごい。

多分下手な人が適当に切り出して共通化すると逆に使いづらくなってデグレとかが暴発するんでしょうけど、そうならないように上手に切り出したソースこそが「美しい」と言えるんだなと。そう思いました。

どの機能をどう切り出すかはなかなか難しいところで、特にLaravelの場合結構自由度が高いフレームワークな分、技術とかセンスが出るんだろうなーと。だからこその「Web職人のためのフレームワーク」なんだろうなと。

ようやくLaravelのコンセプトの意味が何となくわかりました。

ソース=武器

それともう一つ、色々な人のソースを読んで思ったことは「ソースってRPGの武器みたいなものなんだな」と思いました。

ファイナルファンタジーとかドラクエとかって自分のレベルがあがったらその分能力値が上昇するわけですけど、それとは別に強い武器を買っても上昇しますよね。

それってエンジニアでも結構同じことが言えるなとふと思ったんですよ。

世の中の人ってエンジニアは基本的に全部一からつくるみたいに思うことが多いらしいですけど全然そんなことはなくて、どっちかと言うともともと完成されているソースの一部をコピペしてそのあとうまく調整することが多いんですよね。

会社の研修中に50歳くらいのおじさんが「エンジニアが一番使うのはCtr+CとCtr+Vだからとりあえずそれを覚えておけば大丈夫」みたいなことを言ってましたが、あながち間違いないように思います。

そうなった時にやっぱソースをたくさん持ってる人はそれだけ短い時間ですごいものが作れると思います。

そんなこんなんでRPGに例えるとレベルはそのエンジニアの勉強したことで、武器というのはソースに値するなと、そう思うわけです。

こういう考え方で生きてると現実世界で生きてるのにゲームやってるような感覚になれるのでおすすめです。新しいソースもらったら「強い武器手に入れたぜ!」ってなりますし、理解不能だけどなんか動くソースを手に入れたら「まだ俺のレベルがこの武器の使用可能レベルに到達していないんだなー。。。」みたいな。

説明下手ですみません。でもそんな感じ。分かる人に分かれ。

レベル上げしかしてこなかったので武器集めも頑張ります

ガチ武器

そんな感じでよくよく考えてみれば今まで自分で勉強して自分でソース書いて自分で動かして終わりみたいなことを1年くらいやってた自分としては、もうちょっと武器集めに本気になろうと思いました。

まあ今の時代ググれば結構強力な武器でてくるんですけどね。オープンソースすごすぎ。

もちろんレベルもどんどんあげていかないといけないんですけどね。

具体的にはJavascriptを真面目に勉強したことがないのでTypeScriptとかReact.jsとか触ってみたいなと思ってますし、KubernetesとかGCPとかもできるようにならなくちゃいけないと思ってます。

まあただ今は目の前の仕事に全力投球って感じです。頑張ります。

そんな感じで終わろうと思います。

ありがとうございました!