solovyov.net

Я вчора трохи здивувався тої кількості порад “та просто візьми лібу” для рішення абсолютно простої проблеми. Не тільки здивувався, а посеред стріму навіть розізлився на чувака, який скіпнув все обговорення того на початку і прийшов принести свою мудрість. :)

Я порефлексував на це все і прийшов до двох думок.

Перша, конкретно про ситуацію: уявляєте, як я роблю стрім “дивіться як писати сортування”, і всі радять викликати .sort()? Не здається смішним? :)

Друга цікавіша! Не можна абстракцією собі назавжди закривати розуміння. Мої пости про орми та про фреймворки пам’ятаєте? Це саме воно, хоча я й не зміг цю думку тоді сформулювати.

Власне: не вмієш нічого? Авжеж, візьми фреймворк, зроби щось, а потім почни його розбирати на запчастини. Чому форми працюють саме так? Чи можна краще? Як працює HTTP? Та сама історія з ORM: це гарна стартова точка, але якщо ти на тому старті так і залишишся, то це буде трошки сумно. Авжеж, можливо ти пішов розвиватися у іншому напрямку, і ORM для тебе тільки інструмент для досягнення мети — але тут я напевно про кардинально інші напрямки, а не про “я розвиваюся у зарплаті, а не в технологіях”. :)

А сумно буде, бо нерозуміння абстракцій, особливо критичних для твоєї роботи — приводить до неефективності. Бо мало в світі ідеальних абстракцій, і всі вони трохи протікають. ОРМи, наприклад, дуже погана абстракція — вона і протікає, і складна.

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

Нажаль, жодної людини не вистачить на те, щоб пробити всі абстракції, і я не намагаюся, скажімо, свій GC написати — але розібратися у принципах було дуже цікаво. Тож якщо ви досі ніколи не дивилися, наприклад, як працює хоча б quicksort, дуже раджу! Він вражаюче ефективний, простий і доступний.

Широта світогляду розвиває людину, а запиратися у мушлі — моветон. :)

(@ tg)