Sometimes we need to make a decision which technology to choose, what kind of software developer language we need to use. If developer will make that decision he or she will choose language which he/she knows or which technology he/she wants to know (which language or technology will be the best for the resume :) ) . But What we need to know about languages?

First, you may see the picture from Facebook's presentation. Please take a look. Ruby on Rails... If you want to create high productivity environment should you write code on Ruby?  

One main difference between languages is interpreted or compiled. This difference is not in the language; it is in the implementation.

A compiled language is a programming language whose implementations are typically compilers: translators that generate machine code from source code. End code is written on machine code (example, .exe file in Windows). Compiled languages are really fast. Example, C++, assembler, Pascal. Computer doesn't need time to prepare code and start the program.

A compiled languages is used where time is very important: gaming, real-time trading, real-time system. The most popular compiled language is C++. But coding in C++ needs more time and need more qualification because developers should think about memory control, garbage collection,... C++ requires a better aptitude to programming, and is more technically demanding than other languages, for example Java.

An interpreted language is a programming language whose code will be interpreted (somebody else program) on in the executable time: step-by-step pre-runtime translation takes place. Example of these code is PHP, JavaScript and other languages. Computer need more time to start execution of the program. Some developers like the languages which need small list of code, but one command may be generated into a huge list of machine command.

And some languages is used two step of translation: on the first step bytecode will be created (compiled) and on the second step this byte code will be interpreted. Java applications are typically compiled to bytecode (class file) that can run on any Java Virtual Machine (JVM) regardless of computer architecture. For Java JVM is executing the code, not the OS. Java is interpreted language, but Java's productivity is very close to C++.

Many interpreted languages are first compiled to bytecode, but productivity is not the same. Ѕometimes, bytecode can also be compiled to a native binary using an AOT compiler or executed natively, by hardware processor. Languages usually compiled to a bytecode:

  • Java (is compiled into Java bytecode to be interpreted by JVM):
    • Groovy
    • Join Java
    • ColdFusion 
    • Scala 
  • Lua 
  • .NET Framework languages (translated to bytecode, called CIL).
    • C++/CLI 
    • C# 
    • Visual Basic .NET 
  • Pike 
  • Python 
  • Squeak Smalltalk 
  • Visual FoxPro 
  • Lisp 
  • AppleScript

When you choose the language and technology you need to know best practices, to understand developer market and to think about many other details.

For example, banking often used Java. For complected Web solution often is used Java (Spring, MCV frameworks). For simple web solution is used PHP (CMS systems: Wordpress, Joomla, ...) or Ruby. This is more common using, but sometimes we may see exceptions. For example, Facebook is written on PHP (but know PHP code is translated into C++ code); Twitter was written on Ruby (but later they moved from rails to Scala).