Как разработчик, занимающийся разработкой программного обеспечения уже 3 года, мне стало любопытно вернуться к теоретическим темам, когда я учился в колледже. И один из них касается алгоритмов. Поскольку раньше я не обращал на это внимания, я собираюсь сделать своей жизненной миссией овладение основными понятиями и основами алгоритмов, чтобы должным образом применять их в моей жизни разработчиков.

Алгоритмы играют большую роль в разработке программного обеспечения и в том, как мы кодируем каждый поток бизнес-логики. Это как один из ключей или центров программирования, в котором он определяет все, включая ремонтопригодность, масштабируемость, производительность. Без надлежащего знания того, как работает алгоритм, вы совершите большие ошибки в своей карьере и сделаете это неправильно, не зная об этом.

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

Сопровождение кода

Как сделать код поддерживаемым? Как написать элегантный код с меньшим количеством ошибок? Наверняка вы, возможно, задавались этим вопросом, когда начинали свою карьеру и повышали свои навыки в разработке программного обеспечения. Возможно, просто изучая шаблоны проектирования, я смогу написать код, который можно поддерживать? И да, и нет. Подумай об этом. Как вы можете реализовать правильные шаблоны проектирования, если вам не хватает знаний об алгоритмах? Во всяком случае, вы будете смущены, реализовывать это или нет, или это действительно ремонтопригодно.

Алгоритмы — это процедуры. Помните, это определяется как пошаговая процедура. Всякий раз, когда вы изучаете шаблоны проектирования, концепция алгоритма все еще существует. Но если у вас есть более глубокие знания алгоритмов, возможно, вы сможете улучшить шаблон и повысить производительность.

Производительность

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

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

Но давайте просто скажем, что вы реализовали плохие алгоритмы, алгоритмы, которые работают O(n) или хуже, работают O(n²) все время. Скорее всего, C++ не поможет вам достичь наилучшей производительности, которую вы хотите, поскольку вы плохо реализовали алгоритмы.

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

Это не зависит от языка

Это один положительный момент каждой реализации алгоритма. Это не зависит от языка. Когда вы знаете, как правильно писать алгоритмы, вы можете сделать это с легкостью. Но чаще всего это уже реализовано. Но полезно знать, какой алгоритм работает быстро или медленно.

У меня есть пример алгоритма быстрой сортировки, написанного на Python, Haskell и JavaScript:

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

Но это уже реализовано

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

Раньше у меня была ошибка, что каждая реализация работает одинаково. Я думал, что использование списка и словаря даст одинаковую производительность. Теперь я понял, что это не так. На самом деле, я понятия не имею, что делает Dictionary в C#, поскольку я знаю, что он хранит данные. Это все. Я только что понял, насколько это глупо.

Теперь я знаю, что общий List‹T› работает хуже, чем Dictionary‹TKey, TValue› с точки зрения поиска в C#. Когда вы выполняете поиск в списке, среднее время обычно составляет O(n) или линейное время, поскольку поиск должен повторяться в каждой коллекции. Словарь превосходит производительность на кричащее O(1) время или постоянное время при поиске, поскольку нам просто нужно искать его по его ключу, и мы мгновенно получим значение. Обратите внимание на большую разницу в производительности. Как я смог это определить? Это потому, что у меня есть базовые знания алгоритмов.

Заключение

Алгоритмы — одна из самых основных вещей, которые нам нужно изучить, если мы хотим улучшить себя как разработчика программного обеспечения. Это позволяет нам более критически относиться к существующим алгоритмам, которые мы используем в повседневной работе, и писать эффективный код.

В долгосрочной перспективе наши знания в области алгоритмов можно передавать. Мы не только смогли применить это в разных языках программирования, но также можем использовать это в других сферах и областях нашей жизни. Например, как мы можем быть более продуктивными в нашей работе, как закончить повторяющуюся задачу за короткий промежуток времени. Такие вещи. Он также затрагивает реальные жизненные ситуации и проблемы. С помощью алгоритмов мы смогли более эффективно управлять своими действиями и мыслить эффективно, чтобы сэкономить время. И это также влияет на наши решения.

Никто не знал, что наша повседневная жизнь управляется алгоритмами. Все взаимосвязано. Мы просто этого не осознаем.