私が学びたい高級言語について学ぶときはいつでも、「それを本当に習得するために構築されている下位言語をおそらく学ぶべきだ」と私のうちの一部は言います。例えば、
Ruby => C
Closure => Java
Elixir => Erlang
RubyとCを使用した経験から、私はそれを逆転したと思います。最初にRubyを学びましたが、それは多くの概念の良い入門だったと思います。それは、Cの学習を他の方法よりもはるかに簡単にする一般的なコンテキストを提供しました。確かに、Rubyは私が深く学んだ最初の言語でもありました。そのため、言語固有の経験ではなく、一般的なコンピューティングの概念に慣れるために、その一部が難解になるかもしれません。
定期的に作業していないレイヤーであっても、裏で何が起こっているのかを学ぶのは良いことだと思います。しかし、新しい言語を学ぶときは、一般的にトップダウンまたはボトムアップのアプローチを取る方が良いですか?
これは警官のように思えるかもしれませんが、正直なところ、可能であれば両方を行います。
高水準言語は、高水準の概念を教えるのに非常に適しています。多くのことを非常に迅速に達成し、優れた実践と設計パターンを学ぶことができます。高水準言語を学ぶことは、問題を全体像的に見て、それらを構成可能な部分に分解することを教えてくれます。多くの高水準言語(宣言型言語、関数型言語、論理プログラミング)を使用すると、最終目標と、その目標を達成するために必要なパターンと分解に焦点を合わせる方が簡単だと思います。
下位言語はハードウェアレベルで何が起こっているのかを理解するのに最適であり、それらは不可欠であると私は思います。その理由はこれです。高水準言語は通常、低水準言語の上に構築されます。低水準言語を学ぶことで、抽象化の過去を見渡し、抽象化のリークに関連する問題を解決することができます。これらは、基礎を教えるのに優れており、プログラマーに注意を払う方法(および、高レベルの言語が隠蔽する可能性のある、メモリ管理などの注意点)を教えるのにも優れています。
動的に型付けされ解釈されるスクリプト言語と、静的に型付けされた低レベルのコンパイル言語で足を濡らすことをお勧めします。 (最近の多くの言語は、これらすべてのカテゴリーにまたがることができます。)両方の経験は、より優れたプログラマーになり、両方を行う機会を持つことは、その部分の合計よりも価値があります。大きな問題を非常に小さな問題のコレクションに分解し、それらの小さな問題を簡単に解決することができます。
一般的に!?
それはおそらく依存します。自主研究のために、スペクトルの一方の端を他方よりも優先するために私が見る最大の動機は、interest。です。
c
をたどって、コンソールアプリを作成することは、最終的にWebアプリケーションのフロントエンドを作成したいと考えるユーザーにとってはほとんど意味がありません。または、ウェブアプリのバックエンドです。
一方、低レベルのハードウェアを「作る」ことがボートをフロートさせるものである場合、標準のPHP Webスタックチュートリアルを実行することは実際にどの程度の動機になりますか?
最初に興味のあることをしてください。時間の経過とともに低いレベルと高いレベルを学び、実際に関心のあるレベルをよりよく理解します。
私は反対の見方をしており、Cのような下位レベルの言語を最初のプログラミング言語として提案します。はい、少し急な学習曲線がありますが、それには理由があります。それは、それ以降に取り上げる他の言語を通してあなたを助けるでしょう。
下位言語では、あなた(Xの不透明なクラス実装ではない)がメモリの各バイトを管理し、割り当てられたスペース(自動または動的ストレージ)の終わりを超えて読み取り/書き込みを防止し、すべての入力を検証します/出力、配列を使用した必要な各位置の特定、行末の管理など、および高水準言語がユーザーから隠そうとするプログラミングの1000の基本的な側面。
基本レベルでのコーディングを学び、入出力検証、ファイル処理、メモリ管理などの適切な習慣を低レベルで開発することにより、どのように高い言語であるかを理解できるため、任意の言語への移行がより簡単で短時間になります。レベルのパラダイムが実装され、プログラミングのこれらの基本的な側面のそれぞれが舞台裏でどのように機能しているか。
マシンコードからアセンブリ、C、C++、Java、およびその他のいわゆるオブジェクト指向言語に至るまでの一連の言語では、Cは独自の位置を占めています。完全なハードウェアレベルの制御を提供しながら、上位言語の多くの機能を提供します。
より高いレベルの言語から始めれば、より早くより多くのことを成し遂げることができるかもしれないと提案する人もいますが、スケールの下端から始めるよりも、基本的なレベルからプログラミングを学ぶ絶好の機会はありません。下位レベルから上位レベルのいずれかの言語に移行すると、上位レベルの言語が提供するものについての理解が深まり、それらの言語が持つ制限に対する明確な洞察が得られ、最も重要なのはなぜでしょうか。
Rubyがどのように機能するかを理解するために、最初にCを学ぶ意味は全くありません。
インタプリタがマシンレベルでどのように機能するかを学ぶことは、習熟レベルの知識にとっては興味深いかもしれませんが、厳密にはCの知識を必要とせず、Rubyの初心者には絶対に役立ちません。
ClosureとElixirの場合、基礎となる環境(JVMとBEAM)を学ぶことは、言語の動作に強い影響を与えるので便利ですが、ここでもJavaとErlangを学ぶ必要はありません)それ。
とはいえ、一般的なプログラミングスキルの観点から見ると、Cのような低水準言語を学ぶことは、コンピューターのしくみをよりよく理解するため、または高水準言語がタスクに不適切な場合にエスケープハッチを設けるために役立ちます。しかし、これは習得するための追加スキルであり、高級言語を学ぶための前提条件ではありません。