Действительно ли обязательно узнать о Структурах данных, если Вы хотите быть Java/программистом на C++? [закрытый]

15
задан dchacke 26 January 2016 в 23:09
поделиться

16 ответов

Если вы хотите быть программистом, обязательно изучите структуры данных. Структуры данных - это ваш хлеб с маслом - если вы не понимаете таких вещей, как поведение, использование и сложность времени выполнения ('большой O') по крайней мере основных структур (массивы, связанные списки, стеки, очереди , деревья (двоичные / n-арные, самобалансирующиеся разновидности), хеш-таблицы, кучи, графики) и алгоритмы, которые на них работают (вставить / найти / удалить), вы не будете знать, что подходит для использования в каких обстоятельства.

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

Существуют ли интересные способы узнать о них - это отдельный вопрос ... :)

62
ответ дан 30 November 2019 в 23:47
поделиться

Ни одно тело не должно заставлять вас учиться тому, чему вы не хотите учиться.

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


@happysoul: Вы должны спросить себя, ПОЧЕМУ изучение структур данных утомляет вас. Кроме того, было бы полезно, если бы вы также определили, что вам НЕ НАДО.

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

Моя рекомендация по выбору лучшей комбинации алгоритм / структура данных для наиболее увлекательного обучения: графики .

0
ответ дан 30 November 2019 в 23:47
поделиться
1
ответ дан 30 November 2019 в 23:47
поделиться

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

8
ответ дан 30 November 2019 в 23:47
поделиться

Я бы сказал, что на каком-то этапе вашего развития обязательно иметь твердое понимание. Я не уверен, что стандартный курс Data Structures - лучший способ учиться. Иногда лучший способ изучить их - это «У меня проблема X. По какой-то причине моему алгоритму требуется много времени, чтобы решить X. Как я могу сделать это быстрее?»

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

2
ответ дан 30 November 2019 в 23:47
поделиться

Ну, это может звучать немного неловко, но я бы не сказал, что ОБЯЗАТЕЛЬНО изучать структуры данных, чтобы быть обычным разработчиком. Серьезно! Конечно, если вы будете усердно заниматься, это даст вам много понимания и знаний по нескольким аспектам программирования, и это всегда хорошо. Но обязательный ... ну, я думаю, это просто слишком. ОЧЕНЬ ХОРОШО было бы достаточно.

Позвольте мне объяснить почему. На сегодняшний день не так часто приходится писать код Data Structures, потому что - давайте посмотрим правде в глаза - это было бы переписыванием, переизобретением того, что мы уже знаем столько лет! Я бы сказал, что КОМПУЛЬСНО изучить только общую теорию этих структур и API/библиотеки, которые уже широко используются (и протестированы и оптимизированы), например, API Collections в Java. Вы должны знать наизусть различия между List и Set (например, в Java), их возможности и правильное использование, но вам не нужно точно знать, КАК они реализованы - проверять каждый частный метод и атрибут - для решения наиболее распространенных, повседневных проблем кодирования. Вы прекрасно обойдетесь без всех "внутренностей" структур данных для решения общих задач. Сейчас перед нами стоят другие задачи.

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

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

1
ответ дан 30 November 2019 в 23:47
поделиться

Да 99% книг по структурам данных скучны, а упражнения надуманы. Им кажется, что они просто придумывают проблемы, которые не имеют практической цели: ( Эта книга - единственное исключение из правила, с которым я столкнулся. У вас будет наивная, но работающая ролевая игра к концу книга: Структуры данных для программистов игр

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

{ {1}}
1
ответ дан 30 November 2019 в 23:47
поделиться

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

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

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

3
ответ дан 30 November 2019 в 23:47
поделиться

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

Если вы планируете карьеру профессионального программиста, вам необходимо знать основы, а не только то, как создавать «работающий» код. В противном случае вы просто играете.

3
ответ дан 30 November 2019 в 23:47
поделиться

Если вы хотите быть успешным программистом, структура данных - обязательное условие. Как вы будете программировать, если не знаете структур данных и алгоритмов?

4
ответ дан 30 November 2019 в 23:47
поделиться

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

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

1
ответ дан 30 November 2019 в 23:47
поделиться

Обязательно ли изучать арифметику, чтобы стать инженером?

2
ответ дан 30 November 2019 в 23:47
поделиться

Обязательно ли их изучать?

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

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

Каждый программист должен понимать компромисс между LinkedList и Array, или почему двоичный поиск и двоичные деревья полезны для сортировки данных. Это касается не только производительности - это касается и корректности, поскольку вы не можете просто положить все что угодно в набор деревьев.

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

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

1
ответ дан 30 November 2019 в 23:47
поделиться

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

Но в ответ на ваш вопрос: да.

2
ответ дан 30 November 2019 в 23:47
поделиться

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

Изучая их сейчас, вы узнаете:

  • Какая структура данных подходит для какого контекста, т.е. когда использовать односвязный список, когда использовать стек, когда использовать очередь, когда использовать tree
  • Какие алгоритмы подходят для данной цели, например поиск по дереву в глубину или поиск в ширину.
  • Пространственная и временная сложность алгоритмов, например, почему быстрая сортировка иногда является лучшим решением, а иногда и heapsort.
  • В целом он научит вас истокам и основам информатики, даже если вам больше никогда не придется реализовывать стек, вы будете знать, какие мысли и соображения при этом учитываются. Если вам тогда когда-нибудь придется реализовать свою СОБСТВЕННУЮ структуру данных (а, скорее всего, вы будете это делать довольно часто), вы будете знать, что делать, а что не делать.
7
ответ дан 30 November 2019 в 23:47
поделиться

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

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

1
ответ дан 30 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: