2009-08-29 6 views
7

新しいプログラミング言語 にどの機能を追加して、「直観的」にすることができますか?ウェブサイトや デスクトップでは、使いやすさに優れており、ほぼ直感的です 使いやすさあなたの アプリケーションが「うまくいく」ことがますます期待されています。特定のクラスの アプリケーションについては、RTFMにあるアイデアは、アプリケーションの有効性を示すマーク です。人々は の傾向があり、アプリケーションは単に彼らが "考える"方法で働くことを期待します。 は動作するはずです。これはデザイナーが努力すべき価値のある標準 であると主張することができます。プログラミング言語は直感的であるべきですか?

プログラミング言語 と開発者環境に同じユーザビリティが適用できますか?ヒントを提供する IntelliSenseのようなツールがあり、良いIDEは の支援を提供しています。しかし、コア言語そのものはどうですか?どのような を追加(または削除)して、特定のプログラミング の技法またはアルゴリズムを実装するのがより明白になりますか? はどのように正規表現や再帰をより積極的にするのですか?または これはちょうど愚かですか?

より具体的な例を挙げてください:液体レイアウトは、HTML、CSS、 またはFlexとMXMLです。 HTMLとCSSでは、ボックスモデルは ですが、 Internet Explorerと他のブラウザのさまざまな実装では直感的です。誰か がドキュメントを読んだり、ボックス モデルのコンセプトを研究しない限り、 をCSSの最初の刺しゅうのレイアウトにデザインするときに「ちょうどそれを得る」ことは難しいでしょう。私はこれが早い時期にテーブルが繁盛した理由は だと主張します。ボックスモデルはテーブルセルの概念に暗黙のうちに でした。 Dreamweaverのようなツールを使用すると、 の幅とレイアウトの周囲に、テーブル の拘束の範囲内で自分の考えを得ることができます。その後、CSSが成熟し、テーブルがレイアウト用ではない理由のために有効な という一連の理由が浮かび上がった。しかし、 には、デザイナーが実際に CSSの実装とボックスモデルを研究していたのと同じ効果を達成し、新しい考え方に抽象レイヤー を注入します。別の例では

、私は物事ActionScriptで とMXMLの多くをプログラミングするときに、流体のレイアウト と要素の割合に基づく幅ではない非常に明白と の全体のコンセプトは、常に直感に従っていないことが判明。私は、 の基本的な問題を理解しています。つまり、Adobe Flash playerとレイアウトには絶対ピクセルの用語を理解するために が必要です。コンポーネントの潜在的な幅に が来るとき、 のパーセントがコードのコアレベル で実装するのがすぐに分かりません。理論的には、Flash プレーヤーは コンポーネントの正確な幅を知る必要があります。つまり、画面上で描画するときにビデオカード に適切なジオメトリを提供できるようにする必要があります。しかし、 にパーセンテージの概念を導入すると、理論的には無限の幅の可能性があると考えられます( )。そして、 "無限 - 1"ピクセルを見つけることは、コンピュータが何かできることではない 抽象的ないくつかの層なしで直接行うと 計算。ビューポートを参照する必要があります。プログラム は境界を知る必要があります。したがって人間は の割合でデザインすることを好むかもしれませんが、絶対幅は標準であり、 です。

プログラミング言語について言えば、 プログラミングタスクについて考えるとき、直感を助ける表現と機能があります。または、私たちは、 "コンピュータのように考えて "をオフにしたほうがいいですか? コードにいくつかの機能やレイアウトを実装する方法を理解しておく必要がある場合は、マニュアルをRTFMするだけですか?

プログラミング言語の構文やセマンティクスを変更することができますか? を変更したり追加したりして、その「直感性」を改善しますか?

補遺、どのような「初心者」の例を見て に触発され、この質問をする理由はAlan Kay's lecture: Doing with Images Makes Symbolsに のSmalltalkで達成することができました。

+1

これはおそらく主観的な話であり、 "Community wiki"と書かれていなければなりません – Randolpho

答えて

8

直感「あなたが改善するためにあなたが追加、変更、または削除なるかお好みのプログラミング言語の構文やセマンティクスを変更することができれば 『』それのを? 」

プログラミングは難しいです。とても大変。構文の変更はそれほど重要ではありません。 IDEはプログラミングの基本的な課題とは無関係です。

多くの場合、困惑しているのは言語の意味です。

プログラミング言語として抽象的なものに関して「直観的」とは何を意味するのか分かりません。確かに、「直感」はおそらく悪いことです。直感的なプログラミング言語になると、先入観、偏見、知的なジャンクが引き継がれます。

私は決してどこのレベルでも何のためにも "それを得る"ことは期待しません。プログラミングには、「直感」ではなく「期待」ではなく、明確な思考が必要です。

唯一できることは、マニュアルを読んで、私たちが直面している新しいものの独特で独特な斬新なセマンティクスを理解することです。

私はこれを知っています:エレガントなシンプルさが不可欠​​です。特徴の直交性。クラリティ精度。例外または特別な場合の不在。とりわけ、シンプルさ。

言語機能をレイヤー化するのは根本的に悪いことです。

複雑なIDEでレイヤーを重ねることによる言語の問題は悪化します。


は新しく、不慣れなものに直面したとき、我々は、プロセスの過程で、我々はそうするために私達を可能にアナロジーを発明。我々は精通しているものに、それに関連してみてください」http://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD854.html

を参照してください。

私たちが考えることができるすべての類推が弱すぎて浅すぎるため、先例がなく、非常に根本的に新しいものに直面しているとき、上記の理解しようとする方法はあまりうまくいきません。大きな助けとなる。根本的に新しい技術がこのような状況を作り出し、プログラミングに関する広範な誤解が、これが自動コンピュータの出現で起こったことを強く示唆している。 「

要するに

は、 『直感』と 『知的な荷物は、』プログラマの問題である。への最善の方法は、技術は、新鮮な新しいとそうでない場合は、未知のものとしてそれに近づくためにあるを理解しています。


ボトムライン

複雑さが内在している。

あなたは2つの選択肢があります。

  1. これに対処するための知的ツール(抽象化、要約など)を開発する。

  2. 別のフィールドで仕事をしてください。

    いずれかの人が起こることができない「直感的」見つけた何かに変身するためにコンピューティングの本質的に複雑な世界のために頼む

。コンピューティングは複雑すぎて直感的ではありません。

+1

私は同意すると思います。そういうわけで、私はまた何が「削除」され、追加されたのかを尋ねました。 その直感は、バイナリロジックとプログラミングの世界にとってはあまりにも曖昧な概念です。しかし、このシンプルさはどのようにして最高に達成されますか確かに誰もがアセンブリプログラマであるとは思わない。より高いレベルの実装を理解するために、アセンブリの理解に価値があるとは思えますが。どのようにしてプログラミングが手荷物とそれを困難にする前提の自分の心をクリアするようにするのですか? –

+1

アセンブラは「シンプル」ではありません。実際、奇妙なハードウェア特殊ケースや非直交性のために、複雑すぎることがよくあります。いくつかの言語(Pythonなど)は、非常に簡単で把握が容易です。プログラミングに手荷物はありません。あなたの心が荷物を持っているなら、手荷物を残すことがあなたの問題です。確かに、あなたの*義務*:先入観のない新鮮で空の心を持つ技術に来ることです。 –

+1

興味深い点。関連するノートでは、私はより良いプログラマをより素朴なものにしてくれたという側面のように感じます。基本的に私はそれを「コンピュータのように考える」モードと呼びます。私は明白に言われるまで何も知らない。私はこれがデバッグに役立つことがわかります。しかし、それは退屈なことができますが、最終的に効果的な戦略です。 –

3

基本クラスのライブラリと同じように、言語そのものと同じように1人の人が取っています。正直なところ、2つはよく同義語ですが、Fluent APIのコンセプトです。基本的な考え方は、コードを "文章のように読む"ようにすることです。これはコードがより柔軟で保守的になるという考え方です。

+1

@Randolpho、Fluent APIを参照してくれてありがとうございます。興味深いもの。これは私が幾分広い質問をする理由です。なぜなら私はあなたのような興味深い答えを得ることができます。応答していただきありがとうございます。 –

5

プログラミング言語の「構文」の複雑さに対処してきたもう一つの分野は、Visual Programming Languagesです。 VPLの背後にある基本的な考え方は、プログラミング言語(意思決定、サブルーチン、関数など)の構造をとり、グラフィカルに、典型的にはデータフロー図として表現することです。最近人気が高まっている言語の1つがMicrosoft Visual Programming Languageです。私はそれを使用しておらず、その能力について主張することはできませんが、私はLabViewを使って大きな効果を得ました.LabViewでもあなたが考えることのできるものは何でもできると言えますが、になりますそれを非常に異なった方法で考える。

私はVPLではなく個人的なコードを好みます。

+0

別の話題なので、以前のものを編集するのではなく、答えを追加すると思いました。 – Randolpho

関連する問題