Fields of IT for beginners

More and more people want to study IT world, however most of the articles describe more specific problems rather, giving no common, solid view on different fields of information technologies. But this is exactly what the beginners need, and since I get a lot of questions about that, I want to provide a comprehensive answer. For convenience, I linked all the terms with links to Wikipedia.

Let's look at general trends of IT industry, as well as technologies and programming languages (PL further), which are used there:

  • Mobile development. This field is going from strength to strength last years. There are two main platforms: iOS and Android. Next PL are used for them: Objective-C and Swift for iOS; Java and Kotlin for Android. The C++ PL available for both of them, though it is not so comfortable.

  • Desktop development. An old one field, initially and mainly it is about Windows, rarely about Mac OS X, and even more rarely about Linux. These PL are mostly used on Windows: Delphi, Visual Basic (to my mind, these two are obsolete, but you may still hear about them), C#, C++. For Mac OS there is a native Objective-C, for Linux it is C and C++.

  • Except native development tools there are cross-platform frameworks and engines that allow to compile a single program under different operating systems. Common examples: Xamarin Mono and Qt (the game engines will be presented later). The general advantage of cross-platform tools is significant decreasing of code amount, which will work the same on mobile phons or PCs without considerable changes. Nevertheless, there are two disadvantages: great size of the application (and probably low speed) and the price of those frameworks, engines.

  • Front end. Web development is divided into two closely related, but different parts: front end and back end. The first one is about what and how is presented on users screen in a web browser. Here are used: HTML — language for creating web page elements, CSS — the way to describe visual styles of these elements, and JavaScript — a scripting PL, it makes the pages dynamic, allows to change its content slightly or significantly.

  • Back end — this is the code executing on a server (i.e. a computer somewhere on the Internet) and does not leaves its bounds. Back end accepts request from users, clients, and generates responses. a response can be a web page (which is of front end part) or data for apps (JSON, media files, something else). For many years programmers use a terrible PHP for back end, however nowadays there are also popular Python (with frameworks like Flask, Django or Tornado, Google App Engine), Ruby (with "on Rails"). In addition, there are other, more sophisticated technologies, like Node.js, Go. To store and process the data databases (DB) are used with SQL languages and its varieties. Of course, DBs aren't used in the web only, but everywhere, however its use there especially necessary.

  • One more popular topic in our time — Data analysis. Here Python PL and its specialised libraries (NumPy, Pandas, SciPy, etc.) are mostly applied. In addition, other technologies and completed applications are used. DB and SQL are also useful. Additionally some knowledge of statistics is required.

  • The field of Machine learning arises directly from Data analysis, it is a sort of crust of it. Programmatic tools are also almost the same, in view of the fact that Data analysis is more statical, while Machine learning is mostly used for dynamic, automatically working systems, the more powerful technologies. First of all, these are C and C++.

  • There is so-called System programming, which is development of low-level systems, programs for some devices. For instance, operating systems development. The main tool here is C PL, though initially it was (and is still important) only Assembly language. Rarely you might meet other PL. Here you need to have good understanding of how different devices and chips of computers work and communicate together.

  • It is worth noting about something else, which is not an independent development field, but is also important, — mathematics and algorithms. Of course, all the programming is about algorithms, however some tasks require more fundamental skills. For example, routing on a map is not possible without knowledge of graph theory, and physics processes modelling — without further mathematics.

  • Game development. A lot of the people start learning programming since this reason. Indeed, video games development is really enthralling, but it is also quite complicated. You have to develop under mobile devices or PC, work with graphics, audio, be able to create processing of many game objects and elements. You can leave some problems using game engines, i.e. Unity, Unreal Engine, or GameMaker: Studio. They allow to compile the same code under different platforms and have a lot of functions for visual and audio effects. However, it has not done so without paying a price — you get significant size of your applications and often have to pay for such tools.
    Besides software development itself, game dev requires visual and audio staff, marketing promotion skills, and an idea. Therefore experienced, experts of their specific fields get together to create and drive large projects. And this is everywhere, not only in game dev.

  • Of course, IT is not limited to this list and is not divided into separeted, independent categories, it is just the "tip of the iceberg". Almost all the trends overlap with each other or other fields of science, technologies.

    And personally, I suggest to try as many different fields as possible, if not all. Since many of them firstly look hard or boring, but after a year or two, with some new experience and understanding of life, — useful and exciting. And the main — always to keep your desire, your ambition to study and to create your own thing. I think, it's much more important than even experience and talent.

    Programming languages