Engineers have developed variety of programming languages until the invention of computer based technologies. At the beginning there were binary code languages then they've started to code higher level of languages that are more easy to have abstraction of real time actions. In addition, still engineers continue to develop new languages respected to their needs in computer field. Thus, what is the reason behind designing new languages instead of using existing ones and what are the issues behind developing modern programming languages.
1- Development on hardware technologies;
Since the developing hardware technologies, programmers are able to give some new instructions to the machines to do more complicated processes in faster ways.
For example, with the development on the multi core systems, programmers want to be able to share program actions on different cores so new programming languages gives new tools to be used on multi core systems. Java threating and C/C++ libraries are good example that support multi core processes. Joint Java also another language that was developed from Java to have concurrency support. However these popular languages are not sufficient to cover all advantages of multi-core processing. Erlang and occam-π are also good examples with different syntaxes to support multi-core. Erlang is good in this area by its nature of being functional language. Occam-pi also is a imperative language.
As can be seen one or two programming language is not enough to have fully capable language that uses all advantages of hardware so according to your priorities you have different languages or you can create your own.
2- Simplicity and performance trade off.
There are also two concepts, simplicity and performance in design of language that are conflicted. Simpler language means slower processing and more detailed languages are faster but more tricky to be used. Thus, the programs that are coded with assembly languages or directly binary codes are really fast programs but they have millions of lines codes so there are also variety of languages that goes lower level to higher level. For example C programming language is like the bridge between assembly and high level languages, thus it is used commonly in OS's designs, compiler designs and hardware drivers. However, we sometimes do not need such complicated languages to code a basic calculator for instance so we have more simpler languages like Java or there are some languages that are called script languages (Ruby Python, Lua, Perl) to have the ability code complicated tasks with really simple codes and attach these codes to host languages such as c++, Java. Ruby is popular script language to have web applications that have database systems, Python also a popular language in web field and also it is used in executable programs, Perl purposes to give easy manipulation on text files and it is used in server side programming language in web applications. These script languages aims to support your main language with huge libraries and they generally have the interpreter systems instead of compilers so they make our tasks simple but slower since the dynamic interpretation.
3- Usage Area
Another issue to have portability in your application and sure, Java is the most common example in that way. It can be used in any environment that have Java interpreter. It can be used in web as applet, or in Linux, windows machines. It is really powerful language in that way but the problem is, Java cannot use the all power of the computer to have portable feature. Therefore, again we have the trade of between portability and performance.
5- Variety of Project's Design Patterns
There are lots of different approaches to design a software system so there are also different languages to support such patterns. Today's most common design approach is Object Oriented programming that is supported with popular languages; C++ (Multi-paradigm support), Java and the others; Eiffel, Smalltalk, Ruby, C#. There are also different paradigms such as Structured Programming Languages (C, ADA ,Pascal), Procedural Programming Languages (BASIC, FORTRAN), Logic Programming (LISP).
6- Safety and security
Safety and security are other concerns about programming languages. In that way the level of the language is really important since low level languages are hard to maintain and code safe codes since you need to consider detailed things so using high level ones give the developer to code more safe codes and gives more maintainable codes. For instance it is hard to code a program with C instead of Java because in C you need to deal with low level structures like pointers, addressing, garbage collection but in Java these facts are handled by the language itself. Nevertheless, again we have performance trade off. Dealing with low level language gives efficient performance.
There are lots of programming languages and there will be more of them since the requirements always change in the way of software structures and hardware structures so it is not possible to meet all these need with a single language.