2020年、自分がどういったテーマについてどれだけインプット, アウトプットしたのかを振り返っていく。
2020年で読んだ本
今年は以下の本を読んだ。 他にも何冊か読んだが、記憶にあまり残っていないので割愛。
リファクタリング 既存のコードを安全に改善する(第2版) | Ohmsha
ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本(成瀬 允宣)|翔泳社の本
[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識:書籍案内|技術評論社
O'Reilly Japan - コンピュータシステムの理論と実装
18歳の著作権入門 / 福井 健策【著】 - 紀伊國屋書店ウェブストア|オンライン書店|本、雑誌の通販、電子書籍ストア
【ダウンロード版】DNSをはじめよう ~基礎からトラブルシューティングまで~ 改訂第2版 - mochikoAsTech - BOOTH
【書籍版】AWSをはじめよう 改訂第2版 ~AWSによる環境構築を1から10まで~ - mochikoAsTech - BOOTH
【電子版】雰囲気でOAuth2.0を使っているエンジニアがOAuth2.0を整理して、手を動かしながら学べる本 - Auth屋 - BOOTH
Release It!, 2nd Edition [Book]
2020年に読んだ本の中で一番自分の勉強になった本は間違いなく、「コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方」であるといえる。
この本ではNANDゲートが用意された状態から、HDLを使ってエミュレータ上にANDやORといった基本論理回路を設計するところから始まり、加算器, レジスタ, CPUなどの論理回路を設計していく。また後半はJackというプログラミング言語のコンパイラ(VM変換器, アセンブラ)を好きな言語で実装していく。 章ごとにやることが決まっており、章の解説を読み、その章の終わりに与えられる課題に対して、自分で手を動かしながら学ぶことができる。 自分は、前職を退職して、現職に転職するまでの1ヶ月、ちょうど緊急事態宣言が出されていたこともあり、家でほぼ毎日手を動かしながら読んでいた。
今年はいつもより読んだ本が少なかったが、今年の後半にACM会員になったことでO'reilly Online Learningが使えるようになったので、来年はO'reillyの洋書をどんどん読んでいきたい。
勉強した技術テーマ
今年注力して勉強した技術テーマ は以下。
- Spring MVC
- Spring Session
- プログラミング処理系
- データベースの内部構造
今までもSpringについてコミュニティーのイベントなどに参加したり、自分が気になった機能をドキュメントを読みながら学んでいたが、今年は特に、Spring MVCを使ったWebアプリケーションの開発について改めてドキュメントを読みながら勉強する機会が多かった。 今までは、REST APIの開発がメインであったため、Thymeleafを使ったSpringのView周りの知識をあまり理解していなかったり、実際に手を動かして実装する機会が少なかったことが理由である。
またSpring Sessionについても、自分の中で解像度が低い状態であるという認識があったので、ドキュメントやソースコードを注力して読むようにしていた。 Spring Sessionのソースコードを読んでみると、Redisの扱いづらい仕様をうまく吸収して、Springユーザにわかりやすい形に変換しているクラスや、Spring Securityとの連携をうまくやるためのクラスがあり、とても勉強になった。
プログラミング処理系については、先ほどあげた「コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方」で2ヶ月かけて読んだ程度だが、今まで大学で学んできた理論について復習しながら、動作するコンパイラを書いたという経験は自分にとって小さくない経験だと思う。
データベースの内部構造についても、「Database Internals」を今読んでいるだけだが、Disk-based DBのファイル構造や、B-TreeやB+-Treeなどのmutable TreeやLSM-TreeなどのImmutable Treeを学んだり、分散システムで使われるfailure detectorやleader electionなどのアルゴリズムを学ぶことができて、とても勉強になっている。 こちらは、インプットが多くなって自分の中で整理できていないところも多いので、もう一度理解し直しながらブログにまとめていきたい。
Qiitaにあげた記事
今年Qiitaにあげた記事は全部で4本。
【IntelliJ IDEA】メモリ使用率を画面上に表示させる方法 - Qiita
【IntelliJ IDEA】大文字/小文字の区別なしでコード補完候補を表示させる方法 - Qiita
【IntelliJ IDEA】ソースコードを保存したときにローカルでの変更箇所のみフォーマットする方法 - Qiita
【IntelliJ IDEA】Javaファイル保存時にfinalを自動的につける方法 - Qiita
Zennや、はてなブログとどう使い分けていいか定まらず、IntelliJのTipsをあげることにしか使っていない。 多分、来年はQiitaになにかあげたくなることはなくなりそうな気がしている。
はてなブログにあげた記事
今年はてなブログにあげた記事は全部で33本。
2020年 DMM英会話をはじめました - daisuzz.log
2020.1.8 DMM英会話の振り返り - daisuzz.log
sdkmanでインストールしたSDKをIntelliJで使う - daisuzz.log
JDK9以降のJavaの構文にふれてみる - daisuzz.log
LinkedHashMapを使った簡単なLRU Cacheを実現する - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 1章ブール論理 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第2章 ブール算術 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第3章 順序回路 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第4章 機械語 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第5章 コンピュータアーキテクチャ - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第6章 アセンブラ - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第7章 バーチャルマシン#1:スタック操作 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第8章 バーチャルマシン #2: プログラム制御 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第9章 高級言語, 第10章 コンパイラ:構文解析 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第11章 コンパイラ:コード生成 - daisuzz.log
【読書メモ】コンピュータシステムの理論と実装 第12章 オペレーティングシステム - daisuzz.log
Kotlinでjava.io.Fileを使ってファイルを読み込むときに便利な拡張関数 - daisuzz.log
Safariの「戻る」「進む」操作を行ってページを復元したときにJavaScriptを実行させる方法 - daisuzz.log
【Thymeleaf】th:hrefで変数の値に応じて動的にクエリパラメータをつける方法 - daisuzz.log
【Spring】HandlerInterceptorの各メソッドが呼ばれる流れを追ってみた - daisuzz.log
【Spring】DefaultMessageCodesResolverについて調べてみた - daisuzz.log
【Spring】String型のフォーム値が未入力の場合nullで受け取る方法 - daisuzz.log
【Spring】List<String>型のフォーム値が未入力の場合にnullのリストを受け取る方法 - daisuzz.log
【OpenAPI】Spring Bootで実装したREST APIのクライアントコードを自動生成する方法 - daisuzz.log
はじめてのSpring Cloud Contract - daisuzz.log
マンガでわかるDocker 3〜AWS編〜 を読んだ - daisuzz.log
【Spring Boot】ThymeleafからのPOSTリクエストをPUT/DELETEで受け取る方法 - daisuzz.log
docker-composeでSchemaSpyを使ったERドキュメント生成を行う方法 - daisuzz.log
はじめてのMutation Testing - daisuzz.log
Spring Session Data Redis (2.4.1) のコードを読んでみる - daisuzz.log
Redis Keyspace Notificationsで発火されるイベントを見てみる - daisuzz.log
今年の初めは英語のモチベーションが高かったのでDMM英会話の体験をやってみたりしていたが、だんだんと英語の勉強はしなくなってしまった。 来年からは少しずつ英語の勉強(主にリスニングとスピーキング)を再開したいと思う。
思っていたよりもコンスタントにブログの記事を書けていたので、これは来年も引き続き継続していきたい。
Zennにあげたスクラップ
今年の途中からZennが出てきたので、スクラップという機能を使って技術メモを書き残す際に使うようにした。 まだ使い始めたばかりで、どう運用していこうか模索中だが現状書いたスクラップ一覧は以下
Zennのスクラップで雑な技術メモとして公開して、そこから自分で改めて整理し直したものをはてなブログに公開する、という流れでも良いかもしれない。
GitHubで作成したリポジトリ
https://github.com/daisuzz/sample-thymeleaf-href
https://github.com/daisuzz/sample-spring-interceptor
https://github.com/daisuzz/sample-spring-webflux
https://github.com/daisuzz/sample-spring-cloud-contract
https://github.com/daisuzz/sample-openapi-generator
https://github.com/daisuzz/sample-spring-session-redis
https://github.com/daisuzz/sample-thymeleaf-todo
https://github.com/daisuzz/spring-session
https://github.com/daisuzz/java-sandbox
https://github.com/daisuzz/nand2tetris-solution
https://github.com/daisuzz/todo-frontend
https://github.com/daisuzz/minicat-go
https://github.com/daisuzz/sample-gin
https://github.com/daisuzz/sample-pitest
https://github.com/daisuzz/algorithm-practice-kt
https://github.com/daisuzz/portfolio
気になったSpringのプロジェクトの機能を使ってサンプルコードを書いてみたり、Docker, Swagger, Schemaspy, GitHub Actionsなど開発に役立つツールを自分で一から導入して開発環境を構築しながら、ツールの使い方を学ぶような使い方をしていた。
OSS活動は、Spring SessionのJavaDocの小さな修正1つだけなので、来年は自分が使っているライブラリのバグ修正をPRで出していきたい。