People like to group programming languages in many different ways. Here are some of them.
Language level
LowLevelLanguages avoid abstraction when possible and will let you do things in ways specific to execution environments.
HighLevelLanguages use abstraction quite freely and make it easier to write programs that run in many different environments.
Paradigms
ImperativeLanguages are the most common type. They are based around modifying data as programs run.
FunctionalLanguages avoid "side effects" as much as possible, with programs being, in a sense, mathematical expressions to be evaluated or simplified. They also make functions "first class," allowing for many useful manipulations.
LogicalLanguages specifies the set of attributes that a solution should have rather the steps necessary to obtain such a solution.
ObjectOrientedLanguages are based around the concept of an object, which is a combination of data and methods for interacting with that data.
MultiParadigmLanguages are not biased extremely towards any one particular paradigm, but support several well.
Type discipline
StaticallyTypedLanguages have types for all values, and verify these types at compilation time.
DynamicallyTypedLanguages have types for all values, but do some or all type checking at run time.
UntypedLanguages have either incomplete type systems, or no type system at all.
Usage
ScriptingLanguages or "glue" languages are usually interpreted languages designed to help automatize certain administrative tasks and make easy communication between programs. They also help customize programs for specific usages.
WebLanguages are either designed specifically for use in developing dynamic web sites or are commonly used for that purpose today.
WeirdLanguages : these ones have no other use than being giving a headache to their users.
DomainLanguages, for lack of a better term, are languages which are designed for use in a specific domain, such as mathematics or statistics. (Rename to DomainSpecificLanguages, DSLs for short ?? -- SLj)
