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 існує поширена думка, що програмування потребує глибоких математичних знань. Насправді це не зовсім так.

Часто вирішальним фактором є не математичний склад розуму, а алгоритмічне мислення. І якраз над ним потрібно активно працювати, щоб розвиватися в програмуванні.

Тому на цьому і зосередимося.

Психологічний профорієнтаційний тест для IT-фахівців від Ithillel.
Пройдіть психологічний профорієнтаційний тест для IT-фахівців щоб дізнатися ваші сильні сторони, вподобання і інтереси і з'ясувати, яка IT-спеціальність вам підходить.
Пройти тест

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

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

Для кращого розуміння проведемо аналогію з реальним життям. Ваша робота — це теж певний алгоритм:

1. Сіли за робоче місце
2. Увімкнули компʼютер
3. Відкрили браузер чи робочу програму
4. Почали працювати

Відкиньте один з кроків свого «робочого алгоритму» і вся система зруйнується.

Так само і в програмуванні.

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

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

Програмування — це набір іноді доволі складних алгоритмів і систем, які можуть досить сильно заплутати програміста-новачка. І тут варто памʼятати, що будь-який, навіть найбільш складний на заплутаний алгоритм будується на базових алгоритмічних структурах. А вони досить прості:

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

  • Розгалуження — форма організації команд, при якій в залежності від певних умов виконується задана команда чи послідовність команд:
  • Онлайн-курс "Business English" від Laba.
    Вивчіть базу граматики, лексики та вокабуляру.Використовуйте англійську в спонтанній розмові з колегами та клієнтами.Прокачайте її до впевненого В1 — для розвитку кар’єри в бізнесі.
    Приєднатись до курсу

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

Базові структури даних

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

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

Масиви

Це найпростіша структура даних, в якій елементи розташовані послідовно, а кожному з елементів присвоєне числове значення (індекс). Індекс відповідає позиції елемента всередині масива:

Існують і більш складні масиви — багатомірні. Тобто такі, що мають масиви всередині інших масивів.

В програмуванні працювати з масивами досить зручно, використовуючи прості команди:

Онлайн-курс "Маркетолог" від Laba.
Пройдіть повний шлях розробки маркетингових стратегій на практиці та з фідбеком від CEO бренд-маркетингової агенції.
Програма курсу і реєстрація
  • Insert — вставити елемент по вказаному індексу;
  • Get — повернути елемент по вказаному індексу;
  • Delete — видалити елемент по вказаному індексу;
  • Size — отримати загальну кількість елементів у масиві.

В масивах нескладно знаходити потрібні елементи, обʼєднувати та сортувати їх, змінювати порядок розташування тощо.

Стеки

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

Уявіть, що ви складаєте книги в стопку. Верхньою завжди буде та, яку ви поклали останньою. А нижньою — перша. За таким принципом працюють і стеки:

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

Курс Java від CyberBionic Systematics.
Вивчіть Java та отримайте можливість працювати в високооплачувних сферах мобільної розробки під Android та Enterprise (великий бізнес).
Зарееструватися на курс
  • Push — вставляє елемент зверху;
  • Pop — повертає верхній елемент після видалення;
  • isEmpty — повертає true, якщо стек пустий;
  • Top — повертає верхній елемент без видалення зі стеку.

В одному масиві може бути декілька стеків, з якими можна взаємодіяти окремо.

Черги

Тип збереження елементів даних з послідовним їх розташуванням. На відміну від стека, у чергах використовується принцип FIFO Від англ. First in First Out — «першим прийшов — першим зайшов».

Основні операції з чергами:

  • Enqueue — додає елемент в кінець черги;
  • Онлайн-курс "Тестування API" від robot_dreams.
    Навчіться працювати з API на просунутому рівні та проводити навантажувальні тестування, щоб виявляти потенційні проблеми на ранніх етапах розробки.
    Програма курсу і реєстрація
  • Dequeue — видаляє елемент з кінця черги;
  • isEmpty — повертає значення true, якщо черга пуста;
  • Top — повертає перший елемент черги.

Черги часто порівнюють саме зі стеками, і ці структури даних мають багато спільного.

Звʼязані списки

Це масиви, в яких кожен елемент слугує окремим обʼєктом та побудований на інших елементах — даних та посиланнях на наступний вузол:

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

  • InsertAtEnd — вставляє вказаний елемент в кінець списку;
  • InsertAtHead — вставляє елемент на початок списку;
  • Основи Python для школярів від Ithillel.
    Відкрийте для вашої дитини захопливий світ програмування з нашим онлайн-курсом "Програмування Python для школярів". Ми вивчимо основи програмування на прикладі мови Python, надаючи зрозумілі пояснення та цікаві практичні завдання.
    Зареєструватися
  • Delete — видаляє вказаний елемент;
  • DeleteAtHead — видаляє перший елемент списку;
  • Search — повертає вказаний елемент;
  • isEmpty — повертає True, якщо звʼязаний список пустий.

Графи

Це набори вузлів, що зʼєднані один з одним у вигляді сітки, де один елемент може одночасно бути повʼязаними з великою кількістю інших:

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

Дерева

Дерево — це ієрархічна структура даних, яка має багато розгалужень.

Найпростіша аналогія — дерево навичок в відеоіграх:

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

Існує декілька типів дерев даних: N-дерево, збалансоване дерево, бінарне дерево, AVL-дерево та інші. Рекомендуємо ознайомитися з ними більш детально, тому що зараз деревовидні структури використовуються дуже активно.

Хочемо окремо зупинитися на префіксних деревах. Це підвид деревовидної структури даних, яким ви користуєтесь ледь не щодня. Наприклад, коли використовуєте пошук в браузері, шукаєте слова в словнику чи набираєте текст на клавіатурі з Т9.

Для прикладу: ось так префіксне дерево зберігає слова top, thus та their:

Хеш-таблиці

Це метод зберігання даних, при якому кожному елементу в таблиці присвоюється унікальний індекс. А кожен обʼєкт зберігається у вигляді «ключ–значення». Використовуючи потрібні ключі, ви можете легко знаходити потрібні значення:

Функції

Ще один важливий термін, повʼязаний з алгоритмами, — це функції.

Функція — це фрагмент програмного коду, до якого можна звернутися з іншого місця програми. У більшості випадків під функцією розуміють певний ідентифікатор, проте деякі мови програмування допускають і функції без імені.

Онлайн-курс "Стратегічний маркетинг" від Laba.
Навчіться збільшувати ROI компанії, відстежувати тренди просування та завойовувати нові ринки завдяки комплексній маркетинговій стратегії.
Програма курсу і реєстрація

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

JavaScript:

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

C++:

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

Java:

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

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

  1. функція розміщується в певній частині програми, де потрібно викликати дію алгоритму;
  2. при обробці нашого коду обробник натикається на функцію і повертається до тієї частини програми, де прописаний наш алгоритм;
  3. обробник виконує функцію, при цьому враховуючи вказані нами аргументи;
  4. після виконання функції бере чи не бере результати її виконання та повертається до того рядку коду, який і викликав функцію;
  5. Курс Job Interview Crash Course від Enlgish4IT.
    Отримайте 6 шаблонів відповідей на співбесіді, які ви зможете використовувати для структурування своїх відповідей. Отримайте знижку 10% за промокодом ITCENG.
    Приєднатися
  6. по завершенню обробник переходить до наступних рядків коду.

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

Основи роботи з системою контролю версій

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

Радимо ознайомитися з інформацією по роботі з Git на офіційному сайті. Ми ж лише перерахуємо основні етапи роботи з Git у класичному робочому процесі з прикладами команд у терміналі (наприклад, в редакторі VS Code):

  • Перевірка гілки: git branch
  • Перехід на нову гілку: git checkout -b
  • Написання коду: <ваш код>
  • Перегляд статусу: git add
  • Створення коміту:
  • Курс UX/UI дизайнер сайтів і застосунків з Alice K.
    Курс від практикуючої UI/UX дизайнерки, після якого ви знатимете все про UI/UX дизайн .
    Реєстрація на курс

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

  • Перевірка гілки: git branch
  • Відправка комміту: git push origin
  • Запит на  «злиття»: перейдіть на онлайн-репозиторій GitHub і зробіть запит на злиття гілки:

Натисніть Pull request, щоб активувати процес. Якщо ви не допустили помилок, то отримаєте наступне повідомлення:

Резюмуємо: чи достатньо цих знань програмісту-початківцю

Отже, підсумки:

  • Алгоритми — це інструкції, які описують послідовність дій програми.
  • Онлайн-курс Бізнес-аналіз. Basic Level від Ithillel.
    В ході курсу студенти навчаться техніці збору і аналізу вимог, документуванню та управлінню документацією, управлінню ризиками та змінами, а також навчаться моделювати процеси і прототипуванню.
    Приєднатися
  • Структури даних — структурні елементи, за допомогою яких створюють алгоритми для розвʼязання певних задач.
  • Структури алгоритмів — це характер звʼязків між алгоритмами, що буває трьох видів:
  1. Лінійний алгоритм — з послідовними операціями.
  2. Розгалужений алгоритм — з послідовністю виконання операцій, що залежить від певних умов.
  3. Циклічний алгоритм — з багаторазовим виконанням одних і тих же дій, наприклад, для виконання однотипних обчислень з однаковими залежностями, але з різними перемінними.

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

  • оптимізація оновлення DOMОб'єктна модель документа;
  • кешування в памʼяті елементів, що будуть повторно використовуватися;
  • демонстрація лише того контенту, який юзер бачить «просто зараз»;
  • нормалізація даних, використання селекторів для кешування обʼємних даних, що потребують додаткових розрахунків;
  • передзавантаження (preload) контенту, розробка стратегії кешування запитів тощо.

І тут у досвідчених програмістів може зʼявитися заперечення: всі ці та інші задачі можна вирішити за допомогою відповідних фреймворків та бібліотек. Можна, ніхто й не заперечує. От тільки в такому випадку подібні маніпуляції сприяють суттєвому розростанню коду. Як наслідок — фрізи сторінок, довге перше завантаження та невисокий FPS при скролінгу. 

Розуміння алгоритмів та структур даних дуже важливе для програміста. Мине час, зʼявляться нові мови та самі принципи програмування. Але алгоритми та структури даних залишаться. Тому що це — базис.

І не дивлячись на те, що ми в Wezom Академії завжди виступаємо за практику, та у цьому випадку радимо майбутнім програмістам детальніше ознайомитися саме з теорією, закріпити та розширити отримані сьогодні знання.

Чи може програміст працювати над проєктами без знання алгоритмів та структур даних?

Так, може. Більше того, багато розробників не ставлять ці напрямки в пріоритет. Проте відсутність бодай базових знань та теорії алгоритмів — це, по-перше, суттєве уповільнення роботи над проєктами. А по-друге, необхідність використовувати інструменти, без яких можна було б обійтися, зекономивши час та сили.


А тепер хочу звернутися до тих, хто тільки починає свій шлях в програмуванні, та до тих, что уже має певний досвід роботи. Як ви ставитеся до використання алгоритмів в роботі? Вивчаєте цей напрямок і використовуєте знання на практиці? Чи залишили його «до кращих часів» і концентруєтеся на більш практичних речах? Нам цікава ваша думка, тому запрошуємо до обговорення в коментарях.

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

Онлайн-курс "Project Manager" від Laba.
Станьте проджектом, що вміє передбачати ризики наперед і доводити проєкт до результату, який хочуть замовники. Поділиться досвідом Павло Харіков, former Head of PMO в Kyivstar.
Програма курсу і реєстрація

Цей матеріал – не редакційний, це – особиста думка його автора. Редакція може не поділяти цю думку.

Топ-5 найпопулярніших блогерів березня

PHP Developer в ScrumLaunch
Всего просмотровВсього переглядів
2434
#1
Всего просмотровВсього переглядів
2434
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсього переглядів
113
#2
Всего просмотровВсього переглядів
113
Career Consultant в GoIT
Всего просмотровВсього переглядів
95
#3
Всего просмотровВсього переглядів
95
CEO & Founder в Trustee
Всего просмотровВсього переглядів
94
#4
Всего просмотровВсього переглядів
94
Рейтинг блогерів

Найбільш обговорювані статті

Топ текстів

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

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

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