Web開発
第二次元に仕事を入れるとどうなるか?
What happens if you put work into the second dimension? (norbertkozsir.com)
要約
この記事は、タブの代わりにリアルなターミナルや実行中のアプリを並べて表示できる2Dキャンバスのプロトタイプ開発について述べています。このプロトタイプはFlutterFlowで「Campus」という製品に発展しました。著者は、エージェントコーディングの台頭により、コンテキストスイッチングのコストが増大し、ソフトウェアエンジニアリングがより疲れるようになったと指摘しています。Campusは、関連するものを近くに配置し、作業の種類ではなく、作業内容でグループ化することで、コンテキストスイッチングを軽減し、よりホリスティックな作業体験を提供することを目指しています。これは、単なる画像やリンクではなく、実際に動作するタイル(ターミナル、ブラウザなど)を配置できる点が、Miroなどの従来の無限キャンバスツールとの違いです。
全文翻訳
私は、すべての仕事をこなせる2Dキャンバスのプロトタイプを構築しました。リアルなターミナル、実行中のアプリ、ブラウザをタブの列ではなく並べて表示します。私たちFlutterFlowでは、これを使用することに夢中になり、Campusという完全な製品を構築しました。それは無料で、現在macOSで利用可能です。次に、私たちがどのようにしてここにたどり着いたかの物語が続きます…
コンテキストスイッチングの時代
わずか数年前、開発は多かれ少なかれ単純な方法で整理されていました。詳細をある程度計画し、次の1〜2週間その機能に取り組み、それを繰り返します。エージェントコーディングの登場により、それは完全に変わりました。特定の種類の作業の計画や議論自体が、エージェントに作業を行わせるよりも遅くなっています。これは、私や知っている多くの人々の働き方に大きな変化をもたらしています。長時間単一のタスクに集中するのではなく、並列作業が新しい標準となっています。
私の注意、当時と今。
どちらの週がより疲れるか推測してください。
誰もが元に戻りたいとは思わないでしょうが、それは大きな代償を伴いました。コンテキストスイッチングです。私と友人のグループの間で共通の認識は、ソフトウェアエンジニアリングがより疲れるようになったということです。非常に皮肉なことに、私たちは本質的に実際の作業を少なくしているのです。コンテキストスイッチングがその大きな要因を占めていると思います。
なぜMinecraftにエージェントを入れたのか
過去1年ほど、私は「仕事」をより良いコンテキストに入れるさまざまな方法を探求することに夢中になっています。私は、仕事の未来がよりホリスティックな働き方に向かっていると強く信じています。Jira、Slack、VSC、GitHubを切り替えるよりも、未来がより良いものであることを願っています。
私の初期の実験の1つは、Minecraftにエージェントを入れることでした。なぜMinecraftなのか、あなたは尋ねるかもしれません。そして、MinecraftというIDEの聖杯を疑うことは許されるかもしれません。しかし、私はMinecraftがアイデアを3Dでプロトタイピングするための非常に興味深い方法だと考えています。それはよく知られており、非常に優れたモッディングコミュニティがあり、そして最も重要なことに、すべての基本がすでに実装されています。3D、ネットワーキング、または一般的なインタラクションを再発明する必要はありません。
すごい、Opus 4.6、時代は本当に急速に進歩しました。
私はこれをあまり遠くまで進めませんでしたが、「物理的」な空間に仕事を持ちながら、このますます孤立した世界で人間的なつながりを維持するという考えは、私にとって魅力的でした。
数ヶ月後、私はFlutterFlowで新しい仕事を始めました。将来の仕事に関する興味深い概念の実験を十分に経験した後、今回はThree.jsを使用して、他の人がMinecraftを購入しなくても試せるように、仕事の3Dでの新しいプロトタイプを作成しました。これは興味深かったです!実際にこの環境で一日の午後を過ごしましたが、それは…めまいがしましたか?しばらくするとめまいがしました。特にコンテキストスイッチングを伴う3Dでの飛行と見回しは、私の脳にとってさらに混乱を招きました。
このプロトタイプを数人の同僚に見せたところ、Abel(創業者の一人)は興味を示しましたが、これは2Dの方が面白いだろうと指摘しました。
翌日、私は別のプロトタイプを作成しました。今回はFlutterを使用し、2Dでした。そしてそれは広まりました。数日以内に、実際に機能するものを作成しました。
私たちの乱雑な初期の共同ワークスペース
プロジェクト「work_canvas」
Work Canvas、後のCampusは、その時点では計画も望んでもいなかったものでしたが、私がチーム全体に共有した最初のプロトタイプは野火のように広がりました。私たちは、以前のタブ切り替えワークフローよりも、この2D空間ワークキャンバスの非常に初期のプロトタイプで作業することを好むようになりました。
それがどのように発展したかのツアーを以下に示します。
要するに、Campusはあなたが実際に作業できる共同無限キャンバスです。それは、すぐに利用できるさまざまな種類のタイル(ターミナル、Webブラウザ、アセットなど)をサポートしており、現在、広範なプラグインシステムに取り組んでいます。全体的な目標は、仕事のために作られたサンドボックスを構築することです。
Minecraftプロトタイプ以来、私の頭の中に残っているアイデアの1つはマルチプレイヤーでした。若い頃にMinecraftをプレイした最も大切な思い出は、友達と遊んだことでした。空間を作成し、それをパーソナライズし、友達と共有できるのは当然のことのように感じます。
コンテキストスイッチの件に戻ると、Campusの哲学は、すべてをコンテキスト内に置くことです。基本的に、それは関連するものを互いに近くに配置し、種類ではなく、作業中のものでグループ化することです。これは、すべてのモデルを1つのフォルダに、すべてのコントローラーを別のフォルダに詰め込むのではなく、機能ごとにコードを構造化するのと同じ本能です。これは、作業を作成しているエージェント、成果物(コンパイルおよび実行中のアプリなど)、および追加のリソース(チケット、問題、インスピレーション)が近接していることを意味します。
コンテキストスイッチングを完全に排除することはできませんが、作業の一部を再開することが面倒でなくなりました。これを測定したとは言いません。私たちはただこの方法で働くのが好きで、誰も元に戻りたいとは思っていません。
しかし、これは単なるMiroではありませんか?
もっともな質問です。そして、私が最初に受ける質問です。無限キャンバスは新しいものではありません。Miro、FigJam、Obsidian Canvasは何年も前から存在しており、それぞれの得意分野で優れています。違いは、タイルの実際の意味です。ホワイトボードでは、タイルは何か(スクリーンショット、付箋、他の場所にある実際のものを指すリンク)の画像です。Campusでは、タイルは実際のものです。キャンバス上のそのターミナルは、私のマシンで、私のリポジトリで、私のエージェントが作業しているターミナルです。その隣のアプリは、実際にビルドされ、実際に実行されているものです。あなたはCampusにあなたの仕事のコピーを貼り付けるのではなく、あなたはCampusにあなたの仕事そのものを配置します。タイリングウィンドウマネージャーは、その部分を正しく理解しています。彼らがあなたに与えないのは、モニターよりも大きい空間、ズームアウトして移動でき、実際に記憶できる空間です。
空間記憶
Campusでの私のワークスペースはかなり乱雑になることがあります。しかし、興味深いことに、私にとっては乱雑ではありません。そこには「記憶の宮殿」という概念があります。それは基本的に、頭の中で構築する想像上の3D空間であり、さまざまなアイデアや物事をその空間内の実際の場所と関連付けます。上のスクリーンショットでは、位置とサイズだけで、どのタイルとターミナルが何に取り組んでいるかをすぐに伝えることができます。タブ化されたエクスペリエンスと比較すると、私は常に迷子になり、誰が何に取り組んでいるかを理解するためにクリックして回る必要がありました。
私はブラウザタブが多すぎる人の一人です(あまりにも乱雑になると、別のグループを作成して古いタブをすべてそこに押し込みます…)。
Campusと仲間や友人たち
仮想空間を作成するこのプロセスで、さらに魅力的なのは、それを他者と一緒に行うことです。空間の深く根ざした共通の理解があれば、理論的にはコラボレーションがよりシームレスになるはずです。Campusは、Campus内のすべてを他者と共有できるという前提で構築されています。
Campusは非常に興味深いネットワークアーキテクチャを持っています。すべてが(オプトイン)マルチプレイヤーです。あなたが見るすべてのタイルと、あなたが取るすべてのインタラクションは、人々の間で共有できます。伝統的には、作業を行うサーバーが1つあり、ピアはその作業の出力を見てコマンドを送信します。ここでは、作業は各ユーザーの個人用コンピューターで行われます。ストリーミングデータはオプトインです(作業はローカルファーストであり、同僚との共有は明示的なアクションです)。メディア、例えば壁紙やバイナリデータは別の側面です。各アセットをハッシュで識別し、キャンバス上のものはそれらのハッシュを参照します。ピアがアセットを紛失した場合、アセット所有者から要求しますが、ピアツーピアではなくファンアウトサーバーを介してルーティングされるため、部屋の誰も誰とも直接接続しません。アセットがキャッシュされると、再参加時に再ダウンロードする必要はありません。これは少人数のチームや軽いアセットの使用にはうまく機能しますが、部屋に多くの人がいる場合は明らかにそれほどスケーラブルではありません(数百人がアセットを要求しているのに、自分自身をDDoS攻撃したくはないでしょう!)。しかし、1つのコア哲学があります。スケーリング、開発の複雑さ、またはセキュリティに関わらず、中央管理サーバーがボトルネックになることを望んでいません。私が望むことの1つは…