Which language next?

Which programming language should you learn next?


Many of you reading this will know how to program in Microsoft Small Basic and will be wondering what your next step should be. There are lots of programming languages out there - which one should you choose?  C#, VB.NET, Java, C, C++, Python, PHP, Javascript, Ruby or something else? This question comes up again and again.

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.

Desktop 

A 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.

Windows

If 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.

Linux

Linux 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++.

Having said that, if you are targeting the Ubuntu version of Linux, then they have their own software development kit that allows you to develop apps for the Ubuntu desktop or the Ubuntu phone. These apps can be written in QML (similar to Javascript) or in HTML and Javascript. Apps can also be extended with stuff written in C++.

Cross platform

If 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.


Web Apps

The essential things to know in order to write web applications are HTML and Javascript. You can't really get anywhere without these and you can write quite sophisticated apps using only HTML and Javascript.

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.


Mobile

There 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.

However, you can write web apps in HTML and Javascript that are designed for mobile devices and these, of course, will run on any platform as they are executed in the browser. Furthermore, using a technology called Cordoba you can write hybrid apps. These are apps that are mainly written in HTML/Javascript but can call upon services from the native operating system. When Cordoba processes the app it converts these services calls into the correct code for the appropriate operating system.


Games Consoles

You 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 a fairly low-level language that has been in use for decades. The philosophy behind the design of C is that you should trust the programmer to know what s/he is doing. So, it's not a bad idea to have experience of programming before you tackle C and to understand the underlying computing architecture.

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.

Javascript: this is the language built into most web browsers. Although it basic syntax is similar to Java, they are not really related. In particular, the object-oriented features of Javascript are quite unlike those of Java. A knowledge of Javascript is pretty much essential in order to build web applications.

.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.

Javascript, Python and PHP are examples of interpreted languages. This means that code you write is executed by a special program called an interpreter; the interpreter reads through the program that you have written and issues instructions to the computer at the time that the program runs.

Typically, a Javascript interpreter is hidden inside the web browser and executes the code from a web page; a PHP interpreter usually acts as an extension to a web server and interprets the code from a web page before it is sent to the browser; and a Python interpreter is usually a standalone program that runs under Windows or Linux.

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.

Comments

Popular posts from this blog

Just Enough Python

Learn to code with C

Introduction to Python by Andrew Ng