Области ИТ для начинающих

Всё больше и больше людей желают приблизиться к миру IT, однако различные материалы описывают скорее узкоспециализированные области, не давая обширного, целостного взгляда на различные сферы информационных технологий. Но именно это и необходимо новичкам, и по большому числу приходящих вопросов, хочу дать исчерпывающее описание. Для удобства дальнейшего исследования, все термины я снабдил ссылками на Википедию.

Рассмотрим основные направления индустрии IT, а также технологии и языки программирования (далее ЯП), которые в них используются:

  • Мобильная разработка. Эта область в последние годы активно набирает обороты. Есть две основные платформы: iOS и Android. Для них используются следующие ЯП: Objective-C и Swift для iOS; Java и Kotlin для Android. Также в обоих можно использовать C++, однако это менее удобно.

  • Десктопная разработка. Это старое направление, изначально и чаще всего под Windows, реже под Mac OS X, ещё реже под Linux. Для первого используются следующие ЯП: Delphi, Visual Basic (на мой взгляд, эта парочка уже давно морально устарела), C#, C++. Для Mac используется родной (native) Objective-C, для Линукса C, C++.

  • Кроме нативных, родных средств разработки, существуют кросс-платформенные фреймворки и движки, позволяющие одну программу компилировать под разные платформы. Популярные примеры: Xamarin Mono, Qt (игровые движки будут представлены ниже). Основное их преимущество — значительное уменьшение кода, который без особых изменений будет работать как на разных смартфонах, так и на стационарных компьютерах. Однако есть два недостатка: большой размер файла приложения (и возможно низкая скорость) и стоимость этих самых движков, фреймворков.

  • Front end. Веб разделяется на две тесно взаимосвязанные, но всё же раздельные части: фронт энд (front end) и бэк энд (back end). Первая отвечает за то, что и в каком виде отображается у пользователя в браузере. Здесь используются HTML — язык создания элементов страниц, CSS — описание внешнего вида этих элементов и JavaScript — скриптовый ЯП, делает страницу динамической, позволяет менять её содержимое немножко или кардинально.

  • Back end — это то, что находится на сервере (компьютере где-то в Интернете) и не покидает его пределы. Создание бэк энда называют "поднять сервак", он принимает запросы от пользователей, клиентов и генерирует ответы. Ответом может быть веб-страница (фронт энд) или данные для приложений (JSON, медиа-файлы, что-либо ещё). Издревле сервера пишутся на страшном PHP, однако в наше время также популярны Python (с фреймворками Flask, Django или Tornado, Google App Engine), Ruby (вместе с "on Rails"). Есть и другие технологий, например Node.js, Go. Для хранения и обработки данных часто используют базы данных (БД), для этого применяется язык SQL и его разновидности. Конечно, БД могут быть полезны не только в вебе, а везде, но там их применение особенно значимо.

  • Популярная IT область в наше время — Анализ данных, big data. Для этих целей часто используют ЯП Python и специализированные библиотеки — NumPy, Pandas, SciPy и т.д. Используются и другие технологии, а также готовые программы. БД и SQL тоже полезны. Из общих знаний здесь важна статистика.

  • Область Машинного обучения прямо вытекает из анализа данных, являясь как бы надстройкой над ним. Программные инструменты примерно те же, но в виду того, что Анализ данных скорее статичен, а Машинное обучение чаще используется для динамических, автоматически работающих систем, то применяются также и более мощные, производительные технологии. В первую очередь, это C и C++.

  • Существует так называемое Системное программирование, которым называют разработку низкоуровневых систем, программ под какие-либо устройства, чипы. К примеру, разработка операционных систем. Главным инструментов здесь является язык программирования C (Си), хотя изначально был (и остаётся важным) только язык Ассемблера. Реже используются другие ЯП. Здесь очень важно понимание работы разных устройств компьютера и способов передачи данных между ними.

  • Стоит упомянуть кое-что ещё, что хотя и не является самодостаточной областью разработки, но также важно, — математика и алгоритмы. Конечно, всё программирование стоит на алгоритмах, однако некоторые задачи требуют более фундаментальных знаний. Например, прокладка маршрута на карте невозможна без теории графов, а моделирование физических процессов — без высшей математики.

  • Геймдев. Многие желают научиться программированию именно по этой причине. Действительно, разработка компьютерных игр очень увлекательна, однако и довольно сложна. Нужно уметь разрабатывать под мобильные устройства или десктоп, работать с графикой, аудио, создавать обработку множества объектов и элементов игры. Некоторые сложности уходят, если использовать игровые движки, такие как Unity, Unreal Engine, GameMaker: Studio. Они позволяют один и тот же код компилировать под разные платформы, имеют много встроенных функций для графических и аудио эффектов. Однако плата за это — довольно большой вес итоговых приложений и нередко деньги за эти самые движки.
    Помимо самой программной разработки в геймдеве нужны визуальные и звуковые материалы, а главное — идея. Поэтому для крупных проектов собираются люди с опытом, специалисты в своих конкретных областях. И так везде, не только в геймдеве.


  • Конечно, IT не ограничивается этим списком и не делится на независимо существующие категории, это лишь верхушка айсберга. Почти все направления пересекаются друг с другом или с другими областями науки, техники.

    Сам я советую попробовать если не все, то как можно большее число направлений, так как многие области поначалу кажутся трудными/скучными, но спустя год-другой, с новым опытом и взглядом на всё, — полезными и увлекательными. А самое главное — всегда хранить в себе желание, стремление познавать и создавать своё творение, это важнее даже опыта и таланта.

    Programming languages