web-dev-qa-db-ja.com

最初のプログラミング言語としてのアセンブリ?

最初のプログラミング言語としてアセンブリ(一部のバリアント)を人々に教えることはどれほど優れていると思いますか?たとえば、JavaまたはPythonを学習するよりもはるかに多くの労力が必要ですが、「プログラミングの初日」から機械をよく理解できます(多くの高水準言語と比較して、少なくとも)あなたはどう思いますか?少なくとも余分な努力をする準備ができている人にとっては、それは現実的な考えですか?長所と短所?

注:私は教師ではありません。好奇心旺盛です

12
Anto

アセンブリコードで新しいプログラマを刺激するのは難しいでしょう。動的なこんにちは、ユーザーのウェブサイトは、少ない労力ではるかにクールです。基本的なレッスンは同じだと言っているわけではありませんが、入門コースには大きなインスピレーションを与える内容が含まれているでしょう。そうでなければ、2番目のコースはありません。

初期のプログラミングコースはSchemeで教えられていたのを覚えていて、.exeにコンパイルしてプログラムを "実行"するだけでは簡単にできなかった(MS Visual Basicがプログラミングの最後であると思った)ことに大いに不満を感じていました。私が何年も使っていた強力なツールを本当に理解したのは、それから数年後のことでした。最初はもう少し実用的なことを少しでも経験したことがあれば、それをもっと高く評価し、それらのレッスンをよりよく受けたと思います。

14
G__

ソフトウェアエンジニアリングとCSの学生、そして一般的に電子工学よりプログラミングに興味のある人にとっては、ひどいアイデアだと思います。

それはできる行われるが、それがそれを意味するわけではないすべき行われる。昔、家庭用コンピュータで本当にクールなことをする方法は、最初にアセンブリを学ぶことでした。それは初期のハードウェアの制限によるものでした-より高水準の言語は強力で十分に高速ではなかっただけです。最近では、より高級な言語を使用して、より短時間でより優れた作業を行うことができます。

単純なゲームの高速プロトタイプを作成し、アルゴリズムのバリエーションをいじる、またはレジスターと低レベルのものに苦労している、より興味深いものは何ですか?

12
Andres F.

それはひどい考えではないと思いますが、これらの学生に与えるプログラムはどれほど複雑ですか?組み立てにはもっと多くの作業が必要です。非常に基本的なものから始めて、より低いレベルでの作業に対する評価を得たら、作業しやすいものに移動することは問題ないかもしれません。初めての学生は頭の中でアイデアを得て、次のHalo、MS Office、AutoCADなどをコーディングし、simpleアセンブリ言語にどれだけの作業が入るかを見ると、怖いので、アセンブリよりも優れたものがあることを明確にし、コンセプトを確認したら、それらに移動します。 Cのような何かと同時にassemlbyを教えることもできます。

また、どのアセンブリ言語ですか? MIPSは比較的作業が簡単で、エミュレータで実行されるので、-realマシンに問題を引き起こす危険はないと思いますが、今よりも優れたツールがあるかもしれません。

これはcouldが適切に機能すれば、うまく機能します。注意してください...

アセンブリは、エレクトロニクス学校(1900年代)で最初に学んだ言語であり、自然な選択のように思えました。私たちは、ディスクリートコンポーネントから、抵抗-トランジスタロジック、ロジックゲート、集積回路、プロセッサ、アセンブリのプログラミングに至るまで、コースを進めていきました。これらのクラスの学生の多くは、これまでどの言語でもプログラミングしたことがなく、すぐに習得しました。

したがって、アセンブリcanは、学生に適切な基盤が構築されている場合、第一言語として適切な選択肢となります。ただし、アプリケーションまたはWeb開発者になることを目標とする人にとっては、アセンブリはおそらく低レベルの出発点だと思います。

7
Bill the Lizard

1つ確かなことは、最初にアセンブリを学習している人がそれを作れば、彼らは素晴らしいプログラマーになるということです。

運転の仕方を覚えたときのことです。私の母は主張した

自信を得るまで自動車で学習し、それから私たちの手動車を運転することができます。

彼女が私に必要以上のことに気を取られてほしくないという理由で、すべて一度に。

それをプログラミングの方法の学習に適用しますが、すべてを一度に学習者に投げる必要がありますか?彼らは変数が何であるかを知ると同時に、どのような種類のレジスターにどれだけのデータを格納できるかを学びますか?

halfを超えると、私のクラスはアセンブリクラスに失敗しました。これは、当時2年間以上プログラミングに精通していると考えていた人々のグループでした。

私の個人的な好みは、もう一度すべてを学ぶ必要がある場合は、できるだけ多くのことをできる言語から始めることです。次に、私が学んだように、下位レベルの言語に向かって後退します。

7
CrazyPenguin

アセンブリは、BASICの直後の私の第二の言語でした。しかし、私が学んでいたときは、別の時でした。私のコモドア64には他の言語も用意されていましたが、高速に見えるようにしたい場合、または一度に複数のことを実行したい場合は、アセンブリ言語と割り込みの操作方法を学ぶ必要がありました。コモドールにウィンドウシステムを提供したグラフィック環境オペレーティングシステム(GEOS)もすべてアセンブリでした。概して、これまでに見た中で最高のアセンブリAPIでした。また、コードのスタイルを設定できる唯一のプラットフォームでもありました。そうです、イタリック体やさまざまなフォントサイズを使用できます-コメントを読むのに便利なものです。

私はコモドールがどのように機能するかについて多くを学びましたが、モトローラチップは非常にシンプルなオペコードセットを持っていました。 255未満のオペコードを互いに分離しておくことはそれほど難しくありません。モトローラ6510チップでの経験をIntel 8086のプログラミングに当てはめることはできませんでした。 AmigaのMotorolla 68000チップに移行するときにも同じ問題があったと思います。

要するに、私は議会が良い第一言語であるべきだと言う人には心から反対しなければなりません。理由は次のとおりです。

  • 固有の構造はなく、アプリケーションの機能を分解する一般的な方法もありません。これこそが、高水準言語を非常に便利にするものです。
  • ライブラリのメソッドを正しく呼び出す方法など、役に立たないことを知っている必要があります。ライブラリがCによって作成されたときは、スタックを操作することを意味します(すべてを正しい順序で取得するほうがよい)が、別の言語では、レジスターを設定することを意味する場合があります。これらはすべてコンパイラーまたはインタープリターによって処理されるものであり、それらを最適化することはできません。
  • あなたのコードは別のチップで使用することはできませんができません、そして別のハードウェアプラットフォームで壊れる可能性が非常に高くなります。

最近、アセンブリ言語は、手作りのアセンブリがコンパイラ生成のアセンブリよりも速い特定の有限アクションを高速化するために使用されます。アプリケーションの主な構造は、C、C++などの高水準言語で行われます。もちろん、コンパイラーの作成を始める場合、アセンブリー・プログラミングは非常に重要になります。私たちの何人がそうしますか?

3
Berin Loritsch

少なくとも余分な努力をする準備ができている人にとっては、それは現実的な考えですか?

番号

しかし、人は機械をよく理解しているでしょう

なぜそれが有利なのですか?これがどのような価値があるかについて、例やヒントを提供できますか?

長所と短所?

利点:なし。

短所:

  • フラグと状態、レジスタ、複雑なメモリアドレス指定スキームとI/Oデバイス、およびDMAと割り込みとクロックサイクルなど)に関する乱雑な雑学言語とコンピューティング。

  • コンピュータが実際に適用されている実際の問題解決からの切断。

  • エンドユーザーとの離婚、およびエンドユーザーが解決する必要のある実用的なデータと処理の問題。

  • マシン、仮想マシン、コンパイラ、インタプリタ、そして世界を支えているカメのスタック全体の説明の不必要な状態。

  • 彼らが最終的に到達する高水準言語での多くの詳細な「これは「オブジェクト」の物理的な実装です」。

  • 多くの詳細な「これはメソッド関数がどのようにディスパッチされるか」であり、最終的に到達する高級言語で記述されています。

  • 「これは80386には適用されませんが、80586チップセットには適用されます」という説明がたくさんあります。

  • ASMプログラムに、誰かにとって有用であるように見える何かを実行させるための多くの低レベルOS API呼び出し。

最初のプログラミング言語のポイントは、チップセットを習得することではありません。

最初のプログラミング言語の要点は

  1. コンピューティングについて考える方法を理解する。

  2. 有用なデータ処理を行う方法を理解します。

  3. 何かを成し遂げる方法を理解します。設計-コード-テスト。

3
S.Lott

カリキュラムの設計を任された場合、最初の学期に2つのコースを同時に実行することになります。asm+基本的なコンピューター構成/アーキテクチャ、およびSchemeで設立されたSICPベースのコースです。第2学期は、Schemeのデータ構造と基本アルゴリズムを中心に行われます。

2年目は、Delphi、C++、C#のいずれかを使用した1年にわたるプロジェクトで、最新のソフトウェア設計(OO設計、一部の機能設計、ソフトウェアエンジニアリング、バージョン管理など)に焦点を当てています。

その効果は、アブストラクトと実践の両方に強烈な基礎を与えることであり、3年目と4年目には詳細なコースにつながります。

3
Paul Nathan

以前はコンピューターサイエンスの入門クラスをTAで使っていましたが、それは悪い考えだと思います。

  1. アセンブリは、ロジック(これがそれに当てはまる場合)と、概念と数値の間の非常に難しい変換の両方を使用します。イントロCSの学生は、しばしば論理(ループ、if/else、ブール式)だけで苦労しており、どの数値がどの論理式を意味するかについて心配する前に、これに対処する必要があります。高級言語を使用すると、このロジックを、そのように考える理由がまったくなかった学生のために抽象化します。
  2. イントロCSクラスは、CSを継続するCS専攻のみが受講する必要はありません。しばしば、彼らはまた、選択科目の興味深い主題を単に「見学」している他の工学専攻や非専攻でも採用されています。アセンブリは、ハードコアで熱心なCS学生の基盤としては優れていますが、専攻を検討している学生や専攻を履修するつもりはないが、分野の紹介を望んでいる学生にとって、プログラミングがどのようなものであるかについての概要はあまりわかりません。 ;また、ほとんどの分野でそれ自体でひじょうに役立つものでもありません。
  3. 高水準言語は、実際のプログラミング作業の中核をより透過的にします。アセンブリは、基本的なメモリの概念、基本的なパフォーマンスの概念など、いくつかの重要な基本的なトピックにぶつかりますが、保守性が高く、読みやすいデザインを作成することはできません。初期の学生は、昔ながらの「本物のプログラマーは誰も扱えないコードを書く」という考えを持っているようで、高水準の言語を教えることは、コーディングが協調的タスクであり、単なる才能ではないことを教えるのに役立ちます。

そうは言っても、アセンブリ/コンピューターハードウェアは非常に初期のクラスであると思います。理想的には、メジャーの第1四半期です。生徒に1つの高級言語を身につけさせ、すぐに低レベルのハードウェアに飛び込んでから、データ構造(理想的にはメモリの管理が必要な言語)に進みます。

3
Ethel Evans

私は高校3年の時に議会に行きました。私はすでにJava、Pascal、C、C++のクラスを受講しており、それらのいずれにも習熟していなかったので、私はアセンブリに夢中になりました-コミュニティカレッジの遠隔教育プログラムでクラスを受講した唯一の人は、だれかがコンパイラーを機能させる前に、1〜2か月かかります。

最初にアセンブリ言語を学ぶことは必要でも賢明でもないと思いますが、アセンブリの最初の数週間で彼らがあなたに教えるもの、プロセッサがどのように機能するか、そしていくつかのデバッグトリックについて学ぶことは賢いです。初心者として非常に興味深く、啓蒙的なものだと私は思いました。

1
Peter Turner

アセンブリ言語は、次のようなことに集中した場合にのみ意味をなすと思います。

  • メモリ管理手法
  • HW IO(特にタイミングとパフォーマンスに関連する課題)
  • CPU機能-特にセキュリティ機能

この領域に焦点を当てないと、組織の悪い習慣を教える傾向があるのは単なる単純化した言語です。マシンレベルのコーディングは、物事がどのように機能するかを知るためのツールキットに含めるのは良いことですが、それは良い第一言語ではありません。

高レベルの言語に興味を持ってもらいます。次に、C++を教えます。次に、C++コンパイラがアセンブリコードを生成する方法に焦点を合わせてアセンブリします。 vテーブルやその他の高水準言語機能を理解することは、開発者が「魔法」の下で情報を提出するだけでなく、言語が実際にどのように機能するかについて考えるのに役立つでしょう。

0
Jim Rush

なぜそれができなかったのかはわかりませんが、それがどれほど優れているかは、あなたが教える群衆に完全に依存します。 Web開発者になることを最終目標とする人は、おそらく退屈し、Python、Rubyなどのようなものを作成することの即時の満足感を得られないため、終了する可能性があります。彼らが最終的にハードウェアやその他の低レベルのプロジェクトに取り組みたいのであれば、それは大丈夫だと思います(コンピューターアーキテクチャの背景が十分にあり、理にかなっていれば)。他の言語を学ぶよりも難しいと思いますが、将来的には人々がより良いコードを書くのに役立つと思います。

0
Jetti