Noratetsu Lab

動じないために。

2022年3月

2022/03/07

JavaScript日誌:一歩進んだら十回足踏みせよ

 今年に入ってからJavaScriptの勉強をしている。1月27日からなので、一ヶ月半近くになったようだ。


 少し長くなったので今回の内容を予め示しておくと、①JavaScriptを勉強し始めた理由四つ、②勉強して得たこと、③勉強を進められた理由二つ(教材と取り組み方)、という構成になっている。

 仕事に必要なわけでもなく、将来仕事にしたいわけでもなく、ただ趣味として勉強しているのだが、今更勉強しだしたのにはいくつか理由はある。
 まず、これまでにHTMLとCSSの勉強をしており、あとJavaScriptを覚えればWebページに必要な知識が揃うはずだというのがひとつ。CSSを覚えてよく使うツールやよく訪問するサイトの見た目を整えられるだけでデジタルライフは随分豊かになると感じているが、ここまで来たらもう一歩進みたい。
 次に、以前HTML日誌:自分のためだけにHTMLを書くで書いたが、ローカルのHTMLファイルにwebブックマーク置き場を作っていて、そのデータをスマートに管理したいという具体的な望みがあったことが理由として大きい。一応ブックマークレットを用意して、コピペすれば適切なHTMLタグがついた状態で簡単に貼り付けられるようにしてはいたが、並べ替えたりするとなると手作業になるので非常に大変だった。ごちゃごちゃHTMLタグがついた状態だと何がどこにあるのかも見づらい。VSCodeなどでは構造を踏まえてアウトラインを表示できるとはいえ、とても操作がしやすいとは言えない。なので、データ自体はCSVなど別の形式で作っておき、自動でHTMLタグを生成して表示できるようにしたかった。そのためにはJavaScriptを覚えればよいのだということは予め判っていた。
 また、Scrapboxを使っていると他の人が作ったUserScriptを目にすることがよくある。便利なものは借りていくつか導入している。しかし、一体どの文で何がなされているのかさっぱりわからないのでカスタマイズが全くできない。何をなし得て何が無理なのかも想像がつかない。別にScrapboxを使う上でUserScriptをマスターする必要などないが、わけがわからないという状態でいるとどうにも気になって、そのうち理解できるようになれたらいいなと思っていた。
 最後の理由として、プログラミングに対して抱いていたコンプレックスをどこかで粉砕したかったということがある。かなり前にVBScriptとVBAを少し勉強したのだが、全くわからない状態から雰囲気はわかるというところまで(要するにたった一歩)は進んだものの、結局コピペの組み合わせが辛うじてできる程度で挫折した。今にして思えば単に勉強の方法が悪かっただけのことと思うが、当時は「何を読んでも細かいところで何言っているかわからない、他の人はこれできっとわかるのに」というような気持ちになって、楽しさ補正が全くかからない状態のまま、折れてしまうまで辛抱するばかりだった。「結局よくわからなかったなあ」という失敗体験をずるずる引きずってここまで生きてきたので、できることならどうにかしてスッキリ解消してしまいたかった。

 自分自身の備忘録のために書いているものでもあるので長くなったが、そういうわけでJavaScriptを勉強してみようと思い立って始めた。今年一年の間になにか小さいアプリケーションみたいなものが作れたらいいなということは漠然と思い描いていた。
 結論から言うと一ヶ月経ったあたりで自作アウトライナーができあがったので、今年一年の間にというふんわりした目標は開始ひと月の二月中に達成した。
 知っているメソッドはまだほんの一部で、自由にプログラムを作れるようになったとはとても言えないが、それでもおおよその文法はわかるようになった。ScrapboxのUserScriptを見ても、何が変数名で何がメソッドで何が関数かくらいはひと目で判別できるようになったので、読解できそうな希望を感じられるようになった。ちんぷんかんぷんだという時のなんとも言えない疎外感からは解放されたようである。Pythonなど他のプログラミング言語のことはまだ何もわからないが、まあ頑張ればなんとかなるだろうと楽観的に考えられるようになった。
 実際にできるようになったことの多さよりも、「できない気がする」と感じていた領域が無闇に果てしなかったのがある程度狭められたことが、自分の中では大きな意義に感じられる。

 自分としては相当な速度で習得したのだが、波に乗れたのには要因がふたつあるように思う。
 まず第一に、良い教材との出会いがあった。
 以前CSSの勉強をした時にJavaScriptも載っている分厚い辞典のようなものを手にしたことがあったが、当時はそれを読んでも全く身につかなかった。というか、やってみようという気にならなかった。知識は美しく整理されているし、調べたいことがはっきりしているならばすぐにその情報にアクセスできるであろう本だったが、ゼロから勉強するには向いていなかった。一応初学者向けのパートはあったものの、「理解しやすい日本語で書いてある」ということと「理解が進む形式である」ということは全然違うらしいと悟って本を閉じた。教材の選択を誤ったのである。その時はCSSが解ればよかったのでそれ以上JavaScriptには挑まなかったが、またしても小さな失敗体験を積む羽目になったのだった。
 その後若干の(本当に若干の)調査をした結果、どうせならTypeScriptというものを知った方が良いのではないかと思い、TypeScriptを通じてJavaScriptを学べる何かがないかと簡単に検索をかけてみた。そしてさっと見つけたのがTypeScriptで学ぶJavaScript入門 - @ITというページだった。2014年の記事なので最新の情報ではないが(実行環境であるPlayGroundのバージョンが違うことによる影響があるような気がする)、書いてあるコードそのものはそのまま使えるし今のところ内容に不都合は感じていない(後日追記:2015年にJavaScriptの大きな仕様変更があり(ES2015(ES6))、そこで追加された機能が現在ごく当たり前に使われているため、より新しい情報を見た時に戸惑うことがしばしばある。考え方をインストールするものとしてはとても良い記事なので、コードそのものよりイメージを学習するものとしておすすめしたい。)
 たまたま見つけたこのページの書き方がズブの素人に丁寧に寄り添ってくれていたことで、至極滑らかにスタートを切ることができた。細かく説明してくれていることも重要なポイントだが、軽快かつ洞察力をひしひしと感じる語り口が初心者には大変ありがたかった。如何にわかりやすいと言えどさすがにさらっと一読しただけでたちどころに習得できるほど甘くはないが、何回か読み直してみようと思える文章と出会えたことにより、立ち止まったり前に戻ったりしてきちんと勉強することが苦行にならずに済んだ。他にも優れた教材は世の中に色々あると思うが、偶然苦労なく良いものと巡り合ったので基礎を学ぶにあたっては他の教材を探すことはしなかった。
 世の中には、その説明で解るならその説明がなくても解るのではと思ってしまう解説文がちらほらあるが、無理してそういったものと格闘する意味はあまりなさそうである。

 もうひとつの要因は、とにかく応用して反復したことである。
 急に当たり前感満載のうんざりする話になってしまうようだが、何も練習問題をひたすら解けという話をしたいのではない。例えば「alert("Hello World");」と書いて表示させてみようという話があった時に、じゃあ次は「alert("本日は晴天なり");」と書いて表示してみようと考える、というようなことだ。
 得られる結果は予想通りのものであって、それ以外の結果にはなりようがないのだが、それでも「(教科書の内容そのままではなく)自分で書いた通りになったぞ」という実感をその都度得るのは私にとって相当に大きな意味があった。変数を覚えたら今度は「var a = "のらてつ"; alert("私は"+a+"です");」と書いて、おおちゃんと表示されたぞと思う。掛け算を覚えたら掛け算の結果を表示する。console.logを覚えたら同じことをconsole.logでやる。わかりきっていても何回もやる。その度に「おお、本当にそうなった」と思う。そうなるのは当たり前だとしても「おお」と思う。絶対に、例をそのまま打って動かしただけで次に進んでしまわない。一歩進んだらその場で十回足踏みする。(気持ちの話であって、きっちり十パターンやるべしという話ではない。)
 用意された練習問題というのは「やれ」と言われているようで面倒になってくるが、「こうしたらこうなるのかな?」と自分で予想してやってみるのは何も苦にならなかった。なので今知っていることで何か他のことはできないかと考えてみる。足し算をやったら引き算をやる。掛け算をやったら割り算をやる。変数を覚えたらわざわざ変数の組み合わせで表現する。配列を覚えたら先にSwitch文の項で出たおみくじプログラムを配列を使って再現してみる。オブジェクトを覚えたら地方をキーとして値に都道府県を入れてみたりする。そんな感じで本返し縫いのようにその都度戻って補強していったことで、結果的に「既にやったことは大体定着している」という状態でじわじわ次に進むことができた。
 といっても、定着させるために反復していたというよりは、「もしかしてこうしたらこうなるのでは?」という予想が浮かんでしまい、それを実践して「ほら、やっぱり!」と思ってひとりで満足しているうちになんとなく定着したというのが真実である。なおfor文だけは苦手意識が強くあったので意識的に繰り返した。そしてコールバック関数は繰り返しが足りずにまだよくわかっていないのだが、応用例を自分で思いつくことがあまりできなかったためだ。
 プログラミングに才能のある人は一読しただけでスイスイ先に進めるのかもしれないが、どちらかというとただ楽しいからといった理由で「自然と反復した」というのが上達の鍵になった人が多いのかもしれない。学校の勉強のように義務として練習問題で反復させられるのは辛い。気がつけば反復していたという状態で勉強できたらそれが良いのだろうと思う。

 
 チャレンジしているもの→自作ツール - Noratetsu's Room(のらてつ研究所)
 

2022/03/05

ブログの書き方ド下手問題⑧~文章にするの面倒くさい問題~

 久々の「ブログの書き方ド下手問題」更新。
 これまではブログに書いて発表するにあたっての精神的な枷について考えてきた。今回は少し方向転換をして「文章にするの面倒くさい問題」に挑むことにする。


 これは今まさに自分が困っているから扱うことなのだが、書けそうなことを実際に書いていくというのが大変に面倒くさい。「これについて記事一本くらいにはなるな」と思うものが溜まる一方で、結局全然書いていない状態が続いている。この一ヶ月ほどはJavaScriptいじりに熱中していたこともあるが、そちらに熱中しっぱなしでブログ更新を挟まないでいたのはつまるところ面倒くささに負けたからである。
 前回までは「これを書いていいのだろうか」「読んでもらうに足る文章になっているのだろうか」といった迷いに対する解を探し、その点については既に解決している。今抱えているものに関してそれを書いていいという許しは自分に対して出しているので、「こんなことを書いてもな……」という足枷はもうない。しかし書いていないのである。形容するとすれば「やる気が出ない」という状態だが、単に気分的な問題ではないような気がするのでもう少し考えてみることにする。

 「これについて記事一本くらいにはなるな」と思うものがいくつかリストにあると、書くものがないという不安を退けられるので大分安心する。いつでも何かを書けるかのようである。
 しかし実際には必ずしもそういう状態にはない。書けるはずなのになんとなく書けないんだよなあということになる。なんとなく書けないのではなく明確な理由があって書けないのだと思うが、それが解決される瞬間に自覚的でないことも多いので、結局なんとなく書けるようになって「なんとなく書けなかった」という認識で終わってしまう。もちろん、そんな停滞とは無縁な人もいるだろうし、そういう人は無意識下で有効な手を打てているのだろう。
 なんとなく書けないでいるうちにリストには次々とネタが溜まっていき、前に追加したネタは相対的に古いものになっていく。するともはや臨場感を失って書くことができないという気持ちになる。そういう気持ちになるだけであって実際にそうなのかは疑問の余地があるわけだが(もし本当にそうなら自伝などはとても書いていられないのではなかろうか)、ともかくそういう気持ちになって熱意が削がれがちである。
 この「なんとなく書けない」とは何であろうか。

 そもそも考えを文章に起こすのは面倒くさいものである、ということもひとつの真実ではある。言葉になっていないものに対して、自分の頭の中にある語彙を次々引っ張り出して適切なものを選択していかなくてはならない。文章にするからには論理の関係や全体の構成も踏まえる必要がある。抑えなくてはならないポイントがいくつもあり、それら全てがすんなりいくことはそう多くはない。一方で、波に乗れば何の苦労もなく数千字数万字とさらさら書いていける場合があるのも事実だ。
 まず文章になるというのはどういうことかというところから確認する必要があるかもしれない。全ての種類の文章について語るのは難しいので、とりあえず私自身が悩みから解放されるために、私が書く題材としている「私が得た気づき」をどう書けばいいかということに絞ることにする。
 このことについては既にブログの書き方ド下手問題②~自己の言語化を意味あるものにするには~で記しているが、気づきを書きたいのであればまず経緯を明らかにする必要があるというのが最も肝要と思う部分である。何かが不十分であった過去という経緯があり、何かを気づいたり獲得したりすることによって変化し、より良い状態に至ったという流れが文章の骨格となる。逆に言えば、そういう骨格が見出された時、そのことについて話さずにはいられなくなるとも言える。巷にはそういう話が無尽蔵に溢れている。
 次々と文章が生まれて流水のように書き連ねていられる時というのは、書けば書くほど新たに経緯と変化を発見している状態なのではないかと思う。書き始める前には気づいてもいなかったことに、書いているうちに思い至る。するとここに重要な変化があったのだとわかって、そのことを書かずにいられなくなる。そうして書くと再び別の変化に気づいて、そのことを書き足していく。そうやって文章が文章を生んでいく。

 では、「これについて記事一本くらいにはなるな」と思いながら「なんとなく書けない」というまま停滞している時はどうしてそうなっていかないのか。
 典型的な失敗例としては、「これについて」の「これ」が名詞であるパターンだろう。「これについて書ける」と思った瞬間は何かの変化がそこにあったからそう思ったはずだが、それがメモした時点で反映されず、ただ「ブログについて」とか「○○法について」とかいった形で書き留められ、いざ書こうとした時にそこにあったはずの変化を鮮やかに思い描けない。頑張れば思い出せるかもしれないが、頑張るのが億劫で後回しになる。時間が経つとそれを思い出すためには認知資源を大量に消費することになってしまう。
 「これ」のメモが不十分であったために後から文章にできなくなった、ということ自体は恐らく多くの人が気づくであろう。「何のことだったっけ」と思うからだ。しかし、何のことかがわかりさえすればすらすら書けるというわけではないのである。名詞としての解像度を上げてメモしておいても、それを文章に構成するのが大変であれば結局書かれないままになる。メモした瞬間にあった鮮烈な感動はいつの間にか褪せて失われている。
 「これ」に感動したから何かを書こうと思ったという時、そこで意識されているのは「これ」そのもの、またはそれに対する感動だが、文章にするのであれば文章としての未来をそこで設定しておく必要があるのだろう。あまりにも自明であれば省略しても問題ないが、常に省略していると、気づいた時には既に風化して取り返しがつかなくなっているという事態に直面する。一手間かけて、「これ」と出会う前と後の状態を書いておく必要がある。

 つまり、メモするにあたって「これ」を名詞ではなく状態の変化として書き留めておくと後から文章にしやすくなるのではないか。しばしばブログ記事のタイトルに「○○したら△△になった」という形の表現が見られるが、それは要点としてとてもよくできていて、ただ読者を惹きつける手法としてだけではなく、後日文章を書く自分を惹きつける言い回しとしてメモに使うと有効に思える。変化を引き起こした事物そのものではなく自分自身の体験・体感にフォーカスしたメモを作るのである。
 既に名詞でメモしてあるものについては、変化を自分に問うテンプレートを作ると良いだろう。「Before」「After」の二点を問うだけでも随分違う。新たな概念を思いついたという場合でも、その概念がない状態とある状態とで比較すればその概念が如何に重要かを自分で実感できるだろうし、そうすればモチベーションの強化にもなる。文章の組み立ても自ずと明らかになっていくかもしれない。

 
 余談だが、今回の記事は実は「過ぎたことは書きにくい」というのを仮タイトルとしてスタートした。しかし考えていくと「過ぎたこと」なのが原因ではないような気がして、捏ねているうちにこういう展開になった。練ってみるまでわからないものである。
 

管理人

アイコン画像

のらてつ Noratetsu

キーワード

このブログを検索

検索

ブログ アーカイブ

2025
2024
2023
2022
2021