見出し画像

ゴルフとプログラミングの共通点⛳️🧑‍💻

はじめまして!CREとしてエンジニアをやってますkazuです🦌
唐突ですが、皆さんは、プログラミング以外に何か趣味を持っていますか?
僕は、社会人になってからゴルフを始めて、4年が経とうとしています⛳️
始めた時は、「ゴルフなんて、簡単でしょ!!」と思っていましたが、いざ始めてみると今までのスポーツとは異なる競技であると身をもって思い知りました。70代のおじいちゃんに、体格でも力でも勝てるはずの20代がスコアで負けるとか、他の競技ではほぼないと思います(めちゃくちゃ悔しい)
そんな挫折から始まった僕のゴルフ人生も、今となっては様々な学びがあったなと思います。ゴルフ以外にも、転用できる考え方や手法をたくさん学びました。
そこから学び得た事とプログラミングには、共通する事がたくさんある事に最近気づいたので、今回記事にしました。
エンジニアになるまでの過程を書いた記事もあるので、筆者のことを知らない人は、こちらもチェックしてみてください ✨


共通点


ゴルフを始めて、エンジニアになるためにプログラミングを始めて、気づけば、どちらも自分の人生を豊かにする必要不可欠なものになっていました。
そこから、導き出した共通点がいくつかあるので、以下に列挙していきます↓↓↓ 

・再現


<ゴルフ>
ゴルフは再現性のスポーツと言われており、同じフォーム、同じリズム、同じポイントで球を捉える事が求められます。
つまり、自分の脳で理解し、それをアウトプットし(実際に球を打ち)、その結果(球の行方)をみて、ナイスショットであれば、その頻度を10回に1回だったものを、10回に3回、7回…と確率を上げる事が必要なわけです。

<プログラミング>
「コードの再現性を高める」というのは、全く同じコードを書くというニュアンスより、過去に書いたパーツ毎のコードをアウトプットできるかといったニュアンスの方が近いかもしれません(うまく言語化できず、申し訳ないです🙇‍♂️)
これらを組み合わせることで、大量のコードをアウトプットできるわけですが、1つ1つの処理を理解し、アウトプットして、その結果を振り返る事で、自分の中に落とし込む作業は、ゴルフの再現性と同じ考え方であると思っています。

・反復


<ゴルフ>
再現性を高めるには、「再現したいスイング」を目標に据える必要があります。これを探すために、僕はプロのスイングをお手本にしていました。特定の選手の打ち方を真似るというより、プロのスイングに共通してる点をひたすら探す事を繰り返してました。
良い例を見てると、悪い例もわかったりするので、繰り返し他人のスイングを見る事は大事であるなと思います。
これを再現させるには、ひたすら練習…毎回自分が思うスイングができているのか、動画で何度もチェックし、その度に修正をすることで、自分の理想に近づける努力を積み重ねています。

<プログラミング>
プログラミングでは、「他人のコードを見る」という事をしています。(これは、最近)理由は同じで、良いコードと悪いコードの基準を自分の中に作ることで、自分が思う良いコードの再現性を高めるためです。
そして、後は無意識的に手が動くようにひたすら練習…(これは全くできてる感じがしないので、今後の課題🥺)

・量>質


<ゴルフ>
上記内容と被りますが、質を向上させるには、まず量をこなさないとスイング力は向上しません。そのため、ゴルフを始めた当初は、打ちっぱなしでひたすらボールを打つ以外に、素振りなどもしていました。(型が身につかないと再現が難しかったため)
パターに関しては、家でできることもあり、「100切りを目指すぞ」となったときには、パターマットを使い、100回連続入るまで辞められない練習などもしていました。やった事がある人はわかるかもしれませんが、80回をすぎると、ほぼメンタルの戦いになってきます。家で、あんな緊張感を味わうことは、ほぼないと思います(笑)
量をこなすとストロークの基本が身に付いてくるので、次に意識すべきことが、質となってくるわけです。「1mを打ちきれない」という課題が見えてきたため、100回連続の練習→1mをまっすぐ打つ練習に移行です。
こんな感じで、量をこなすことで次の課題に対するアプローチに量が必要なのか、質が必要なのかが見えてくるので、何事も量から入る重要性を感じています。

<プログラミング>
プログラミングもやはり量が必要で、僕が継続してやっているAtCoderでも、かなり役に立っています。CREという職種的に、コードを書く頻度が少ないので、簡単なA問題から始めましたが、やはり量をこなしていると段々と次の課題が見えてきて、そこで初めて質を意識した練習が必要になってきたりするので、定量的な数をこなす事は大事でした。
そして、量をこなすメリットとして大きいのが、「自分の中の基準の底上げ」です。「10問も解いたのか偉い!」とするのか「100問解いたのかえらい!」とするのかで今後の伸び代に大きな影響を与える事はいうまでもないと思います。
量に対する基準は、ゴルフによって作られていたので、数千~数万回振ってきた経験からすると、プログラミングにはまだまだ伸び代があるなと思っています。(頑張れ自分)

・パターン化


<ゴルフ>
80台をアベレージにするには、アプローチの種類を増やす必要があることに気づき、転がす打ち方、上げる打ち方、止める打ち方、それらをyd毎に打ち分ける振り幅など練習しています。
自分の武器を増やすことで、どんな状況に遭遇しても、攻略できるようにするためです。

<プログラミング>
コードの処理パターンを増やす事は、上記と似ていると思います。実装パターンを増やすことで、どんな状況でも、最良の選択ができると思うので、可読性がいい、処理が早い、負荷が少ないなど様々な状況に応じた対応が可能となるわけです。

・逆算力


<ゴルフ>
カップにボールを入れることを目標とするゴルフは、逆算できる力→コースマネジメント力が不可欠です。当初70代の人たちに勝てないのは、実はここの力の差が大きかったです。
仮に300ydあるホールがあるとして、4打で上がればパーとなる場合、ドライバーで何yd飛ぶのか、そうすると残り何ydになるのか、そのydに合うクラブは何番なのかなど人それぞれ、得意なクラブも飛距離も違うため、オリジナルの戦略が必要となってきます。
カップインさせるのに、どういう逆算をするか、これは日常的にも使える考え方であると思います。

<プログラミング>
どんな期待動作を得たくて、どんな処理を書く必要があるのか、そのためにどんな関数を使い、どういうデータ構造にするのかなど常に逆算力が求められるプログラミングでも、この力は大事です。(ちなみに、僕はこの力がとっても弱いので訓練中です💦ゴルフでも、飛ばしてナンボのゴルフをしていたので、今はちゃんと逆算するようにして、ボールをコントロールできるように、練習中です笑)
プログラミングで、培われた力がゴルフに活きるのも、面白い点の一つです。

・継続


<ゴルフ>
「継続は力なり」という言葉がありますが、これは本当にそうだと身をもって実感しています。今は、定期的に金・休日のどちらかは練習に行くようにしており、なるべく空きを作らないようにしています。(すぐ忘れちゃうので…)
後は、パターを1日1回以上は打つようにするなど、感覚を忘れないために、継続した練習を行なっています。入れごろ外しごろの1mを外すことほど、悔しいものはないので、ひたすら鍛錬あるのみ😭(遠いところから決めるバーディーとかあったりするから、ゴルフはやめられない)

<プログラミング>
上記のように、継続した練習の重要性を理解しているので、プログラミングでも同様に、問題を1日1問以上解くなどして継続した練習を行っています。
ここで注意なのが、継続することが目的ではなく、継続した先にある嬉しいや楽しいを掴み取るための行動である事を忘れてはいけません。
(ちゃんと考えるなら、この問題を解く事で何を得たいのかなど具体にする事ですが、これに関してはそこまで考えていません!笑)
簡単な問題でも、解けたらやっぱり嬉しいです🙌
より難しいと嬉しさ倍増しますが…(バーディー理論🥺)

まとめ


ここまで読んでいただきありがとうございました🙇‍♂️
読んでもらいわかったかと思いますが、一般的な趣味の範疇は越えているかもしれません😂ただ、本気でやっていると他の事にも活かせる事がたくさんある事にも気づけたので、結果ここまで積み重ねてきてよかったかなと思います。
ゴルフにおける1つの目標が、競技ゴルフに出る事なので、そこを目指し、引き続き頑張りたいと思います!!!
また、プログラミングにおいても、まだエンジニア人生始まったばかりなので、様々な事に挑戦しつつ、1歩ずつ着実に歩みを進めていこうと思います!
お付き合いいただきありがとうございました!

この記事が気に入ったらサポートをしてみませんか?