もともとは人間が「こっちのデータをここ入れて、これと比べて同じだったら、処理をこっちに変えて…」と
コンピュータの機械的設計に合わせてコンピュータの配線を切り替えるようなレベルでプログラミングは行われていて
これに沿ったハードに近いレベルの「アセンブラ言語」が無駄が一切なくて最速なのだけど
これは低レベルすぎて人間が辛い(ぶっちゃけ掛け算がなくて足し算を掛ける回数行うプログラムを毎回書けレベル)だったり
「AかBの選択肢」で作った後で「選択肢C」を付けるのに書き直しに近い大改修が必要になったりで
なんとか楽をしようと60年代には人間がわかりやすいFORTRANなどの「高級言語」が作られる。
これらはアセンブラの代替だから人間が高級言語で書いて書き終わったらコンピュータ用にコンパイルして
実行ファイルを作ってそれを動かすというのが基本形式。完全に機械仕様と言語が一致しているわけではないので
どうしてもコンパイル時に無駄が出て“アセンブラで直接”よりは最小最速最大効率とはならない。
その後、人間が一行直すごとに長時間のコンパイル時間を待ってテストとかやってられない!(特に学習目的などで)と
実行時にソースを翻訳しながら実行するインタプリタ形式の言語が生まれる。(実際はやや速い中間言語と言われる
コンピュータが実行できるブロックの塊を内部で生成してそれを実行しているので見かけ上コンパイル時間が要らない)

現代では充分コンピュータが速いのでネットプログラムなどでは「手直しが頻繁だからインタプリタでいいだろう」
ハードウェアの性能限界まで使いたい分野では「いいやコンパイル、いや場合によってはアセンブラだね!」と
立場立ち位置の違いで各人が自分の分野の言語が最高!と口角泡を飛ばして絶賛主張中。わかりやすいですか?

ちなみに「機能ブロックに分けて管理しないとプログラマが後で死ぬわ。」という結論でいまではほぼ全面的に
構造化-オブジェクト指向プログラミングが一般的なので、ブロック間でのやり取りの部分で
コンパイルしても最速にはならんよね、でもプログラマ(グループ)が後で見直せるためにはしゃあない。そんな感じ