Приходят люди на собеседование и интересуются собственно а зачем мы их спрашиваем везде вот в Яндексе спрашивают, в Гугле спрашивают, в Фейсбуке, в Майкрософте..., везде спрашивают про задачки на алгоритмы. Зачем спрашивают, что это за головоломки? У вас вот есть хороший сотрудник, он код может писать, зачем его спрашивать эти дурацкие головоломки и задачи на алгоритмы? Он же может взять про любой алгоритм прочитать на Википедии или на Емаксе (e-maxx.ru), если знает что это такое, и там скопировать код, реализовать и все получится...Это отчасти правда. Но для того, что бы в реальной задаче применить какой-то алгоритм или структуру данных нужно знать вообще-то говоря, что эта задача решается намного лучше тем алгоритмом или той структурой данных, которая для этого предназначена. Что это вообще существует, что бы это в Википедии вообще искать, что бы знать по каким словам это искать... Как минимум для этого вы должны осознавать, что существует такая область, что в ней есть такие алгоритмы и структуры данных, что можно что-то не за 2^n сделать, а за n, или за log(n) вместо n, или еще как-нибудь там существенно лучше. Если вы этого не знаете, а просто реализуете то, что первым пришло в голову – то это будет жутко тормозить, в высоконагруженных сервисах это никому не подойдет. А наверное в первую очередь вам интересно работать в таких компаниях, где эти все большие данные, супер нагруженные сервисы, все реал-тайм... Ну вот как минимум для этого нужны алгоритмы.Зачем они еще на самом деле нужны, что обычно не говорится? Вы будете иметь дело с большим количеством систем, которые написаны до вас, и которые вы будете использовать как черный ящик. Ну, например, системы баз данных: какой-нибудь MySQL, Postgres, или еще что-нибудь. Для того что бы с ними работать вы будете задавать им какие-нибудь запросы, вопросы. Вы должны на самом деле, что бы эффективно с ними работать, понимать, а как оно внутри будет работать. То есть вы понимаете алгоритмы и структуры данных, то задавая запрос к базе данных, для вас она перестает быть черным ящиком. Она становится таким полу-прозрачным ящиком, в котором вы понимаете, что вот этот запрос должен вообще то выполниться быстро, потому что если бы я его писал – я бы сделал так и так и он работал бы за линейное время. А этот запрос работал бы какое-то безумное время, за кубическое какое-нибудь время, и по-этому, я буду еще неделю ждать, пока он закончится. А если вы этого не знаете, ну запустили, и вот оно рассчитывается... и сколько ждать? Сегодня, два часа, до завтра, до следующей недели или месяц... вы не знаете. То есть на самом деле вы сможете правильно переформулировать свой запрос, что бы он быстрее отработал; вы сможете понять, почему что-то у вас не отработало, то есть вы будете такого рода черные ящики видеть насквозь.
четверг, 21 мая 2015 г.
Подписаться на:
Комментарии к сообщению (Atom)
0 коммент.:
Отправить комментарий