Выбираем тип программирования

Возможно, следует начать именно с этого.

Я не знаю, как обстоят дела в образовании сейчас, но 10-15 лет назад ни в школе, ни в университете никто всерьёз не объяснял, что программирование имеет свои типы, каждый из которых требует особого типа мышления. Не то чтобы это покалечило чьи-то судьбы, но изучение программных дисциплин могло бы проходить гораздо быстрее, если бы все мы на стадии закладки фундамента представляли многообразие языков и подходов, а не зомбически учили C++ в его консольных проявления.

А между тем, согласитесь, многие программисты, сталкиваясь с необходимостью писать функциональный код, часто сожалеют, что процедурный образ мышления настолько глубоко засел в мозг, что перестроится с него крайне непросто. Поэтому не лучше ли начинать путь в программисты не с выбора языка, а с выбора типа программирования?

Впрочем, я обещал, что данный текст будет для новичков, поэтому давайте откатимся немного назад и сравним типы программирования.

Типы программирования

Условимся сразу: типов будет шесть. Это будет достаточно подробное деление. В действительности, обычно выделяют 3-4, но так как перед нами стоит задача выбора пути для новичков, то оно вполне оправдано.

Процедурное программирование, оно же императивное, ставит перед вами задачу создания кода на языке, понятном используемой машине. Самый простой и известный случай — машина Тьюринга, из известных языков программирования — С/C++, Ада, Паскаль, Go. Задачи здесь решаются планомерно: сначала объявляется объект, потом он определяется и затем выполняется с ним действие:

var
 S: String;

 S := ‘Hello!’;

 writeln(S);

Декларативное программирование. Если в процедурном случае, вектор оптимизации языка происходит от машинного уровня к языку пользователя путем использования базовых принципов ООП, классов, методов и пр., то здесь во главе угла стоят непосредственно задача, а способ её исполнения второстепенен. Яркий пример — язык разметки HTML. Если вы хотите разместить кнопку, вам формально не надо создавать объект и присваивать ему атрибуты:

<button>Hello!</button>

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

А вот функциональное программирование такого недостатка лишено, ведь здесь, как и в математике, вы оперируете функциями: исходными, приращения и результативной, но не конкретными значениями. Среди популярных представителей — Lisp, Clojure, Haskell. Функциональное программирование считается достаточно сложным и избыточным для большинства прикладных задач. Отсюда невысокий спрос на специалистов, но от этого же высокие зарплаты и действительно интересная работа.

Логическое программирование, как следует из названия, оперирует простой математической логикой. Яркие представители — Planner и Prolog. Достаточно ограниченный набор действий может быть реально полезен для создания простейшего искусственного интеллекта или разминки мозгов, но в реальной жизни логическое программирование самостоятельно используется редко.

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

Графическое программирование, оно же визуальное, предлагает разработчику работать с графическим изображениями, а не текстом. Выражаться это может по-разному — есть специальные языки, вроде Scratch или BluePrint, есть языки схем или диаграмм, это LD или FBD, есть просто разделы программирования, связанные со взаимодействием с формами и графикой. В последнем случае, это может быть практически любой язык, визуализация осуществляется средствами разработки (Borland Delphi/C++, Visual Studio, Adobe Dreamweaver и пр.). Такое графическое программирование в чистом виде встречается крайне редко, без понимания языка и структуры кода создать что-то серьезное невозможно.

Остальное

Вообще, существует достаточно большое количество делений программирования по типам, о некоторых из которых новички даже не догадываются: синхронное/асинхронное/событийное, последовательное/параллельное, различное по решаемым задачам и задействованности ИИ и статистики.

Подход к выбору стартовой парадигмы программирования не означает единственность выбранного пути. Напротив, не привязываясь к конкретным языкам, профессиям и программным средам, лишь начав со «своего» образа мышления, вы изначально настроите себя на правильное понимание сути — успешным, счастливым и богатым айтишником как правило становится не тот, кто попал в нужный поток, а тот, для кого любой такой поток лишь возможность реализовать свой потенциал.

Добавить комментарий

Ваш e-mail не будет опубликован.