
2026/04/18 1:19
私は旧来の手法を用いて 3 か月もの間、コーディングに費やしています。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
著者は最近、AI の利用なしにコンピュータサイエンスの基礎を習熟することを主たる目的として、6 週間のコーディングリトリートに参加するためにブロークリンへ移転しました。その場所はrecurse center(RC)です。この実験は、大規模言語モデルへの依存が高まっている現状に挑戦しており、LLM は即時の回答を提供することが多いものの、コードベースに対する深い理解を損なう恐れがあるという点については、著者が Aily Labs で 2 年間勤務して AI エージェント(ウェブ検索エージェントなど)の開発や、オープンソース LLM に関するジャーナルクラブを主導した経験から観察されたものです。身体的な運動と知的な熟練を比較するアナロジーに基づき、著者は真の習熟には困難な問題に直接的に取り組むことが不可欠だと信じています。このアプローチを実証するためには、既に CS336 の課題で 50 ページ分のコードを執筆し、Transformer アーキテクチャ(GPT-2 スタイル)と最適化されたトークナイザーを手動で実装しています。また、OpenWebText などのデータセットに対して、1700 万パラメータのモデルを用いたトレーニング実験も行っています。現在の作業は CS336 の課題 2 に注力しており、GPU プロファイリングと Triton における FlashAttention2 の実装が含まれます。タイトなスケジュールにより、レトロコーディングチャレンジなど多様な活動を通じてコンピューターアーキテクチャの各層を深く理解することといった元来の目標をすべて達成することは不可能でもありますが、著者は厳密な評価に焦点を当てて生産環境で動作するエージェントを発表(シッピング)することを意図しています。究極的には、この旅路は AI ツールが進化する中でも基礎スキルが依然として不可欠であることを示すことを目指しており、エンジニアが発行されたコードの受動的消費者となるのではなく、真なるアーキテクチャ的な理解を維持できるようにすることを目指しています。
本文
ニューヨーク・ブルックリン。2026 年 3 月
コーディングのリトリートのために、私はブルックリンへの移転を決めました。米国へ戻る理由にはいくつかの個人的な事情もありました。しかし、即座に仕事に戻ろうとするのではなく、AI にほとんど依存せず、主にコーディングに集中できる期間を設けたいと考えたところでした。多くの優秀なプログラマが「プログラミングは既に解決された問題である」と主張するまさにその時期です。現在このリトリートは 6 ヶ週間経過しており、これまでの取り組みについて少し解説させていただこうと思います。
過去 2 年間にわたって、バルセロナの Aily Labs では、超有能なエンジニアたちと共に AI エージェントの開発に携わってきました。2024 年初頭の最初のプロジェクトの一つとして、社内利用可能なウェブ検索エージェントを開発しました。これは、Anthropic が「効果的な AI エージェントの構築」を論じた記事を約 6 ヶ月早く、OpenAI の DeepResearch を約 1 年先行して実現したものです。また、Cursor の初期利用や、LLM を活用したナレッジグラフの構築など、常に使用ケースに応じて新しいアプローチを試行錯誤してきました。Aily で勤務していた際の最も素晴らしい体験の一つが、週に一度開催されるジャーナルクラブを主導することでした。私は、オープンソース LLM の構築方法を解説する論文を選び、発表しました(DeepSeek R1、Ai2 の Olmo 3、そして Meta の Llama 3)。これら全ての知識は、モデルの内側でトレーニングするか、最上位水準の閉鎖型モデルを取り巻くワークフローを構築するかという、変化し続けるトレードオフを理解する助けとなりました。
私は 2023 年に初めて LLM を試した時点でその魅力に取り憑かれていましたが、探究心は常にそれら的工作原理や応用方法についての学習へと導いていました。同時に、LLM やエージェントについて学びながら、それらをコーディングにも活用していました。「手書き」でコードを書くときは、実際には「望むことへの記述」と「コードベースの理解深化」という二つの作業を行っていると気づきました。しかし、コーディングエージェントを使うと、プロンプトに記した内容がそのまま反映されます(良い結果でも悪い結果でも)。これはつまり、自分が正確に何を望んでいるか把握できていない場合、コーディングエージェントは喜んで多くの仮定を立ててしまうことを意味します。その結果、学びの機会を失い、コードベースへの理解も浅くなるという事態がほとんど避けられませんでした。
他方、コーディングエージェントは開発の反復を劇的に加速させ、(当然のことながら、十分なテストを経てからですが)機能するソフトウェアを実現するのに役立ちました。また、優れた「教師」としても機能していました。科学者・著者のカル・ニューポート氏は『ディープ・ワーク』を含む多数の生産性向上書を執筆しており、最近彼は、このトレードオフについて私の共感を呼ぶような記述を行いました。その中で、彼は「運動と健康の関係」に似て、「思考と技術(craft)の関係」についても言及しています。「自分の文章は自分で書くべきだ」という考えに基づき、明確なメモや報告書を書くために必要な努力こそが、アスリートにとってのジムでのトレーニングと同じく、技術習得における不可欠な要素であり、排除すべき邪魔なものではないと指摘しています。
プログラミングに 있어서는同じことが言えると思います。Aily で働いていた驚嘆すべき才能を持つプログラマたちは、ほとんどが AI を極めて上手に活用する者でもありました。彼らの深い知識こそが、このツールに対してより大きなレバレッジをもたらしたのです。エージェントを本番環境に導入する日々の業務においても、学習は止めることはありませんでした。しかしながら、私が学ぶべきコーディングやコンピュータに関する概念のリストは拡大の一途をたどり、忙しさのために学ぶ時間が取れなくなっていました。そんな折、米国へ戻らなければならない機会を得た際、Recurse Center(以下、RC)という場所でこれに集中する最適なタイミングだと気づきました。
RC はブルックリンで開催される自主型フルタイムのコーディングリトリートです。アプリケーションとコーディング面接を経て合格し、自分がプログラムしたいアイデアを持って RC に入ると、その後 6 ヶ月または 12 ヶ週間にわたってプログラミングに没頭します。RC のハイライトの一つは「協働性」です。あなたは経験数十年を持つプログラマたちや、専門性が大きく異なる他の参加者たちと一緒にグループとなり、一緒に活動します。もう一つのハイライトは「無料」であること!
RC への参加にあたり、私は以下の目標を持っていました:
- LLM から零々訓練する。 これには事前・事後トレーニングを含み、可能な限りゼロから行うことを目指します。つまり、既存のコードベースをフォークするのではなく、独自に Transformer アーキテクチャを書くことです。
- 「手書き」による Python プログラミング力を高める。 現在数年以上 Python で働いていますが、まだ学ぶべきことが山ほどあることに気づいています。文書や LLM に依存することを極限まで抑え、さまざまなプロジェクトを適切に設定するための直観を培いたいと思います。
- コンピュータの仕組みをより深く理解する。 まさに大まかな目標ですが、コンピュータは抽象化レベルが多岐にわたる極めて複雑な機械であることを承知しています。形式的なコンピュータサイエンス教育を受けた経験がないため、これらの層とその相互작용についての Mental Model を構築したいと考えています。具体的な計画はありませんが、RC がこれに最適な場所だと確信しています。
では、進捗はどうでしょうか?スタンフォード大学の「言語モデリングをゼロから構築する(CS336)」コースの最初の課題は LLM のコードなしで完了しました。背景として、この課題は 50 ページにも及んでいますが、別の RC 参加者との協力により、Python を用いた最適化されたトークナイザを開発し、PyTorch で GPT-2 スタイルのアーキテクチャを構築しました。Tiny Stories データセット上でハイパラーパラメータの調整を行った後、これらのパラメータを用いて OpenWebText データセット(約 90 億トークン)においてもトレーニングを行いました。
私自身が開発した 17M パラメータモデルについて、学習率を異なる値でスキャンする実験を行いました。高い学習率では不安定化が生じることを確認しました。これは Tiny Stories データセット上で行われたもので、A100 GPU を用いて約 1 時間でトレーニングできました。また、CS336 の他の課題も達成することを目指しています:言語モデルの最適化、スケーリング則の推定と計算、生テキストデータの事前トレーニングデータへの変換、そして最終的な事後トレーニングです。すでに第二回目の課題(GPU のプロファイリングと Triton による FlashAttention2 の実装)を開始しています。まだ多くの作業があります理想的には、これらの課題の核心部分を通るだけでなく、自らのモデル的事後トレーニングも達成したいと考えています。
Python または PyTorch を用いて多数の小型エージェントやニューラルネットワークを実装してきましたが、特に最も有益だったのは、10 年以上 Python で働いてきた人々とペアプログラミングを行ったことでした。彼らを見て学ぶこともあれば、私が作業する様子を見せることもあります。ペアプログラミングから得た良い例の一つとして、「コードを書いている際に文法や演算を完全に覚えていない場合でも、すぐにターミナルを開き、非常に単純なサンプルを入力して素早く反復する方法」を取り入れました。彼は通常、1 分以内で正しいか確認できましたし、グーグル検索や LLM の問い合わせをする必要もありませんでした。この手法は些細に思えるかもしれませんが、それを筋肉記憶として定着させることで、私が行き詰まった状態から速く脱出しやすくなりました。今後もこのような方向性で進めたいと考えています。ペアプログラミングしながら単純なプロジェクトや「Advent of Code」のような課題に取り組むことです。他者との生きた共同作業は最初は少し緊張しましたが、それが逆に多くの進歩を招いています。
以下は、私が「コンピュータの仕組みをより深く理解する」ことに寄与した例です:
- **1983 年の Apple IIe コンピュータで BASIC ランゲージで经典的なFizzBuzz関数を書いた。**当時のコンピューティングの環境がいかに異なっていたか(例えばコード編集や実行プロセスの手動作業面)を見ていて感慨深かったが、基本的には現代と変わらぬことが分かった。
- **Apple IIe で実験する。**私が常に少し自意識過剰に感じるのは、Unix/ターミナルスキルに関するものである。そこで「CTF Fridays」という、毎週開催される Bandit などさまざまな「戦争ゲーム」に取り組むセッションに参加した。これらはターミナルを通じて行われる Unix 系およびコンピューターセキュリティに関連する課題で、パスワード収集やレベルアップが目的である。今では Claude Code が私のコンピュータ上で何を試しているかをほぼ予見できるようになった!
- Vim だけで単一層のパーセプトロンを手動で実装した。 AI 教科書をめくった際に目にした単一層パーセプトロンの例を、完全に Vim でコーディングした。最初は極めて面倒だったが、別の RC 参加者からプロのアドバイスをもらい、いくつかのショートカットを覚えた。現在ではクラウド GPU でトレーニングジョブを実行中に緊急にファイルを修正する際にも非常に有用になっている。
- Clojure ワークショップに参加した。 Clojure を 15 年以上使用してきた有能な講師によるワークショップである。Clojure は関数型プログラミング言語であり、私はその分野での経験が浅かったため、テーマ自体に興味深かった。教授法も素晴らしかった:短かいイントロダクションの後、モブプログラミングの回を行い、テーブルを囲んで全員で問題を解決し、それぞれ 1〜2 分の時間を与えながら解答を進めていった。
- **週次技術プレゼンテーションに参加・発表。**これらは 5 分間の短いトークスリーズであり、退屈しない長さでありながら、有意義なことを学べるスピード感がある。タイトル例:「Rust コードの実行」、「GPUs for Dummies」、「Type B の人々向けに Typesafe API を構築する」、「Some Useless Agents(これは私のもの!)」など。これまで 2 回発表しており、一つは単純なエージェントアーキテクチャについて、もう一つは MCP ツールのスケーリング効率化についてであった。今週は GPU の最適化方法に関する別のトピックを発表予定だ。他人のプロジェクトやキャリアの話さえ聞くだけで、コンピュータが解決可能な問題領域全体を理解する上で大きな助けとなっている。
まもなく本番環境にエージェントをデプロイし、新たなスキルとトリックを駆使して評価テストを行うことになるでしょう。しかし、現時点では RC に残された時間はまだ 6 ヶ週間あり、私自身のリストにある全ての目標を達成できるか心配になりつつあります。それは果たせないでしょうが、それが RC が素晴らしい所以なのです:すべてをチェックしきることに主眼をおくのではなく、コーディングの時間を持てることに意義があるからです。