Ищем разработчика, который без ума от JavaScript и клёвых анимаций
Евгений Приходько
84

Нужно ли разработчикам знать алгоритмы?

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

В закладки

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

Разработка в наше время — это не столько про написание алгоритмов, сколько про перекидывание данных из одного места в другое. Структуры данных (массивы, списки, словари, множества) уже написаны. Алгоритмы для работы с ними (вставка, удаление, поиск, сортировка) — тоже уже есть. Вам не нужно знать, как устроено, например, добавление элемента в красно-черное дерево, и каждый раз писать его заново.

Но при этом все-таки важно знать основы. Если вы работаете с C++, то полезно знать, что std::map в своей основе имеет это самое красно-черное дерево, а значит, вставка нового элемента имеет вычислительную сложность O(log n). Или, в случае C#, что Dictionary — это хеш-таблица и что вставка в нее имеет сложность O(1), но при коллизиях хешей вырождается в O(n).

Мое мнение такое: не нужно знать алгоритмы наизусть, но нужно знать, что они есть и какие у них границы применимости. Ведь если вы знаете, что что-то существует, то это можно просто загуглить. Если вам в вашей игре или проекте нужно что-то алгоритмически сложное, то лучшим вариантом будет вспомнить, что где-то уже было что-то похоже, и почитать, как оно сделано там. На основе прочитанного можно уже подумать, как это применить к конкретно вашему случаю, и сделать что-то крутое, как, например, Oskar Stålberg.

I only update one or two boids per frame, and then bezier lerp them along. I was afraid this might cause oscillations, but if it does I'm not sure its even bad. https://t.co/p4wp9fRm3h

Подобный принцип я использую в своей работе. Например, недавно мне нужно было перевести выражения из инфиксной формы записи, удобной для человека (2 + 2), в префиксную форму, удобную для компьютера (+ 2 2). Я просто знал, что есть такие формы, но я не помнил алгоритм перевода из одной в другую. Поэтому я просто загуглил его, изучил, понял, что мне он не совсем подходит, и адаптировал его для построения синтаксического дерева. Да, я сейчас просто написал разные сложные слова, чтобы вы считали, что я шарю, но я еще напишу об инфиксной, префиксной и постфиксной формах в одном из следующих постов в #техпоп, и вы тогда тоже будете шарить.

Работаю в геймдеве. Пишу обо всём подряд, веду рубрики #техпоп и #когнитивочка
{ "author_name": "Евгений Приходько", "author_type": "self", "tags": ["\u0442\u0435\u0445\u043f\u043e\u043f"], "comments": 5, "likes": 9, "favorites": 2, "is_advertisement": false, "subsite_label": "unknown", "id": 123264, "is_wide": true, "is_ugc": true, "date": "Sat, 11 Apr 2020 12:52:44 +0300", "is_special": false }
Объявление на DTF
0
5 комментариев
Популярные
По порядку
2

не нужно знать алгоритмы наизусть, но нужно знать, что они есть и какие у них границы применимости.

Я бы сказал по другому: программисту нужно знать основы алгоритмизации чтобы до написания кода и применения конкретных инструментов пошагово представлять как оно должно работать в итоге.

Ответить
2

Это безусловно, понимание алгоритмов нужно. Но вот нужно ли учить существующие алгоритмы просто так? Нужно ли читать Кормена или Кнута (все 4 тома), чтобы знать как устроена быстрая сортировка, поиск остова графа или разворот связного списка?
С одной стороны, надо бы знать хотя бы основы, чтобы не изобретать велосипеды.
С другой - если на собеседовании спрашивают про алгоритм быстрой сортировки, я бы задал встречный вопрос - зачем им это нужно и как часто они пишут собственные реализации алгоритмов.

Ответить
2

Да, в большинстве ситуаций достаточно понимания на уровне блекбокса. И в очень редких случаях, когда что-то где-то сосёт по перфомансу и это критично, приходится разбираться на более низком уровне.

Ответить
0

ваши идеи будут актуальны всегда

Ответить
0

Да, всё так. По крайней мере я с этим согласен, на собеседования в гугл и яндекс меня не звали - у них может быть другое мнение)

Ответить

Комментарии

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }
null