Философия
March 24, 2019

Страх та ненависть в Алгоритмах

Цей матеріал написаний за підтримки Марсіанського агентства з незрозумілих алгоритмів, подальший текст може викликати значні невідворотні зміни у вмісті черепної коробки читача, автор не несе відповідальності за подальший стан читача. Читач виконує свої дії на свій страх та ризик.

Коротше кажучи цей чоловік мене насторожує, тому в принципі я й обрав цю картинку, вона була першою в Google. Описує якийсь алгоритм, який принципі логічний. Взяти щось, відрізати ножицями шматок, якщо цього стало менше, круто, якщо ні, то це все нереально і ми в комп'ютерній симуляції. Було правда, повністю подивився повну версію відео, де якийсь геній ріже воду 10 годин підряд, мені б таку цілеспрямованість, я навіть поставив вподобайку.

Повертаючись до алгоритмів, алгоритми це все, що ми робимо, алгоритми це наші рефлекси. Коли ти торкаєшся до чогось гарячого, дуже гарячого, ти автоматично забираєш руку, щоб не обпектись, це рефлекс, мій юний біолог-програміст. Все логічно, як по словнику, алгоритм - це опис порядку дій в певній ситуації, не важливо якій. Не надто то і важливо до чого ти це будеш застосовувати, чи до заварки чаю, чи до запуску Аполлона-11, в останньому випадку все трішки складніше, там прийшлось трішки попотіти.

Поставили бідну дівчину, яка знає дуже і дуже багато алгоритмів, ще й код писала на праведному машинному коді, всякі 0 і 1, мільйони їх, комп'ютери задоволені, а вона явно знає толк в збоченнях. Це була невелика контора NASA і вони явно любили алгоритми, будь як NASA, люби алгоритми. До речі цей код опублікували, можеш навіть доторкнутись до історії і своїми очима глянути на код, який описує поведінку Аполлона-11.

Космос, далекі планети, НЛО і Tesla Roadster Ілона Маска вже чекають за межами нашої планети, все завдяки алгоритмам, які описують роботу Всесвіту. Якщо ти досі не впевнений, кидай вже це діло, ставай Senior Cleaning Manager в хорошій компанії Dvor Corporation і забудь про всі ці проблеми, код, Аполлон-11 і Python.

Так, жодного слова про Python, але все це заради нього, далі його буде забагато чи замало, це вже вирішувати тобі. Отже, мова піде про алгоритми, їх використання і взагалі підхід до навчання, без ліні, без сорому й надії, ну тут все зрозуміло.

Книга по алгоритмах, яка зустрілась не дарма

Думаю, варто почати з крутої книги Problem Solving with Algorithms and Data Structures Using Python, до кінця я звичайно не доходив, але я читав, чесно-чесно. Це одна з кращих книг, з великою кількістю свистілок і приколясів, які змусять пустити скупу сльозу болю навіть людину, яка далека від програмування.

Спочатку коротка історія про те, як ми з цим творіння познайомилися. Це був далекий 2018 рік, я хотів обробляти великі дані, створювати штучний інтелект, шукав, де б взяли юного падавана, який дуже хоче, але не знає і не вміє. В кінцевому результаті я знайшов курси від DataRoot в напрямку Data Science, я думав, що прийду туди, мене приймуть як рідного, скинуть на дискету відео-уроки і дадуть грошей на пиво. Тоді я зіткнувся з жорстокою реальністю, вони не беруть всіх, вони пропонують спочатку битву з босом. Бос - це завжди переживання, ти стоїш перед ним, в тебе трусяться коліна, ти відчуваєш провину, але ж тобі просто видають премію, такі моменти завжди повні переживань. Але в цьому випадку це було тестове завдання, такий собі бос, навіть не живий, проте переживання такі ж. Воно дозволяє відсіяти ну вже зовсім безумців, які навіть не вміють користуватись пошуком і шукати відповіді в Google, ото вже пекло.

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

Майже гайд про те, як цим користуватись і стати магістром алгоритмічних наук

В цій книзі Problem Solving with Algorithms and Data Structures Using Pythonпрекрасно все, це як Джоконда написана рукою Да Вінчі, тільки не така дорога і з Да Вінчі зв'язана не сильно, але це не забирає геніальності цього творіння.

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

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

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

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

Ох, мій маленький дослідник, бачу ти не здаєшся і хочеш знати більше, похвально, починаю розуміти, що з тебе все-таки щось тай вийде, але ще подивимось.

Я не дарма додав картинку з когнітивною картою чи mind map, як цю штуку ще називають в далеких заморських царствах. В центрі цієї штуки назва "Рецензія на книгу" - це основна ідея. Саме до неї шукають аналогії, в автора цього шедевру зразу з'явилась думка, що огляд/рецензія все-таки повинна бути зв'язана з книгою, як не очікувано, мій маленький літературний критик. З головною ідею асоціюються різні штуки, вони обов'язково повинні бути пов'язані, вони мають бути частиною, просто геніально і все це називається асоціації і вони можуть мати свої асоціації, тобто асоціації до асоціацій, так можна продовжувати нескінченно.

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

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

Ти ж теж думаєш про соковитий бургер з Мак Дональдс? Я б з ним складав і складав когнітивні карти, але трішки надоїло, можеш також почати з цього при'ємного об'єкту.

Повернемось все-таки до книги, ми ж все-таки зібрались з ціллю стати гуру алгоритмів.

Всю книгу можна також описати за допомогою способу про який я писав вище, слідкуй за ланцюжком:

Книга ->

Розділи (частини книги) ->

Глави (частини розділів) ->

Теми (частини глав) -> ... -> ... -> ...

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

Реальний гайд, цього разу чесно

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

Ви ще не забули про асоціації?

Якщо вже все забуто, то так повинно було бути, не потрібно переживати, перший раз завжди непередбачуваний, ти не один такий.

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

Завжди ставте цілі, цілі допомагають розуміти для чого ви робите те, що робите.

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

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

Питання це добре, а правильні питання ще краще

Завжди виводили оці вискочки, які корчили з себе геніїв науки і задавали складні питання в школі/університеті чи на конференціях, в глибині душі я їм заздрив, бо вони були розумніші.

Завжди викликали захоплення ті, хто задавав прості питання, які знаходяться на грані з диким маразмом і тупістю, вони мають сміливість, як то кажуть "Хоробрим доля допомагає", правди тут вагон, не посперечаєшся.

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

Ну все насправді не так погано, ти ж любиш грати в ігри? А любиш вигравати? Спробуй зіграти з долею в гру, вона не зможе тобі відмовити, вона завжди піддається. Гра називається: "Як обдурити долю, або Народний артист Фортуни", в своєму описі має тільки одне речення:

Навіщо бути сміливим, якщо можна не бути сміливим, а просто зіграти на публіку героя-сміливця, який врятує світ.

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

До чого я вів, боятися задавати дурні питання - це як маленька рана, яка не турбує і на яку не зважаєш, але яка через певний час перетворюється на гангрену і відрізаний палець. Хороша перспектива, чи не так?

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

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

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

Якщо не знаєш як задати питання, як його сформулювати, витесати з шматка каменю гарну статую, просто пробуй, ти думаєш статуї у всіх з першого разу виходять? Чіпляйся за фрази, чіпляйся за слова, чіпляйся за все, хіба ти сліпий/глухий/мертвий, без будь-якого почуття чи реакції на світ, тобі нічого не цікаво, якщо ж цікаво, чого ти мовчиш, питай, більше питай, оце істинна магія, якій не вчать в університетах, ПТУ чи академіях магічних мистецтв. Магія дослідження, магія пошуку істини.

Від лінивого для лінивих, лінивий конспект

Ще одна штука, хороша штука, яку я недооцінив - це, хто б міг подумати, ключові слова. Якщо думаєш, що за це страчували та катували в часи Інквізиції, тоді ти близький до істини, крапля магії тут є, якщо задуматись. Прочитати абзац, зрозуміти сенс цього продукту творчості невідомого автора, вибрати слова, які найбільш важливі в цьому абзаці, ти ж ще пам'ятаєш про когнітивні карти?

Спочатку виглядає страшно, але це нова гра, просто треба з цього конструктору скласти карту, звести все це в єдину ідею.

Оце та дедукція на практиці, якщо подобається Шерлок, то уяви, що ти він, знову грай, зараз без акторської майстерності нікуди, часи такі. Згадай книгу/серіал, бери до уваги деталі і думай, це здається легко, ми завжди про щось думаємо, а тут можна думати для цілі, серйозно, яка дивина.

Ключові не дарма ключові, це ключі до розгадки суті, того тексту перед ним. Сенс всього розділу в наборі слів, які якось пов'язані між собою, можуть утворювати групи та групи у групах і так далі. Тут залишається не хитре діло, дізнатись скільки разів групи будуть ділитись, щоб стати одним цілим з цього набору слів, але тут правильної відповіді не існує, головне вчасно зупинитись, краще зарано, ніж запізно.

Знову книжка на крок попереду, вчить життю, як старий сенсей самурая.

Найпростіше, що можна робити, це просто робити.

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

Книга про алгоритми, так ось справжній "алгоритм" вирішення проблем:

  1. Якщо ти знаєш як це зробити, роби, модифікуй, проводь аналогії, давай волю фантазії.
  2. Якщо не знаєш, задавай питання, повертайся і знаходь відповідь. Просто повторюй до вирішення задачі.
  3. Став цілі і добивайся, тренування для того, щоб ставити масштабніші цілі.

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