優れた開発者になるためのプログラミングプロジェクト 9選

TThe Coding Koala
Computing/SoftwareAdult EducationInternet Technology

Transcript

00:00:00プロジェクトを作るよりもイライラすることを知っていますか?それは、何を作るべきか分からないことです。
00:00:04エンジニアとしての道のりのどこかで、誰もがこの奇妙なフェーズに突き当たります。
00:00:08JavaScriptフレームワークでまたCRUDアプリを作るのは退屈に感じ、
00:00:11かといって、オペレーティングシステムを一から作るのは不可能に感じる。その中間に立ち往生してしまうのです。
00:00:16簡単なものは望んでいない。不可能なことも望んでいない。ただ、意味のあるものを作りたいだけなのです。
00:00:21途中で投げ出さない程度に、自分をレベルアップさせてくれるほどよい挑戦。
00:00:26私自身も経験があります。そこでこの動画では、本当に素晴らしいプロジェクトのアイデアをいくつか紹介します。
00:00:32これらを3つのレベルに分けました。レベル1は「基礎の構築」。レベル2は「ストレージ、
00:00:38データベース、データシステム」。そしてレベル3は「高度なシステムと内部構造」です。
00:00:44これらのプロジェクトを完成させれば、ただコードが上手くなるだけでなく、エンジニアとしての思考が身に付きます。
00:00:49ではレベル1から始めましょう。最初のプロジェクトは、独自のHTTPサーバーを一から作ることです。
00:00:55この動画を見ているなら、HTTPサーバーが何かはおそらくご存知でしょう。
00:01:01ウェブサイトを開いたりAPIを叩いたりするたび、舞台裏ではリクエストとレスポンスが行われています。
00:01:06しかし、これまではExpressのようなフレームワークを通じてしか触れてこなかったはずです。
00:01:12独自のミニHTTPサーバーを作ると、水面下で何が起きているのかを理解せざるを得なくなります。
00:01:19TCPソケットがデータを送受信する方法、リクエストの解析、レスポンスの整形、並行処理などを学べます。
00:01:25こうしたプロジェクトにどう取り組めばいいか、すでに圧倒されている方もご安心ください。
00:01:30動画の最後で解決策をお教えしますので、見逃さないでくださいね。では2つ目のプロジェクトへ行きましょう。
00:01:35「自作シェル」です。皆さんはcd、ls、pwdといったコマンドを何百回と使ってきましたよね。
00:01:40でも、それらのコマンドを実際に処理しているものが何なのか、考えたことはありますか?
00:01:46自分専用のシェルを作ることで、そのシステム自体を創造することになります。
00:01:52ユーザー入力の読み取りと解析、プロセスの実行、システムコールの処理、
00:01:58そしてプロセスやコマンドといったOSレベルの概念を学べます。シェルを一から作ることで、
00:02:04コンピューターを深いレベルで理解できるようになります。さて、ここからが面白くなってきます。
00:02:09レベル2のプロジェクトを見ていきましょう。最初のプロジェクトは「自作Redis」です。
00:02:15Redisはキャッシュやデータベースとして使われるインメモリデータストアで、驚異的な速さを誇ります。
00:02:21しかし、自分で作るまでは、なぜそれが速いのか本当の意味で理解することはできません。
00:02:26Redisクローンを実装することで、インメモリデータ構造の仕組みを学び、基本的なコマンドを実装し、
00:02:32Redisプロトコルを理解し、イベントループを使って複数の接続を効率的に管理する方法を学びます。
00:02:38これらはほんの一部です。開発を始めれば、さらに多くの学びがあるはずです。
00:02:43ソフトウェア工学が単なるCRUDアプリ作り以上のものであることに気づくでしょう。
00:02:48次のプロジェクトは「自作Git」です。毎日使うGitですが、仕組みを本当に知っていますか?
00:02:54簡略化されたバージョン管理システムを自作すると、すべてが腑に落ちます。
00:03:00コミットが内部でどう保存されるかを理解し、ハッシュ化やコンテンツ指向ストレージを実装します。
00:03:05ファイルのスナップショットをコミットツリーに整理するなど、やるべきことは山積みです。
00:03:11一から作る醍醐味は、自分の思い通りに動作をカスタマイズできることです。
00:03:16最後、3つ目のプロジェクトは「自作SQLite」です。SQLiteは、
00:03:22すべてを単一ファイルに保存するサーバーレスのデータベースエンジンです。MySQLなどとは違い、
00:03:29独立したサーバープロセスを持ちません。軽量ながら非常に強力です。自作することで、
00:03:34Bツリーなどの構造を使ったデータ整理術を学べます。クエリを解析して実行し、
00:03:39高速な検索のためのインデックスも実装します。開発者にとってデータベースは避けて通れません。
00:03:45その内部を理解すれば、あなたは一握りのエリートエンジニアの仲間入りです。
00:03:52レベル3では、さらに深く掘り下げます。最初のプロジェクトは「ミニプログラミング言語の作成」です。
00:03:58そう、自分自身の言語です。コードを読み取り、理解し、命令を実行する仕組みを作ります。
00:04:04難しそうに聞こえますが、これほど達成感のあるプロジェクトは他にありません。
00:04:10レキサー、パーサー、抽象構文木(AST)などを実装します。何より重要なのは、
00:04:17インタプリタやコンパイラが実際にどう動くか分かることです。コンピューターとの対話方法が
00:04:22ついに理解できる素晴らしいプロジェクトです。自分の言語に好きな名前をつけて自慢もできますよ。
00:04:27さて、2つ目のプロジェクトは「自作BitTorrentクライアント」です。分散システムの出番です。
00:04:32BitTorrentはP2Pファイル共有システムで、単一サーバーではなく、
00:04:38複数のピアからファイルの断片をダウンロードする仕組みです。
00:04:44これを作るには、ピアの発見、ノード間の接続管理、ファイルの分割、
00:04:50整合性の確保、分散通信の処理などが必要です。決して簡単なプロジェクトではありません。
00:04:57今の説明が半分も分からなかったかもしれませんが、大規模な分散システムの仕組みを学べます。
00:05:02そして最後、レベル3の最終プロジェクトは「自作コーディングアシスタント」です。
00:05:08Claude Codeのようなツールですね。最新のAIツールは魔法のようですが、その正体は
00:05:14大規模言語モデル(LLM)と従来のソフトウェア設計を統合したシステムです。自作することで、
00:05:20LLM APIをアプリに組み込み、プロジェクトファイルを解析・インデックス化してコンテキストを提供し、
00:05:27プロンプトを管理してレスポンスを制御する方法を学びます。AIとエンジニアリングの原則を
00:05:32融合させたシステムを設計するのです。これに取り組めば、人気のAIツールの裏側が理解できます。
00:05:38それだけでなく、AIがこれほど注目されている今、この挑戦的なプロジェクトは
00:05:44あなたを際立たせる大きな武器になるでしょう。正直に言いましょう。これらはどれも困難です。
00:05:50RedisやGit、BitTorrentクライアントを作るのは、週末にふらっと終わるような作業ではありません。
00:05:55行き詰まり、自分を疑うこともあるでしょう。正しく実装できているか不安になることもあるはずです。
00:06:01そして、たいていの人はそこで諦めてしまいます。
00:06:05そんな時のために「CodeCrafters」というプラットフォームがあります。これは
00:06:11RedisやSQLite、DNS、HTTPサーバーなどをステップバイステップで再構築する学習サイトです。
00:06:19答えを教えるのではなく、テストと構造化されたマイルストーンを提供し、
00:06:23すべて自分で実装させます。私もこれらのプロジェクトに取り組む際に使いましたが、
00:06:29この道標があったおかげで、挫折せずに完遂できました。本格的に挑戦したいけれど
00:06:34ガイドが欲しいという方は、概要欄のリンクをチェックしてください。自力でやるにせよ、
00:06:39プラットフォームを使うにせよ、大切なのは「実際に自分で作ること」です。もしあなたが
00:06:45ネットで次なる制作ネタを探し回っていたなら、この記事が道標になれば幸いです。
00:06:51最初は怖く感じるかもしれませんが、水は飛び込んでみるまで温かくなりません。この動画が
00:06:57気に入ったら、高評価とチャンネル登録をお願いします。どのプロジェクトから始めるか教えてくださいね。
00:07:02では、また次回の動画でお会いしましょう。

Key Takeaway

優れたエンジニアになるためには、既存のツールを使うだけでなく、その内部構造をゼロから再構築するプロジェクトに挑戦し、システムの本質的な仕組みを理解することが不可欠です。

Highlights

既存のフレームワークに頼らず、HTTPサーバーやシェルを一から構築することでコンピュータの深層を理解できる

RedisやGit、SQLiteのクローン作成を通じて、データ構造やバージョン管理の内部メカニズムを習得する

独自のプログラミング言語やBitTorrentクライアントの構築は、コンパイラや分散システムの高度な理解に繋がる

AI時代の差別化要因として、LLMを統合したコーディングアシスタントの開発が推奨されている

難易度の高いプロジェクトを完遂するためのステップバイステップのガイドとしてCodeCraftersが紹介されている

Timeline

イントロダクション:なぜ「作るもの」に迷うのか

多くのエンジニアが、単純なCRUDアプリの作成には飽きている一方で、OSの自作といった不可能に近い課題の間で立ち往生している現状を指摘しています。動画の目的は、学習者がレベルアップできる「ちょうど良い難易度」のプロジェクトを提案することです。紹介される9つのプロジェクトは、基礎、データシステム、高度な内部構造の3つのレベルに分類されています。これらを完成させることで、単なるコーダーではなくエンジニアとしての思考回路を養えると主張しています。最後に、挫折しないための解決策も提示することを約束し、視聴者の期待を高めています。

レベル1:基礎の構築(HTTPサーバーとシェル)

最初のプロジェクトとして、Expressなどのフレームワークを使わずにHTTPサーバーを一から自作することを提案しています。これにより、TCPソケットのデータ送受信、リクエストの解析、並行処理といった低レイヤーの仕組みを強制的に学ぶことになります。次に、日常的に使用する「シェル」を自作し、cdやlsといったコマンドがどのように実行されるかを理解する重要性を説いています。システムコールの処理やプロセスの実行を自分で行うことで、OSレベルの概念が定着します。これらの基礎プロジェクトは、コンピュータとの対話の出発点として位置づけられています。

レベル2:ストレージとデータシステム(Redis, Git, SQLite)

レベル2では、より複雑なデータ管理システムの内部に踏み込み、まずは高速なインメモリデータストアであるRedisのクローン作成を推奨しています。イベントループや特定のプロトコルの実装を通じて、なぜRedisが驚異的に速いのかを体感的に理解することができます。続いて、Gitを自作することで、コミットのハッシュ化やコンテンツ指向ストレージの仕組みなど、バージョン管理の裏側を解明します。さらに、サーバーレスデータベースのSQLiteを構築し、Bツリー構造を用いたデータ整理やインデックスによる高速検索の手法を学びます。これらのプロジェクトは、エリートエンジニアになるために避けて通れないデータベースの内部知識を授けてくれます。

レベル3:高度なシステム(言語、P2P、AIアシスタント)

最終レベルでは、独自のプログラミング言語を作成し、レキサーやパーサー、抽象構文木(AST)を実装するという達成感の大きい課題に挑みます。次に、BitTorrentクライアントの構築を通じて、ピアの発見やファイル分割といった分散システムの複雑な通信管理を学習します。最後には、現代のトレンドであるAIを統合した「コーディングアシスタント」の自作を提案し、LLM APIと従来のソフトウェア設計を融合させる方法を解説しています。プロジェクトファイルのインデックス化やプロンプト管理を学ぶことで、最新ツールの裏側を理解する武器が得られます。これらは非常に困難な挑戦ですが、他のエンジニアと圧倒的な差をつける機会となります。

完遂するための道標:CodeCraftersの紹介

紹介したプロジェクトはいずれも難易度が高く、週末だけで終わるようなものではないため、多くの人が途中で諦めてしまう現実を認めています。そこで、学習をサポートするプラットフォームとして「CodeCrafters」を紹介し、テスト駆動型のステップバイステップな学習法を推奨しています。答えを丸写しにするのではなく、構造化されたマイルストーンに沿って自力で実装を進めることが、挫折を防ぐ鍵であると説明しています。最終的には、どのような手段を使うにせよ「実際に自分で手を動かして作ること」が最も重要であると強調しました。視聴者に対し、まずは一歩踏み出してプロジェクトを開始するよう促し、動画を締めくくっています。

Community Posts

View all posts