Новини високих технологій
» » Що таке стек, рекурсія і природний алгоритм

Що таке стек, рекурсія і природний алгоритм

9-12-2018, 18:43
679
Кажуть, що теорія і практика програмування - це високі технології і вони розвиваються. Область інформаційних технологій стрімко розширює свої можливості. З'являються нові професії і ринки. Можливо, це так є насправді, але фундаментальні конструкції програмування як були на початку почав, такими і мають донині. А це ж не молоток і не викрутка, які, по суті своїй, вічні.

Конструкції синтаксису і реальна логіка

Без формального представлення даних немає програмування. Людина прекрасно себе почував у світі інформації задовго до того, як зрозумів, що багато його дії - це алгоритми. Конвейєри, верстати, інструменти - це механізми, жорсткі форми реалізації послідовностей дій.


Ідеальний приклад - стек протоколів. Кожен працює на своєму рівні: фізичний, канальний, мережевий, транспортний і т. д. При цьому в кожній мережевий конструкції набір протоколів і їх взаємодія - свої. Це працює! До речі, стек протоколів - це не тільки локальні та глобальні мережі. В дипломатії є свій комплект протокольних ідей, в економіці - свій, в організації виробництва взагалі маса правил і умовностей, пластами покладених в єдину систему.
Поява обчислювальних машин, комп'ютерів, смартфонів не викликало революції. Усі що існували коли-небудь і існуючі донині мови програмування маніпулювали і продовжують це робити все тими ж алгоритмами, але у більш м'яких конструктивних формах. «М'якість» мови програмування проти «жорсткості» послідовності дій конвеєра не дала потрібного ефекту. Насправді кожна мова програмування - це система жорстких правил синтаксису, а інформація, яка підлягає обробці, вбирається в сувору формальну структуру даних.


Реальна логіка мобільна. Людина приймає рішення щодо ситуації, спираючись на динамічно розвивається фундамент знань. Весь арсенал алгоритмів людини - це жива динаміка. «Подібні по суті» дії моментально набувають рекурсивні форму, а кожне наступне дія спирається на попереднє. Що таке стек знань в реальності - це динаміка нових можливостей на базі вже сформованих обставин.

Full stack розробник

Якщо вірити "Гуглу", то перша згадка про «девелопера» («= розробник» - щось більш суттєве, ніж просто програміст) датується не раніше ніж 2010 роком. Якщо вірити інших джерел, ідея «розробника» - це 2004 рік. По суті, час тут не має мале значення. Розробник з повним комплектом знань прийшов до програмування, але нічого не змінилося.
Стек у програмуванні - це момент появи першого процесора, адже саме йому довелося забезпечувати послідовне виконання команд. На рівні машинних кодів важко мислити концептуально, але стек впевнено формувався у свідомості фахівців як дивно просте і ефективне правило організації обчислювальних процесів.
Без стека немає рекурсії, а без неї будь-який алгоритм перетворюється в громіздку послідовність дій. Мислити і діяти рекурсивно може кожна людина, але написати подібний алгоритм дано не кожному програмісту, про «розробників» у цьому контексті важко сказати щось певне.
Як не назви професію, нічого не зміниться: програміст, розробник або full stack developer. Людина повинна знати свою справу в повному обсязі, причому таким чином, щоб динамічно зростати адекватно мінливих умов роботи. Знання не можуть бути статичними, так як вони це завжди динаміка.

Стос тарілок проти жорсткого синтаксису

Програмісти і супроводжуючі їх діяльність особи (фахівці різного профілю) давно навчилися говорити красиво: Full-stack розробники: програмісти, які розуміють весь стек, зазвичай створюють більше якісні програми. Можна знайти безліч подібних декларацій на просторах інтернету. Але якщо в будь-якому кафе і ресторані по-старому складають тарілки так, щоб ними було зручно користуватися і ця технологія враховує адаптивно реальності поточної ситуації, то в програмуванні досі панують: if, switch, for, foreach, while і знак присвоювання. Всі синтаксичні досягнення минулого століття перекочували в століття нинішній з явною претензією дожити до наступного. Повний або не повний, але програміст, мислячий реальністю і прагне до створення якісного програмного продукту може вийти за межі зумовленого жорсткого синтаксису. Що таке стек, як не інструмент боротьби з цим гальмом прогресу? Що б там собі не мислив творець сучасної мови програмування, намагаючись зберегти спадщину минулого століття, його можна банально нівелювати за допомогою стека.
Простий приклад. Є реальна інформація. Є дане, яке можна обробити конкретним алгоритмом. Рішення досяжно. Але реальна інформація визначає варіанти даних. Отже, потрібні версії алгоритмів, і це призведе до варіантів рішень. Немає нічого простіше як створити стек: виникла конкретна ситуація, і вона «розібралася» вниз, розкладена на складові, а потім пішла вгору і показала рішення.

Рекурсія, що таке стек для неї

Неможливо описати всі одним алгоритмом. Створюючи програму, спеціаліст постійно виявляє подібні ділянки коду. Використовуючи функції, програміст оптимізує його і робить його читабельним, тестованим і ефективним. Рекурсія - це якісно новий рівень функціональності: вміння функції викликати саму себе, коли в цьому є необхідність і повернутися в колишнє положення речей, змінивши необхідний обсяг даних. Що таке стек, як не план занурення в проблему до її повного розпізнавання (розуміння) і зворотного повернення в початковий стан з адекватною зміною навколишньої дійсності (даних).
Програмування маніпулює даними, але не інформацією. На думку більшості фахівців, дані - це формальні системи подання відомостей. Якщо створити кілька формальних систем, вийде більше варіантів представлення інформації, а це значить стек. Комп'ютер отримає алгоритм адекватної реакції на інформацію, представлену формальними системами даних.

Безумовно, в цьому контексті все залежить від рівня знань програміста і його вміння представляти інформацію в різних системах структур даних. Надаючи кожній такій структурі потрібну функціональність (на рівні кожної свою), можна отримати картину даних і функцій. У загальній системі це буде адекватним універсальним рішенням. Не обов'язково бути full stack розробником, досить бути програмістом, прагнуть до створення динамічних рекурсивних алгоритмів. Світ, звичайно, не впаде до ніг такого фахівця, але роботу свою він буде знати добре.

Природний алгоритм

Особливих варіантів немає: природний алгоритм - це те, що виконується сама собою і адекватно отриманої інформації. Зазвичай, природні алгоритми властиві людині, живій і неживій природі. Можна сказати, що є свідомі алгоритми і закони фізики, хімії, економіки, соціуму.
Інформація - це потік чогось, у чому є система і закономірності. Не варто розуміти це все відразу, завжди можна буде зробити потім. Для вирішення поточних завдань цілком достатньо сприймати інформацію і адекватно на неї реагувати. У контексті програмування і «високих технологій» для досягнення об'єктивного й ефективного вирішення будь-якої задачі досить рекурсії та правила стека.
Цікаво по темі
Стек можливостей JS array: push() і pop()
Стек можливостей JS array: push() і pop()
Стек дозволяє віднести до даних історію зміни значень змінних. Опис даних і алгоритмів лежить в основі програмування. Стек - це основа для передачі
Масиви JS. Об'єкт JS. Багатовимірні масиви JavaScript
Масиви JS. Об'єкт JS. Багатовимірні масиви JavaScript
Перехід від класичного програмування до об'єктно-орієнтованого давно проголошений, але досі не завершено, а всі сучасні мови програмування вже давно
Зміст і використання JavaScript void
Зміст і використання JavaScript void
Відсутність значення і значення undefined - раритет найдавніших часів інформаційних технологій, але навіть в сучасному світі у них є місце і
Об'єкти та масиви PHP: array push & pop
Об'єкти та масиви PHP: array push & pop
Стекова організація даних зручна для створення динамічної функціональності. Масиви на PHP, функції push & pop на перших і останніх елементах
Що таке парсинг: мета і логіка
Що таке парсинг: мета і логіка
Обробка інформації характеризується динамікою вихідних даних або необхідністю обробки даних з різних джерел за алгоритмами. В обох випадках