Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 1 год назад.
Читаю изучаю литературу по шарпу, и вот вроде дошел уже до уровня когда хочется познавать что-то больше чем около hello word, думаю изучить структуры данных и в связи с этим вопрос, насколько полезны знания в данной теме, часто ли спрашивают их на собеседовании, на что обратить внимание, достаточно ли ознакомиться с этими структурами или нужно знать прямо на уровне типа сесть и написать например свою очередь или достаточно понимать как работает например стек (именно как там у него все под капотом).
Это один из тех вопросов, на которые трудно дать обоснованный ответ, поскольку опыт у всех разный. Один скажет, что структуры данных важны, а другой — что мы живём в мире, где требуется клепать формочки на JS, и там всё это лишние знания.
Я лично за то, что бы структуры данных изучать. Ссылаясь на Вирта, который сорок лет назад выпустил книгу Алгоритмы и структуры данных, я бы сказал, что структуры надо изучать вместе с алгоритмами.
В качестве обоснования приведу несколько соображений.
Первое и самое важное: в индустрии долгое время действовал закон Мура, который гласит, что мощность компьютеров в среднем удваивается каждые два года. Он касается определённой технической детали, но в целом ему соответствуют и объёмы ОЗУ, и совокупная производительность процессоров, и место на дисках. Это приводит к тому, что приблизительно каждые 5-10 лет мощность вырастает настолько, что кардинально меняются парадигмы.
В конце 80-х даже C++ казался слишком ресурсоёмким для персоналок того времени — XT и AT. Однако, через несколько лет, когда у всех появились 386-е персоналки, памяти и производительности оказалось достаточно для косвенных вызовов и таблиц виртуальных функций.
А в конце 90-х оказалось, что сборка мусора и байткод уже не настолько медленны, чтобы работать на среднем железе, и в мир ворвалась Java, а за ней и C#. Для нас программистов это означает постоянную необходимость изучения. Сколько вы планируете оставаться в профессии, столько вам предстоит учить новое. В этом случае возникает вопрос об ядре, о чём то таком, что может пригодиться везде.
Алгоритмы и структуры данных — это одна из базовых вещей, знание которых позволяет переходить к новым технологиям быстро. Они не меняются от языка к языку. Обычно, в новом языке есть стандартная библиотека, и вы просто не должны её изучать, потому что уже знаете, что там есть по структурам данных, и что с ними можно делать.
Второе соображение касается востребованности. Кажется, что работа такая, что структуры данных в принципе уже не нужны. И это даже правда, потому что в современной индустрии огромное количество задач, для решения которых хватает знаний старшей школы или профессионального училища (у нас нет ПТУ, обучающих программистов, но за рубежом уже можно получить средне-специальный диплом по программированию).
В то же время у этой правды есть вторая сторона: время от времени у вас появляется трудная задача, которая требует размышлений и изобретательства. Математик и статистик Н. Н. Талеб написал несколько книг о концепции Чёрного лебедя, может быть слышали. Чёрный лебедь это такое неожиданное событие с большими последствиями. В нашем случае это нечастая задача, которую, тем не менее, очень важно решить.
Для решения таких задач обычно и нужна база, которая, конечно, включает в себя алгоритмы и структуры данных.
Поэтому изучение структур данных окупается, если не в ближайшей перспективе, то в течение уже ближайшего десятилетия.
Глубина изучения может быть разной. Наверное не обязательно реализовывать все структуры и все алгоритмы, но самые интересные или сложные вполне можно.
Знание структур данных и других фундаментальных вещей позволяет, как минимум:
И это ещё не весь перечень, а только самое основное. Так, что изучение подобных вещей приносит программисту весьма ощутимый профит..
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть метод, который возвращает сложную переменнуюЕе вычисление занимает не так мало времени, поэтому сделал что-то похожее на кэш
Есть у меня ViewModel класс который описывает логику взаимодействия, и в нём есть одно поле к которому биндится кнопка/TextBox, как мне повлиять на состояние...
В проекте используется стандартная аутентификация Individual User AccountsДобавил в модель новое поле password
Хочу попрактиковаться за это лето и попробовать написать что-нибудь в 3D с помощью библиотеки SystemWindows