Smalltalkの学習がプログラマのスキルを向上させる方法





Smalltalkは通常、古くて死にかけている言語-過ぎ去った時代の骨as品として認識されています。 真実からそれ以上のものはありません。



Smalltalkは依然として非常に重要です。 これは、技術的背景のない人々にプログラミングを教えるのに最適な言語です。 スタートアップ向けの優れたプロトタイピング言語です。 これは、世界中の大企業と中小企業の両方で使用される強力な産業用言語です 。 最近、Smalltalkの機能を改善するために多くのことが行われているため、今日のSmalltalkの使用を検討する正当な理由があります。



産業用プログラミングでSmalltalkを使用する必要はありませんが、Smalltalkに何かを書いて自分の気持ちを聞いてみてください。 Smalltalkでのオブジェクト指向パラダイムの実装は非常に優れているため、Objective-C、Python、Ruby、CLOS、PHP 5、 Perl 6 、Erlang、Groovy、Scala、DartなどのOO言語の世代全体に影響を与えているため、よく知っているはずです。 、Swiftなど。



Smalltalkを学習することにより、現代言語のこれらすべての便利な機能がどのように現実になったかを理解できます。 Smalltalkを学習することで、仲間同士で優位に立つことができ、プログラミングを学習するための優れたツールにもなります。



Smalltalkは何を提供してくれましたか?



Smalltalkのソフトウェア業界への貢献は膨大です。 彼が紹介したこの機能とテクノロジーのリストをご覧ください。





しかし、Smalltalkを学ぶことで、私はどのように優れた開発者になれますか?



Smalltalkには、時代をはるかに超える多くの機能があります。





また、Smalltalkを特別なものにする機能がいくつかあります



基本的に、生産的な言語および学習ツールとしてのSmalltalkの主な利点は、Javaなどの産業用OO言語の認知ストレスのすべてではないにしても、ほとんどを取り除くことです。 Smalltalkには、シンタックスジャンクや混乱を招く機能は含まれていません。 彼は礼儀正しくあなたに道を譲るので、あなたはすべての注意を問題やアプリケーションに集中させることができます。 Javaはより複雑である(そして30文字のクラス名を持っている)ため、Javaが悪い言語ではありません。 OO言語の学習は、追加の機能を必要としないため、OOPの概念を別の観点から理解するとすぐに、実際に優れた Javaプログラマーになることができると言っています。



認知ストレスの解消は、Python、Ruby、Elixir、Elm、Goなどの多くの言語の目標です。 感じなくてもストレスがあります。 SmalltalkやPythonでのプログラミングはZenに似ているとよく言われます。 あなたの意識は、目の前の課題に沿って簡単かつ自然に流れるだけです。 これが言語のシンプルさの美しさと価値であり、Smalltalkはその可能性を最大限に引き出しています。



Smalltalkでは、OOPの概念は、クラスとメソッド、メタクラスとリフレクション、そして最も重要なメッセージングの基本概念に洗練されています。 Smalltalkは、オブジェクトの純度と一貫性のおかげで、オブジェクト指向プログラミングとそれを最大限の効率で使用する方法を深く理解できます。



Smalltalkのシンプルさは、特に技術トレーニングを受けていない場合、プログラミングを教えるための理想的な教育言語にもなります。 言語とツールのシンプルさにより、言語の構成や形式主義ではなく、 プログラミング方法の学習に集中することができます。



「ライブ」デバッガーは、編集-テスト-デバッグサイクルを大幅に削減します。



Smalltalkはどのように機能しますか? 画像ベースのプログラミングアプローチ



Smalltalkが成功する主な理由は、ソフトウェア開発への画像ベースのアプローチです。 イメージは、実行中のアプリケーションのすべてのオブジェクトを含むメモリのスナップショットです。 プログラムの実行状態全体をカプセル化します。 画像をディスクに保存し、後で中断したところから正確に更新できます!



Smalltalkイメージは少し変わったように聞こえるかもしれませんが、実際には、今日広くITで使用されているもの、つまりVMwareやVirtualBoxなどのOS仮想化のシステムイメージに非常に似ています。 Smalltalkはもともと1970年代にXerox PARCによって作成されたスタンドアロンのオペレーティングシステムであったことに注意してください。



Smalltalkイメージは、WebアプリケーションのDOM(ドキュメントオブジェクトモデル)に似ています。 Webアプリケーションは、本質的にはWebブラウザーで分離されたオペレーティングシステムであり、ホストファイルシステムやその他のリソースに直接アクセスできないことに注意してください。 Webブラウザーを閉じると、動的Webサイトの状態を保存またはキャッシュでき、次回ブラウザーを再開したときに、Webサイトをブラウザーに復元できます(いくつかの制限があります)。



スプレッドシートでさえ、画像の概念に非常に近いものです。 彼女はすべての必要な情報をカプセル化します。 彼女はシステムリソースにアクセスできません。 保存および復元できます。 また、複雑なモデルやアプリケーションを独自の言語で開発するためにスプレッドシートがまだ使用されていることを知っておく必要があります。



一般的に、画像の概念は広く普及しています。 これは、 Lively Kernelの JavaScript用にイメージのバージョンが作成されたソフトウェアを開発するのに非常に便利な方法です。



Smalltalkのすべてはオブジェクトです



例外なく:すべてはオブジェクトです。 プリミティブデータ型はありません。 選択や反復のような制御構造はありません! Smalltalkのすべては オブジェクトに メッセージを送信することによって行われます 。 これにより、Smalltalkは非常にシンプルでエレガントで、学習しやすくなっています。 これが言語を構文的にきれいにするものです。



たとえば、次のコードスニペットはNumber



クラスを拡張して、非再帰的階乗演算をサポートします。



 Number extend [ my_factorial [ (self < 2) ifTrue: [ ^1 ] ifFalse: [ |c| c := OrderedCollection new. 2 to: self do: [ :i | c add: i ]. ^ (c fold: [ :a :b | a * b ] ) ] ]]. 7 factorial printNl. 7 my_factorial printNl. “should be the same result as the previous line”
      
      





ifTrueは次のとおりです。これは、式(self <2)によって返されるブールオブジェクトに送信されるキーメッセージです。 メッセージの引数はコードブロックです(角括弧で示されます)。 実際、 ifTrue:これは2つの引数を持つメッセージの最初の部分であり、2番目の部分はifFalse:です。



単項メッセージnewは 、新しいコレクションを作成するためにOrderedCollection



クラスに送信されます。 printNlメッセージmy_factorialメッセージ番号7に送信した結果(オブジェクト)に送信されます。これはすべて、自然言語に非常に似ています!



Smalltalkのリフレクション



Smalltalkのリフレクションは、実行時に独自の構造と計算をチェックするメカニズムとして特に価値があります。 これは非常に強力なメカニズムであり、プログラムが新しいクラスやメソッドを使用して自分自身を拡張したり、「このメッセージを私に送ったのは誰ですか?」



リフレクションは、強力なエラー処理メソッドを実装するために使用されます。 オブジェクトは、実装していないメッセージを受け取ると、メッセージdoesNotUnderstand:と元のメッセージのコードを受け取ります。 メッセージdosNotUnderstandでプログラムができることはたくさんあります。機能の拡張などです!



画像と反射の概念により、SmalltalkはアプリケーションとIDEの間の境界線を埋めることもできます。 アプリケーションの開発、デバッグ、起動に必要なものはすべてイメージに含まれています。 アプリケーション環境を離れる必要はありません。 これは、すべてをより禅的で生産的にするソフトウェア開発への完全に包括的なアプローチです。



Smalltalkの復活



Smalltalkの世界における過去15年間の開発により、この言語はより魅力的になりました。



JavaScriptに変換されるAmber Smalltalkを使用してWebインターフェイスをプログラミングするためにSmalltalkが利用できるようになりました。 アンバーはブラウザでのみ実行されます。 Amberの驚くべき機能の1つは、JavaScriptライブラリをインポートすると、そのオブジェクトをSmalltalkオブジェクトと同じ方法で処理できることです。



2002年にSeaside Webプラットフォームがリリースされ、これが最も人気のあるSmalltalk Web開発ツールになりました。 継続ベースのアプローチは、Webアプリケーションに通常の「呼び出し/戻り」メカニズムを提供しました。 これにより、二重リクエストと[戻る]ボタンで問題を解決できました。 当時は非常に革新的であり、他のWebフレームワークにはまだ実装されていません。



Pharoプロジェクトは、最新のソフトウェア開発プラクティスに焦点を当てるために2008年に始まりました。 彼は、Smalltalk-80方言に基づいて、以前のオープンソースプロジェクトであるSqueakよりもはるかに進んだSmalltalkを開発しました。 Pharoプロジェクトは、 Glamorous Toolkitと呼ばれる新しいタイプのIDEの研究も開始しました。 プログラミング環境はニーズに合わせて「柔軟」でなければならないという考えに基づいています。



昨年、多くのDolphin Smalltalkに愛されたプロジェクトはオープンプロジェクトになり、Smalltalkファンに別の素晴らしいオプションを提供しました。 Dolphin Smalltalkは 、最高のIDE実装の1つを持つと称賛されることがよくあります。



Smalltalk Legacy:プログラミングをお楽しみください



JVM、Eclipse IDE、クロージャ、ライブプログラミング、MVC、TDD、VMware、さらにはシンプルなWebアプリケーションなどの最新のソフトウェア開発ツールを使用する場合は、Smalltalkの起源を考え、何をすべきかを尊重してください。 Objective-C、Python、Ruby、Groovy、Scala、Dart、Swiftなど、使用している言語に感謝します。



これらすべての素晴らしい機能とテクノロジーの元となる言語を使用することで、ソフトウェア開発者としての知識、心の鋭さ、生産性を大幅に向上させるユニークな機会が得られます。 「快楽」という言葉は、ソフトウェアエンジニアリングに関する議論で常に使用されるわけではありませんが、SmalltalkとそのOO兄弟は、ソフトウェア開発を喜びに変えることができる認知障壁とプログラミングの容易さを提供すると思います。



著者について



Richard Engは退職したカナダのソフトウェア開発者で、IT業界で30年以上の経験があります。 ビデオグラフィックス、データベース、財務、リアルタイムソフトウェア、iOSおよびAndroid向けモバイルアプリケーション、およびWeb開発の分野で働いていました。 彼は主にCで書きましたが、FORTRAN、タンデムTAL、C ++、C#、Objective-C、Java、Smalltalk、Python、Goも使用しました。 彼は現在、Smalltalk Renaissanceキャンペーンをリードしています。 リチャードはほとんどの時間を記事とエッセイの執筆に費やしています。



All Articles