秋のブログ週間2本目です。
はじめに
初めまして、2024年新卒入社の内堀航輝です。
本日は、秋の夜長にブログリレーの2日目です。テーマは、「手元にあった新卒1年目に勉強していた時のメモ(感想)を振り返って」です。
IT業界に来た人にはあるあるだと思うのですが、プロジェクトに入ると知らないことの連続で、手当たり次第に耳に入った情報をとりあえず勉強しがちですよね。例にもれず僕もそのタイプだったので、1年目はさまざまな技術に触れてきました。
その時々に「なるほど」と思ったことや、素直に感じたことを書き留めた雑メモ(というか感想)が手元に残っていたので、今回はそれを抜粋して、1年目の新人としての当時の気づきを共有できればと思います。「あー、自分も初めはそんなこと思ったな」と思いながら読んでいただけると幸いです。
インターフェースってなんやねんって思ってたけどめっちゃ便利やん
これはJavaのオブジェクト指向を学んでいた時、「インターフェース」の使い方を初めて理解した時のメモです。
新人研修で初めてオブジェクト指向に触れたとき、クラスや継承は、「モノ」の具体例がイメージしやすかったので、割とすんなり理解できました。
その一方で、インターフェースだけは概念が抽象的すぎて、何のために存在するのか全くピンと来ませんでした。「仕様だけを定義して、実装を隠蔽する」と説明されても、「回りくどいことはせずに、普通に具象クラスで定義すればいいんじゃないの?」と思っていました。
しかしその後、DI(依存性の注入)という概念を知り、そこでのインターフェースの活用法を見て、インターフェースの価値は、単に実装を隠すことだけでなく、「交換可能性」にあるってことに気づいたとき、その考えはガラリと変わりました。
特定の具象クラスを直接呼び出すのではなく、インターフェースを挟んで処理を呼び出すことで、システムを疎結合にできます。このおかげで、呼び出し元は「どんなクラスが動いているか」を気にしなくて良くなり、実装者も定義されたルール(インターフェース)さえ守ればよくなります。急に実装クラスを丸ごと交換したくなっても、呼び出し元のコードには一切手を入れなくて済むようになりますし、用途によって具象クラスを切り替えるといったことも簡単にできます。
具体的な実装から分離することで、システムの柔軟性と保守性を高める。それこそがインターフェースの重要な役割なのだと腑に落ちました。
個人的には、この気づきでオブジェクト指向への理解が一気に深まったと感じており、その時の感動を鮮明に記したメモでした。
パスを繋ぐってなんやねん
環境構築していて、実行ファイルあんのになんで動かないんだ!ってキレていたときのメモです。
「パスを設定する」、「パスを繋ぐ」、環境構築をしていると、呪文のように出てくるこの言葉。当時の僕は意味が分からず、ただ手順書のコマンドを打ち込むだけでした。動かなかったらエラーメッセージで調べ、出てきた別のコマンドを打ち込む、そして動くか動かないかに一喜一憂する。完全に祈祷師でした。
ある日どうしても環境構築が進まず、その怒りをGeminiにぶつけていたのですが、優しいGeminiさんは、僕が理解するまで何度も、手を変え品を変え説明してくれました。
そこでようやく理解できたのが、コマンドが実行されるまでのターミナルの動きです。ターミナルは、コマンドが入力されると、環境変数「PATH」に設定された「コマンド検索先一覧」を頭から順番に見ていき、最初にヒットした実行ファイルを実行し、もし何もヒットしなければ、「Command Not Found」を返しているだけでした。
この仕組みを理解したことで、環境構築に対する苦手意識がかなりなくなりました。結局、環境構築は、①ソフトをダウンロードすること、②開発で使うコマンドを使える状態にすること(つまりパスを通すこと)、の2点におおよそ集約されることに気づいたからです。
この「パスがわかるだけで、環境構築が怖くなくなる」という気づきは、当時の僕にはかなり鮮烈でした。意外と共感してくれる方がいるのかなと、個人的には思っています。ただ、Pythonの環境構築はいまだに苦手です。pipとかpyenvとか管理ルール何種類あんねん、、、、(最近はuvってやつが流行ってるみたいですね。)
Linux勉強してると思ってたけど、これLinuxコマンドを勉強してるやん
「エンジニアたるものLinuxを知らねば」と、「初心者向け!Linux入門!」のような教材で勉強した気になっていました。これは、その後に「ふつうのLinuxプログラミング」という本を読んだときにしたメモです。
あくまで僕調べなのですが、Linux入門のような教材は、コマンドライン操作の説明が中心のものが多い印象です。そのため、僕は初め、「Linux = ls や cd といったコマンド群のこと」だと勘違いしていました。
しかし、そこには大きな認識のずれがありました。
普段使っているLinuxコマンドは、あくまでLinuxというOS(カーネル)の上で動く「アプリケーション」の一つに過ぎず、Linuxそのものではなかったんです。
「ふつうのLinuxプログラミング」は個人的にとても良かったので、おすすめしたい一冊です。この本は、Linuxの世界を構成する概念の解説から始まり、システムコールを使ってプログラムとOSがどうやり取りしているのかを、丁寧な解説と平易なサンプルコードで説明してくれます。おかげで、OSの役割がとてもクリアに理解できました。
余談ですが、現代のLinuxはなんやかんや4000万行ほどあるようですが、Linux 0.01(Linuxの一番最初のバージョン)はわずか1万行だったみたいですね。
いつか挑戦してみたいですね~
SQLが集合を記述してるってまじか
「達人に学ぶSQL徹底指南書」を読んでいた時の感想です。
初めてSQLに触れたとき、SQLは本当に異質な存在でした。これまでやってきたPythonやJavaといった、いわゆる「手続き型」の言語と異なり、forループやif分岐といったフローを制御する文法がなかったからです。ただ当時は、あまりそのことを深く考えていませんでした。「癖の強いプログラミング言語だなー」といった程度の認識で、基本的な記述はできるものの、正直苦手意識を持っていました。
PJに入り、ある日先輩との雑談で、「フューチャーで共通のスキルがあるとしたら、それはSQLだと思う」という話を聞きました。
それならば、もっとちゃんと勉強しようと思い手に取ったのが、「達人に学ぶSQL徹底指南書」でした。この本で、「SQLが集合を記述してる」ということを知りました。他の「手続き型」の言語が、「どのように処理をするか」というフローを記述するのに対して、SQLは「宣言型」で、「この条件を満たす部分集合が欲しい」と部分集合の定義を記述するだけです。
この「何がしたいか(How)」ではなく、「何が欲しいか(What)」を記述するというのが、個人的にはかなり衝撃的でした。それまでは単に癖のある文法を持った苦手な言語でしかなかったSQLが、集合論という数学に裏打ちされた力を持つ面白い言語へと、見方が一気に変わりました。
ちなみに、集合論が面白いと感じたのは、ちょうどその時「数学ガール/フェルマーの最終定理」を読んでいたのが大きかったです。話は面白いし、疲れた頭で数式を眺めてるとよく眠れるんですよね、、、
クラウドってくそでかオンプレやん。サーバーレスは全然サーバーあるし。
1つ目のプロジェクトでAWSを勉強していた時のメモです。
クラウドについてちゃんと勉強するまで、Cloud(雲)という言葉に騙されていました。「サーバーがどこにもないのに、計算とかどうしてるんだろー。何かすごい技術を使ってるのかなー」なんて、本気で思っていました。
でもいざ調べてみたら、クラウドの正体は、どこかの巨大な建物に設置された、超大規模なオンプレミスサーバ郡でした。僕たちユーザは、その広大なリソースの一部を、インターネット経由で、必要な分だけ借りて使っているだけ。なんとなく、小さな雲の集合体が大きな入道雲に見えるのを連想して、「確かにこれはCloud(雲)だな」と、妙に納得したのを覚えています。
サーバーレスもやっぱりサーバーはあって、あくまで「サーバーの管理をしなくていい」という話でした。僕たちのアプリケーション(AWS Lambdaなど)は、裏側で誰かのサーバ上で動いていますが、ただそのサーバのメンテナンスはクラウドベンダーが肩代わりしてくれる、というわけです。まあ、そもそも「サーバ」の定義を考えれば、仮に何か革新的な技術で、コンピュータが今と全然違う姿になっても、処理を行う存在がいる以上、それは結局サーバの一種と呼べるわけです。そう考えると、真の意味で「サーバーレス」になることはないのでしょうね。
全然話は変わりますが、皆さんの好きなクラウドサービスは何ですか?(クラウドベンダー問わず)
僕はS3(Amazon Simple Storage Service)です。ストレージにオブジェクトを保存するというシンプルな機能です。しかしその裏側には、データの一貫性、分散処理、そしてイレブンナイン(99.999999999%)という驚異的な耐久性を支える技術があります。これだけの技術にたくさんの知性が凝縮されていると思うと、とてもロマンを感じます。
AWS最古参のサービスの一つとして、S3が単体で進化してきた歴史もさることながら、他のあらゆるサービスがS3を土台としてどう発展してきたか、その関係性の歴史を追うのもまた、面白いんです。
ちなみに、イレブンナイン(99.999999999%)の耐久性を持つストレージのデータが壊れる確率って、橋本環奈さんが誕生する確率(1000年に1人)と同じらしいですね。
まとめ
ITの世界は、最初はブラックボックスだらけで、「よくわかんないけどこれが正しい、間違ってる」の連続でした。(少なくとも僕にはそう見えていました。)
でも、一歩踏み込んで仕組みを覗いてみると、そこには先人たちの知恵が詰まっており、霧が晴れるみたいに少しずつ色んなものが見えるようになっていきます。今回の記事で触れた「気づき」は、この霧が晴れた瞬間の記録です。
1年目を振り返ってみて、この霧が晴れる感覚が楽しくて夢中で勉強していたのだなと、改めて感じます。2年目も霧晴れドリブンで勉強したメモが手元に溜まっているので、機会があれば2年目編も書けたらと思います。
長くなりましたが、最後まで僕の雑メモにお付き合いいただき、ありがとうございました。