Что дает изучения структур данных? [закрыт]

101
24 марта 2021, 03:40
Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

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

Закрыт 1 год назад.

Улучшить вопрос

Читаю изучаю литературу по шарпу, и вот вроде дошел уже до уровня когда хочется познавать что-то больше чем около hello word, думаю изучить структуры данных и в связи с этим вопрос, насколько полезны знания в данной теме, часто ли спрашивают их на собеседовании, на что обратить внимание, достаточно ли ознакомиться с этими структурами или нужно знать прямо на уровне типа сесть и написать например свою очередь или достаточно понимать как работает например стек (именно как там у него все под капотом).

Answer 1

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

Я лично за то, что бы структуры данных изучать. Ссылаясь на Вирта, который сорок лет назад выпустил книгу Алгоритмы и структуры данных, я бы сказал, что структуры надо изучать вместе с алгоритмами.

В качестве обоснования приведу несколько соображений.

Первое и самое важное: в индустрии долгое время действовал закон Мура, который гласит, что мощность компьютеров в среднем удваивается каждые два года. Он касается определённой технической детали, но в целом ему соответствуют и объёмы ОЗУ, и совокупная производительность процессоров, и место на дисках. Это приводит к тому, что приблизительно каждые 5-10 лет мощность вырастает настолько, что кардинально меняются парадигмы.

В конце 80-х даже C++ казался слишком ресурсоёмким для персоналок того времени — XT и AT. Однако, через несколько лет, когда у всех появились 386-е персоналки, памяти и производительности оказалось достаточно для косвенных вызовов и таблиц виртуальных функций.

А в конце 90-х оказалось, что сборка мусора и байткод уже не настолько медленны, чтобы работать на среднем железе, и в мир ворвалась Java, а за ней и C#. Для нас программистов это означает постоянную необходимость изучения. Сколько вы планируете оставаться в профессии, столько вам предстоит учить новое. В этом случае возникает вопрос об ядре, о чём то таком, что может пригодиться везде.

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

Второе соображение касается востребованности. Кажется, что работа такая, что структуры данных в принципе уже не нужны. И это даже правда, потому что в современной индустрии огромное количество задач, для решения которых хватает знаний старшей школы или профессионального училища (у нас нет ПТУ, обучающих программистов, но за рубежом уже можно получить средне-специальный диплом по программированию).

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

Для решения таких задач обычно и нужна база, которая, конечно, включает в себя алгоритмы и структуры данных.

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

Глубина изучения может быть разной. Наверное не обязательно реализовывать все структуры и все алгоритмы, но самые интересные или сложные вполне можно.

Answer 2

Знание структур данных и других фундаментальных вещей позволяет, как минимум:

  • решать любые задачи более эффективно и качественно;
  • не тратить время на изобретение и отладку велосипедов на костылях;
  • решать задачи, которые невозможно решить не владея фундаментальной базой;
  • получить дополнительные "очки" на техническом собеседовании при поиске работы;
  • [ из комментария ] фундаментальные знания являются универсальными (т.е. не зависят от конкретного языка или даже стека) вследствие чего даже при полной смене стека технологий изучать их заново не придётся. Плюс владение "базой" облегчит сам процесс перехода, т.к. значительно упрощает понимание "нового" инструментария.

И это ещё не весь перечень, а только самое основное. Так, что изучение подобных вещей приносит программисту весьма ощутимый профит..

READ ALSO
if(true) return игнорируется

if(true) return игнорируется

Есть метод, который возвращает сложную переменнуюЕе вычисление занимает не так мало времени, поэтому сделал что-то похожее на кэш

75
C# MVVM как взаимодействовать с элементами

C# MVVM как взаимодействовать с элементами

Есть у меня ViewModel класс который описывает логику взаимодействия, и в нём есть одно поле к которому биндится кнопка/TextBox, как мне повлиять на состояние...

83
Отключить хеширование пароля

Отключить хеширование пароля

В проекте используется стандартная аутентификация Individual User AccountsДобавил в модель новое поле password

99
Перемещение точек в 3D пространстве

Перемещение точек в 3D пространстве

Хочу попрактиковаться за это лето и попробовать написать что-нибудь в 3D с помощью библиотеки SystemWindows

106