言語とツール

ソフトウェア開発者の世界は2つの陣営に分かれています。 言語愛好家は、高レベルのプログラミングのパワー-高階関数、メタプログラミング、アスペクト指向プログラミング、リフレクションなどを称賛します。 ツールの専門家は、アセンブリとデバッグ、ドキュメント化とオートコンプリート、リファクタリングとテストにユーティリティを使用する優れたスキルを持っています。 言語愛好家は、開発にemacs、vimなどのようなテキストエディターを使用する傾向があります。新しい言語を含むほとんどすべての言語に適しています。 ツール愛好家は、Visual Studio、Eclipse、IntelliJなどのIDEを選択します。これらには、特化した開発ツールのセット全体が含まれています。







LaszloやGroovyなどの新しいプログラミング言語、およびAOPなどの新しい言語拡張機能は、通常、何らかの種類のIDEで完全にサポートされるまで、ユニバーサルテキストエディターでのみ使用できます。 しばらくして、言語が本当に「ショット」した場合、このサポートは間違いなく表示されます。 これは、適切なツールキットを作成するのが難しすぎるためではありません。 これは、言語の開発とそのためのツールの開発への投資がいくつかの直交面にあり、時にはお互いを絞り出すためであるためです。 そして、ここに理由があります。





プログラミング言語



ほとんどの時間を直接言語とその使用方法の学習に費やすと、世界の写真は次のようになります。







この図では、プログラミング言語の最初の選択とその習熟度が生産性に大きな影響を与えます。 この場合、IDEの選択はそれほど重要ではありません。基本的に、IDEはテキストエディターとして使用しますが、まれに例外があります。 ただし、最新のIDEが提供するすべてのツールを使用するわけではありません。



ツール



一方、開発ツールの研究にほとんどの時間を費やしている場合、統合されたエディターとデバッガー、オートコンプリート、リファクタリング、モデリング、設計、テスト、プロファイリングなどのフルパワーを使用することの気持ちを知っています。 世界のあなたの写真は次のようになります。







IDEを使用すると、ベアテキストエディターよりも大きな利点があります。 一方、プログラミング言語の選択はそれほど重要ではありません-概して、同じクラスとメソッド、変数と式、条件とサイクルを使用します。 しかし、スタイルの真の強みは、IDEが提供する開発の速度にあります。



2つのキャンプ



しかし、冗談でその猿のようになりたいなら、どこに行けばいいですか?スマートで美しいですか? 同時に使用されるプログラミング言語とツールの専門家になることは可能ですか? これは難しいです。 日はまだ24時間で、年は365日のみです。 各無料分は、言語またはツールボックスの学習に専念できます。 これらの各オプションは最終的にスキルにプラスの効果をもたらしますが、方法は異なります。 これらの開発パスは、主に競合している-あなたの注意のために、あなたの時間のために、あなたのプログラミングスタイルのために。 そして最後に、あなたは2つのキャンプのうちの1つにいることに気づきます。



言語の可能性を学ぶことに時間をかけることで、新しい言語の興味深い側面を理解することができます。 役立つ言語があれば、すぐに新しい言語の使用を開始できます。 このために、あなたはすでにあなたのお気に入りのテキストエディタを持っています、そして、言語-そのコンパイラ/インタプリタ-より、実際には、何も必要としません。



一方、ツールスキルの開発に時間を費やしても、新しい言語を使用することは推奨されません。 結局のところ、これらのツールはまだこれらの言語の最も価値のあるアイデアをサポートしていません。古典的なOOPのスタイルでそれらを記述する場合、よく知られた仕様で以前に使用された言語でこれを行うのは簡単ではありませんか? さらに、これにより、一見良好な開発速度と予測可能な結果が得られます。



したがって、言語にもっと注意を払うと、どういうわけかツールにあまり注意を払わなくなります(逆も同様です)。 そして、これらの2つの経路のそれぞれは、遅かれ早かれ、賛否両論のある2つのキャンプのいずれかに導かれます。



各時点で、メインツールとしてテキストエディターを選択したプログラマーは、プログラミング言語の選択肢が広がります。 すべての新しい言語にはコンパイラー\インタープリターがありますが、一部のIDEですべてがサポートされているわけではありません。 下の図は、進化のさまざまな時点でさまざまな言語をどのように探すかを示しています。







各言語について、「白赤」段階の終わりの行は、その言語がすでに学術研究だけでなく実際の使用にも適している瞬間を示しています。 「赤紫」フェーズの最後の行は、この言語のすべてのツールが実際の有用な使用に完全に適合したことを意味します。 各瞬間に、「赤紫」を完了した言語よりも「白赤」段階を通過した言語が多くあります。



この大きな選択の結果の1つは、この選択がより強力な言語へのアクセスを提供するという事実です。 したがって、テキストエディターと言語スキルに依存しているプログラマーの役割は、自身の知識を深めることと、言語の強力な新機能の利点という2つの要因にあります。



プログラミング言語のジレンマ



最も強力なプログラミング言語には、しばしば最も弱いツールがあります。 この理由は同じです-限られたリソース。 新しい言語の開発者は、ウィザードでも億万長者でもありません。 言語を改善するため、または彼と仕事をするためのツールを改善するために、彼はそれをどこでよりよく使うべきかを自由に考えなければなりません。



次のチャートをご覧ください。 開発者がそれぞれ言語自体の開発(上矢印)、ツールの開発(左矢印)、およびバランスの検索(中矢印)に集中することを決めた3つの仮想プログラミング言語を示しています。 矢印はほぼ同じ長さ(リソースの同じ投資を意味します)であるため、図の完全に異なる場所で終わります。 「言語」の矢印は、裸のコンパイラ/インタプリタを備えた非常に強力な言語を提供します。 「Instrumental」は、平凡なありふれた言語で優れたIDEを提供します。 「バランス」は途中で失われます。







そして、ここに事実があります。優れた言語は、「多くの優れた機能」から「多くの優れた機能とツール」のポイントまで、遅かれ早かれこのダイアグラムを常に通過することができます。 そのため、最終的には、言語フォロワーとツールサポーターの両方が、適切なツールで優れた言語を使用します。 私たちが開発しているLaszloの言語もいつかこの言語に来ることを願っています。







パイオニアの難しさ



上記のすべてが、「言語」アプローチが間違いなく優れているという結論につながるように思われます。 確かに、新しい言語の力をより早く使用し、より深く研究することは可能です。そうすれば、ツールが追いつきます-そして私たちもそれらから利益を得ます。 だから? 実際には、微妙な違いがあります。



ツールの学習に時間をかけることで、結果が確実に得られます。 ツールの人気は知られていますが、その機能も知られています。 高度なデバッガーを学びました-製品開発時間を5%短縮しました。 リファクタリングを使用して楽しんでいますか? +5カルマ。 継続的インテグレーションをセットアップします-あなたの肩から離れた山!



言語では、これはそうではありません。 新しい言語には理論的な力がありますが、それでも正当化する必要があります。 1か月かけて新しい言語を学習すると、その言語が対象分野に適していないことがわかります。 または、ひどく必要なライブラリがありません。 または彼のコミュニティは非常に小さいです。 または、仕事を見つけないという彼の知識で。



一方、言語をすばやく学習し、小さなプロジェクトに適用して、直面している問題を解決する場合、この言語のさらなる開発が成功するかどうかはあなたには違いはありません。 彼はここで、そして今あなたを助けてくれました-素晴らしい。 厚いモノグラフは必要ありません-作業コードの小さな断片、どこかに探して雇う必要がある専門家の大規模なチームは必要ありません-あなたは個人的に十分です(まあ、仲間の愛好家が数人いるかもしれません)。



アプローチのもう1つの違いは、チームの関与です。 Javaプロジェクトチームの誰かがEclipseを使用し、IntelliJ IDEAでコーディングを行い、テキストエディターで誰かを使用することになるでしょう。 生成されたコードが同じ方法でコンパイルおよび実行される限り、これは問題ありません。 ただし、Javaチームの誰かが突然Haskellに個人的に書き込むことを決めた場合、間違いが発生します。



おわりに



もちろん、「言語と道具のジレンマ」の考え方には反例があります。 たとえば、LispとSmalltalk:両方とも優れたツールを備えた強力な言語です。 例外が発生する可能性があります-内部構造のパワーと使用するツールを調和させて組み合わせた言語、および両方を同様によく知っているプログラマーの両方です。 しかし、国際チェスのグランドマスターでもある有名なピアニストに会う方法についてです。



All Articles