В эти дни я вкладываю большие средства в структуры данных и алгоритмы и пытаюсь решить некоторые задачи программирования.
Я пытаюсь кодировать и решать с помощью Java и Clojure.
Я трачу свое время? я должен больше инвестировать в технологии и структуры, которые я уже знаю, чтобы получить более глубокие знания (входы и выходы) и иметь возможность кодировать с ними быстрее?
Изучая структуры данных и алгоритмы, стану ли я лучше программистом или эти предметы важны только в студенческие годы?
Ответы:
Вполне возможно потратить большую часть / всю вашу карьеру на значительную полезную работу с минимальным знанием алгоритмов и структур данных.
Минимальный уровень знаний алгоритмов и datastructures, для того , чтобы быть успешным, потребует от вас:
Там нет * максимум * . Если вы хотите, вы можете перейти на уровень PhD и выше. Его полезность напрямую связана с тем видом работы, который вам интересен, и с тем, какую работу вы считаете наиболее интересной и полезной.
Тем не менее, в качестве приблизительного (но не абсолютного) руководства, чем ниже будет уровень, более ресурсоемкий и менее автоматизированный язык, инфраструктура и приложение, над которым вы работаете, тем выше требуемый уровень квалификации, когда это произойдет алгоритмам и структурам данных. Например, реализация алгоритма Укконена в ассемблере, скорее всего, но не обязательно, будет означать, что вам понадобится понимание уровня мастера и задействованных структур данных.
В вашей конкретной ситуации, переходя от фона разработки Java к работе с iO, при прочих равных условиях, вы ожидаете немного более высокого требования к вашему общему пониманию алгоритмов и структур данных. Вы захотите иметь возможность эффективно работать на устройстве с меньшим количеством доступных ресурсов. Кроме того, ожидайте добавить пару новых категорий в свой арсенал - особенно, вы захотите узнать больше об управлении памятью.
источник
Неа. Если вы только начинаете, то пытаетесь разобраться с такими вещами, как программирование пользовательского интерфейса, и это просто удерживает вас. В конце концов вам нужно идти туда и изучать более крупные структуры ... как использовать структуры данных и алгоритмы, которые написали ДРУГИЕ люди. Когда вы только начинаете, хорошо придерживаться ограниченных проблем.
Алгоритмы и структуры данных являются основой всего, даже если вы, вероятно, никогда не напишите свой собственный, когда пройдете начальный этап. Знание их или, по крайней мере, знание их, в конце концов, сделает вас лучшим разработчиком. Вы будете знать, когда и зачем использовать каждый из них, потому что вы будете знать, КАК они работают. Кроме того, сделать ваши алгоритмы и структуры данных общими, чтобы они могли работать с любым типом или типом с интерфейсом X, действительно то, что вы будете использовать до конца своей карьеры.
Я вижу слишком много людей, прыгающих в такие вещи, как Qt, которые в конечном итоге задают вопросы, которые показывают нулевое знание C ++ (например). Они пытаются пропустить слишком много шагов, и, в конце концов, им нужно больше времени, чтобы учиться. Я бы сказал, что вы на правильном пути.
источник
Ты не тратишь свое время.
Если в ходе вашей работы вам понадобится инструмент или фреймворк, который вы ранее не использовали, вы изучите его и будете его использовать.
Однако, если вам нужно использовать структуру данных или алгоритм, который вы не использовали ранее, скорее всего, вы даже не узнаете, что он существует, и вы решите свою проблему, используя какой-то ужасно неоптимальный метод, который требует гораздо больше усилия и весы ужасно.
То, что я пытаюсь сказать, это то, что вы не просто учитесь на практике, вам нужно учиться на учебе , либо в академической ситуации, либо путем личных вложений усилий, поскольку вы делаю сейчас.
источник
На практике имейте в виду, каковы доступные структуры данных, каковы их характеристики сложности, где можно получить их хорошие реализации и где вы храните свою копию « Введение в алгоритмы», чтобы посмотреть детали позже.
источник
Если это то, что делает вас счастливым, тогда вам обязательно стоит придерживаться этого. Если вы волнуетесь, что не применяете достаточно теории, рассмотрите проект, насыщенный теориями. Создайте маленький язык программирования, как зелье , с нуля. В полной реализации будут использоваться хэш-таблицы, графики, деревья и огромное количество алгоритмов. Если это кажется интересным, вы можете глубже погрузиться в оптимизацию, генерацию собственного кода или расширяемость пользователя.
Вы станете лучшим программистом, если будете проявлять интерес и сосредоточенность, а не когда будете работать над проектами, которые кажутся практичными, но немного скучными.
Вниз по кроличьей норе, Дороти!
источник
Я потратил много времени на взлом C / C ++ с OpenGL. Я достаточно хорошо знаю языки и API ... и благодаря этому опыту я стал разумным разработчиком и программистом. Тем не менее, фактические алгоритмические знания, необходимые для решения различных проблем, с которыми я столкнулся, я только что смог понять.
Исходя из личного опыта, сосредоточение внимания на создании приложений станет пустой тратой времени, если вы не знаете теорию проблемных областей, которые относятся к тому, что вы пытаетесь построить.
Для многих различных видов программного обеспечения эти области будут основываться на основах, которые вы изучаете при изучении алгоритмов, в дополнение к их собственной теории, основанной на определенной нише (например, линейная алгебра в компьютерной графике, теория чисел / информации в криптографии и т. Д.).
Вам не обязательно становиться компьютерным мудрецом, стоящим за всем, но делать то, что вы делали во время этой публикации, - очень и очень необходимый путь, чтобы хотя бы раз пройти путь программирования - независимо от того, не они самоучки.
источник
Я думаю, что если вы не знаете их хорошо, вы не найдете причин использовать их. Я, кажется, все время использую их. Но я должен признать, что с улучшениями в дженериках за последние полдюжины лет или около того необходимость делать свои собственные появляется все реже и реже. Это по-прежнему не устраняет преимуществ знания того, как и когда их использовать, и они могут значительно упростить сложный код.
источник