この半年やったこと、継続していること
あまりにも同じことをしていたので「せっかくなので」と思って筆を執ることにする。
@syohex さん も @studio3104 さん も僕もだいたい同年代の人たちが同年代の sugyan や色々な方の影響を受けて同じことをしているというのはシンパシーを感じますね。
僕は今の仕事はフロントエンドエンジニアであることが多いのですが、「知識に垣根は作らない」をモットーにしているので、色々半年間挑戦してみました。
Leetcode
この半年で545問解きました。
sugyan が leetcode に取り組んでいたのも見てたのですが、僕の場合は自分の会社の面接でコード面接をやることがあり、コード面接の時に自分が知らないような事を問題として出すのは恥ずかしいな、という思いから勉強し始めたら楽しくてハマってしまったという経緯です。(もちろん同世代の sugyan がやれていることにも憧れはありました)
あとコロナ禍だったりでリモートになり、仕事と家の間の行ったり来たりが減ったことで、割と融通がきくようになったのでここは一つと思って競技プログラミングの勉強がてら、習慣として leetcode を毎日実施しています。
https://leetcode.com/yosuke-furukawa/
6月くらいから半年で leetcode 500問以上解いた。ただ『問題を解く』って事に従事した半年だった。未だに動的計画法とかが苦手だけど、解けるようになってきたのは良かった。
— Yosuke Furukawa (@yosuke_furukawa) December 11, 2020
Advent Of Code も今の所全部解けてるし、そろそろ「解く」に加えて「新しい言語で」という挑戦を入れてみてもいいかも。 pic.twitter.com/doS0PEDzYd
毎日 Leetcode を書いているおかげか、Easy, Medium の問題は全てではないですがなんとか解けます。Hard もそこまで難しい問題ではないときがあるので解けるときは解いてます。
ちなみにずっと JavaScript で解いてるのですが、こういう競技プログラミングには全く向きませんね。 Java とかであれば LinkedList が使えたり、 Heap の実装が既にあったりするのですが、 JS の場合はそれを自作するところからだったりします。
標準ライブラリを仕様に入れるという構想があるようなので、コレクションクラスの充実を望みます。
書き始めてから半年しか経過してないのでなんとも言えませんが、レビュー等での指摘で多少賢いやり方を教えられることが増えたようにも思うのと、 OSS でも基礎的なアルゴリズムを使ったようなものは多少すばやく書けるようになった気がします。
後最近は Advent of Code も毎日出るんで解いてます。
個人的に好きな leetcode の問題
LRU Cache ですね。
一度ライブラリで自作した時に JavaScript で実装するとこんなに面倒なのか、、、と思ったのですが、 leetcode でも出てきて「おおっ」となりました。ちなみに OSS で自分の自作した LRU Cache を使っているのですが、一時的な API の Cache として保持する時に使っています。有用だし、高速化されるし、作ってみると面白いと思います。
他には数独 Solver も好きです。
Backtrackで解ける問題昔は苦手だったのですが Leetcode を経て楽しく解けるようになりました。
英語
DMM 英会話くらいしかやってませんが、半年で 4900 分間レッスンを受けました。
こっちは物理的にも時間的にも制約があるのと相性の良い先生とのレッスンを取ろうとすると相手の都合もあったりで、毎日コンスタントにやるのは難しいのですが、大体週5-6日は英語で50分間はしゃべっています。
これもコロナ禍の空き時間を使った形ですね。英語を再勉強するというきっかけになりました。あまり発音も良くないので、発音を矯正しようと思って本で勉強したりしています。
あと今年は海外での登壇予定があったので、そのためにも気合を入れてやってました。
これまでもそれなりに話せたといえば話せたのですが、発音を気をつけてやってみたら agektmr さんからも褒められて嬉しかったです。
でも @yosuke_furukawa さんの英語が前回聞いた時より格段にネイティブぽくなっててちょっと驚きました
— Eiji Kitamura / えーじ (@agektmr) October 15, 2020
後最近は Youtuber の Daijiro さんの動画を笑いながら見てます。
数学
あまりちゃんとやれてないですが、数学も解いてます。 Youtube で数学の問題を必ず一日一問解説してる 鈴木貫太郎さんの動画があるので、それを見てます。
大学のノートみたいなのを買って朝の30分だけ解いたりしてます。朝起きた時に問題を見て、解いてみて、あってるか動画で見て、動画に自分がどうやって解答したかを書いてます。完全に知識が鈍ってるのでエレガントな方法をスッと思いつくのは苦手ですが。
数学ができると leetcode の問題でも数学の知識を問う問題があって解けるようになったりと色々付加的な効果がありました。
鈴木貫太郎先生が教えてくれる整数問題はパズルのようで楽しいです。ただやってると高校の時にもっと勉強しておけばよかったな、、、と思うことが多いですね。
競技プログラミングや英語と違い、数学は特に明確な目的があって始めたわけじゃなく、趣味みたいな感じです。
これから
こういう活動を会社の仕事や家の事があるので柔軟な時間にちょこちょことやってます。多分これからも同じことを続けていきたいと思いつつ、ある程度切りの良いところを見つけたら別な挑戦もしてみるかもしれません。新しいプログラミング言語を身につけるとか低レイヤをやってみるとか、ずっと漠然とした憧れがありながらもできていないので、コロナ禍のまだリモートワークを中心とした生活の中で会社の仕事とのバランスを取りながらやってみようかと思ってます。
(ちなみに、この記事すごくいいですよね。やってみたくなります。)