The following is a list of questions (and answers) that should help as a refresher about topics related to programming languages in general; and to compilation, code execution, programming language internals, run-time program management, in particular.

What is the difference between machine language and assembly language?

Machine language is a binary representation of instruction codes (opcodes) and data
that can be directly interpreted by a microprocessor. It's a sequence of bits that
that directly control the microprocessor, causing it to add, compare, or move data
from a location to another.
In contrast, assembly language is a human readable language that uses short mnemonics
to refer to instructions, and data. It must be must be parsed and converted into
machine language for the microprocessor to execute. Assembly language is usually
specific to each microprocessor and therefore easy to translate into machine language,
usually by a systems program called an assembler.

What is generally considered the first high-level programming language?

The original dialect of FORTRAN is generally considered to be the first high-level
programming language, developed in the mid 1950s.
It evolved primarily to make it easier to represent programs for numerical computation
in a machine-independent language.
Other high-level languages such as Lisp and Algol followed shortly.

In what way are high-level languages an improvement on assembly language?

Assembly languages are specific to each microprocessor so a program would have to be
rewritten for every new microprocessor.
High-level languages abstract the microprocessor implementation details making it very
easy to recompile a program for a different microprocessor. Once a new microprocessor is
designed, only the compiler for the high-level language needs to be modified to target
the new microprocessor and then all programs can be recompiled, mostly automatically.
Another aspect that is an improvement on assembly language is that higher level languages
offer the programmer a more natural way of expressing programs that is closer to the
problem domain (easier for the programmer to write) as opposed to closer to the machine
(easier to translate to microprocessor instructions).

Under what circumstances does it still make sense to program in assembler?

Today, only special purpose applications require the use of assembly language, such as
modifying or rewriting a compiler to target a new microprocessor, or focusing on a
specialized routine that needs to interact with a microprocessor in a highly specific way.

What makes a programming language successful?

Just as with novels, or movies, or even cars, there is no single recipe for developing a successful programming language, and there is no single benchmark or attribute by which to characterize a successful language. It could be argued that a successful programming language is one that becomes highly widespread and which stands the test of time. But there are a number of attributes on which to judge a programming language:

Expressive Power

Ease of Use (for Novice Programmers)

Ease of Implementation

Standardization

Open Source

Compiler Quality

Economics, Patronage, Inertia

It should be obvious that no single one of these attributes determines whether a language is good, and that it's impractical to devise an arbitrary scale composed of these attributes to try to quantify the success of a programming language.
Instead it is probably striking a balance between all of the above that contributes to the success of a language. And the development of one is fraught with compromise to ensure such a balance.

Why are there so many programming languages?

Just as there is not just one type of car, there are multiple reasons why there are
so many programming languages available to programmers, and many new ones are likely
to continue to be developed in the coming years:

Evolution - as the field matures, programming languages are refined and they evolve

Purpose (Domain Specificity) - some languages were designed to fit a very narrow or specific domain, while others are more general purpose (ie. Awk vs. C# or Java)

Personal Preference (Style) - simply put, different programmers like different things and the choice of programming language sometimes is a simple matter of taste.

What distinguishes declarative languages from imperative languages?

In declarative languages the focus is on what the computer should do.
In imperative languages the focus is on how the computer should do it.
In a sense, declarative languages may be considered "higher-level" than imperative ones since they strive to be closer to the natural problem domain than to the implementation details (steps to take to achieve the desired results).

Name three languages in each of the following categories: von Neumann, functional, object-orianted; Name two logic languages, and two concurrent languages.

von Newumann - languages based on statements that modify variables, that influence subsequent computation by side effects of changing the value of memoryC, FORTRAN, Ada, Basic

functional - languages based on recursive definition of functions (expressions that have values, inputs and outputs) with no side-effectsLisp, Haskell, ML, F#

object-oriented - languages in this category focus on interactions among semi-independent objects that have both internal state (memory or data) and their own set of sub-routines that manage that state.C#, Java, Simula 67, Smalltalk