Wanna be developer?

Major kinds of development platforms are web, mobile and desktop. Every type has benefits and limitations.
Potential users are defined by accessibility of software.
Type of software defines target users. For example, most people will be interested in tetris than MathCad. There are different types - standalone applications, utilities, plugins/components/modules for other software, drivers and etc.
Regardless of the goals, a serious developer has to know how to work with:

  • programming language for writing code
  • basic computer science, like data structure, algorithms, programming paradigms, code patterns, regular expressions and etc. These things are already included in a varying degree in a language or libraries.
  • working with databases. This allows keep and select data in comfortable way. Most popular remote databases are MySql, PostgreSql (SQL databases) and MongoDB (NoSQL database). Most popular embedded databases are SQLite and Realm DB (for mobile devices).
  • IDE, which makes development more comfortable, although it can has sometimes problems itself. Most popular are Visual Studio Code, IntelliJ IDEA/Android Studio, Eclipse, XCode.
  • working with SCM. This allows you to work in a team, watch how development is going on, roll back to old versions, research the problem or task without affecting the main code, keep source code on remote server. Most popular is git.

Web development

Potential users - your application can be accessible everywhere internet is present. So every internet user may be your user.
Types of software - it can range from single static page to complex web-based internet application (Gmail, Microsoft Office Live). In addition to applications, you can develop components and modules for CMS and plugins for browsers.
Web development can be divided into two parts: backend and frontend.
Backend - every thing ‘behind-the-scenes’ and not visible to user. For example bank's system that serves clients. Also pure backend 'application' can provides only REST API, and other peoples can develop own client-server applications.
Frontend - every thing related with that visible to user or interact with user. Good news for some people. A newbie can use some visual constructors for get results without knowledge.

Backend skills:

  • terminal and commands of OS
  • programming language like python, PHP, JavaScript, Java or any jvm language like Kotlin
  • databases like MySQL, PostgreSql or MongoDB
  • something for working with http server like Spring Boot or Node.js
  • tools like Docker, Jenkins

Frontend skills:

  • HTML, CSS and JavaScript
  • some GUI library like Bootstrap
  • popular CMS like Joomla
  • PHP language for working with CMS on more deep level (I think CMS based on other languages not so popular)

Limitations and problems:

  • slower than desktop applications
  • depend from internet, no internet no application
  • browser don't have access to host machine like local storage
  • necessary support different browsers and it's versions
  • necessary support different screen sizes (mostly for mobile devices)
  • security risks

Mobile development

Potential users - at nowadays many people have smartphone and tabs. And they spend more time than on PC, even in toilet and bathrooms. So, application development for smartphones seems like a good idea.
Types of software - most mobile applications are games or clients for some web services.

Skills:

  • languages: for android - Kotlin, Java ; for ios - Swift and may be Objective-C
  • popular frameworks that implement boilerplate code for example retrofit, glide.
  • HTML, CSS and JavaScript like web frontend developer. You can also make an application that technically will be like a browser showing site pages or local pages, but having access to the device resources such as local storage, GPS and etc.

Limitations and problems:

  • support different screen sizes
  • support different platform API versions, because old code can do not work or you need update it

Desktop development

Potential users - every PC user.
Types of software - standalone business application (Excel, GIMP), client-server applications where application has access to a remote server (online chat clients, multiplayer games), utilities and plug-ins for systems (Midnight commander)
Do not confuse the web application with the client-server application. A web application only needs a internet and a browser.

Skills:

  • languages: C++, Java or any jvm language, Swift
  • some gui library/framework
  • any embedded databases

Limitations and problems:

  • support different OS
  • support different hardware
  • support upgrade and deploy of new version of application

Cross-platform development

There are some cross-platform libraries (wxWidgets, QT), frameworks (libgdx) and runtime environments (jvm) that allow support different platforms more easily.


Guide lists