自分でプログラミング言語を作る可能性は?

プログラミング言語を作る可能性のカバー画像

スティーブ・ジョブズのお気に入りの言葉を聞かれたら、多くの人がこう答えるのではないでしょうか:

ハングリーであれ。愚かであれ。

これは彼がスタンフォードで行ったスピーチの3番目の話から来ている言葉です。でも私のお気に入りのひとつは、最初の話から来ています:

ドットをつなげる

以下の内容は見たことありますか?

コンパイラのコンテンツ

コンピュータ科学を勉強したことがあれば、おそらく覚えているはずです。これは、クラシックなドラゴンブックからの内容です:

コンパイラの教科書のカバー

もし学校がコンパイラ原理のコースで別の教科書を採用していたとしても、DFAの概念は忘れられない礎石ですよね。はい、そうですよね?😄

もしこのコースが専攻に必須でなかったら、このコースを選択する学生がどれだけいたのか疑問です。学ぶのも難しい上に、実用的な観点から見ても:

職場で新しいプログラミング言語を作る可能性ってどれくらいあるの?

そのため、多くの学生にとっての動機は、単に試験に合格して単位を取ることになっています。正規表現、NFA、DFA、BNFなどの手動演繹の実践のおかげで、最終試験でいい点を取ることができた学生もいますが、実際にプログラミング言語がどう構築されるかに興味を持っている人は少ないです。

私もその疑問を持っていました。しかし私にとって、それは私の専攻の科学の部分を初めて感じた瞬間でした。正直言って、言語を作る機会があるとは思ってもいませんでした。でも、なぜか学ぶことに魅力を感じました。恐らく、キャリアを通じて使うツールの裏にある原理を理解できる安心感があるからでしょう。

振り返ってみると、今ならこう言えます:

大学院の最後の年、私はマイクロソフトでインターンシップをするチャンスに恵まれました。さらに幸運なことに、私が参加したチームは新しいDSL(ドメイン固有言語)をプロトコル用に構築していました。

最初は、解析された抽象構文木(AST)からドキュメントを生成するアウトプットアダプターに取り組んでいました。その後、リーダーは私に、現在のLRパーサーを新しい再帰下降パーサーで書き換える可能性を調べる新しいタスクを任せました。コンパイラ原理に対する以前の献身のおかげで、結果を得るのに予想よりも時間がかからなかったのだと思います。

私がプロトタイプをチームのアーキテクトと一対一でレビューした日をまだ覚えています。一般的に、彼は私のアプローチを肯定し、いくつかの指導と提案をしてくれました。他のチームメンバーは全員現地に行ってしまっていたので、私たち二人だけでしたが、それは私のインターンシップの中で最も素晴らしい瞬間でした。

私にとってはその仕事は終わったと思っていましたが、次のステップは正規の社員に本番コードを書いてもらうことになるだろうと。驚いたことに、本番環境に導入するのは私だったんです。それが最終的にマイクロソフトに参加するオファーが得られた主な理由だと思います。

10年以上のバックエンド開発者の経験がある私にとって、フロントエンドのコードを書くなんて想像もしていませんでした。これはフロントエンドとバックエンドの開発に異なるスキルセットが必要だけでなく、フロントエンド開発者には視覚的な美的センスが重要だと考えていたからですが、それは私にはないものでした。しかし、前職の会社で新しいSaaS製品を開発していたとき、開発者リソースが大幅に不足していました。その結果、私はフロントエンドのコードを書かなければならなくなりました。

良いフロントエンド開発者には決してなれないという見解は変わりませんが、その経験がフルスタック開発への扉を開いてくれました。フロントエンドとバックエンドの開発者の間の知識格差が目に見えており、複雑なウェブアプリの機能をエンドツーエンドで迅速に提供するのが非効率であることがわかりました。

いくつかの成功したソフトウェアを調べてみると、多くは作成者自身の痛みポイントがきっかけで作られていることに気づくでしょう。これは理解しやすい論理です:

自分の製品の顧客でなければ、それを正しく作ることはできません

ZenStackを作成した理由も同じです。上記の経験から、エンドツーエンドでの製品納品を大幅に遅らせる多くの痛み点を感じていました。そのため、ツールやインフラの分野を探求し、効率を改善する方法を見つけるための強い動機が生まれました。

DSLの経験は私たちにとって自然なことでした。私たちは、よく設計された言語がプログラミングのタスクを大幅に簡素化できることを目の当たりにしてきました。それは挑戦的ですが、多くの人が感じるほど難しいことではありません。そのため、コード生成を活用して開発者が書くコードを大幅に削減し、速いペースで前進できるようにするPrisma ORMの上に構築されたZenStackツールキットを、スキーマファースト設計で選んだのです。

どうやってZenStackを作ったか詳細はこちら:

プログラミング言語を作るのにどれだけの仕事が必要か?

ZenStackはまだ比較的新しいにもかかわらず、既に様々なスタックに統合されています:

ZenStackのカバー

時々、私たちが少し焦点を外しているのではないかと質問されます。その簡単な答えは、まだはっきりとは分かっていないので、試さなければならないということです。

ここで、スティーブ・ジョブズの言葉を引用して答えたいと思います:

再び、ドットを前を向いてつなげることはできません。ドットは振り返ることによってのみつながります。だから、これらのドットが将来何とかつながると信じなければなりません。あなたの直感、運命、人生、カルマ、何でも信じるものを信じる必要があります。このアプローチは私を裏切ることはなく、私の人生を変えました。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/zenstack/what-are-the-chances-of-you-creating-a-programming-language-11d2