hokuishi.be

2022 年の振り返り

2022/12/30

2022 年も終わりそうなので忘れないうちに今年の振り返りを書きます。

目次

やったこと

インターン

今年やったことで一番印象的で生活に影響を与えたことは、インターン (という名の長期バイト) だと思います。 オンボーディングでの課題や業務でのタスク、 Slack での雑談などで多くのことを学びました。 去年の夏休みに一度同じ会社で無給インターンをさせていただいていて、そこでオンボーディング課題に取り組んでいました。 その後、別のスタートアップ企業でのインターンを通して業務でのエンジニアリング・コミュニケーションと Go での Web API の開発を学び、今年の春に今の会社でインターンを開始 (再開?) しました。
今の会社でインターンを始める前はクリーンアーキテクチャなどのレイヤードアーキテクチャに馴染みがなく、きちんと理解できていませんでした。 去年、クリーンアーキテクチャに憧れて見よう見まねでコードを書きましたが、今見返すとディレクトリ構成など本質でない部分に囚われすぎていて、本来のレイヤードにする意義が失われたようなコードで恥ずかしいです。 しかし業務で Goa を使うこともあって、案件に参加させていただいた後、コードを読んだり社員の方のアーキテクチャに関する意見を聞いたりしていくうちにレイヤードアーキテクチャの理解が鮮明になっていきました。
また Slack の times チャンネルや日報チャンネルで社員のエンジニアの方の発言を見たり、オフィスで実際に話したりしたことから、エンジニアとして働いた場合の待遇や働き方、生活などへの解像度が上がりました。 これは地味なようで大きな学びでした。

Hack Day

夏休みには友達に誘ってもらって Digital Hack Day 2022 に参加しました。 ここでの学びは以前ブログで書きました (Digital Hack Day 2022 大反省会)。 現地参加できてすごく楽しかったです。 (ハッカソンの翌日は滝のような雨で東京観光できなかった思い出 😢)

ブログ

このブログを作ったのも今年です。 友達が自前でブログ作っていておしゃれで、それに憧れて作った記憶があります。 同時に hokuishi.be ドメインを取得してブログとメールアドレスをこれに移行しました。 ついでにメールサーバを AWS からさくらのメールボックス (安い!)に移行しました。

英会話

英語話せるとかっこいいなと思い、英語ペラペラ日本人になるために (インターンで収入が入って毎月継続して払えるようになったというのもあり) 夏から DMM 英会話を始めました。 去年 TOEIC を受けていて基本的な単語と文法・発音の知識があり、それなりに英語には自信があったのですが、初回のレッスンで全く英語が口から出てこなくて打ちのめされました。 始めの一週間くらいは事前に扱う教材 (ほとんど Daily News) を予習してディスカッションで言う内容もおおまかに考えてレッスンに臨んでいましたが、今思うと英会話の効果が薄まってよくなさそうです。 現在では一日 25 分のレッスンを続けて 8 ヶ月経ち、総英会話時間は約 5000 分になりましたが、まだペラペラの状態や英語で考える段階には到達できていないため継続していきます。
英会話での効果としては、スピーキング以外ではリーディングとリスニングの能力が上がりました。 毎日 Daily News をやるので、語彙が増えていることと英語を読みながら理解するスピードと精度が上がっている実感があります。 先生の質問を聞き返す回数も徐々に減っているように感じます。 数字として分かる結果は、英会話を始める前と現在 (8 ヶ月目) では TOEIC のリスニングが 45 点、リーディングが 20 点上がりました。 英会話は一日 25 分と少ない時間ですが、緩やかに成長できていると思います。

学んだこと

Goa

インターン先で使用しているため触り始め、お気に入りフレームワークになりました。 Goa はマイクロサービスを開発するためのフレームワークで、デザインファースト (コードとドキュメントが乖離しない) が特徴的です。 Goa のおかげで 「コードとドキュメントは乖離しないようにしたい (が実際の開発では乖離してしまう)」 のような開発フローに起因する問題への視点が得られました。 また Rails や Django のようにリッチではないため、アーキテクチャやそれをどうディレクトリで表現するかという知識と発想が身に付きました。
これはあまり Goa に関係がないですが、インターン先では ORM を使わずに SQL を書くことが多いため、 「そもそも ORM がなぜ必要か?」、「マイグレーションをどう行うのか?(そしてそれがなぜそうあるべきか)」 など ORM を使っていては持たないような問いについて考えることができました。 (Goa と sqlc, Atlas で快適な Web API サーバ開発 に書きました)

COMET, EDSAC

3 年後期から始まったコンピュータ工学の授業で COMET の勉強をして、コンピュータが内部でどのような動作をしているのかなんとなく分かって、当時は新鮮な気持ちで面白いと思いました。 このあたりからコンピュータ自体に対しての興味が強くなっていました。 ちょうどこの時期にエンジニアリングデザインという好きなソフトウェアをペアで作って発表する (ただしラズパイとセンサ, Python を必ず用いるという縛り付き) 授業がありました。 授業でコンピュータアーキテクチャについて勉強していたことに加え、昔のコンピュータ (階差機関, ENIAC, ABC マシン, EDVAC, EDSAC, MEMEX など) を調べていたため 「EDSAC ならパンチカードでプログラムを入力していてアセンブラ (イニシャルオーダー) があるからシミュレータが Python で書けそうだ」 と思い、 EDSAC のシミュレータを作りました。 EDSAC は今でも理解できていない部分は多いですが、単純な加減算やビットシフト、レジスタ・記憶装置への格納で動いていて、その組み合わせでパンチカードの内容を読んでメモリに格納する所まで行ってしまうのだからすごいカラクリだなと感心します。

言語処理系

4 年後期から情報数学の授業が始まり、今までよく分からなかったオートマトンについて勉強でき、気になっていたコンパイラの本に手をつけました。 『コンパイラ 作りながら学ぶ』(中田育男) を読んで、大雑把に字句解析、構文解析、意味解析の流れやおおまかな実装方法が理解できました。

記号論

神保町の本屋でたまたま見つけた 『記号論への招待』(池上嘉彦) を読んで記号論をほんの少し齧りました。 全く前提知識が無く難しい部分もありましたが、自然言語やアートの例を提示して説明されるため身近に感じました。 物の名前より先に物の本質があり、ラベルを付けるように命名された (名称目録的言語観) のではなく、名前を付けることによって分節しているという話が一番印象的でした。
この話は 『記号と再帰』(田中久美子) にも出てきていて、ソシュールが「言語には差異しかない」と考えたと紹介されています。例えば次の二つのラムダ項の内容は同じです。

λx.x+1
λhoge.hoge+1

シニフィアンは恣意的なため二つは同項のラムダ項だが、本質は記号の関係性の構造のため二つのプログラムが同一かどうか判断するのが難しいという話です。 結局、あるプログラムが等しいか確かめられないため、ある入力を与えた時正しい出力を得られるかという間接的な方法で判断することになります。 これはプログラマが書くテストと同じに見えます。 テストを書く時、期待する出力と実際に入力を与えた時に得られた出力を比較して動作を保証するのは当たり前だと思っていましたが、このような発想の先にあったのだと思うとプログラムを違う目で見られるようになって爽快です。
このように記号論はそれ自体の話だけでも面白く、自然言語やコミュニケーション、アートに対する認識を新たにしてくれるのですが、プログラミング言語についても適用することができ、記号論に見られる法則が自然言語でもアートでもプログラミング言語でも同じような振舞いをしていることが分かります。 これは、記号論が自然言語だけでなくプログラミング言語にも適用できることから、記号一般を考えることができるものであり、逆にプログラミング言語は人工的にしかも工学的な制約を踏まえて考案されたのにも関わらず、記号の性質を備えているように感じさせられて感動しました。

来年は…

まずは進路が無くならないように勉強します…
来年も英会話は毎日続けたいです。 またコンピュータについての知識をつけてたくさんコードを書いて理解していきたいです。 特に言語処理系に力を入れてやっていきます。