Подтвердить что ты не робот

Люди все еще пишут свои собственные структуры данных и алгоритмы?

Вместо STL и подобных библиотек на других языках?

Как новичок, сколько я должен вникать в эту часть разработки программного обеспечения? Ширина первой или глубины?

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

4b9b3361

Ответ 1

Пока никто больше не откатывает свои собственные стеки или очереди, очень важно понять, как и почему они разные. Таким образом, нет, чтобы эффективно использовать простые структуры данных, это не на 100%, чтобы быть в состоянии выполнить все правильные проверки ошибок для loop/null tail/ concurrency/etc в связанном списке с завязанными глазами.

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Лично я чувствую, что эти вещи подпадают под Закон мертвых абстракций.

Конечно, вы могли бы потратить свои дни на написание кода С# с хорошим типом string, но в какой-то момент вам нужно будет понять разницу между "\r\n" и "\n" и почему svn, кажется, импортирует штраф из окон но винты на вашей машине Linux, и thats, когда это помогает реализовать строковые функции.

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

Ответ 5

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

Ответ 6

Все зависит от того, что вам нужно/нужно делать.

Если у вас есть оружие в голову и нужно что-то вытащить из двери, возможно, понимание того, какая структура/алгоритм поможет вам достичь максимальной скорости, вероятно, достаточно.

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

Если вы студент, тогда обязательно, узнайте о них как хотите!

Ответ 7

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

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

Ответ 8

... Вместо STL и аналогичных библиотеки на других языках?

Иногда вам нужно что-то, чего нет в библиотеке. Я часто использую круговые ссылки. Они не находятся в STL, они не поддерживают последовательности STL, и реализация настолько проста, что прокрутка моего файла проще, чем загрузка.

Как новичок, сколько я должен изучить в эту часть программного обеспечения развитие? Ширина первой или глубины?

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

(Хотя я попробовал именно это и закончил с бесполезной книгой. Затем я пошел в другой школьный книжный магазин, нашел лучшую книгу и получил кредит на профессиональную подготовку, не пройдя свой курс!)

Является только концептуальным пониманием необходимо в эти дни? Или я должен быть способно реализовать двусвязный список с завязанными глазами?

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

Ответ 9

С точки зрения профессионального развития вы должны быть способны реализовать все, что вам может понадобиться; однажды вам, вероятно, придется реализовать что-то, чего не существует в библиотеке, и вам также, вероятно, придется изобретать новые алгоритмы время от времени.

Однако, чтобы стать более продуктивным, научитесь сначала оценивать структуру данных библиотеки или шаблона; какова его временная стоимость, стоимость памяти, ремонтопригодность и т.д. Это позволит вам быстрее писать код. Но не останавливайтесь на достигнутом, узнайте, как их реализовать. Изучите реализации библиотек с открытым исходным кодом, чтобы вы знали, как они работают, а не только то, что они делают.

Ответ 10

Вы должны иметь возможность писать свои собственные структуры данных. Фактически делать это для работы должно быть необычным обстоятельством. Коллекции С++ STL или Java или структуры данных, предоставленные .NET, должны быть хорошими для 99% обстоятельств.

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

Эта возможность случалась только со мной раз в десять лет.

Ответ 11

вы, должно быть, слышали о правиле 80/20. 80% разработчиков не владеют (реальным) опытом по внедрению структур данных на своем языке выбора. Поэтому, чтобы быть одним из этих 20%, попробуйте изучить его и получить этот практический опыт. Тем не менее, на самом деле 80% работы, которую вы бы сделали, не потребовали бы внедрения собственных DS. Включение языка, такого как Java и С#, иногда написание собственных DS вызовет критику. У вас есть пакеты /librabries для большинства ваших потребностей. Но, внедряя эти DS в свой langauage, вы будете использовать свои навыки программирования. Итак, продолжайте и начните с своего пользовательского стека и очереди. Я уверен, что первое, что вы узнаете (если вы используете java/С# в качестве вашего языка выбора) - это утечки памяти:)

Ответ 12

Говоря как новичок, я задал себе этот вопрос, и я ответил на него без каких-либо реальных знаний программирования. Эти темы появляются в технических интервью для лучших компаний-разработчиков программного обеспечения. Лучшие компании-разработчики программного обеспечения имеют лучших инженеров (в противном случае они не были бы на высоте!). Поэтому их методы найма должны выбирать лучший и своего рода рынок дарвинизма, который выбирает для тех компаний, которые лучше всего подходят для выбора новых сотрудников. Поэтому то, что ищут эти компании, должно быть релевантным для того, чтобы быть хорошим разработчиком программного обеспечения, иначе они не были бы на вершине. Следовательно, эти темы (алгоритмы и структуры данных) важны. Если бы они были просто произвольным обручем, что эти компании заставляют кодеров перепрыгивать, упомянутые компании были бы перемещены другими компаниями, которые нанимают хороших кандидатов, которые они неправильно отвергают.