How top 10 programming languages work
I am programming for more than 10 years. I realized that when I found my first, personal home page (written in PHP) on my hard drive. Some files have the last modification date: May 2003. Since that time I was working (or playing) with 9 of the top 10 programming languages from TIOBE Index list. As I mentioned, I started with PHP, then I learned a little bit of JavaScript (to create fancy menus or 'secret pages' on my website). In high school, I started learning C++. At the University I learned C, more C++ and Java. Then I learned C# on my own, and it is still my favorite language. Along with C#, I learned ASP.NET and T-SQL (to be able to create websites with databases). I also learned Python and Objective-C. Former became useful when I started my Research Assistant Job.
The more experience I gain, the more interested I am in how things work underneath the code level. In this post, I want to provide a short description of the Top 10 programming languages (by TIOBE Index), how they work and their super short history.
PHP
Interpreted language created by Rasmus Lerdorf. Originally, a collection of Perl scripts, rewritten to C for performance reasons, the ability to work with web forms and communicate with databases. Most popular interpreter: Zend Engine. Since PHP 4, the PHP parser compiles input to produce bytecode for processing by the Zend Engine. Facebook developed two PHP interpreters: HipHop (transforms the PHP scripts into C++ code and then compiles) and HipHop Virtual Machine (converts PHP into a high-level bytecode, which is then translated into x86-64 machine code dynamically). Recommended book: PHP and MySQL Web Development.
JavaScript
Dynamic, interpreted and prototype-based language. JavaScript is superset of ECMAScript standard. Usually used as part of web browser, but also in server-side (Node.js) or even for desktop and mobile application development. Current browsers perform just-in-time compilation. There are many JavaScript engines (interpreters): Rhino (written in Java), SpiderMonkey (written in C, first JS engine), V8 (written C++, by Google, used in Google Chrome), Chakra (performs JIT compilation on a separate CPU core, parallel to the web browser; created by Microsoft, used in Internet Explorer) etc. Recommended book: JavaScript: The Good Parts.
C/C++
C is compiled, static type language created by Denis Ritchie. It influenced many other languages, e.g.: C++, C#, Java, JavaScript, Objective-C, Perl, PHP, Python, and even Unix's C Shell. C++ is nearly a superset of C, with object oriented features inspired by Simula language, created by Bjarne Stroustrup. C and C++ are compiled to machine-specific code, thus platform-specific compiler is needed. Most popular compilers: GCC and Visual C++. C++ evolve, Modern C++ (currently C++ 11 and vNext: C++ 14) introduces: smart pointers, for each (range for), lambda functions and much more. Recommended book: Ivor Horton's Beginning Visual C++ 2012. The C Programming Language (by Brian Kernighan and Denis Ritchie) used to be one of the most popular programming books ever.
Java
C-based language created by James Gosling, which introduces automatic memory management by Garbage Collector. Java is compiled to bytecode (.class files), which runs on JVM (Java Virtual Machine). Its main design goal is "Write Once, Run Anywhere" (WORA). The same code can be compiled to the same bytecode on different machines. Then JVM (platform-specific) translates bytecode to particular machine code during run-time (Just-in-Time (JIT) compilation). Java applets can run in web browser. My personal recommendation for Java book is Hortsmann's Core Java Volume I - Fundamentals and Volume II - Advanced Features. Well known Java book is Bruce Eckel's Thinking in Java.
C#
C# is Microsoft's version of Java language created by Anders Hejlsberg. However, C# is closer to C++ in the case of design and syntax. It is compiled to Intermediate Language (the equivalent of bytecode in Java) and runs on Common Language Runtime (the equivalent of JVM). C# also uses Garbage Collector. It has many features not existing in Java like rich native interoperability, query language (LINQ) or dynamic type. For more, check Comparison of C# and Java. Book for quick start: Sams Teach Yourself Visual C# 2010 in 24 Hours recommended by Eric Lippert (former developer of C# compiler). To dive in, check: C# 5.0 in a Nutshell: The Definitive Reference by Joseph Albahari and Ben Albahari, C# in Depth by Jon Skeet and CLR via C# by Jeffrey Richter.
Python
Dynamic, interpreted language, created by Guido van Rossum. Most popular implementation: CPython (implemented in C). It compiles Python programs to intermediate code (.pyc files) and runs them on Virtual Machine. There are many other implementations, e.g. Jython, which compiles Python to Java Bytecode (.class files). Python is a much more expressive language than C or Java. Some constructs, which need 10 lines of C code or 3 lines of Java code, require only 1 line in Python (check reverse words example in my post about Python). Python uses whitespace indentation, rather than curly braces or keywords, to delimit blocks. To get started I recommend Google's Python Class (videos section) created by Nick Parlante. Other resources: Python tutorial and Dive into Python. You can also check my post Python jump start for more details.
Objective-C
Strict superset of C language with object-oriented capabilities inspired by Smalltalk. Every C program can be compiled by an Objective-C compiler, and C code can be included within Objective-C code. Most popular compilers: Clang and LLVM. Instead of calling methods (like in C++: obj->method(param)
), messages to objects are being sent ([obj method:param]
) and resolved at runtime (not at compile time like in C++). There is no Garbage Collector (which works at run-time) in Objective-C, but instead, Automatic Reference Counting (compile-time feature) is used. Objective-C is the main programming language used by Apple for OS X and iOS. However, this year Apple announced plans to replace Objective-C with the new Swift language. Resources to learn Objective-C can be found in my other post.
Transact-SQL
Declarative language for managing data held in a relational database management system (RDBMS). Created by Microsoft (for MS SQL Server), T-SQL is an extension to SQL, which makes it Turing complete. It adds to SQL: procedural programming, local variables, functions for string and date processing, mathematics etc. and allows FROM
clause in DELETE
and UPDATE
statements (which allows joins to be included). T-SQL (and SQL) query differs from the program in such a way that they just tell what to do, not how to do that. Figuring out how to execute a query is a role of a query analyzer. Check Understanding how SQL Server executes a query. To learn T-SQL, you should learn SQL first. Recommended tutorial: T-SQL Step by Step Course (video tutorial). Recommended books: Itzik Ben-Gan's Microsoft SQL Server 2012 T-SQL Fundamentals and other his books.
(Visual) Basic (.NET)
Compiled language created by Microsoft. Compiles to native language or P-Code and uses the Microsoft C++ compiler to generate the executable. It derives from BASIC. Similar to Python: tabs and new lines are used to delimit blocks. VB (under Visual Studio) enables to create GUI using the drag-and-drop technique. The last version (VB6) was released in 1998 and is abandoned in favor of VB.NET, which introduces many features (present also in C#), but still supported, even on Windows 8. Check Comparison of VB and VB.NET. Both (VB.NET and C#) run on the same run time (CLR). More details can be found here. Recommended tutorials to get started: Visual Basic Fundamentals: Development for Absolute Beginners by Bob Tabor and Visual Basic .NET Tutorials. A good reference is Visual Basic at Wikibooks. To get VB syntax highlighting in SublimeText, this package works.
Summary
I read about all 10 languages in Wikipedia before writing this post. I was surprised by how much I could learn in 5-10 minutes of reading. I don't know why, but I feel much better now when I refreshed and organized my knowledge. If you want to start learning about the new programming language, I recommend you to read about it on Wikipedia first. Even more, read about all languages you are using now on Wikipedia as well. It gives you a great, high-level overview. Now, Wikipedia will be my starting point of research about "some new thing".