今日 ボブマーチンおじさん 、本物のヒーローが見せた これ ビデオ
このビデオで、ボブマーティンは、私たちのプログラミング言語は現時点で私たちの問題に対して適切なレベルにあると主張しています。ボブ・マーティンが私たちを詳細マネージャーと見なし、問題が詳細レベルにあるため、このビデオから私が得た理由の1つです。
ボブ・マーティンに反対しなければならないのはこれが初めてであり、プログラマーの人々がこれについてどう思うか疑問に思っていました。
まず、 [〜#〜] mda [〜#〜] と [〜#〜] mde [〜#〜] の違いがありますMDA自体は機能していませんそして私はあなたがこの種の問題を形式化することができないレベルで多くの形式化への道を非難します。 MDEとMDDはまだ自分自身を証明しようとしており、私の心の中で大きな期待を示しています。例えば MetaEdit を見てください
詳細はまだ私の頭の中で管理する必要がありますが、複数の場所ではなく、1つの場所(フレームワークまたはジェネレーター)で管理します。
私たちのような問題に適していますか?私はあなたがどの問題を見ているかに依存すると思います。現在のプログラミング言語は、市場投入までの時間に関する現在の要求に対応していますか?彼らはビジネスITコミュニケーションのギャップを埋めるのが得意ですか?
それで、あなたはどう思いますか ?
研究者および科学者として、私はいくつかの簡単なルールを学びました。最も重要なルールは、想像力に限界を持たせないことです。私が言いたいのは、今日の問題を抽象化するためのより良い方法を想像できないという事実は、それが存在しないという意味ではありません。別のアプローチがプログラミングについての考え方を完全に変えず、その結果、抽象化についての私の理解を変えないという意味ではありません。
市場の意味では、それは本当に競争についてです。他に誰もüberlangを持っていない場合、もちろん現在の言語は市場に適したレベルで問題を解決しているようです。合理的な期待はテクノロジーとともに進化します。
しかし、LISPに関するPaul Grahamのエッセイのいくつかを読むと、彼が彼の競争力のあるEdgeはユーバーランのLISPであると信じていたことがわかります。また、LISPによって提供される抽象化のレベルと、それがPythonなどとどのように異なるかについてのかなり強い主張もあります。私はそのような主張に信憑性を与えることを躊躇します...しかし彼はLISPコードを書くために4800万ドルを稼ぎました、そして私はしませんでした。私の考えでは、それは彼のストリートの信用に追加されます。
Grahamが正しいと仮定すると、Fortranファミリーの言語ツリーは、1957年にLISPファミリー言語のユーザーが利用できる抽象化のレベルにゆっくりと追いついていると結論付けることができます。それは大胆な主張ですが、それが今日の言語(つまり、Fortranの子孫)よりも真実である場合、今日の課題には十分ではありません。
しかし、ボブおじさんが間違っているために、グラハムが正しい必要はありません。ボブおじさんが何が可能かについての完全な知識を欠いている場合、ボブおじさんは間違っています。私たちがしなければならないことは、主に私たちが使用している言語と私たちが取り組んでいるパラダイムの機能であり、その逆ではありません。
私は現在の言語の「レベル」に問題はなく、私はLISP主義の完全な弟子でしたが、この会話全体が本当に私を悩ませています。
私たちが使用している言語は本当に私たちや他の人が構築した言語であるため、私は気になります上にコンパイラやインタプリタが提供するものは何でも。名詞、動詞、構文、およびセマンティクスは、「すぐに使用できる」ものだけでなく、含まれているライブラリ、定義したクラスとメソッド、作成したマクロ、作成したインタープリターで構成されます。コード化された、私たちが書いたパーサーとコードジェネレーター。
使用言語と作成言語の間に明確な境界線はありません。まるでロケットが宇宙空間に飛び立つようなものです。それぞれの時点で、それは以前に構築したものを利用しています。ロケットが他の人を排除するために特定の方向に加速するのと同じように、私たちのプログラム/言語は私たちが解決している特定の問題にますます構築されます。それはますますドメイン固有言語(DSL)になります。
したがって、「私たちの言語は適切なレベルにあるか」という質問全体が要点を見逃しています。重要なのは、私たちがプログラムするときはいつでも、新しい言語を構築しているということです。私たちは皆、それを行うための良い方法を知っている必要があり、基本言語は私たちを助けるはずです。言語の目的を理解する必要があります「物事を行う」、「オブジェクトを操作する」、「コンピューターを制御する」などではありません。言語の目的は、効果的に計算可能な方法で私たちの精神モデルを表現するです。
「まあ、それはUMLがやるべきことではなかったのですか?」と人々が言うことを私は知っています。答えは、それが事前に定められていたからこそ、できなかったということです。ドメイン固有言語はまさにそれです-固有です。ドメイン一般言語は、ドメイン固有言語に効果的に変換できる場合にのみ役立ちます。
彼の言うことの一つは正しいと思います。
今日のプログラミング言語は、適切な抽象化レベルにあります。
しかし、将来的には、現在と同じ言語を使用する可能性がありますが、コンパイラーが向上し、プロセッサーがより高速になるため(1秒あたりの計算数が増えるなど)、より高い言語を操作できるようになる可能性があります。 -レベル。パフォーマンスの詳細について心配する必要はありません。
これはほとんどのタスクですでに発生しており、pythonやRubyなどの動的言語の台頭と台頭がありますが、コンパイラが向上するにつれて、データベースや最終的にはカーネルモジュールなどの記述を開始できるようになる可能性があります。このスタイルのオペレーティングシステム。
Alan Perlisのエピグラムが頭に浮かびます。「プログラミング言語は、そのプログラムが無関係なものに注意を払う必要がある場合、低レベルです。」
また、プログラミングは詳細管理ではなく複雑さの管理だと思います。
非常に多くの言葉で言えば、多くのソフトウェアを作成するときにマイクロコードなどについて知ることで逃げることができれば(ハードウェアの特殊性でも逃げることができます)、他に何を逃れることができますか?考えられる答え:モデルを作成できるコンピューティング現象(オペレーティングシステム、パターンマッチングの文法、メモリ管理、データフロー、ソフトウェアメモリトランザクションなど)を考えて、それを十分に一般的かつ柔軟にして、快適に実行できるようにします。私たちが扱っている複雑な現象の望ましくない詳細のセットを「抽象化する」と呼ばれる精神的な魔法。
ですから、今日の一般的なプログラミング言語は、私の個人的な期待に決して近いとは思いません。
UsenetでPaulGrahamの Blub Paradox の実際の例を見てきました。 LISPプログラマーはPythonプログラマーにマクロが何に適しているかを説明しようとしていました。Python群衆はすべての例に次のように答えました:「あなたは同じことをすることができますPython。 "LISPの群衆が作ろうとしていたポイント、つまりLISPはプログラマーが独自の制御構造を追加できるという点は、Pythonグループで失われました。制御構造について理解している人は自分で追加するのは悪であり、保守不可能なコードにつながるという立場。
この例が示しているのは、プログラミング言語の抽象化のレベルが最も重要なことではないということです。私たちはなんとか機能するコードを書くことができ、LISPの高度な機能を見逃すことはありません。なぜなら、それらについて知らなかったからです(そして、それらはとにかく邪悪な機能であり、コードが読めなくなります)。
「今日の汎用言語」とは何ですか? 「現時点での私たちの問題」とは何ですか?リアルタイムの組み込みプログラムを作成することは、ビッグデータマイニングシステムを作成することとはまったく異なります。これは、Webアプリケーションを作成することとはまったく異なり、これらはすべて、明らかに異なる抽象化レベルで機能する必要があります。汎用デスクトップソフトウェアでさえ、C++、Python、LISPなどのさまざまな言語で正常に作成されています。これらはすべて異なるレベルで機能します-またはdimensions-抽象化の。
確かに、抽象化のレベルはそれほど重要ではないようです。どういうわけか、特定の言語は特定の問題でうまく機能するようです(明らかに理由がある場合もあります。コンピューターの物理レジスターへのアクセスを許可しない言語で低レベルのコードを書くことはできません。また、生のCでWebアプリを書くことは明らかにです非実用的)。
ボブ・マーティンはOO専門家です。彼はそれについて優れたものを書くことができますが、「プログラミング」と呼ばれる分野についての彼の考えはやや浅いようです。
ボブ・マーティンは私たちを詳細管理者と見なしており、問題は詳細レベルにあります。
私たちは詳細管理者であるため、問題は詳細レベルにあります。より高いレベルの抽象化で作業した場合、詳細はそれ自体で処理され、管理する必要がなくなります。
ボブおじさんは、プログラミング言語の上にMDAは必要ないということに同意します。私はJava開発者であり、モデルが詳細管理情報を処理できない場合にコードを自動的に生成する理由です。UMLがプロジェクトに必要な適切なレベルの抽象化ではないことに同意しません。 UMLがコード生成をリードすることを期待しない限り、UMLはすべてのプロジェクトで使用されるべき素晴らしい言語ですが、MDA、MDDなどは使用されるべきではありません...
多くのプロジェクトはホワイトボードのみを使用しますが、軽いUMLの方がはるかに適切でした。専門家である必要はありませんが、頭を使ってJavaおよびモデルレベルでオブジェクトについて話すことができます。UMLがわからない場合は、でクラス図を作成してください。アプリケーションのスケルトンを作成するため。
私が使用しているのは、必要なときにのみコードを生成し、コーディングするだけでどのモデルが更新されるかという高度なUMLです。アーキテクチャを作成してからコーディングを開始し、モデルに戻って、情報を失うことなく、非常によく記述されたコードを使用することなく、コードに戻ることができる素晴らしいテクノロジーです。私が使用するメカニズムは、Omondoによって開発されたインクリメンタルモデルマージです。 OmondoにはMDDまたはMDAはありませんが、JavaとUMLIDがマージされます。
ML 2.3はC#と同じアーキテクチャであり、Java?パッケージ、クラス、属性、メソッドがあり、制約を処理できることに気づいたことがありますか?)ボブおじさんが話している管理の詳細であるメソッド。問題は、UMLダイアグラムのみが説明されている間に、絶対に素晴らしいOMG仕様ジョブがメタモデルを処理していることです。つまり、UMLは単なるグラフィカルまたはMDA、MDDではありません。 。UMLは、モデル自体ではなく、モデルのビューアのみを含むUMLダイアグラムを含むプロジェクトモデル全体である必要があります。問題は、ツールがコードとモデルを作成するために変換レイヤーを使用し、UML2.3メタモデルである公式仕様ではないことです。 !!