3

しばらく純粋な OO 言語を使いたいと思っていましたが、どれも IDE を要求しているように見え、ビデオにない優れたチュートリアルが見つからないという事実に気が進まないのです。フォーマット。

後でIDE を使用できてうれしいですが、IDEを通じて言語を学びたくありません。私が探しているのは、gcc、ghc、ghci、および python IDLE などの単純なコンソール インタープリターまたはコマンドライン コンパイラーです (はい、これは IDE ですが、コマンドライン インタープリターにすぎないほどミニマリストです)。同時に IDE に取り組もうとしていないときの方が、言語をより速く、より適切に、より包括的に学習できることがわかります。ですから、きしむだけが唯一の方法だとは言わないでください:P

また、視覚的ではなくテキストで提示されるチュートリアルも探しています。繰り返しになりますが、ビデオを一時停止して 10 秒前に戻し、再生ボタンを押して何度も何度も繰り返すよりも、ページをじっと見つめて誰かの文章を何度も頭の中で投げたり回したりできる方が、より速く学習できます。そしてまた。

私はさまざまな程度の OO 純度を持つさまざまな言語に興味があり、ある時点でそれらすべてを学習する予定です。smalltalk 方言のいずれか、Self (smalltalk の極端なプロトタイプ指向バージョン (非常に興味深い、より過激な方が良い imo))、strongtalk、vanilla smalltalk (または、可能な限りバニラの実装) のいずれかに興味があります。

私は Eiffel にも興味があります。私が見たコード スニペットは非常にエレガントに見え、実際には非常に革新的であると読んだことがあります (コード コントラクトの導入など)。しかし、額面通りの Eiffel は OO と命令型プログラミングのハイブリッドのように見えるため、私は Eiffel 側の言語よりも smalltalk 陣営の言語を優先します。同様に、Scala (ハイブリッド OO と関数型) やその他のハイブリッド言語も避けたいと思います。したがって、C#、Java、C++、D、python などはありません。これらの言語が悪いと信じているからといって、これらの言語を却下しているわけではありません。純粋な OO を学習しようとしているだけであり、それらの言語はハイブリッド OO です。そうではありません。本当に私が探しているもの。

また、どなたか公式本をお勧めしていただけないでしょうか?smalltalk については、"Blue book" AKA "Smalltalk-80: The Language and its Implementation" があります。エッフェルには「エッフェル:言語」があります。私の経験では、言語の作者 (C プログラミング言語の K&R を参照) によって書かれた本を読んだり、一般的な本を読んだりすることで、多くのことを理解できるからです。

はい、私の質問: どの純粋な OO 言語から始めるのが良いでしょうか? IDE を使用せずに学習するにはどうすればよいでしょうか? また、その言語の著者によって書かれた関連書籍はありますか?

4

7 に答える 7

23

Smalltalk を単なる別の言語として学ぶことは役に立ちません。あなたは要点を完全に見逃しているでしょう。

Smalltalk のグラフィカル環境は単なる IDE ではありません。システムのコアは単なるオブジェクトです。このインターフェースは、オブジェクトを作成してそれらと対話するためのさまざまな方法を提供します。言語は、オブジェクトへのメッセージを作成するための便利な方法にすぎません。これは、オブジェクト自体に次ぐものです。

他の OO 言語では、プログラムを作成してから実行すると、メモリ内にオブジェクトが作成されます。Smalltalk ではそうではありません。メモリ内にオブジェクト (クラス オブジェクトなど) を作成し、メッセージを送信してメソッドを追加します。ただし、クラスオブジェクトは「プログラムを実行する」たびに作成されるのではなく、一度だけ作成されます。

実際、「あなたのプログラム」などというものはありません。「メイン」はありません。それは単なるオブジェクトの世界であり、寿命の長いものも一時的なものもあります。実際、システムには 30 年前に作成されたオブジェクトがあります。文字通り。オブジェクトはメモリ ダンプ (「イメージ」と呼ばれるファイル) としてディスクに凍結され、後で (おそらく別のマシンで) 凍結解除されます。

オブジェクトの世界であるそのイメージは、Smalltalk の主要なアーティファクトです。はい、ソース ファイルがありますが、これは単なるテキスト スニペットのデータベースであり、RAM をそれほど消費しません。このファイルを手動で編集することはできません (イメージ内のオブジェクトは、ソース ファイルへの絶対ファイル オフセットを使用します)。ソース ファイルからシステムを再作成することはできません。システムはかなり前にブートストラップされ、それ以降は変更されただけです。

確かに、Smalltalk GUI は表面的には別の IDE のように見えます。偶然ではありません - Eclipse はもともと Smalltalk の Smalltalker によって Smalltalk で書かれました。しかし、通常の IDE ではテキスト ファイルを操作するだけであるという決定的な違いがあります。テキスト エディターは、そのための有効な代替手段です。Smalltalk では、GUI はメモリ内のオブジェクトを操作します。テキストエディタではそれができません。

また、Smalltalk を使用する場合は、Squeak をお勧めします。非常に友好的なコミュニティ、非常に素晴らしい環境、すべての人にとって優れたパーソナル コンピューティング環境を作成するという Smalltalk の当初のビジョンに加入しています。

于 2011-11-22T11:17:18.877 に答える
14

Smalltalkを(少なくともある程度まで)学習した経験のある人として、私はあなたがより困難で危険な道を進んでいると言うことができます。

しかし、あなたが主張するなら、GUIが標準ではないGNUSmalltalkをダウンロードすることができます。また、Smalltalkでチャンク形式で記述されたシステムのすべてのソースが含まれており、それらでテキストエディターを開いて、システムの内臓をゆっくりと読みながら楽しむことができます。

Pharoのような他のSmalltalkを起動して、ワークスペースウィンドウに固執することもできます。これはコマンドラインインタープリターに相当します。

Pharoには、テキスト命令とSmalltalk式の評価を組み合わせたSmalltalkに関するProfStefクイックインタラクティブチュートリアルも含まれています。

読書に関しては、Pharo By Exampleがあります。これは、ハードコピーを閲覧、ダウンロード、または購入できる無料の本です。

言語の内部と詳細に興味がある場合は、AdeleGoldbergとDavidRobsonによる「Smalltalk-80:言語とその実装」をお勧めする無料の本のコレクションもあります。

故DavidN.SmithSmalltalkFAQも優れたリソースです。

だから、あなたは行き​​ます。そして、アドバイスを受けて、Smalltalkの理解をはるかに速くするので、できるだけ早くSmalltalkIDEに譲ってください。

于 2011-11-22T09:05:52.427 に答える
14

Richard Gabriel は最近、90 年代初頭にプログラミング言語コミュニティで起こったパラダイム シフトについて講演しました。彼は、今日のほとんどの専門家は 80 年代の論文の多くを理解できないと主張しています。彼はこれを裏付ける証拠を持っています。今回が初めての講演でしたが、今後も何度も講演する予定ですので、講演の多くの部分が変わると思います。彼は最初、このパラダイム シフトをエンジニアリング -> サイエンスと説明しましたが、その後、システム -> 言語と説明しました。システム思考から言語思考への移行と表現した方が適切だと思います。

Richard Gabriel は Lisp の人です。(私は Smalltalk 派です)。Lisp は、言語とそれが使用するライブラリとの間に明確な境界がないという点で Smalltalk に似ています。算術演算と制御フローは、言語ではなくライブラリにあります。(まあ、Lisp は言語とライブラリにいくつかありますが、Smalltalk はライブラリにすべてありますが、コンパイラがそれらの一部をチートしてハードコードすることを除いて、最終的に大きな違いはありません。) Lisp では、プログラムは S 式であり、プログラムの編集は S 式の編集です。Smalltalk では、プログラムはオブジェクトの集まりであり、プログラムの編集はオブジェクトの編集です。プログラミングをしているときは、システムを構築していて、そのシステムでプログラミングしています。

システム思考は言語思考とは異なります。言語思想家は、言語の正確な説明を求めています。彼らはすべてを説明した本を欲しがるか、(彼らが学者なら) 言語の正式な意味論を欲しがります。しかし、システム思想家は、システムを使い始めるとすぐにシステムが変わることを知っています。彼らはシステムがどのように機能するかを理解したいと思っていますが、システム自体を見て詳細を把握する準備ができています.

この2通りの考え方で、それぞれにメリット・デメリットがあります。Smalltalk は、システム思考の素晴らしい例です。すべてのソフトウェア開発者は、システム思考を実証するシステムを少なくとも 1 つ知っておくべきだと思います。リスプはいいです。For は別の古い例です。当然、私は Smalltalk は素晴らしいと思いますし、人々がそれを学ぶのを喜んで支援しますが、システム思考を学ぶことの重要性は、あなたが学ぶ特定のシステムよりも重要だと思います.

残念ながら、システムを学習することは、言語を学習することよりも困難です。構文を学ぶだけでなく、ライブラリ、命名とコーディングのパターン、そして通常はツールを学ぶ必要があります。(これがシステムである場合、これは拡張可能です。) これは、言語思考の利点の 1 つです。しかし、システム思考には長期的な利点があります。システムをニーズに合わせて調整すると、非常に生産的になるからです。

于 2011-11-22T12:55:05.093 に答える
11

smalltalk の構文を学習するには、1 ページのテキストを読む必要があります (wiki http://en.wikipedia.org/wiki/Smalltalkの構文セクションを参照)。さて、smalltalk ライブラリとその使い方を学ぶには、テキスト エディタではなくブラウザを使用する必要があります。そうしないと、多くの時間を無駄にするだけです。

テキスト形式で読んでコードを理解しようとすることと、ブラウザを使用してそれをナビゲートすることの間には、10 倍の時間差があると思います。デバッガ。

smalltalk システムでは、生きているオブジェクトはそれ自体について多くのことを伝えることができ、アイデアをまったく理解できないため、オブジェクトを静的なテキストの塊として見る場合よりもはるかに速く使用方法を学習するのに役立ちます。

于 2011-11-22T11:36:36.767 に答える
5

私はしばらくの間、Squeak Smalltalk (およびその親類である Pharo と Cuis) で遊んでいます。Smalltalk を学習するには、既に提供されているシステムを使用する以外に良い方法はありません。

システムを最初に起動してから数分以内に Squeak の超クールな機能を利用する方法を示す、長さ 50 秒から 15 分の一連の短い YouTube チュートリアルを考案しました。

実際、コードの最初の行は、Squeak の OOP 性を示しています。最初からきしむ

于 2011-11-22T18:53:33.653 に答える
5

Python は純粋な OOP です。実際、これは初心者が Python を使用するときに犯しやすい間違いです。

Python のような smalltalk は、「すべてはオブジェクトである」というマントラに従います。したがって、組み込み型を含め、Python 内のすべてがオブジェクトです。違いは、python は手続き型プログラミングが可能なため、smalltalk や Java とは異なり、OOP を強制しないことです。そして、これが罠です。Python が OOP を少なくすると簡単に推測できますが、ヘビであるため、関数でさえオブジェクトであることがわかりません ;)

http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch10s04.html

smalltalk に戻ると、他の smalltalker が信じていることとは逆に、IDE が重要です。私のように、柔軟性のない IDE に非常に失望しているのであれば、Squeak の IDE を好きになるでしょう。IDE は、すべてのライブラリを簡単にナビゲートし、何が、どこで、なぜ、何かが起こるかを理解するのに非常に役立ちます。テキスト エディタを使用するメリットがわかりません。しかし、ファイルインとファイルアウトを使えばできます。しかし、そうすることで、smalltalk を他のプログラミング言語と同じくらい効率的にすることができなくなります ;)

私は 1 週間だけ squeak と pharo を勉強していますが、初心者の私でさえ、IDE の利点は最初の瞬間から明らかです。

コードが消化しやすいメソッドに断片化されているという事実、これらのメソッドはプロトコルにグループ化され、プロトコルはおなじみのクラスにグループ化され、クラスはパッケージにグループ化されます。したがって、コードは非常によく整理されているため、迷子になることはありません。すべてがどこかに属しており、すべてがクリックするだけで、すべてが検査可能でブラウズ可能です。右クリックを選択してそこに移動します。そして、必要なコードが 10 行を超えることはめったになく、正確に表示されます。これがIDEです。必要のない、気にしない、混乱する可能性のある情報にさらされるテキスト エディタを好むのはなぜですか。

次に、ファイル、コード、ライブラリ、システム ライブラリ、さらには言語自体のコレクションではなく、すべてが単一のイメージ内にあります。すべてがあなたの手の中にあり、あなたを待っており、テスト、変更、使用、悪用を求めています。あなたは言語の一部であり、言語はあなたの一部です。何かがあなたの考えに合わない場合は、それを変更してください。これがIDEです。ファイルとフォルダの切断された方法に戻りたいのはなぜですか?

そうすれば、このすべての力、このすべての柔軟性を恐れ始めます。言語とライブラリを完全に破壊する可能性のある何かを行う可能性は低くありません。その可能性があり、間違いが発生する可能性があり、発生します。ここでも IDE が助けを提供します。すべての変更はローカルの cvs システムに保存され、すべての変更はいつでも分類、保存、監視されます。お粗末な取り消しやその他のナンセンスはありません。あなたが得るのは、古く、十分にテストされた成熟したバージョン管理です。いつでも元に戻すことができます。何も失われることはなく、取り返しのつかない間違いもありません。

また、ハード ドライバを信用できない場合は、vcs がオンラインで squeaksource に拡張されます。そして、それはコマンドラインに翻弄されますか? とんでもない。シンプルでありながら効率的な Monticello ブラウザーが提供されます。これにより、インストールとアンインストールを競合なく行うことができます。

そしてもちろん、ソフトウェアにバグが残るのは望ましくありませんね。単体テスト ツールは、コードの信頼性と安定性を確認するために提供されており、希望どおりに動作することを確認します。ここでも、複雑なタスクを 1 つのボタンで実行できるように、美しくも優れた GUI が使用されています。

そして、どれも完璧ではないので、恐ろしい過ちに直面する時が来るでしょう。あなたは一人にされていますか?ご想像のとおり、ツールが再び提供されます。デバッガー。あなたはそれを呼び出す必要はありません、あなたはそれをセットアップする必要はありません、あなたはそれがどのように機能するかを理解する必要さえありません. 他のすべてのツールと同様に、デザインはシンプルですが洗練されています。エラーを見つけるだけでなく、何が間違っていたのかを教えてくれるだけでなく、エラーを引き起こす最も基本的な言語要素に戻るだけでなく、これまでに見たことのないような言語の振る舞いについて独自の視点を提供します。また、ライブコーディングを行うこともできます。ライブ コーディングは、コードの実行中にプログラムをコーディングする機能です。それは印象的で無限に便利ではありませんか?

最後に、おそらくあなたは喜ばせることが不可能な人々の一人かもしれません.おそらくあなたはまだ欠陥や省略を見つけており、単に好きではないと考えています. IDE は smalltalk で記述され、smalltalk は smalltalk で記述され、IDE はそれ自体と言語を編集できます。言語の非常に基本的な機能と C でコンパイルされた VM 以外に変更できないものはありません。上記のすべてのツールを使用して正確にそれを行うことができると思われる場合は、正しいと思います.

そして、ツールはこれだけにとどまりません。smalltalk は他の言語ほど人気が​​ないかもしれませんが、非常に長い間ここにあり、貢献するのが大好きな非常に熱心なプログラマーが何人かいます。率直に言って、このような素晴らしい IDE と非常によく設計された言語を使用すると、他の言語がそれらに貢献するのは難しいように思えるかもしれませんが、smalltalk の場合、IDE によって非常に簡単になるため、貢献しないという誘惑に抵抗することが課題になります。

他の人がまだコードを書いている頃には、あなたは自分のコードを完成させ、自分が何をしたのか、そしてその理由を実際に理解するでしょう。それは決して小さなことではありません。Python にこれほど優れた IDE または他の言語があればいいのにと思います。しかし、私の経験から、これに近いのは Delphi だけです。そして Delphi の場合でも、私はまだ squeak と pharo を好みます。

他のIDEについて私が厄介だと思うのは、それらはまったくIDESではないということです。それらは単なる美化されたエディタであり、ロックされており、柔軟性がなく、編集できません(別のプログラミング言語を使用して大量のソースコードをナビゲートするつもりがない限り)。Squeak 、 Pharo 、およびその他すべての smalltalk 方言は、本当に便利なツールを提供する真に洗練された IDE を提供します。他の IDE は、smalltalk を詳しく調べて、IDE であることが何を意味するのかを理解することをお勧めします。

これらすべての良いことを言っても、smalltalk は完璧にはほど遠いものです。そして、その最大の弱点と欠点は、初心者が頭から飛び出すのに役立つ楽しくて役立つドキュメントがないことだと思います. Squeak By Example 同様に Pharo By Example は私にとって大きな失望でした。どちらも、両方のプラットフォームで非常に貴重な洞察を提供する非常に重要な 2 冊の本ですが、ドキュメントの品質は平凡なものから悪いものまでさまざまです。主な理由は、両方の本が非初心者向けのアプローチに従っていることです。最初に、IDE を詳しく説明し、第 1 章からデバッガー、さらには単体テストまで紹介します !!! 私にとってこれは大きな間違いであり、プログラミングの初心者ではありませんが、説明されたことをフォローアップするのに苦労しなければなりませんでした. それから本自体は、多くの未回答の質問をさせてくれます. たとえば、インスタンス変数とクラス変数の説明は十分ではありません。how だけでなく、why も示すいくつかの例をお勧めします。本のいくつかの領域には、ギャップがいっぱいであるか、理解するのが難しいだけです.

このリンクhttp://stephane.ducasse.free.fr/FreeBooks.htmlを見つけて、そこから「Smalltalk by Example」をダウンロードしたとき、私の人生はずっと楽になりました。タイトルですが、あなたが誰で、何を知っているかについての仮定はありません。私はそれを強くお勧めします。無料で提供されている他の本も非常に優れていると読んだので、最終的にはすべてダウンロードして読むつもりです。

多くの助けが irc.freenode.net でも #squeak されており、そこにいる人々は私の質問に答え、理解するのを助けてくれました。

Squeak wiki は問題ありませんが、十分ではありません。また、あまりよく構成されていません。コメントやディスカッションが wiki ドキュメント内に表示されるのも好きではありません。そのため、ドキュメンテーションは一般的に初心者にとっては少し苦労する可能性があり、確かに Smalltalk は簡単に習得できるプログラミング言語ではありません。私は多くのスモールトーカーが別のことを言っているのを聞いており、スモールトークとPythonを比較すると、昼と夜のようなものです。しかし !smalltalk を理解すると、これまでに学んだどのプログラミング言語よりもはるかに簡単にプログラミングできるようになり、ほとんどのプログラミング言語を習得できました。したがって、最終的には Smalltalk が明らかに有利だと思います。また、あらゆる C ライブラリを簡単に呼び出すことができる FFI ライブラリも気に入っています。

最初に言語を学び、次に IDE を学ぶ必要はないと思います。IDE が言語とそのライブラリ、およびその中のあらゆる種類のコードを理解するのに役立つという単純な事実を考えると、実際には非常に悪い考えです。言語と IDE は兄妹、陰と陽のようなものです。

于 2011-11-22T15:00:28.773 に答える
2

Eiffel を学ぶことに決めた場合、Betrand Meyer (彼は Eiffel プログラミング言語を作成しました) による「Object-Oriented Software Construction」が良い本でしょう。

この本は、Eiffel を使用したオブジェクト指向設計への優れた洞察を提供します。私の謙虚な意見では、最高の OO の本の 1 つです。

于 2011-11-28T20:29:06.957 に答える