2020年振返り — プログラマー1年生
そろそろ2020年が終わるので、今年1年を振り返ることにする。
- プログラミングする仕事に転職した
- プログラムは難しい
- 前にも増して引きこもりがちで将来について考える時間が多かった
という感じだった。
年始
2019年末に5年働いた会社を辞め、しばらくは引きこもってゲームしたり本読んだり一人旅したりしていた。この頃は新型コロナウィルス感染症があれほど世界中で広がるとは思ってなかった。
年末年始は実家でだらだらしながら Fastly の Form S-1 を読んでいた。
ついでに2019年に上場した Datadog とか PagerDuty とかも読んだけど途中でまとめるのが面倒くさくなって投げてしまった。
プログラムの仕事をしようと思って「初めての JavaScript」という本を全部読み、JavaScript を何とか読めるようになった。後から知ったのだが、インターネットで無料で読める JavaScript Primer とか JavaScript Promise の本とかの内容がめちゃくちゃ充実しているので初心者はここから始めたほうがいいかもしれない。
はじめは JavaScript の Promise の概念が全く理解できず undefined を出しまくったので、こういう教材が無かったら何も出来なかったと思う。
2月 ~ 3月
2月はプログラミングスクール 42 Tokyo の Piscine と呼ばれる入学試験のようなものを受けていた。
42 Tokyo は参加者の中でも賛否あるのだが、この記事で書いた通り自分はなかなか面白い場所だと思っている。
後日談として、自分は Piscine に合格したが本科はすぐ辞めてしまった。理由はカリキュラムに不満があったというより、普通に仕事でプログラム書けばお金をもらいながら上達できるのでそれでよいのでは?と思ったからだった。また、コロナ影響があって生徒同士が集まってワイワイ話しながら進むみたいなのがなくなったのも大きい(Piscine を4週間やって、それはすごく良いところだと思ってたので)。
Piscine が終わった後にデータ構造やアルゴリズムの勉強になるかと思い AtCoder を始めた。AtCoder を知ったきっかけはきりみんちゃんさんの本を買ったことだった(これ)。
問題が解けなさ過ぎて半年くらいで心が折れたので休憩中だが、来年の3月くらいから復帰しようと考えている。19回参加して最高レートは324(灰色)なのでまだまだ未熟者だ。
4月 ~ 6月
プログラムを書く仕事を手に入れた…といっても専業ではない。
吉祥寺にあるビアバーで経理や労務をやったりサーバー(ビールを注ぐアレだ)を分解して洗浄する仕事をしながら、そこのオーナーにプログラミングを教えてもらうことになった。初対面の人にこのコンテキストを説明するのがとても難しいので、何か聞かれたらサーバーエンジニアをやっていると答えることにした。
ビアバーの売上を POS レジの API から取得し Slack に通知するような簡単な bot を作って Lambda で動かしたり、 IPA (ビールじゃない方)の資料を見ながら自分のアプリケーションに脆弱性を追加したりその対策をしたり、徳丸浩のウェブセキュリティ講座を眺めたりしていた。
あとは React と Next.js のチュートリアルを一通りやって、それらでできた Web サイトをいじったり機能を追加したりしていた気がする。React と Next.js はチュートリアルやドキュメントがとても充実していて初めての人でもすぐに動くものが作れる。
この時期はコロナでいろいろ大変だった。
7月 ~ 8月
TypeScript/React/Node.js でできた Web アプリケーションを触りながら勉強していた。例えばこういうやつとか。
実際に使われているソフトウェアのソースコードを見ながら、どこが何を呼び出していてここを変えるとこうなるみたいなのが何となく分かってきた。
プログラム以外の仕事もしていた。働き始めてからはずっと経理をやってきたのだが、実は転職してから初めてまともに freee を触った。多少の慣れが必要だが、取引と決済を中心に仕訳をつくるデータモデルは良くできていると感心した(苦手な人がいるのは理解できる)。
9月 ~ 12月
GraphQL を使って API を作ったりしていた(この辺の話は半年後くらいに書きたい)。Clean Architecture を読んで、現実世界のビジネスルールから Entity と UseCase を導いて UseCase から ORM 等のデータを操作する関数を呼び出し、 API は GraphQL の resolver からそれらの UseCase を呼び出すみたいなのを簡単な機能を題材にしながら勉強したり。
他には作るシステムの仕様を考えたり PlantUML で UML を書いたりしていた。 Real World PlantUML が超便利でほとんどここからコピペして修正していくだけで簡単に図が書けてよい。
また、趣味で Rust を触り始めて The Rust Programming Language (日本語版)を一通りやった。個人的には Result<T, E> 型とパターンマッチが便利だなと思った。普段は TypeScript しかやっていないので、趣味言語として使い込んでいきたい。AtCoder で使ってみようかな。
今年1年プログラミングに結構時間を使ったが、まだまだ未熟で分からないことがたくさん出てくる。むしろ、全くの素人だった去年よりも分からないことが増えたかもしれない。
年末
今年のはじめにはちょっとした収入を期待して個人開発とかもやろうと思ってたのだが、そんなレベルに至らなかった。
今年1年で少しはプログラミング上達したと思うので、年末年始の時間がたっぷり時間があるときに着手してみたい。
いろいろあって技術系のイベントとかには一切行かなかった。
会計の話
私が仕事でプログラミングを学ぼうと思った理由は、会計の仕事をやっていたときに近い将来そういう能力が役に立つだろうなと見込んだという経緯があった。
しかし触れないと忘れていくし興味もある分野でもあるので、会計や税務で気になった題材を調べるみたいなのをたまにやっていた。
これからもやってくと思う。
不確実な未来の仕事について
将来の仕事を考えるのは難しい。
私は仕事に対するやる気があまりなく(できれば働きたくない)、場当たり的な意思決定を繰り返して職を転々としてきた。
その中で会計の仕事をしばらく離れてプログラミングを仕事にしようと思ったのは、30代以降の人生で長期的に考えてそれが自分が楽をする(長時間働かずにすむ)最善の道だと考えたからだが、実際に私の思い通り事が進むとは限らない。
今年1年プログラミングをやってみて、自分が長期的に楽をするために期待する能力を自分が期待する期間内で獲得できるとは限らないという印象を抱いた。というのも、プログラミングはやってもやっても分からないことが増えていくからだ。
私の状況などお構いなしに現実世界では様々な会社や個人が日々付加価値を生み出していて、その中には私自身の仕事を陳腐化してしまう可能性があるものもある。
それに対する答えとしては、自分も手を動かしてソフトウェアを書き続けるしか無い。引きこもっていると将来が不安になることもあるが結局自分が今やるべきことはこれしかないと思った年末であった。偉そうなことを言う前にプログラム書けよ、と。
来年も適度にがんばろう。