paiza で問題を解いていた頃、私は何も作っていませんでした。
入力が来て、出力を返す。 画面もなければ、保存する場所もありません。 それまで思い描いていたプログラミングとは、だいぶ違う時間でした。
同じ頃、卒業論文で形態素解析を扱っていて、Sudachi で辞書を作る必要がありました。 文を単語に分けて、数えて、結果を書き出します。 必死だったので、paiza で覚えたことを繋げて動かすしかありませんでした。
このときの手応えが、それまでといちばん違いました。
何が違ったのか#
あとから理由を考えると、二つあります。
一つは、途中の結果が全部見えたことです。 文を入れると、単語に分かれた形がそのまま出てきます。 数えれば数が出ます。 自分が書いた一行が何をしたのかを、目で確かめられました。
もう一つは、paiza でやっていたことの組み合わせで足りたことです。 新しく覚えた技術はほとんどありません。 繰り返して、場合で分けて、まとめて名前を付ける。 それを順番に繋げただけで、一つの仕事が終わりました。
必死だったから進んだ、という説明もできます。 ただ、必死さだけならスクールに通っていた頃にもありました。 違ったのは、繋げる部品が手元にあったかどうかです。
この段でやること#
いま学び直すとしたら、この段には二つを置きます。
一つめは、入力と出力だけの小さな問題を二十問から三十問ほど解くことです。 paiza でも AtCoder でも構いません。 同じ処理を何度も書いて面倒になったところで繰り返しが要り、条件で分かれたところで場合分けが要ります。 困ったあとに構文が来る順番を、自分で作れます。
二つめは、値の持ち方を扱うことです。 JSON を読んで、書きます。 順番で取り出す持ち方と、名前で取り出す持ち方の両方を書いてみます。
期間としては、合わせて一ヶ月ほどを見ています。
この段を抜けた判定#
区切りの目安を一つだけ置くとしたら、これにします。
同じデータを二通りの持ち方で書けて、どちらがどんなときに楽かを自分の言葉で言えること。
たとえば、名前と点数の組をいくつか持ちたいとします。 名前の一覧と点数の一覧を別々に持つ形でも書けますし、名前をつけた組をまとめて持つ形でも書けます。 前者は順番に処理するときに素直で、後者は名前で引くときに素直です。
この比較ができるようになると、次の段から先で立てる問いの質が変わります。 選べるものが二つあるところにしか、どちらにするかという問いは生まれません。
画面が出ないこと#
正直に書くと、この段はいちばん地味です。
三週間ほど、見た目のあるものは何も出てきません。 学び始めた実感がほしい人には、たぶんつらい時間になります。
私自身、この時期に手応えを感じたのは卒論のほうでした。 自分が本当に必要としている作業に繋がっていたからだと思います。 paiza だけを黙々と解く形でここを抜けられたかというと、あまり自信がありません。
もし途中で止まりそうなら、練習問題ではなく、自分がいま数えたいものを数えてみてください。 私の場合はそれが論文のためのデータでした。