Прошло шесть лет с тех пор, как я занимался кодированием. Кодирование во все виды вещей, таких как ActionScript, JavaScript, Java, PHP, Ajax, XML HTML, ASP и т. Д. Я использовал массивы, карты, связанные списки, наборы и т. Д., Где бы я ни работал, таких, как я. Но всякий раз, когда меня опрашивают, очень вероятно, что люди задают мне вопросы о хэшах, деревьях, стеках и очередях. Некоторые вопросы касаются алгоритмов сортировки. Я не знаю, должен ли я действительно знать их или я должен прекратить называть себя программистом. Во мне есть что-то, что также говорит мне, даже если люди, которые задают все эти вопросы, выбирают меня, они никогда не заставят меня работать над этими вещами. Я действительно должен знать все это?
interview
self-improvement
algorithms
data-structures
сушил бхарвани
источник
источник
Ответы:
Если все, что вы знаете, как делать, это написать клейкий код, вы можете назвать себя обезьяной кода. Нужно написать много связующего кода, и вы сможете зарабатывать на жизнь как обезьяна кода. Чтобы называть себя Real Programmer TM и получать доверие, когда код должен быть написан с нуля, вы должны знать алгоритмы, структуры данных, управление памятью, указатели, язык ассемблера и т. Д. И понимать, как использовать эти знания для оценки компромиссов.
источник
те, кто не знает истории, обречены заново ее изобретать
источник
Что ж, работа на языке, подобном JavaScript, делает это довольно устарелым, поскольку Array представляет собой смесь между вектором, хешем и деревом и может использоваться в качестве стека или очереди. Маловероятно, что вам когда-либо понадобится или вам удастся реализовать структуру данных в JavaScript, которая превосходит класс Array. Это также имеет место в PHP.
Для Java OTOH есть разница. Я полагаю, что стандартная библиотека Java предоставляет вам любую необходимую структуру данных. Тем не мение:
Когда дело доходит до алгоритмов сортировки, не нужно много знать или понимать их, потому что нет необходимости когда-либо реализовывать их самостоятельно. Однако, если вам дан такой алгоритм, вы сможете понять и реализовать его.
Несомненно две вещи:
Структуры данных и алгоритмы - это просто вещь, которую хорошо понять. И это что-то чрезвычайно ясное и формализованное и, следовательно, довольно тривиальное по сравнению с тонкостями прикладного или системного проектирования. Это всего лишь один маленький кусочек головоломки, но их легко понять - если вы готовы потратить некоторое время.
Так что нет, они вам не нужны, но вам будет полезно их узнать.
источник
Это может быть поводом для семантически значимого различия между «программистом» и «инженером-программистом». В этом контексте, в частности, мы видим, что вы владеете несколькими языками программирования и связанными с ними технологиями и что вы можете использовать их для получения желаемых результатов. Это хорошее операционное определение «компьютерный программист».
Я считаю себя инженером-программистом. В большинстве повседневных аспектов моей работы я, вероятно, делаю то же, что и вы. Я использую компьютерный язык и связанные с ним технологии для достижения желаемого результата. Тем не менее, у меня есть понимание структур данных и алгоритмов, и я считаю, что знания являются фундаментальной основой моей способности делать гораздо больше.
Часто, хотя и не каждый день, моя работа заключается в поиске решения сложных проблем, для которых нет очевидных решений, ничего, что напрямую не связано с особенностями используемой среды или возможностями языка, на котором я работаю с. В этом мне нужно проанализировать проблему и найти решение, и иногда этот процесс идет в сфере крупномасштабной архитектуры.
Хотя для выполнения такой работы необходимо отличное понимание этих более глубоких вопросов, этого недостаточно . Другими словами, просто знание того, как работает хеш-таблица или почему сортировка кучи обычно имеет хорошие характеристики производительности, недостаточно, чтобы быть системным архитектором или старшим инженером. Это логичная отправная точка, и оттуда вы можете начать копать глубже и путешествовать более широко и получить опыт, который также необходим для решения более крупных проблем.
Я полагаю, что для того, чтобы ответить на ваш вопрос, вы должны спросить себя: «Кем я хочу быть? Куда я пойду с моей карьерой?» Если вы удовлетворены тем, что продолжаете делать то, что делаете, то вам может понадобиться изучить достаточно структуры данных и алгоритмы, чтобы получить ответы на в основном произвольные вопросы интервью, с которыми вы сталкиваетесь.
Если вы хотите развиваться в своей карьере, и у вас есть страсть к этому, которая необходима, вы должны охватить эти предметы как можно крепче. Если у вас есть время поработать над ними, с открытым сердцем и настоящим энтузиазмом, вы найдете несколько замечательных и захватывающих вещей. Я никогда не забуду тот день, когда я впервые понял быструю сортировку. Чувство возбуждения и открытий проложило путь для большей части моей жизни, и я не мог быть более благодарен за это. Теперь я не могу представить себе что-либо еще, кроме работы инженером-программистом.
Желаем удачи с тем, что вы выберете.
источник
Это зависит от того, для чего нужны рабочие места. Подобные вещи - довольно стандартные вопросы для собеседования, но они также довольно невообразимы и, вероятно, не имеют отношения к работе вообще - конечно, не работа с использованием технологий, которые вы перечислите.
Для меня, как вопросы для интервью, они являются хорошим судьей того, получил ли ты степень в области компьютерных наук (и могу ли ее запомнить), а не какую-либо меру общих навыков программирования или знаний.
Я бы посоветовал вам либо изучить этот материал, чтобы пройти через собеседование, либо вы просто соглашаетесь с тем, что когда бы вы ни спрашивали об этом, это не для вас, но нет, вам не нужно знать их, чтобы называть себя программистом.
источник
Отличный вопрос Javascript, Java или VC ++ - это очень умные языки программирования, в которых вам никогда не понадобится создавать связанный список или хеш-таблицу с нуля. Но вам все еще нужно иметь возможность решать, когда использовать один над другим, штрафы за производительность и бонусы каждого начисляются и т. Д.
Я брал интервью у многих программистов API, также называемых обезьянами кода, и в большинстве интервью им не удавалось разработать системы, которые были бы эффективными и масштабируемыми. Итог: знание множества API даст вам хлеб, но для масла нужно начать с основ вычислительной техники.
источник
Я добавлю «да, конечно, вы все еще можете называть себя программистом». Но каким программистом ты хочешь быть? Я думаю, что самые лучшие программисты имеют хоть какие-то основы теоретических основ. Они знают, почему они выбрали конкретную структуру данных / алгоритм, а также компромиссы, которые идут с этим. Я ожидаю, что у любого разработчика, у которого я беру интервью, будет хотя бы базовое понимание, даже если они не используют тот же самый жаргон (хотя не знание жаргона означает, что вам будет сложнее общаться с другими разработчиками).
источник
Знание алгоритмов позволит вам с уверенностью сказать, как масштабируется ваш выбор ! Я лично считаю это необходимым для старшего программиста
источник
Хороший совет от анализа алгоритмов Чарльз Лейзерсон - MIT
источник
Это зависит от проекта: я являюсь инженером-программистом и работаю аналитиком.
Я потратил много времени на работу в дизайне (тестирование, док, дизайн кода). Но, когда я нахожу ошибку (или плохую производительность) или мне приходится кодировать новую структуру данных (потому что требование очень НОВОЕ для приложения), я должен понять, где проблема в алгоритме, и я должен исправить его ( Я сделал это не очень хорошо, так что :))
Классические алгоритмы и структуры данных - это своего рода «словарный паттерн» в мире разработчиков.
Несколько отличных ссылок:
источник
Вы можете быть хорошим программистом прямо сейчас, но знание структуры данных, алгоритмов и знание других тем в области компьютерных наук, безусловно, поможет вам улучшить себя во многих отношениях:
Вы можете быть более эффективными и быстрее делать вещи. Даже люди, которые уже имеют ученую степень в области компьютерных наук и знают многие из этих тем, будут стремиться быть в курсе последних достижений, чтобы улучшить себя.
Эти знания также пригодятся, если, в меньшей степени, скажем, если вы перейдете от программиста к руководству, позже, потому что с этими знаниями вы все равно сможете лучше понять технические аспекты проектов.
Конечно, структуру данных и алгоритмы часто спрашивают в интервью, так что это еще одна причина, по которой полезно знать их.
источник
Вы упоминаете хеши, деревья, стеки, очереди и алгоритмы сортировки. Ну, технологии, которые вы упомянули, в основном связаны с веб-страницами и сценариями. Вы должны определенно понимать деревья по крайней мере, чтобы вы могли хорошо работать с DOM. Но если скриптинг - это все, что вам нужно, то вы, вероятно, в порядке. Вам не понадобится большинство инструментов торговли для настоящего программиста. Но это потому, что есть большая разница между жонглированием строк, составляющим большую часть веб-сценариев, и тем, что большинство из нас считает «написанием программ».
Я работаю с хэшами и деревьями практически ежедневно, а очереди и очереди реже, но достаточно часто. Сортировка - в основном решенная проблема; практически в любой язык встроена быстрая сортировка в стандартную библиотеку, метод Sort для базовых типов коллекций и т. д., но вы должны знать, при каких обстоятельствах производительность быстрой сортировки может значительно ухудшиться, и правильные стратегии для отсрочки сортировки.
Если бы я не знал эти принципы и то, как они работают, я мог бы, вероятно, взломать работающие решения для кодирования, но они не были бы очень качественными решениями. Они бегали медленно, их было трудно читать, и их было трудно модифицировать, повторно использовать или расширять. Поэтому, если вы хотите научиться быть хорошим программистом, вам обязательно стоит ознакомиться с вашими алгоритмами и структурами данных. Они действительно улучшат качество вашего кода.
источник