- 73個のプログラミングプロジェクトのアイデアを通じて、開発者が学習と創造的な挑戦を同時に体験できるように構成
- 各プロジェクトはネットワーキング、システム、AI、グラフィックス、セキュリティ、データベースなど多様な領域を網羅
- ほとんどのアイデアは中核となる技術原理を自分で実装するよう設計されており、理論と実務をあわせて学べる
- 各項目には関連する論文、公式ドキュメント、チュートリアルへのリンクが含まれており、学習の道筋を明確に示している
- プログラミングを単なるコーディングではなく、探究と創造の芸術として認識するきっかけを提供
概要
- 多くの開発者は何を作るべきか分からないままサイドプロジェクトを始めたいと思っている
- インターネットにはありふれていて退屈なアイデアが多い
- この記事では学習価値が高く、面白い73個のプロジェクトを提示
- 各プロジェクトは特定の技術概念を自ら実装しながら学べるように構成されている
ネットワーキングとシステムのプロジェクト
- BitTorrentクライアント: P2Pネットワーキングの動作原理を学ぶためのファイルダウンロードクライアントを実装
- DNSサーバー: クエリ受信、パケット解析、ドメイン解決、キャッシュ機能を含むサーバーを構築
- コンテナランタイム: Dockerなしでカーネル名前空間、chroot、プロセス分離を学習
- TCP/IPスタック: Linuxユーザー空間でTCP/IPプロトコルを直接実装
- ロードバランサー: バックエンドサーバー間でのリクエスト分散、ヘルスチェック、セッション維持機能を実装
データと分散システム
- RAFTプロトコル: 分散合意と障害復旧を支えるシステムを実装
- Redisクローン: 基本コマンド、RDB永続化、レプリケーション、トランザクションを含むインメモリデータベースを構築
- Kafkaブローカー: トピック作成、メッセージの生成・消費リクエストを処理する分散ログシステムを実装
- SQLエンジンとオプティマイザ: SQLiteの構造を模倣し、クエリ実行と最適化の過程を学習
- CIシステム: Gitリポジトリの監視、テスト実行、結果報告を自動化する統合システムを構築
人工知能とアルゴリズム
- Wordleソルバー: 情報理論とエントロピーの概念を活用した単語推論プログラム
- ディープフェイク生成器: Optimal Transportを使って顔変換を実装
- ランダムフォレスト: 決定木とランダムフォレストを自ら実装して分類問題を解く
- ニューラルネットワークフレームワーク: テンソル、autograd、オプティマイザを含むディープラーニングフレームワークを構築
- 進化的設計: 遺伝的アルゴリズムを使って機械構造を自動進化させるシミュレーション
グラフィックスとゲーム開発
- Ray Tracer: 球、平面、照明で構成された3Dシーンをレンダリング
- OpenGLレンダラー: グラフィックスプログラミングの基礎を身につけるミニレンダラーを実装
- Dangerous Daveリメイク: SDLを使って古典ゲームを再現
- チェスエンジン: UCIエンジンを含むチェスゲームを実装
- Procedural Crossword: 制約伝播を使った自動クロスワード生成
セキュリティと暗号
- 認証サーバー (JWT/Sessions) : 暗号化、トークンの有効期限、セッション管理を実装
- 匿名投票システム: ゼロ知識証明(ZKP)を使った暗号化投票を設計
- VPN: 中央サーバーなしでトラフィックを中継するメッシュVPNを構築
- マルウェア実験: 仮想マシン環境でファイアウォール対応をテスト
- Zipアーカイバ: 圧縮、暗号化、バンドル機能を自ら実装
Webとアプリケーション開発
- Webサーバー: HTTPリクエスト処理、静的ファイル配信、ルーティング、リバースプロキシをサポート
- 協調編集エディタ: CRDTベースの分散テキストエディタを実装
- ブラウザエンジン: HTML/CSSの解析とレンダリングを行うシンプルなエンジンを構築
- 動画エディタ: ブラウザ内で動作するクライアントサイドのエディタ
- ブラウザ拡張機能: パスワード、フォーム、クリップボードの状態を保存して自動入力
データ可視化と検索
- Googlebot: Webクローラーを作って検索システムの基本構造を学習
- Wikipedia検索エンジン: インデックス化、トークン化、ランキングアルゴリズムを実装
- ナレッジグラフ: エンティティ間の関係を可視化し、Webから自動更新
- Google Mapsエンジン: 道路、地形、場所データをインデックス化する地図システム
- CDNキャッシュシステム: 静的アセットへの重複リクエストを防ぐキャッシュ構造を設計
ハードウェアと組み込み
- レーザータグシステム: IRエンコーディングとMQTT通信を活用したリアルタイム検知システム
- スマートホームアプリ: IR機器制御、スケジューリング、自動化を支援するIoTプロジェクト
- Game Boy Advanceエミュレータ: CPU、メモリ、グラフィックス、入力の構造を再現
ブロックチェーンと金融
- ビットコインノード: ブロックのダウンロードと検証機能を実装
- 株式取引ボット: イベント駆動型システムで自動売買を実行
- 匿名投票とスマートコントラクト: ブロックチェーンベースの信頼できる投票システム
まとめ
- 73個のプロジェクトは、中核技術を自分で実装しながら学ぶ実験的アプローチを強調している
- 各アイデアは公式ドキュメント、論文、チュートリアルへのリンクへとつながり、実践中心の学習を促す
- プログラミングを探究と創造の芸術として再発見させてくれる実践的な提案
1件のコメント
Hacker News の意見
この一覧は AIが生成したもの のようだと言う人もいるが、私はむしろ「最初から自分で作ること」こそがAI依存を減らす最良の方法だと思う
日本ではこうした過程を「修行(Shugyo)」と呼ぶ。職人は効率のためではなく、鋼の本質を理解するために長い時間をかけて道具を研ぐ
Redis や Git を自分で作るというのは、成果物そのものよりも、その過程の摩擦を通じて思考モデルを築くことだ。まさにここがAIには代替できない部分だ
私が作ったプロジェクトアイデア集 Challenging programming projects every programmer should try を紹介する
codecrafters.io から出た一覧だ。このプラットフォームでは、プロジェクトを段階的に実装していきながら 統合テストとコミュニティ を提供している
私も「Build your own Redis」プロジェクトを進めているが、かなり面白い。AIが作ったものではなく、コミュニティで集めたアイデアをまとめたもののようだ
BitTorrent クライアント を自分で作ってみることを強く勧める。仕様がシンプルで、細部の問題も興味深い。完成後に Debian カーネルを自分でダウンロードすると達成感が大きい
Magnet リンクやシーディング機能まで追加実装すると、さらに深く学べる。この経験のおかげで P2P システム と DHT(Chord など)に興味を持つようになった
この一覧は少し変だ。たとえば #58 は malloc の実装で、初心者にはかなり難しい題材なのに、その次の #59 ではストリーミングプロトコルを一から作れと言っている。難易度のばらつきが大きすぎる
4chan の /g/ プログラミングチャレンジについてどう思うか気になる。難易度分けがやや恣意的な印象だ。たとえばブートローダーが C コンパイラより難しいとされているのは少しおかしい
参考画像リンク
.mdファイルにリンクしたほうがよさそうだ小さくて完結したツールやプロトコルを自分で作ってみるのがよい。規模よりも明確さと完成感 から得られる満足が大きい
もしかしてこれは astroturfing(やらせ宣伝)なのでは、という疑問がある
あるプロジェクトは1日で終わるが、別のものは学部の卒業制作や修士論文級の規模だ
この一覧を見ていると、自分は良いプログラマではないのではと思ってしまう
始めるなら、関心のある分野の先行研究を見てみるのがよい。たとえば Adam Dunkels の仕事 を参考にするといい。組み込み向けなので小さく、理解しやすい
必要なら AI ツールを活用して、コード理解や生成の助けを得るのも勧める