ru:https://highload.today/blogs/reshaet-ne-matematicheskij-sklad-uma-chto-nuzhno-znat-chtoby-nachat-programmirovat/ ua:https://highload.today/uk/blogs/algorytmy-u-programuvanni-osnovy-ta-porady-pochatkivtsyam/
logo
Основы      12/09/2022

Решает не математический склад ума: что нужно знать, чтобы начать программировать

Олександра Стеценко BLOG

Операційна директорка в Wezom Academy

Привет! На связи Александра Стеценко, операционный директор и соавтор блога Wezom Академии. В моей сфере деятельности мне часто приходится общаться с начинающими айтишниками, которые находятся в самом начале своего пути в IT. И я заметила определенную закономерность: большинство из них уверены, что программирование — это гораздо сложнее, чем есть на самом деле… 

Нет, я не хочу сказать, что программирование — это элементарно. Но и не так сложно, как кажется поначалу.

Яркий пример — алгоритмы в программировании. Многие помнят этот термин еще со школьного алгебраического курса. И я, пожалуй, не ошибусь, если скажу, что кроме самого названия в памяти почти ничего не осталось.

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

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

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

Основы: что нужно знать, чтобы начать программировать

Понятие алгоритма изначально не связано с программированием в принципе. Термин в более современном толковании начал использоваться еще в 30-50-е годы ХХ века в работах Тюринга, Поста, Черча, Винера и Маркова. А вообще его ввел еще персидский ученый Аль-Хорезми около 825 нашей эры.

Среди начинающих в IT существует расхожее мнение, что программирование требует глубоких математических знаний. На самом деле, это не совсем так.

Зачастую решающий фактор — не математический склад ума, а алгоритмическое мышление. И как раз над ним следует активно работать, чтобы развиваться в программировании.

Поэтому на этом и сосредоточимся.

Курс Python Pro.
Опануй розробку на основі фреймворків та навички роботи з базами даних, навчися працювати з супутніми технологіями GIT та Linux, отримай навички роботи з мовою Python.
Дійзнайтеся більше

Понятие алгоритма

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

Для лучшего понимания проведем аналогию с реальной жизнью. Ваша работа — это тоже определенный алгоритм:

1. Сели за рабочее место
2. Включили компьютер
3. Открыли браузер или рабочую программу
4. Начали работать

Отбросьте один из шагов своего рабочего алгоритма и вся система разрушится.

Так же и в программировании.

Алгоритм — это последовательность команд и действий, благодаря которым программа достигает определенных целей. А процесс программирования — это, по сути, запись последовательных алгоритмов.

Базовые структуры алгоритмов

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

  • Следование — организация алгоритма, в котором все действия выполняются последовательно без повторений или пропусков:

  • Разветвление  — форма организации команд, при которой в зависимости от определенных условий выполняется заданная команда или их последовательность:

  • Повторение (цикл) — методика организации команд, когда последовательность действий выполняется неоднократно в зависимости от определенного условия:

Базовые структуры данных

Структура данных  это контейнер, информация в котором скомпонована определенным образом. Причем в зависимости от «компоновки» будет варьироваться и ее эффективность в разных операциях.

Алгоритмы и структуры данных — тесно связанные между собой понятия. На основе первых формируются вторые. Рассмотрим базовые структуры данных, используемые в программировании.

Массивы

Это самая простая структура данных, в которой элементы расположены последовательно, а каждому из элементов присвоено числовое значение (индекс). Индекс соответствует позиции элемента внутри массива:

Существуют и более сложные массивы — многомерные. То есть массивы внутри других массивов.

В программировании работать с массивами достаточно удобно, используя простые команды:

  • Insert — вставить элемент по указанному индексу;
  • Get — вернуть элемент по указанному индексу;
  • Курс Solidity для блокчейн-розробки.
    На цьому курсі ви почнете з розбору базового синтаксису Solidity, вивчите розробку смартконтрактів і dApps та опануєте роботу з Ethereum Virtual Machine (EVM).
    Інформація про курс
  • Delete — удалить элемент по указанному индексу;
  • Sizeполучить общее количество элементов в массиве.

В массивах несложно находить нужные элементы, объединять и сортировать их, изменять порядок расположения.

Стеки

Это абстрактный тип данных, в котором список элементов организован по принципу LIFOОт англ. last in — first out, «последним пришел — первым зашел».

Представьте, что вы складываете книги в стопку. Верхней всегда будет та, которую вы положили последней. А нижней — первая. По такому принципу работают и стеки:

Стеки позволяют использовать следующие команды:

  • Push — вставляет элемент сверху;
  • Pop — возвращает верхний элемент после удаления;
  • isEmpty — возвращает true, если стек пуст;
  • Top — возвращает верхний элемент без удаления из стека.

В одном массиве может быть несколько стеков, с которыми можно взаимодействовать отдельно.

Очереди

Тип сохранения элементов данных с последовательным их расположением. В отличие от стека, в очередях используется принцип FIFOОт англ. First in First Out — «первым пришел — первым зашел».

Основные операции с очередями:

  • Enqueue — добавляет элемент в конец очереди;
  • Dequeue — удаляет элемент с конца очереди;
  • isEmpty — возвращает значение true, если очередь пуста;
  • Top возвращает первый элемент очереди.

Очереди часто сравнивают именно со стеками, и эти структуры данных имеют много общего.

Связанные списки

Это массивы, в которых каждый элемент служит отдельным объектом и построен на других элементах — данных и ссылках на следующий узел:

Основные операции со связанными списками:

  • InsertAtEnd — вставляет указанный элемент в конец списка;
  • InsertAtHead — вставляет элемент в начало списка;
  • Delete — удаляет указанный элемент;
  • DeleteAtHead — удаляет первый элемент списка;
  • Search — возвращает указанный элемент;
  • isEmpty — возвращает True, если связанный список пуст.

Графы

Это наборы узлов, соединенных друг с другом в виде сетки, где один элемент может одновременно быть связан с большим количеством других:

Графы бывают ориентированными (с четко направленными ребрами) и неориентированными (с возможностью выполнять переход в обоих направлениях).

Деревья

Дерево — это иерархическая структура данных с множеством разветвлений.

Самая простая аналогия — дерево навыков в видеоиграх:

Есть несколько типов деревьев данных: N-дерево, сбалансированное дерево, бинарное дерево, AVL-дерево и другие. Рекомендуем ознакомиться с ними более подробно, потому что сейчас древовидные структуры используются очень активно.

Хотим отдельно остановиться на префиксных деревьях. Это подвид древовидной структуры данных, которым вы пользуетесь ежедневно. Например, когда вы используете поиск в браузере, ищете слова в словаре или набираете текст на клавиатуре с Т9.

Например: вот так префиксное дерево хранит слова top, thus и their:

Хэш-таблицы

Это способ хранения данных, при котором каждому элементу в таблице присваивается неповторимый индекс. А каждый объект хранится в виде «ключ – значение». Используя нужные ключи, вы можете легко находить нужные значения:

Функции

Еще один важный термин, связанный с алгоритмами, — это функции.

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

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

JavaScript:

function max (a, b)
{
   return a >= b ? a : b;
}

С++:

void name(string text)
{
   cout << text;
}

Java:

public void name(String text) 
{
   System.out.println(text);
}

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

  1. функция размещается в определенной части программы, где нужно вызвать действие алгоритма;
  2. при обработке нашего кода обработчик натыкается на функцию и возвращается в ту часть программы, где прописан наш алгоритм;
  3. обработчик выполняет функцию, при этом учитывая указанные нами аргументы;
  4. после выполнения функции берет или не берет результаты ее выполнения и возвращается к той строке кода, которая и вызвала функцию;
  5. по завершению обработчик переходит к следующим строкам кода.

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

Основы работы с системой контроля версий

Программирование, работа с алгоритмами и базами данных происходит не в вакууме. Задача программиста — быть командным игроком, распределять задачи по проекту и оптимизировать рабочий процесс. Один из основных рабочих инструментов современного девелопера — система контроля версий Git.

Советуем ознакомиться с информацией по работе с Git на официальном сайте. Мы же перечислим основные этапы работы с Git в классическом рабочем процессе с примерами команд в терминале (например, в редакторе VS Code):

  • Проверка ветви: git branch
  • Переход на новую ветку: git checkout -b
  • Написание кода: <ваш код>
  • Просмотр статуса: git add
  • Создание коммита:

git commit -m “useful info about the code I wrote”

  • Проверка ветви: git branch
  • Отправка коммита: git push origin
  • Запрос на слияние: перейдите в онлайн-репозиторий GitHub и сделайте запрос на слияние ветви:

Чтобы активировать процесс, нажмите Pull request. Если вы не допустили ошибок, получите следующее сообщение:

Резюмируем: достаточно ли этих знаний начинающему программисту

Итак, итоги:

  • Алгоритмы  это инструкции, описывающие последовательность действий программы.
  • Структуры данных — структурные элементы, с помощью которых создаются алгоритмы решения определенных задач.
  • Структуры алгоритмов — характер связей между алгоритмами, который бывает трех видов:
  1. Линейный алгоритм — с последовательными операциями.
  2. Разветвленный алгоритм — с последовательностью выполнения операций, зависящей от определенных условий.
  3. Циклический алгоритм — с многократным выполнением одних и тех же действий, например, для выполнения однотипных вычислений с одинаковыми зависимостями, но с разными переменными.

Можно привести много примеров, как алгоритмы упрощают процесс программирования и ускоряют выполнение кода. Назовем всего некоторые из возможностей, которые они открывают перед девелопером. А точнее — умение их использовать:

  • оптимизация обновления DOMОбъектная модель документа;
  • кэширование в памяти повторно используемых элементов;
  • демонстрация только того контента, который пользователь видит в данный момент;
  • нормализация данных, использование селекторов для кэширования объемных данных, требующих дополнительных расчетов;
  • предзагрузка (preload) контента, разработка стратегии кэширования запросов и т.д.

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

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

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

Может ли программист работать над проектами без знания алгоритмов и структур данных?

Да, может. Более того, многие разработчики не ставят эти направления в приоритет. Но отсутствие базовых знаний и теории алгоритмов — это, во-первых, существенное замедление работы над проектами. А во-вторых, необходимость использовать инструменты, без которых можно обойтись, сэкономив время и силы.


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

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Курс GameDev-тестувальник.
Курс для тих, хто хоче познайомитись з роботою тестувальника в геймдеві. Опанувати воркфлоу спеціаліста, розширити скілсет і перетворити любов до ігор на професію.
Дійзнайтеся більше

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Топ-5 самых популярных блогеров февраля

Всего просмотровВсего просмотров
181
#1
Всего просмотровВсего просмотров
181
Senior Project Manager at Nemesis
Всего просмотровВсего просмотров
92
#2
Всего просмотровВсего просмотров
92
Software Architect at Devlify
Всего просмотровВсего просмотров
88
#3
Всего просмотровВсего просмотров
88
Всего просмотровВсего просмотров
68
#4
Всего просмотровВсего просмотров
68
Android Team Lead у Balancуй Team
Всего просмотровВсего просмотров
46
#5
Всего просмотровВсего просмотров
46
Рейтинг блогеров

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: