ハクソク

世界を動かす技術を、日本語で。

プログラミングの芸術を楽しむためのプロジェクトアイデア

概要

  • サイドプロジェクトを始めたい開発者向けの実践的で楽しいアイデア集
  • 各プロジェクトは学びが多く、スキルアップに最適
  • ネットに溢れる退屈な案とは一線を画す独自性重視
  • 様々な分野(ネットワーク、AI、ゲーム、システム設計)を網羅
  • それぞれの案に学習ポイントや参考リソースを明記

開発者のための刺激的なサイドプロジェクト73選(抜粋)

  • BitTorrentクライアント

    • BitTorrentプロトコルでファイルをダウンロードするクライアント開発
    • P2Pネットワークの仕組み理解
    • 公式BitTorrent仕様書参照
  • Wordleソルバー

    • Wordleを解くプログラム作成
    • 情報理論・エントロピーの実践学習
    • 計算最適化の経験
  • Deepfake(Optimal Transport実装)

    • Optimal Transportをゼロから実装し顔変換
    • 線形計画法の応用
    • 学術論文とリソース参照
  • スプレッドシート

    • セル参照・簡易数式・ライブ更新機能付き表計算
    • 依存グラフ・パーシング・リアクティブUI設計の理解
    • GRID創業者の知見も参考
  • コンテナランタイム

    • Dockerなしで軽量コンテナを自作
    • カーネル名前空間・chroot・プロセス分離の学習
    • コンテナの仕組み解説記事あり
  • ユークリッド幾何定理証明システム

    • ユークリッド公理から幾何証明を導出・可視化
    • 記号表現・ルールシステム・証明理論の実践
    • Mizarプロジェクトや歴史的論文も参考
  • Googlebot(クローラー)

    • Webページを巡回し内容保存するクローラー開発
    • 検索エンジンの基本構造・システム設計練習
    • 独自検索エンジンの構築も可能
  • DNSサーバ

    • クエリ受信・パケット解析・ドメイン解決・キャッシュ
    • 低レベルネットワーク・UDP/TCP・インターネット基礎の習得
    • DNSパケットフォーマット学習
  • Kevin Baconの六次の隔たりゲーム

    • 俳優同士を出演作で繋げるゲーム開発
    • 巨大グラフの扱い・最適経路探索
    • Wiki Gameや高速グラフアルゴリズムの実装
  • RAFTプロトコル実装

    • 分散コンピューティング対応のRAFTをゼロから実装
    • コンセンサス・障害復旧・分散システムの理解
    • RAFT論文とリソース参照
  • 手続き型クロスワード生成

    • 難易度調整可能なクロスワード自動生成プログラム
    • 制約伝播・難易度モデリング・手続き型生成
    • Wave Function Collapseアルゴリズム実装例
  • Bitcask(KVS)

    • Bitcask風の高効率埋め込み型KVSを自作
    • データベース・ストレージ効率化の学習
    • 論文を参考に実装
  • オーディオフィンガープリント

    • Shazamのような音声特徴抽出・照合
    • ハッシュ検索・信号処理の基礎
    • 詳細解説記事あり
  • Dangerous Daveリメイク

    • ゲーム開発入門としてSDLで名作ゲームを再現
    • ストーリー・NPC・レベル設計を追加
    • John Romeroやid Softwareの歴史も学習
  • diffツール

    • テキストファイルやプログラムの差分比較アルゴリズム実装
    • 動的計画法・グラフ探索の応用
    • Myers' diff論文参照
  • UMLクラス図自動生成

    • ソースコードから継承関係等を含むUML図を自動生成
    • AST解析・オブジェクト指向可視化
    • パーシング解説記事あり
  • BMPコーデック

    • BMP画像フォーマットのエンコーダ/デコーダ開発
    • バイナリ解析・画像エンコード・ピクセルバッファ
    • Wikipedia記事参照
  • FUSEファイルシステム

    • Linux用FUSEファイルシステムをゼロから構築
    • インデックス・メタデータ・キャッシュの最適化
    • ファイルシステム概念解説記事参照
  • 量子コンピュータシミュレーション

    • Qubitや量子ゲートを実装し量子アルゴリズムを模擬
    • 量子計算・直感的理解
    • 必要最低限の理論を短論文で学習
  • VLC風ビデオプレイヤー

    • ffmpegでH.264/H.265デコードしスマートデバイスへキャスト
    • パケットバッファ・発見プロトコル・ストリームエンコード
    • 実装入門記事あり
  • Redisクローン

    • 基本コマンド/RDB永続化/レプリカ同期/トランザクション対応
    • システムプログラミングの深掘り
    • Redis公式ドキュメント参照
  • ブラウザ動画編集ツール

    • クライアントサイドで動作しファイルアップロード不要
    • WASM・WebGL活用による高性能化
    • WebAssembly公式サイト参照
  • 認証サーバ(セッション/JWT)

    • 暗号化・トークン有効期限・リフレッシュフロー実装
    • ユーザーセッション管理・セキュリティの実践
    • ユーザー名/パスワード認証からJWTまで
  • オートコンプリートシステム

    • 入力補完機能の実装と高速化最適化
    • 検索体験向上・アルゴリズム最適化
    • 実装解説YouTube動画あり
  • SQLite風SQLエンジン

    • .dbファイル読み込み・インデックス・クエリ実行
    • B-tree・ストレージ構造の理解
    • SQL50年の歴史やSQLite内部構造
  • バックグラウンドノイズ除去

    • 音声ファイルのノイズ除去アルゴリズム開発
    • 信号処理・カーマンフィルタなどの応用
    • 応用例多数
  • Dropbox風ファイル共有アプリ

    • 同期・クラウドストレージ・簡易P2Pの設計
    • クラウドアーキテクチャ・バックエンド設計
    • システム設計記事参照
  • Google Maps風マップエンジン

    • 道路・地形・ランドマーク・エリアのインデックス化
    • 空間インデックス・範囲クエリ・ズームレベル抽象化
    • R-tree/Quadtreeやオープンデータ活用
  • 都市道路ネットワークと交通シミュレーション

    • 実データで都市交通を再現し最適化案を設計
    • NP困難最適化・現実制約の解決
    • SMAやACOアルゴリズム実装
  • 分散型コラボレーティブエディタ

    • Google DocsのようなP2Pテキストエディタ
    • CRDT・同時編集・最終整合性の実装
    • 高速テキストバッファ構造設計
  • 進化的設計

    • 機械モデルを遺伝的アルゴリズムで自動進化
    • フィットネス関数・物理シミュレーション
    • NASAのアンテナ設計事例や動画解説
  • Webサーバ

    • HTTPリクエスト・静的ファイル・ルーティング・リバースプロキシ対応
    • ソケットプログラミング・Webサーバの仕組み
    • 実装入門記事
  • 深度推定

    • ステレオ画像ペアから深度マップ推定
    • コンピュータビジョン・グラフィカルモデル
    • Belief Propagation解説記事やMiddlebury Dataset
  • Gitクローン

    • init/commit/diff/log/ブランチ等の最小機能実装
    • バージョン管理・ハッシュ・木構造の学習
    • Git内部構造解説記事
  • GDB風デバッガ

    • ステップ実行・ブレークポイント・メモリ検査機能
    • 低レベルシステムプログラミング
    • GDB内部構造解説記事
  • ニューラルネットワークフレームワーク

    • テンソルクラス・自動微分・基本レイヤ・オプティマイザ自作
    • バックプロパゲーション・勾配降下法
    • 3層NNからスタート、Karpathyの動画解説
  • チェスアプリ

    • 対人戦・UCIエンジン対戦、自己学習AIも追加可能
    • アルゴリズム・UI・AI実装
    • AlphaZeroやLeelaの学習法、ルールやWiki参照
  • Wikipedia検索エンジン

    • タイポ耐性・意味ランキング・ファジークエリ対応の高速検索
    • インデックス・トークナイズ・ランキング
    • 情報検索の基礎解説記事
  • CDNキャッシュシステム

    • 静的アセットの冗長取得防止キャッシュ構築
    • Webキャッシュ・ログ解析・確率的データ構造
    • NASAのHTTPリクエストデータセットや概念記事
  • TikTok風ショート動画アプリ

    • 無限スクロール・ソーシャルグラフ・パーソナライズドフィード
    • プリロード・知識グラフ・行動シグナル
    • Bytedanceの推薦システム記事参照

※ ここに記載したのは73案のうち抜粋です。全プロジェクト案の詳細や参考リンクは、オリジナル英語記事等を参照してください。
各プロジェクトは実装しながら学びが深まる内容となっており、開発者のスキルアップに最適です。

Hackerたちの意見

BitTorrentクライアントを書くのを超おすすめするよ。仕様も簡単に理解できるし、深く掘り下げても浅くやっても楽しめるサブプロブレムがいっぱいある。自分の頑張りの結果、Debianカーネルみたいなものをダウンロードできるのはすごく達成感があるよ。基本的な実装が終わったら、マグネットリンクやシーディングに挑戦するのも楽しいよ。これでピアツーピアシステムやChordみたいなDHTにすごく興味が湧いた!
大学の時、学期末のプロジェクトで「ピアツーピア」クライアントを作るってのがあったんだ。特にBitTorrentじゃないけどね。すごく楽しかったよ!ハンドシェイクの方法やチャンクサイズを考えるのが面白かった。新入生として実際に動くのを見るのはめっちゃクールだった。
なんか変なリストだね。#58は自分でmallocを作るってやつ。新しい開発者にはちょっと難しいプロジェクトだと思う(mallocが実際に何をしてるのか全然知らないと、OSとか他のことをちょっと勉強しないといけないかも)。その次の#59では、自分でストリーミングプロトコルをゼロから作れって提案してる…いいプロジェクトもあるけど、難易度がバラバラすぎる。
私のrAI-darによると、このリストと説明文はAIによって作られた可能性が高いね。真ん中あたりが特にそう読める。
ここHNで何年も話題になってきたプロジェクトアイデアのシリーズを紹介するね:プログラマーが挑戦すべきプログラミングプロジェクト https://austinhenley.com/blog/challengingprojects.html
学部の一環でZync FPGA上にスペースインベーダーを実装しなきゃいけなかったんだけど、ハードウェアでやる部分とソフトウェアでやる部分を選べたんだ。みんながどんなアイデアを出すのかを見るのがすごく楽しかったよ。「エクストラ」をやることでボーナスポイントがもらえるからね。誰かがシンプルなマイクの周波数分析ブロックを作って、録音機で音を出すことで左に行ったり右に行ったり、撃ったりできるようにしてた。
あなたのリストは前に見たことがあって、正直OPよりもずっと評価しやすいと思う。すごく簡潔だし、説明も実際に何を学ぶか、何に苦労するかをちゃんと示してる。各プロジェクトには始めるためのリソースもついてるし(いつかこれをやってみるかもしれない ;))。OPは「死ぬ前に読むべき100冊の本」みたいな、著者がリストにあることを一つもやってない感じの投稿に思える。
これ、前にブックマークしたのを思い出した!(罪悪感!)ありがとう!
このリストの方が好きだな。客観的に見てどっちが良いかは分からないけど、スプレッドシート以外は全部やったことがある気がする。スプレッドシートを使うのはちょっと難しそうだけど、だからって欲しいわけじゃないな。
これって、今の子たちが言う「アストロターフィング」ってやつ?
CodeCraftersにとっては初めてじゃないよね。https://news.ycombinator.com/item?id=38236285
このリストがAI生成だと疑っているコメントを見たよ。それが本当かもしれない。でも皮肉なことに、「ゼロから作る」っていう行為がAI依存への最良の解毒剤なんだ。日本から書いてるけど、このプロセスを「修行」って呼ぶよ。熟練の大工は、効率的だからじゃなくて、鋼の性質を理解するために、道具を研ぐことを何年も学ぶんだ。自分のRedisやGitを作ることは、結果(AIが瞬時に提供できるもの)についてじゃなくて、その摩擦についてなんだ。その摩擦が、どのLLMもシミュレートできないメンタルモデルを作る。この記事がマーケティングかどうかは別として、「修行」自体は有効だよ。
>日本から書いてるんだけど、このプロセスを「修行」って呼ぶんだ。大工の達人は、道具を研ぐことを何年も学ぶんだけど、それは効率的だからじゃなくて、鋼の性質を理解するためなんだ。繰り返しが含まれてるのかな?自分のRedisを20回も作る?(ちょっと気になっただけ)。
なんか、ほとんどのコメントで「日本から書いてます」って言わずにはいられないみたいだね。君が実際に日本で生まれ育ったのか、移民なのか、俺には関係ないけど。ただの気づきだし、言わなくても君の意見が薄れるとは思わないよ。アカウントの年齢からすると、ちょっとボットっぽい匂いがするかな。
共有してくれてありがとう。日本人の細部へのこだわりは、いつも素晴らしいと思ってる。そういうところから学んで、自分の生活に活かそうとしてるんだ。
今まで一緒に働いた中で最高の撮影監督は、以前はガファー(照明チーム)だったよ。同じ原則だと思う!
確かにマーケティング的な要素はあるけど、もっとひどくなる可能性もあったよね。ウェブサイトのチュートリアルや有料商品よりも、Redisのドキュメントを見てRedisクライアントを作ることを勧めてる。
これらの中には、ランダムな木や森みたいに1日かかるものもあるし、他は学部の最終プロジェクトの範囲内で簡単にできるものもあるよ。あるいは、修士論文のテーマにもなり得る。
意図的に小さなものを作って、エンドツーエンドで理解できる小さなツールやプロトコルを完成させてみて。満足感は、スケールじゃなくて、明確さや制約、全体の流れを終わらせることから来るんだ。
これはcodecrafters.ioからのもので、こういうプロジェクトに取り組むのを助けるプラットフォームなんだ。基本的に、誠実さを保つための統合テストやコミュニティも提供してる。明確に定義された要件を通じて、完全な実装に到達するんだ。今、彼らの「自分でRedisを作る」プロジェクトに取り組んでるけど、すごく楽しいよ。これがAI生成だとは思わないな。彼らはコミュニティに新しいプロジェクトのアイデアを求めていて、このリストは彼らが受け取ったアイデアで構成されてると思う。
このリストを見ると、自分があまり良いプログラマーじゃない気がしてくる。全部自分の能力を超えてる感じがするんだよね。
大体のプロジェクトは、細かく分けるまでそんなもんだよ。
経験豊富なプログラマーでもそうだけど、みんなそれを認めたがらないよね ;-) それは一人または複数のプログラマーの努力の結果なんだ。でも、興味があることを始めるのを自分の疑念で止めないでほしい。自分のペースで始めて、他人と競争するんじゃなくて、学ぶことに集中しよう。始める良い方法は、自分の選んだ分野の過去の作品を勉強することだよ。例えば、ここでアダム・ダンケルの作品にリンクしてるから、これを参考にして自分の実装に活かしてみて。全部小さいもので、組み込みシステム用に作られてるから、比較的理解しやすいよ。必要に応じてAIツールを使って、コードを理解したり生成したりするといいよ。
HNの人たちが4chanの/g/プログラミングチャレンジについてどう思ってるのか気になるな。個人的には、難易度がちょっと恣意的に感じる。例えば、基本的なブートローダーがCコンパイラより難しいって言うのはどうかと思う。https://camo.githubusercontent.com/a4ce28d9d68f8d5443aef3123...
「非画像コンテンツタイプが返されました」って出るね。GHはホットリンクされたユーザーアセットが好きじゃないみたい。もしあれば、埋め込むための`.md`をリンクした方がいいかも。