最初のプログラミング言語としてアセンブリ(ある種のバリアント)を教えることはどれほど良い考えだと思いますか?たとえばJavaやPythonを学習するよりも多くの労力がかかりますが、「少なくとも1日のプログラミング」(少なくとも多くの高レベル言語と比較して)から多少なりともマシンを十分に理解できます。どう思いますか?少なくとも余分な努力をする準備ができている人にとって、それは現実的なアイデアですか?長所と短所?
注:私は教師ではなく、ただ好奇心が強い
最初のプログラミング言語としてアセンブリ(ある種のバリアント)を教えることはどれほど良い考えだと思いますか?たとえばJavaやPythonを学習するよりも多くの労力がかかりますが、「少なくとも1日のプログラミング」(少なくとも多くの高レベル言語と比較して)から多少なりともマシンを十分に理解できます。どう思いますか?少なくとも余分な努力をする準備ができている人にとって、それは現実的なアイデアですか?長所と短所?
注:私は教師ではなく、ただ好奇心が強い
回答:
アセンブリコードで新しいプログラマを刺激するのは難しいでしょう。ダイナミックなこんにちは、ユーザーWebサイトは、より少ない労力ではるかにクールです。基本的なレッスンが同じだと言っているわけではありませんが、入門コースには大きなインスピレーションを与える内容が含まれています。そうでない場合、2番目のコースはありません。
私は初期のプログラミングコースがSchemeで教えられたことを覚えています。ほとんどの場合、.exeにコンパイルしてプログラムを「実行」することが簡単にできなかったことに不満を感じました(MS Visual Basicがプログラミングのすべてだと思っていました)。何年も経って初めて、私が遊んでいた強力なツールを理解しました。最初はもう少し実用的なものを少し経験したことがあれば、もっと感謝し、それらの教訓をよりよく理解できたと思います。
ソフトウェア工学とCSの学生、そして一般的にエレクトロニクスよりもプログラミングに興味のある人にとって、それはひどい考えだと思います。
実行できますが、実行する必要があるという意味ではありません。当時、家庭用コンピューターで本当にクールなことをする方法は、最初に組み立てを学ぶことでした。これは、初期のハードウェア制限によるものでした。高レベルの言語は、強力かつ十分に高速ではありませんでした。最近では、より高レベルの言語を使用して、より短時間でよりクールなことを実行できます。
単純なゲームの高速プロトタイプを作成してアルゴリズムのバリエーションをいじったり、レジスタや低レベルのものに苦労したりすると、もっと面白そうに聞こえますか?
ひどい考えだとは思いませんが、これらの生徒にプログラムをどれだけ複雑にするのでしょうか?アセンブリにはさらに多くの作業が必要です。非常に基本的なものから始めて、下位レベルでの作業に感謝した後、作業しやすいものに移動しても構いません。初めて生徒が頭の中でアイデアを得ると、次のHalo、MS Office、AutoCADなどをコーディングし、単純なアセンブリ言語にどれだけの作業が入るかを見ると、怖がってしまう可能性があるので、明確にするアセンブリよりも良いものがあることを理解し、概念を理解したらそれらに移動します。また、Cのような他の何かと並行してassemlbyを教えることもできます。
また、どのアセンブリ言語ですか?MIPSは比較的簡単に使用でき、エミュレーターで実行されるため、実際のマシンに問題を引き起こす危険性はないと思いますが、現在よりも優れたツールがあるかもしれません。
それが正しく行われていれば、これはうまくいく可能性があります。注意してください...
アセンブリは、エレクトロニクススクール(1900年代に遡る)で最初に学んだ言語であり、自然な選択のように思えました。ディスクリートコンポーネントから、抵抗-トランジスタロジック、ロジックゲート、集積回路、プロセッサ、そしてアセンブリのプログラミングまで、コースを進めました。これらのクラスの学生の多くは、これまでどの言語でもプログラミングしたことがなかったため、すぐに使い始めました。
そのため、適切な基礎が学生に提供されている場合、アセンブリは第一言語に適した選択となります。ただし、アプリケーションまたはWeb開発者を目標とする人にとって、アセンブリはおそらく低レベルの出発点だと思います。
一つのことは、アセンブリを最初に学んだ人がそれを作れば、すばらしいプログラマになるということです。
これは私が運転する方法を学んだときを思い出します。私の母は主張した
あなたが自信を得るまで自動運転車で学び、それから私達の手動車を運転できる。
彼女は、私が必要以上に気を散らされることを一度に望まなかったのです。
それをプログラミング方法の学習に適用します。学習者にすべてを一度に投げる必要がありますか?彼らは変数が何であるかを学習すると同時に、どのような種類のレジスターにどれだけのデータを保存できるかを学習しますか?
私のクラスの半分以上がアセンブリクラスに失敗しました。これは、その時点で2年以上プログラミングの知識があると考えていた人々のグループでした。
私がすべてをもう一度学ばなければならなかった場合、私の個人的な好みは、私にとって可能な限り多くのことをする言語から始めることです。それから、私が学ぶように、下位レベルの言語に向かって後退します。
少なくとも余分な努力をする準備ができている人にとって、それは現実的なアイデアですか?
番号
しかし、人は機械をよく理解しているでしょう
なぜそれが有利なのですか?これがどのように価値があるかについての例やヒントを提供できますか?
長所と短所?
利点:なし。
短所:
フラグ、状態、レジスタ、複雑なメモリアドレス指定スキーム、I / Oデバイス、DMA、割り込み、クロックサイクルなどに関する雑然とした雑学。いずれも、最新のVMベースの言語とコンピューティングの理解に役立ちません。
コンピューターが実際に適用される実際の問題解決からの切断。
エンドユーザーからの離婚と、エンドユーザーが解決する必要のある実際のデータと処理の問題。
マシンと仮想マシン、コンパイラーとインタープリター、そして世界を支えているカメの全スタックについての不必要な説明。
多くの詳細な「これは、最終的に到達する高レベル言語での「オブジェクト」の物理的な実装です」。
最終的に到達する高レベル言語での詳細な「メソッド関数のディスパッチ方法」。
多くの「これは80386には適用されませんが、80586チップセットには適用されます」説明。
多くの低レベルOS API呼び出しは、ASMプログラムに、誰かに役立つように見えるものを何でも実行させます。
最初のプログラミング言語のポイントは、チップセットをマスターすることではありません。
最初のプログラミング言語のポイントは
コンピューティングについての考え方を理解します。
有用なデータ処理の方法を理解します。
何かを成し遂げる方法を理解する。設計-コード-テスト。
カリキュラムを設計するように命じられた場合、私は最初の学期に2つのコースを同時に実行します:asm +基本的なコンピュータ組織/アーキテクチャ、およびSchemeで設立されたSICPベースのコース。2学期は、Schemeのデータ構造と基本アルゴリズムに焦点を当てます。
2年目は、Delphi、C ++、またはC#のいずれかを使用した1年間のプロジェクトで、最新のソフトウェア設計(OO設計、機能設計、ソフトウェアエンジニアリング、バージョン管理など)に焦点を当てます。
その効果は、抽象的なものと実践的なものの両方に強力な基礎を与え、3年目と4年目に詳細なコースに導くことです。
私はTA入門コンピューターサイエンスクラスに慣れていましたが、それは悪い考えだと思います。
そうは言っても、アセンブリ/コンピューターハードウェアは非常に初期のクラスである必要があると思います。理想的には、メジャーの第1四半期です。生徒にベルトの下で1つの高レベル言語を取得させ、すぐに低レベルのハードウェアに飛び込んでからデータ構造に移行します-理想的にはメモリの管理を必要とする言語で。
アセンブリは、BASICの直後の私の第二言語でした。しかし、私が学んでいたときは別の時間でした。My Commodore 64には他の言語も用意されていましたが、高速に見えるようにしたい場合や、一度に複数のことをしたい場合は、アセンブリ言語と割り込みの処理方法を学ぶ必要がありました。Commodoreにウィンドウシステムを提供したGraphic Environment Operating System(GEOS)もすべてアセンブリでした。概して、これまで見た中で最高のアセンブリAPIでした。また、コードをスタイルできる場所で使用した唯一のプラットフォームでもありました。そうです、イタリック体と異なるフォントサイズを使用できます。これは、コメントを読むのに役立つことが証明されています。
Commodoreの仕組みについて多くのことを学びましたが、Motorollaチップには非常にシンプルなオペコードセットがありました。255個未満のオペコードを別々に保持することはそれほど難しくありません。私がいたではないチップとシステムアーキテクチャがあまりにも異なっていたインテル8086用のプログラミングにMotorolla 6510チップ上の私の経験をパーレイすること。AmigaのMotorolla 68000チップに移行するのと同じ問題があったと思います。
要するに、私はアセンブリが良い第一言語であるべきだと言う人に心から反対しなければなりません。その理由は次のとおりです。
最近、アセンブリ言語は、コンパイラが生成したアセンブリよりも手作りのアセンブリの方が速い特定の有限アクションを高速化するために使用されます。アプリケーションの主な構造は、C、C ++などのような高レベル言語で行われます。もちろん、コンパイラの作成を開始する場合、アセンブリプログラミングは非常に重要になります。私たちのうち何人ですか?
アセンブリ言語は、次のようなことに焦点を合わせた場合にのみ意味があると思います。
この分野に焦点を当てなければ、それは単純な言語に過ぎず、悪い組織習慣を教える傾向があります。機械レベルのコーディングは、物事の仕組みを知るためにツールキットに含めるのが良いのですが、それは良い第一言語ではありません。
誰かがより高いレベルの言語に興味を持つようになるでしょう。次に、C ++を教えます。次に、C ++コンパイラがアセンブリコードを生成する方法に焦点を当てたアセンブリ。v-tableと他の高レベル言語機能を理解することは、開発者が「魔法」の下で情報をファイリングするだけでなく、言語が実際にどのように機能するかを考えるのに役立ちます。