Which language next?
Which programming language should you learn next?
The answer is, of course, it depends. It depends on what you want to do. Do you want to become a professional programmer, write video games, business applications, web applications or something else? Or do you want to remain a hobbyist?
We're going to look at four different types of application (desktop, web, mobile and games console) and discuss which languages are used for each one. Then there will be a list of the common languages with decriptions followed by a note about compiled and interpreted languages.
DesktopA desktop application is anything that runs on a PC or laptop. But first you need to decide which desktop and this basically comes down to a choice of Windows, Linux or both of them.
WindowsIf you are only interested in Windows applications then you can't go far wrong by using one of the .NET languages. Which one depends on your taste because all of them have pretty much the same facilities. They all have access to a large number of libraries so you can easily build applications that use standard a Windows look with windows, menus, buttons and all the controls that you are used to. But you also have access to databases, graphics, networking and lots of other stuff.
If you like Small Basic you might want to graduate to VB.NET; this has very similar syntax to SB but is much more powerful. However, C# is also popular and its syntax is much more like other languages that you might want to move onto at a later date (e.g. Java and C++). There are other .NET languages available, too, IronPython and IronRuby are .NET versions of Python and Ruby and F# is a functional language (and thus rather different to to the others).
You don't have to go for .NET languages, of course, there are other languages available but if you are programming exclusively for a Microsoft Windows environment they are a good choice.
LinuxLinux doesn't have the same sort of coherent set of languages as Windows. Almost any language ever invented can be found for Linux, so the choice is vast. For a desktop application you may need to use a library that let's you create windows, buttons, etc. because most languages do not come with these built-in. There are a lot of these for Linux and they are available for several languages.
So, which language? The most popular ones are probably Python and C++.
Cross platformIf you want to write apps that can run on almost any desktop, then the obvious choice is Java. Java comes with built-in libraries for GUI, networking, graphics, etc.
To use any other language (e.g. Python or C++) you will need to use libraries that are designed to run across different operating systems.
However, things get more complicated if you need to do any server-side programming. Server-side programming is required when you need to store or access data from a server. For example, if your web app requires a user to log in with a user name and password then this data needs to be sent to a server and looked up in a database.
The language that you use for server-side programming depends on the server. If your server is Microsoft's ISS, then you will need to use C# or VB, and if it is a Java enterprise server then you'll need to use Java. However, the most popular server is Apache which is different to both of the other two (there are other Apache-like servers, too).
Depending on who is running the server, it may be configured to run different languages. For many years, PHP has been a standard for server-side programming on an Apache-type server, however, Ruby is also popular and Python is also used.
Basically, the developer needs to decide which environment they want to use and the choice of languages will depend upon that decision.
MobileThere are three main platforms, Google's Android, Apple's iOS and Microsoft's Windows. The language used depends upon which platform you are writing for. Android uses Java, iOS uses Objective-C and Windows uses the .NET languages.
Games ConsolesYou can write games in any language that you choose for any of the platforms mentioned above but if you want to get involved in 3D graphical games like the Call of Duty series, or the many other similar games, then you'll probably need to learn C++. You may also need to be a reasonably good mathematician, know about 3D graphics rendering, perhaps a bit of AI and maybe a scripting language such as Python or Lua. This is a challenging area and not to be taken up lightly.
The Xbox 360 is an exception, you can program for this in C#.
Alphabetical Language List
This is not a complete list of all programming languages (of course) but a selection of the more popular ones in use today.
Assembler: an assembly language is specific to a particular processor (e.g. the Intel Pentium processor) and it is a very low level language. It's commands map directly onto the operations that a processor can perform, for example, you can read a particular part of memory, manipulate the value retrieved and then store it somewhere else. Writing a lot of code in Assembler is tedious and error prone, which is why the high level languages, below, were developed.
C++: this is fundamentally object-oriented C. It is not a complete superset of C as there are some incompatibilities but it is close. The addition of object-orientation makes C++ more powerful than C but it still requires a good knowledge of programming and basic computer architecture.
C#: this is one of the .NET languages (see below) and has a similar syntax to Java or C++ and has full object-oriented features.
F#: this is a functional language (which we will not go into here except to say that it is not a mainstream programming paradigm) and also a .NET language (see below).
Java: this is one of the most portable and complete languages. Java comes with many libraries (including GUI, graphics, networking, etc.) and can run on most computer platforms. It is fully object-oriented and has many sophisticated data structures built into it. Unlike C++, Java generally tries to protect the programmer from making mistakes.
.NET : this is a set of languages including VB.NET, C#, C++, Python, Ruby and F#. They all have access to the .NET Framework and the libraries included in that. Although this was designed for Windows, you can also implement .NET in Linux (using the Mono platform - but programs are not necessarily portable across platforms). Most .NET languages provide checks to prevent programmers doing inappropriate things.
Objective-C: Used by Apple for their desktop machines and portable devices. It is an alternative object-oriented extension of C.
PHP: a server-side programming language that is object-oriented and has been a mainstay of web applications programming. It is often associated with the Apache web server.
Python: a general purpose language with object-oriented features that can be used to create desktop applications but is also used as a server-side language.
Ruby: a general purpose object-oriented language that is also used for server-side programming with the Rails framework.
VB.NET: one of the .NET family of languages, it has object-oriented features with syntax based upon the various versions of Basic and Visual Basic that have been produced by Microsoft.
End note: Interpreted or compiled (or something in between)Broadly speaking languages fall into three different categories, compiler, interpreted or using an intermediate language.
On the other hand, C and C++ are usually compiled. This means that the code you write is converted into computer machine code before it is run. This results in a program that runs much faster than an interpreted one. This is why C and C++ are used used for complex programs, like video games, that need to get the best performance from a computer.
In between are languages like Java and the .NET languages, C#, VB.NET, etc. In these languages the code you write is converted into a intermediate code which is much simpler than the language itself. To run these programs a special intermediate language interpreter is used. This results in a program that runs much faster than a purely interpreted one but, generally, not as fast as a compiled one.