リテラシープログラミングが主流ではないのはなぜですか? [閉まっている
-
16-10-2019 - |
質問
識字プログラミング 良い理想があります。なぜこれが主流ではないと思いますか?それは配達に失敗したからですか?
解決
私は最初にクヌースの著作の本でそれを見て、それがきれいに見えると思った。それから私は、プログラムで何が起こっているのかを理解するために文学プログラミングディスプレイを使用しようとしましたが、見た目よりも難しいことがわかりました。私はプログラムのリストを調べるのにあまりにも慣れていたかもしれませんが、混乱しているように見えました。
それから私はソースコードを見て、それが私をオフにしました。プログラムのテキストとコンパイラが見たものとの間の通信が少なく、まったく新しい方法でプログラムを書くことを学ぶ必要があり、対応する利点は見られませんでした。
さらに、人々は、コードが実際にYを行っているときにXを実行しているという長くて説得力のある議論を書くことができ、私は誤解を招くコメントの共有に遭遇します。コードを読んで、それがかなり早くやっていることを見るのが好きになりました。識字プログラミングはそのアンチテーゼです。
他のヒント
私は責任を負います ネットワーク効果。他の人があなたのコードとドキュメントを編集するには、彼らがそれを理解できる必要があります。
これにより、人々はCWEB/Nowebのようなものから遠ざかります。なぜなら、それらを使用すると、プロジェクトに使用しているプログラミング言語の上でTexとプログラム固有の構文を学習する必要があるためです。これは、特にそもそもTexにとって非常に大きな引き分けである数学タイプセットを必要としない場合、時間の浪費と見なすことができます。 (そして、多くのアプリケーションプログラマーにとって、彼らは本当にそれを必要としません。)代わりに、彼らはVisual StudioのXMLコメントのようなものを好みます。
私が読み書きのできるプログラミングが離陸したのを見た場所は、科学/統計的コンピューティングにあり、ほとんどのプログラマーは数学、CS、または統計で重要なトレーニング(別名PhDS)を持っているため、すでにラテックスを備えた家族です。彼らが書いているドキュメントには、Texで書かれた多くの複雑な式が含まれる可能性が高く、Rでプログラミングする可能性が高くなります。 CWEBについて知っているCプログラマーの割合。
私は勉強中に90年代後半の識字プログラミングの概念に魅了されましたが、プログラミングへのKnuthsアプローチと版画にまだ興味をそそられています。最高のものしかありません。
Knuthが設計した識字プログラミングシステムは、すぐに目を合わせる以上のことをしました。つまり、Knuthsソースドキュメント、つまり標準のPascalからコード生成ツールが生成した基礎となるプログラミング言語の多くの欠点を克服します。
標準的なパスカルを試していないほど幸運な人のために、ここにハイライトのいくつかがあります。
- 単一パスコンパイラを簡単にするために、言語仕様は、すべての宣言が特定の順序で行われなければならないと述べました。 Wikipediaページから:「各手順または関数には、GOTOラベル、定数、タイプ、変数、その他の手順と機能の独自の宣言があります。これらはすべてその順序でなければなりません。」これはあなたができることを意味しました いいえ ソースファイルに物事を論理的にグループ化します。
- 文字列の取り扱いは、プレーンCよりも退屈でした。
- 識別子は任意の長さを持つことができませんでした。
- もう覚えていないことがたくさんあります。
これらすべてのことは、基本的に、Knuthがより良いプログラミング言語を必要としていることを意味し(したがって、彼はそれを発明しました)、それはPascalをその組み立て言語として使用しました。
ほとんどの現代の言語は、これらのことを大いに努力せずに行うことができます。したがって、識字プログラミングが解決する作業の大部分を削除することができます。
また、現代の言語はより表現力豊かで、コード自体にもっと考えられるようになります。
それで、何が残っていますか?ソースコードからタイプセット形式のドキュメントを生成する機能、および それ 今日存在します。
Javadoc -Java Runtime APIは、おそらく今日利用可能な最大の識字プログラミングです(コードが実際に提示されていないことを除いて、Javaが最初から供給された場合はそうでした)。たとえば、コレクションフレームワークのプレゼンテーションを参照してください http://download.oracle.com/javase/6/docs/api/java/util/collection.html
.NETおよびその他の主流プログラムには同様のシステムが存在すると思います。
90年代にリテラシープログラミングで逃亡したときに発見したことの1つは、正確なことをしたいと思っていた非常に情熱的な人々を惹きつけたことです。そして、既存のものが十分に優れていなかったため、自分の読み書きのできるプログラミングシステムを書くことが含まれていました。 Nowebは、すべての人に十分な一般的な分母を提供することでそれを断つための良い試みでしたが、それでも私はLPの時間のほとんどをかなりプリンターの開発を開発しました...
別の問題は、それが本当に反アジャイルであるということです。いくつかの点で、遅くなるのは良いことです。なぜなら、それはあなたがより多くの前向きを考え、最初に物事を正しくすることを強いるので、良いことです。一方、あなたが行くときに細心の注意を払って文書化することは、あなたのコードをリファクタリングする大きな障壁があることを意味します。また、コードが硬化するまで待ってからLPを確認すると、複数日のドキュメントタスクが表示されます。
私の謙虚な意見では、多くの企業は、読み書きのできるプログラミングの目的とは反対の文化を持っています。彼らはより速い結果を望んでいます(彼らはアプリが制作中のときにのみ品質について泣きます)。私自身の経験では、私の上司は、より速い結果が「私が求めている翌日に実行可能なプログラム」という意味ではないことを理解することを拒否していました。彼らにとって、開発者がキーボードを入力するのに忙しくない場合、彼は働いていません。はい、私は知っています、私の上司はアーセホールです。
コーダーは英語ではなくコードを書きます。
コーダーは、コードの実行に役立たないため、ドキュメントを書くのが好きではありません。
コーダーはドキュメントを書くのが得意ではありません。なぜなら、彼らのアイデアを表現するのに貧弱な媒体だからです。
読み書きのできるプログラミングは、コードがより後の考え方である次のレベルにドキュメントを取得するというアイデアのようです。たぶんそれはうまくいくかもしれませんが、ほとんどのコーダーにとっては不快な文書のように見えます。
主に人々は非常に愚かだからです。この単純なテクニックの性質について若者が表明した推測と誤解の無限の流れである明らかな証言。
人々は次のようになります。(a)文書化の方法(b)特別なスキルや才能を必要とするいくつかの洗練されたエッセイを書く方法(c)単に手がかりがない - レオプログラミング編集者の作成者として、彼自身の入場によってなどなど
ただし、LPは単純です。(1)(=任意の)人間言語のコードとフレーズの混合物でプログラムを作成します。これはまさに無数のプログラミングの教科書の著者が行っていることです。そして(2)それは、コンパイラが必要とする順序で結果を解明するために人間のそれらのフレーズを拡張する単純なプリプロセッサである(まるでサブルーチンの名前のようになったようになった)。通訳者)。それ以外の場合は、書かれたテキストを別の小さなユーティリティで展開して、フォーマットシンボルを含めて「リテラシーソース」を適切にフォーマットした読みやすいテキストに変えることができます。
若い人たちはこの非常にシンプルなアイデアを試すことは決してありません。
基本的に、人間の言語で書かれた「Pseudocode」プログラミングの主なアイデアは、シンプルなプリプロセッサユーティリティでそれを拡張するのに役立ちます(長いプログラムの主な難しさ)、プログラムフローのコード折りたたみや分割によく似ています。関数/サブルーチンに、詳細で自分自身を失うことはなく、マシンの実行には完全に不要です。
識字プログラミングには2つの側面があります 行う 希望は主流のプログラミングに組み込まれました - 埋め込み画像(例、デザイン図)と以前の代替試みへのポインター(例:これが私がこの別の方法で試していて、それがうまくいかなかったからです...」 )。これらの側面は両方とも、DOCコメントとURIで処理できます。
プログラムの論理は私たちが話すのと同じように機能しないからです。プログラムには、よく指定されたフロー、条件、およびループがあります。
ロットでコーディングを行った後、私はこれらの用語で考えています。私の脳は、問題を実行可能性コードのターゲットドメインに変換します。そして、私がプログラムを識別するために追加の変換ステップを実行する必要があるよりも、これを通常プログラミング言語で書き留める方がはるかに効率的です。
実際、私のプログラムはすでに読み書きができると信じています...スピーキング識別子、優れた関数名、コメントがあり、数ヶ月後にはすぐに理解できないハッカーをしました。
結論として:私のJavaコードは、すべての「識字」プログラミングが望んでいるので、それ自体がより文字通りです。
私は互いに識字プログラミングをするようになりました - 私は、コンパイラがそれを必要とするのではなく、それが私の心に合っているので、コードを整理することを夢見ていました。私は見つけました レオ この目的にほとんど理想的です。また、ファイルを追跡することをサポートしています。これらのファイルには特別なマークアップが含まれている必要はないため、チーム内の他の人を知る必要なく、自分のためにLEOを使用できます。この機能 - 「@shadow Trees」 - は非常に有望ですが、それでもビットバギーですが、より多くの眼球が必要です。また、「ああ、1つの大きなファイルのすべて」という問題を修正します。すべてをツリーアウトラインに整理することと、外部ファイルをサポートすることによって。
私にとって、名前に反して、「識字プログラミング」はドキュメントに関するものではありません。以前よりも多くのドキュメントがありません。それは私を助ける構造を持つことです 迷子にならない. 。特に、巨大なJSPファイルを管理するときに誓います(そして、レオは元々Python用に意図されていたにもかかわらず、JSP言語のサポートはありません - ファイルをLeoツリーに手動で分割する必要があります!)。
コードに関する論文を書くことができる貴重な教育ツールと考えています。その後、コードの方法、何、、理由について読者に指示するために、作業コードのスニペットがインターリーブします。
純粋に教育的な環境の外では、クヌースだけがそれをどのように使用するかを本当に理解していると思います。
それはすべての世界の中で最悪です - あなたは非常に非特異的な言語=英語で非常に正しい、非常に具体的なコンピュータープログラムを書く必要があります。したがって、正しいフレーズを使用して慎重に記述する必要があります。そのため、コードを書くだけでもあります。