独学プログラミングハック

プログラミング独学をハックする初心者のためのTips

スランプへの対処

禅のお香


当たり前のことだけど、

誰にでも、調子が良い時とそうじゃない時がある。

 

何かを始めて、時間を忘れてのめり込んで、結果が出ている期間もあれば、

まったく作業が手につかないという時もある。

 

最近、自分はフォーカスを失って、スランプに陥っていたということを認識できた。

そこで、せっかくなので、スランプについて考え、対処を自分なりにまとめてみることにした。

 

結局のところ、スランプというのは、坂を下り終えた状態なんだと思う。

自転車で坂を下る時は、勢いに任せていれば進んでいく。

でも、坂を下り終えたら、次は坂道を登るような意識を持たないといけない。

その際、下りと上りでは、進み方は大きく違っているので、今まで通りのやり方が通用しなくなるんだ。

 

これは、自分が将来、スランプに陥った時に見返す用です。

上り坂を前にして、力強くペダルを漕ぐために。

まず、たくさん寝ること

追い込まれている時ほど、頑張ろうと、睡眠を削ってしまいがちだ。

しかし、モチベーションが低く、フォーカスを失っている時は、
注意散漫で、1つ1つの作業にも余計に時間がかかってしまうこともある。

 

そうして、生活リズム乱れていき、精神的にも、身体的にも疲労が蓄積されていく。

 

まず、たくさん寝ること。

そして、生活リズムが乱れていたら、少しずつ直していくこと。

気づかないうちに、自分にかかっていた負荷を解消して、
コンディションを整えてから重要な仕事に着手することが重要。

 

同時に、悪習慣も断ち切ること。

こういうスランプの時こそ、SNSとか、YouTubeとか、
コンテンツ中毒になって、ドーパミンをハックされてしまうことが多いと感じる。

なので、悪習慣を全て断ち切るための意志力と、それを作り出す睡眠が大切。

いつも以上にたくさんの睡眠をとって、しっかり栄養をある食事をすることで、
意志力・判断力は上がる。

スランプに対処する時、「上り坂」では、次の順番で優先的に行うべきだと思う;

  1. 基本的な生活習慣
  2. 1日のルーティン(時間の使い方)
  3. インプットとアウトプットを繰り返して、短気で必要な知識・学びを得ること

本当に基本的なこと、自分の中の「当たり前」を、1つずつ改善していくということ。

 

メタ認知する

結局スランプというのは、フォーカスがない、モメンタムがない、またはその両方の状態を指すんだと思う。

なので、一度俯瞰して、

自分(主体)の状況と、取り組んでいること(対象)を、再確認することが重要になる。

 

1ヶ月前にうまくいっていたことが、今通用しなくなっているのではないか?

状況が変わり、日々行なっていることが、結果に直結しなくなってきているのに形式的に続けているのではないか?

 

本当に重要な1つの指標にフォーカスして、それを伸ばしていくことで直近の目標を達成できると信じることが何より重要だ。

信じることが、期待につながる。

信じて、日々実行を繰り返して、結果として少しずつ指標を伸ばしていければ、モメンタム(勢い)が出てくる。
さらにモチベーションが向上する。

そして何より、自分自身がのめり込んで、効果的にハードワークできているという感覚が得られる。

だからこそ、フォーカスを失って、注意散漫になっていてはいけない。

 

自分がのめり込んで作業できているかを確認して、

現在フォーカスすべきことをしっかり再認識して、

毎日少しずつ実行して、リズムを作っていかないといけないんだ。

 

フォーカスの重要性

毎週、最も重要な1つの指標(North Star Metric)に集中すること。

特に、スランプの時は、複数のことをやろうとしないことが重要だ。

 

また、毎日1つのことに集中するのも良い。

フォーカスを失って、外部の情報などに注意を奪われている時は、やるべきことが全然進まなくて、精神的にもキツくなっていく。

実際スタートアップなどは、自分の注意を削ぐような割り込みがこの上なく多い。

意識的に切り替えることが重要だが、注意散漫になっている時は、まず1つのことに集中しよう。

1つのことが終わるまで、他のことをやらないことだ。

しっかりやり切ること。
質を重視するより、完璧を目指すより、やり切ること!

 

より良い方法は、毎日を何気ない1日ではなく、特別な日として認識することだ。

考えることに集中する「偉大なる思考の日」

コードを書くことに集中する「Happy Hacking Day」

情報収集などに集中する、、など、
その日のテーマを決めて、特別な日として意識してみるだけで、1つずつ前に進んでいける。

 

発散と収束

「フォーカスの重要性」とも重なるけど、毎日1つのことだけを、しっかりやり切る意識が大事。

それはつまり、毎日1つ収束させるということ。

その際、質を重視するより、完璧を目指すよりも、やり切ることが重要。

終わらせることが重要。

 

とはいえ、それが上手くやりきれないなら、収束日を決めることだ。

その日には、絶対にタスクをやり切る。

なので、それ以前に1時間でもいいから発散したり、段階的に細かくアウトプットするようにすること!

前日にたった30分でも、発散させておくことで、意外と思考が整理され、アイデアが生まれるもの。

1日で収束できなそうなら、あらかじめ発散させておくこと。

 

細かいアウトプットは重要なので、以下のような工夫が効果的:

「毎日1つ収束させる + 雑でいいから明日のタスクについて書き出して発散させておく」

 

モメンタムを作り出す

自分、もしくは自分たちのモメンタムを高く保つことは、何に取り組むにしても最も重要なことだ。

調子が良い時は、楽しんで、のめり込んで、ハードワークできる。

ただそれを維持することは難しい。

だからこそ、意識的に行わないといけない。

 

それには、次以降のセクションで紹介するようなルーティンをしっかり構築し、淡々とこなしてリズムを作っていくことが重要になる。

 

時間を記録すること

タスクにどれくらいの時間がかかったのか。

1日どれくらいのタスクをこなせたのか。

それを見える化しない事には、改善はできない。

 

調子良い時、のめり込めている時は、そんなの計測する必要がないくらい、起きている時間はずっと集中と緊張状態で作業しているが、そうじゃない時は、徹底的に記録するべきだ。

意識しないでも上手く進めるような状況じゃないなら、意識的に管理しよう。

 

日々のルーティンを再確認・再構築すること

毎日作業の初めに、タスク整理などをするとか。

毎日の終わりに振り返りをするとか。

決めたことをしっかりやる。

 

自己規律を持って、何にフォーカスすべきなのか?という意識の対象をコントロールしていく必要がある。

 

そして、自分のことをしっかり褒めること。

自分自身で決めたことを実行したら、しっかり報酬を与えることが思っている以上に重要だ。

 

作業する場所

もし、作業に集中できない、やる気が減退しているなら、外で作業するなどの工夫をすること。

カフェでは作業に集中できるけど、家では怠けてしまうなら、家で作業しないようにすること。

その分早く寝て、外で作業する時間を増やそう。

何より、良くない状況に対処することが重要だ。

 

また、立って作業するのも良い。

のんびりと、リラックスできない姿勢を保つことができる。

 

インプットの重要性

結局、人の頭の中は、見たり聞いたり、知覚・認識したことの記憶でできている。

もし、先のことが考えられない、イメージできない、アイデアが出ない、、などで悩んでいたら、インプットする時間を増やしてみるべきだと思う。

もちろんなんでも良いわけじゃない。

今の自分に必要な情報をインプットして、それについて考えていれば、シャワーを浴びている時や、散歩している時でも、自動で想起してアイデアが生まれてくるのが、人間の脳だ。

その偶発性を利用しない手はない。

 

そして、スランプの時というのは、目の前のことに気を取られて、
本当に取り組むべきことについての考えている時間や、インプットが少なすぎるために、日常の中でアイデアが湧いてこないことが多い。

 

思考整理のために書くこと

書くことで、思考が整理される。

書くことで、アイデアが生まれる。

書くという行為は、単に頭の中の考えを転写しているだけではなくて、実際は書きながらアイデアを得ているんだ。

書くことで、とても多くの発見があると、いつも驚かされる。

なので、書くことを習慣にした方がいい。

作業しながら、頭の中に浮かんだことを、そのまま書き出してみるだけでも、とても多くの発見がある。

そして手を動かすことで、作業に集中することができる。

 

紙とペンの時間

フォーカスを失っている時、注意散漫になっている時は、それを遮断するのが1番いい。

スマホやタブレットを遠くに置いて、PCもシャットダウンして、本当に重要なことを考えよう。

 

(これは多分、サウナブームとも重なるんだが、)

外部からの情報を遮断して、自分の中にある「思考の引き出し」を開けるということ。

紙とペンだけ用意して、頭の中にあることをひたすら書き出す。

ホワイトボードでもいい。

たったそれだけのことが、とても有効。

デジタルデバイスはとても便利だが、
あえて他のことが何もできない、通知も来ない、「紙とペン」が適している時がある。

 

アウトプットの重要性

ここまでに紹介したことと重なるんだけど、

インプットして、書きながら思考を整理して、アイデアを得ていくなら、しっかりアウトプットすることが重要だ。

自分の言葉で、しっかりまとめるということをするだけで、それ自体に対する理解も深まる。

そして、自分の考えや学んだことを、見返して思い出したり、更新したりするのに役立つ。

つまり、将来の自分を助けることにつながる。

 

そして、このようなアウトプット自体が、自分自身の成功体験になり、モメンタムに繋がるんだ。

自分自身で決めたことに、しっかり取り組んでいくことで、リズムを作りだせる。

そしてそれを人に見せること、おすすめや周知することが、とても重要だと思う。

これはプロダクトのローンチや、セールスの練習にもなっているんだ。

ビビったり、理由をつけて先延ばしにしたりせず、見せ方を工夫して、アウトプットをしていくべきだと思う。

 

仮説や戦略、目標設定を再構築・更新すること

スタートアップでも、プログラミングの勉強でも、仕事でも。

自分が今取り組んでいることがなんであれ、定期的に仮説や目標設定を更新することが重要だ。

日々、何かに取り組んでく中で、ロードマップを進んでいくにつれ、知識や経験が増えて解像度が上がっていく。

そして、それに合わせて先のイメージを、より具体化していく必要がある。

 

研究やスタートアップなら、検証を進めていくにつれ、仮説の精度が上がっていく。

これからの検証や成長を、効果的に、できるだけ短い期間でこなくための戦略も必要になってくる。

言い換えれば、検証が進み、仮説の精度が上がっているなら、戦略も変化していくべきだということだ。

以前と同じやり方は、通用しない。

成長に合わせて、戦略や目標設定を明確に更新していく必要があるんだ。

 

毎日これを見返すこと

スランプの時は、今はスランプであるとしっかり認識して、毎日これを見返すこと。

 

あとは力強くペダルを漕ぎ続ける。淡々と。

あとは、上記をひたすら継続することだ。

毎日のルーティンを設定し、それを淡々とこなす。

自己規律を持って、自分で決めたことをコツコツ実践できていることが成功体験になる。

何より、自分をコントロールできているという感覚が得られる。
これが何より重要だ。

 

だから、どんなにスランプでも、淡々と目の前のことをやるしかないと割り切ること。

1つずつ、注意して物事を前に進めよう。

そして諦めないこと。

結局、この「坂を登っている期間」が、1番自分の成長につながるんだ。

調子がいい時は、この期間の貯金で、坂を登った位置エネルギーを利用して、すごい速さで坂を下っているだけ。

 

なので、このスランプの期間を、できるだけ短期で、学びを蓄えて成長する期間と認識すること。

俯瞰して、しっかり振り返りをして、学びを蓄えて成長する。

自分の課題や現在の状況、得られた教訓や学びを、アウトプットしていく。

有意義な期間にすること意識を持とう。

 

困難を乗り越え、スランプを克服し、自分もプロジェクトも成長する。

それを楽しむマインドを持つことが、重要なんだと思う。

走りながら考える重要性

仕事や学習など、日々の実践の中では、物事を前に進める意識が重要です。

以前に、のめり込んでいる時と、俯瞰している時についての記事を書きましたが、やはりプロジェクトを毎日コツコツ、効果的に前に進めるのは難しいです。

見積もりとも、ずれてきてしまったり。

なので、より具体的な、計画と実行についての学びを共有します。

 

具体的なプラクティスは、
計画時は、明確なゴールのイメージと「何をどれくらい」伸ばすのかという指標を設定し、
実行時は、ひたすら実践を重ねながら「どのように」を掴んでいく必要があります。

しっかり役割を切り分けるのです。

この2つのモードの切り替えが、目標達成にとって非常に重要だと考えています。

 

この1週間のゴールはなんですか?

計画時には、明確なゴールをイメージする必要があります。

そうすることによって、自分の現状と目標のギャップを明確にすることができます。

これにより、実践の中で迷って、考え直すことが減ります。

どのくらいの努力が必要なのか、どのような方法が効果的なのかを見極めることに専念できるのです。

また、1週間のゴールは、客観的に見える化された指標を設定することが重要です。

本質的に成長を反映した、最も重要な指標を1つ設定し、それに集中することです。

実際、実践の中では、常に焦点は散らかっていて、効果的に物事を前に進める力が働いていない時が往々にしてあります。

なので、明確なゴールのイメージと、「何をどれくらい」伸ばすのかという指標を設定することから始めると良いです。

 

そして、すぐに実行を開始します!

考える時間は無限ではないです。

時間が来たらしっかり手を打ちます。

重要なのは、むしろ、進みながらしっかり問題に対処することです。

そして、実践しながら考えて、課題をハックして、まとめていきます。

 

ポイントは、初めに考えすぎないことです。

極端な言い方をすれば、最初に「どのように」という、進め方を知る・考える前に、まず実行に振り切ってしまっていいということになります。

走りながら、一つ一つの問題に対処し、ルーティンにまで落とし込んでいく成長の過程が重要です。

それが、何かを立ち上げると言うことです。
なので、0からプロセスを模索していきます。

実行の中では、ゴールを明確にイメージして、常に足りないものを認識しておくこと。

そして常に今やっていることが、指標に貢献しているかどうかを意識することが重要です。

ゴールに近づき、成長を表す指標を伸ばしながら、「どのように」進めていけばいいかも学ぶのです。

 

おそらく、何かを試しにやってみようとか、遊び感覚であれば、しっかり目標を設定し、のめり込むということを前提にする必要はないと思います。

しかし、そうじゃないのであれば、目標達成に高いコミットメントを持っているのであれば、目標設定と実行を正しく行う必要があります。

走りながら考えることは、確かに難しいことでもあります。

しかし、目の前の状況は常に変化するようなスタートアップのようなゲームでは、あるいは、考えるより実践の方がはるかに重要な何かを学習するということでは、走りながら考えることは、とても重要です。

実践によって、また解像度と目の前の状況が変わって、考える質が向上します。

それを何度も何度も、地道に繰り返していくしかないのだと、最近は思っています。

のめり込んでいる時。俯瞰している時。

ありきたりな映画の、ありきたりな展開から学べる事は、意外と多い。

映画のあらすじ:)

主人公は、仕事も人間関係も、周りから見ればとても良好で、羨ましがられている。
主人公は、自分のやっていることに毎日全力で取り組み、次第に周りが見えなくなっていきます。
そして、目の前のことに夢中で、ストレスを感じたり、イライラするようになって、人にそれを当ててしまったりして、人間関係などに支障をきたしてしまいます。
ある時、ふと主人公は、自分のやってきたことを振り返り、自分の人生について考えます。
そもそも何になりたかったのか、なぜ今、目の前のことに夢中になっているのか、など、そもそも論的なことを俯瞰した状態で考えるのです。
そして、本当に大事な事に気づき、それに向き合うのです。誰もが羨むような社会的評価や、仕事などを捨てて、修復作業を始める。

第2の人生を始める、というような話です。

そんな、展開のストーリーは、今思い返しただけでも3つ頭に浮かんだ。

時間をかければもっと出てくるだろう。

 

ただ、この手のフィクションにおいて、重要な教訓というのは、

「人生で本当に大切なものは、身近にある。」「自分を気にかけてくれる人と向き合う。」

ということだけではない、

もっと、別の重要な気づきを与えてくれるかもしれない。

つまり、私たちは、自分の中に2つのモードを持っているということです。

それは、「のめり込んでいる時」と「俯瞰している時」の2つ。

 

そして、この2つのモードは、人生のあらゆる場面で、常に使われているんだと思う。

そこで、重要なのは、自分の中に2つのモードがあることを意識して、意識的に切り替えることだと思う。

なぜなら、それぞれのモードには、長所と短所があるから。

 

何かに「のめり込んでいる時」というのは、目の前の興味や仕事に集中して、熱中して行動するものだ。

言い換えれば、それ以外に関して、集中できていない、注意や労力を割けていないということ。

何かを実行している、物事が前に進んでいるのは、やりがいや達成感が得られることでもある。

何より、スタートアップや、難関なプログラミングや資格の勉強など、実行がとても重要だ。

それを実行し、継続できるかどうかが、成功に大きく関わっている。

しかし、このモードの短所は、そもそも論を見失うことがある。

自分の目標や理由を忘れて、ただやっていることに夢中になってしまうことがある。

イライラしたり、チームや自分の周りの人とすれ違ってしまうこともある。

走ること、速度を高めて、できるだけ長い時間走る事に夢中になっていると、本来目指していた道から逸れている事に気づけない。

 

一方、「俯瞰している時」というのは、自分の行動や思考を客観的に観察し、評価できる。

例えば、振り返りをして計画を立てたり、問題を解決したり、自己分析をしたりするなど。

このモードのメリットは、自分の状況や目的に合った仮説を立てて、判断や選択ができることだ。

自分の強みや弱み、改善点や課題を把握することもできる。

このとき、私たちは、さまざまな視点や情報に基づいて、論理的に考えることができる。

また、新しいアイデアが思い浮かぶのもこういう時だ。

だから、自分がやっていることを一歩引いて見ることも、とても重要なんだ。

しかし、このモードの短所は、考えすぎて実行が疎かになることだ。

自分がやりたいことに対して、あれこれ悩んだり、迷ったりすることもある。

このとき、私たちは、考えすぎたり、迷ったり、不安になったりもする。

そうしていて、いつまで経っても実行に移せなくなる。

長い時間をかけて、考えればいいというものでもないみたい。

時間が経つほど、実行の伴わない、机上の空論になってしまうことも結構あるから。

 

なので、まず第1に、自分が今どちらのモードになっているかを認識する必要がある。

睡眠時間が足りていなくて、イライラしていて、毎日漠然とした不安に襲われているなら、それはのめり込んでいる。あるいは、のめり込みすぎている時だ。

そしたら、そのモードが自分のやりたいことに適しているかどうかを判断してみるといい。

もし、適していないと感じたら、意識的にモードを切り替えるんだ。

例えば、仕事や勉強で目の前のことにのめり込みすぎている時は、たまに一息ついて、自分の目標や行動の背景・目的を思い出すことができる。

それによって、早期にプロジェクトの軌道を修正したり、掛け違えた人間関係のボタンを外していくことができる。

逆に、アイデアや恋愛・人間関係で色々考えているときは、勇気を出して、実行に移すことが重要だ。

結局どれだけ考えても、わからないことはわからない。

色んなパターンを考えて、何手も先まで読むより、手を打たないといけない。

それくらい物事のタイミングは重要だし、実行したことで、また状況変わってから新しい手を考えないといけなくなる。

なので、止まって考えすぎるものよくない。

 

でも、それを意識的に行うのはとても難しい。

大抵、色々考えているときは、実行に移せない。考えるモードに入ってしまうんだ。

考えれば考えるほど、実行できなくなる。

一方、目の前のことに夢中になっているときは、そもそも実行が意味あるのか、形だけの実行をしていないかなど、立ち止まって分析・改善することも重要だ。

その上で、のめり込んだけど、そこでの経験や現在の状況を踏まえて、別の道に進むという判断ができるかも重要になる。

時間や労力、お金を費やしたけど、他の道に行く、という判断ができるかどうかだ。

撤退や損切りができずに、止まれなくなった状態は、個人でも会社でも、少なくない。

拗らせてしまうと、薄々頭で分かっていても、止まれなくなってしまうんだ。

 

なので、「のめり込んでいる時」と「俯瞰している時」の2つのモードがあることを意識して、意識的に切り替えるべきなんだ。

1.2週間に1日は、俯瞰して考え事をする。

そこで、しっかり自分自身の人生や仕事について分析・判断・意思決定をする。

そして、そのままのんびり物思いにふけて、アイデアを膨らませるんじゃなくて、しっかり実行にコミットする。

何より実行は大事だ。

でも、日々の実行で、何を信じて、何をどのように実行すればいいのか、を定期的に考えて改善しないといけないんだ。

それは、トランプや麻雀をプレイするように。

自分の番が来たら、手を打たないといけない。

2.3日も考えていられない。

そんなのお話にならないんだ。

とはいえ、実行だけじゃない。

ゲームのリズムを守りながらも、しっかり考えて、時間内で最善の手を見つけて実行するんだ。

もちろん、手を打った後に、ミスだと、もっと良い手があると気づくこともたくさんあるだろう。

でもそれでいい。それでこそゲームの醍醐味なんだと思う。

仕事も、人生も、スタートアップも同じ。

「のめり込んでいる時」と「俯瞰している時」の2つのモードがあることを意識して、意識的に切り替えるべきなんだと思う。

Githubで絵文字の仕様が変わった。コミットメッセージを変更する

詳細な時期はつかめていませんが、

2023年の後半ごろ(おそらく12月ごろ?)に、

Githubで絵文字のエスケープの仕様が変わったようです。

 

今までは、Githubのコミットメッセージで、

chore:gear:install A

のようなメッセージを入力すると、

chore⚙️install A

というふうに、絵文字に変換されていました。

 

しかし、2024年現在、それは少し変更さたようです。

具体的には、スペースが入っていないと、絵文字に変換されません。

chore :gear: install A

上記のように、:gear: の前後にスペースを入れないといけません。

 

なので、過去のコミットメッセージが、絵文字ではなく、chore:gear:install A

というふうに表示されていました。

 

mainブランチに、Git push後のコミットメッセージを変更する

なので、わざわざ過去のコミットに対して、半角スペースを入れていこうと思いました。

参考にしたのは、以下の記事です:

docs.github.com

 

qiita.com

 

上記2つの記事を参考に、示されている手順通りに実行したことで、

無事、すでにリモートリポジトリのmainブランチにpushされたコミットメッセージを変更することができます!

 

そこでの、ポイントとしては、

git  rebase -i --root

上記のコマンドを入力した後です。

gitで設定ファイルを開いて、変更を加える際などは、vi(Visual Editor)を使います。

これは慣れていないと、調べながらではないと、思うように変更を加えられません。

(なので、当記事にメモしておきます。)

 

Gitのviで使うコマンド

  • テキストの1文字削除は、「d」 + 「→」
  • もしくは、インサートモードで自由に編集できる
  • 「a または i」で、インサートモードに切り替わる
  • 変更の保存は、「:wq」

 

以下が参考になった。

prograshi.com

 

今日のメモ:

  • Githubで絵文字のエスケープの仕様が変わった
  • それに伴って、コミとメッセージを変更した
  • gitでよく使うviコマンドも、確認した

ブラックボックスの取り扱い方

ブラックボックス化について考えている開発者の写真

お金を入れてボタンを押せば、飲み物が出てくる装置が、自動販売機。

僕は、これの仕組みについてはよく知らないし、近いものを自作できる自信もない。

でも日常的に利用している。

 

プログラミングの学習も、最初は内部の仕組みまで理解しないで、利用できれば良いんだと思う。

 

そして、何度も利用するうちに、一般的な方法以外にも、いろんな柔軟な使い方ができるようになってくる。

何度も利用していれば、少しずつ内部を理解していくんだ。

そして、それに近いものを自作できるようになったりもする。

だから、第1に、利用できるようになる事が大切だ。

それは同時に、ブラックボックスの扱いに慣れる事でもある。

 

自分と同じように文系出身の人は、これが苦手の人が多い印象だ。

「なぜ」は知らなくてよくて、「何」ができるのかを知るべきなんだ。

まずは、そういうものだと思って進むことが重要になる。

ブラックボックスの中身を理解していく事は、段階的でいいんだ。

 

ん、使えるだけじゃ不十分だって? 理解しなくていいというのは極論だって?

それも一理ある。

でもこれは、物事に対する学習を深めていくプロセスの話だ。

それには、まず一般的な方法で使えるようにする事が、最初のステップであると強調したい。

 

そこから、次第に使用上の注意(ほとんどの場合、公式ドキュメントや、Github上のイシューでのやり取り)を読むことも、覚える必要がある。

特に、認証系や決算系などは影響が重大だ。

それは、あなたの体の中に入れる薬や注射と同じように、注意・確認すべきだ。

 

ここで知っておくべきは、素晴らしい開発者は、抽象化が上手いということだ。

あなたが箱の中の仕組みについて一切知らなくても、簡単に使いこなせるように機能を提供する。

それがブラックボックスであり、適切な抽象化なんだ。

 

メモ:

最初は理解しなくていい、と言うものの、

チュートリアルやドキュメントで示されている、一般的な方法で利用できるようになった状態は、皮肉にも「完全に理解した」と言われている。

「理解するためのガイド」

直感的には、物事を理解するには、読解(解像度を高めていくこと)が重要だと思いがちだけど、実は抽象化が重要だと最近気づいた。

なぜなら、抽象化は、次回以降見つけやすく、使いやすく、想起しやすくする作業だから。

 

そもそも、「理解する」という言葉は、「答えに辿り着いた」というだけでなく、「それにいつでもたどり着ける状態になる」ことを指す。

だから、読解して答えに辿りつくというだけではまだ不十分で、また同じ思考の経路を辿ってその答えを得られるようになる必要がある。

 

それは、モノを探すことと同じだ。

押し入れや机の中と同じで、自分が探していたものを見つけることも重要だが、そのまま放り出しておいたら、しばらく経ったらまたどこに行ったかわからなくなる。

頭の中で、読解して理解したつもりでも、人は忘れるので、次また必要になった時に見つけられなかったりする。

その時になって、理解した気になっていただけだったということに気づく。

つまり抽象化していないと、理解した状態にはならないんだ。

だから、また押し入れの中の大捜索から、つまり読解から始めないといけなくなる。

 

読解は、答えを見つけていく作業と言える。

押し入れの中で、「探し物」を見つけた!、というのは、読解であって理解ではない。

それを他のものと区別できる箱に入れて、フタに「タイトル」のラベルを貼り、次回以降探しやすい場所に置くことが理解するということなんだ。

 

そしてそれが抽象化であり、読解したことを自分の言葉で「まとめる」ということになる。

読解して、抽象化することを合わせて「理解する」ということなんだ。

 

「読み解いた」というのは事実であって、

「理解した」というのは状態だ。

いつでもその思考を辿って、その答えを得られる状態。

なので、理解を確認するには、何度もそこに辿り着けないといけない。

人に目的地までの案内を、説明できないといけない。

 

そこまで読解を伴わない、単純な手続きであれば、わざわざ抽象化する必要はないんだと思う。

でも、少しでも難解な概念などを理解しようと思ったら、抽象化して次回以降見つけやすく、使いやすく、想起しやすくする作業が必要なんだ。

なんだか難しいな。

メモ:Next.js14.1のshallow routingについて

Next.jsの approuter における、shallow routing について、
特に良かった記事と、そこで得られた学びのメモです。

 

 

現状NextjsのApp Routerでshallow routingは対応していない

pagesではできる:

nextjs-ja-translation-docs.vercel.app

 

ちなみに、shallow routingとは、現在表示しているページをリロード、再レンダリングせずにURLのみを変更すること。

 

これに関しては、以下のイシューでも議論されています

github.com

 

これに関して、次の記事に解決策が掲載されていた

「window.history.pushState()」を使用する: 

medium.com

 

 

「window.history.pushState()」とは?

MDNリファレンス:

developer.mozilla.org

 

以下の記事によると、

履歴に指定したURLを追加するってこと。指定したURLへの再読み込みは発生しないので、読み込みの処理は自分で行う。

qiita.com

 

また、これに関しては、この記事でも解説されていた:

francoisbest.com

 

得られた学び

  • Next.jsは、バージョン14.1にて、ネイティブのHistory APIの使用をサポートした。
  • なので、App Routerでshallow routingを実現するには、「window.history.pushState()」を使用することができる
  • これは、ページをリロード、再レンダリングせずにURLのみを変更することができるネイティブのAPI。