Не секрет, что существуют два противоположных взгляда на олимпиадное (спортивное?) программирование:
Первый из них - почёт и уважение лучшим, вплоть до благоговейного трепета.
Второй взгляд часто - вот де, зачем это надо, получаются гениальные горе-программисты которых трудно потом переучить для работы в нормальной конторе разработчиков.
Помню, когда я впервые устроился работать в одну из контор, разрабатывающую банковское (и вообще коммерческое) ПО, я был поражён примерами кода - проверки и логгирование ошибок для каждой строки, идентификаторы по 50 символов длиной, префиксы различных видов имён и т.п. Пояснения для потомков, доксижен, пространные комменты в системе контроля версий и багтрекере.
Ну и когда я впервые разглядывал исходники сильных спортсменов с топкодера, скажем - я тоже поражался. Некоторым текстам даже обфускатор уже не понадобится - естественно, ведь автор справедливо осознаёт что написать нужно быстро, а возвращаться к этому коду ему вряд ли понадобится.
Сам я ни с тем ни с другим мнением отдельно согласиться не могу. Считаю что и "профессиональные" программисты должны знать что существуют алгоритмические задачи посложнее двоичного поиска - и спортсмены должны примерно представлять сложности "профессиональной" разработки.
Впрочем обсуждать это всё долго, да и много на эту тему говорилось, даже здесь, по блогам уважаемых людей:
http://mirror.codeforces.com/blog/entry/1851
http://mirror.codeforces.com/blog/entry/2047
и т.п.
Среди своих знакомых - профессиональных разработчиков - я с удивлением не нашёл никого, кто хоть когда-то заходил бы на популярные ресурсы связанные с олимпиадным программированием. Теперь хочу узнать "обратную сторону" вопроса. Так что просто поделитесь (если не тайна):
- работаете ли вы программистом/тестировщиком, и т.п. (если да, то как часто доводилось заниматься интересными алгоритмическими задачами - мне, скажем, раза 4 за два года, притом больше околоматематическими алгоритмами);
- работаете ли вы "математиком/аналитиком-программистом" (или как называется ваша должность) - т.е. человеком который на практике занят разработкой, модификацией или внедрением достаточно неординарных алгоритмов в проектах;
- работаете ли вы в решительно иной отрасли (в инженерной - или нет?);
- либо не работаете пока вообще, но собираетесь (или не собираетесь) работать в IT, даже с учётом того что "интересных задачек" там отнюдь не так много и достаются они обычно либо лучшим, либо везучим... ;-)
Заранее спасибо.
Или каких-то заведений занимающийся разработкой поисковиков, автоматичным ковырянием инфы из инета и т.п.
В смысле - почему именно game-индустрия? Я как вижу она нынче делится на разработку крупных игрушек и разработку под мобильные девайсы... Везде своя специфика - где-то кучи готовых крутых библиотек - где-то наоборот необходимость решать заново примитивные задачи для оптимизации... (эх, помню - лет 10-15 назад трёхмерный лабиринт написать чтоб нормально на 486-й машинке работал - было круто - а сейчас совершенно неактуально т.к. есть опенгл и прочие - и можно более глубокими вещами заниматься)
Но насколько там будет сложно/интересно видимо чаще от самой конторы зависит...
Под обработкой данных в посте ниже я подразумевал (в частности) обработку сигналов датчиков на телефонах под управлением ОС Android :) Да, оно, несомненно, увлекательно, но всё-же интересней было бы видеть визуально результат своей работы :) С большим любопытством посматриваю в сторону Wargaming.net (в частности их игры WORLDofTANKS). Вот от чего-то подобного точно бы не отказался в будущем.
Ну... как-то не вижу я ничего в архитектуре, где нужно писать какие-то сложные или не очень алгоритмы. Только использовать стандартные средства.... готовые библиотеки, готовые фрэймворки, готовые решения, где все алгоритмы уже написаны - только правильно использовать. У нас половина было слизана с того же вконтакте, использовались абсолютно аналогичные решения, только не для PHP, а для Java, и крутилось всё под тем же nginx, в том же Linux, и тот же ffmpeg юзался для обработки видео, бо и альтернатив особых нету.
Единственное исключение - мы не писали собственную СУБД. Тут согласен - для изобретения такого велосипеда нужна алгоритмическая подготовка. Мы как обычные смертные юзали Oracle (бо у фирмы два десятка лет опыта как правильно юзать эту СУБД ). Изобретать свой велосипед - экономически не оправдано (по крайней мере для скромной компании, которая не собирается его продавать).
соцсеть - это не гугл... там в 90% чисто CRUD-операции и не более. А для поиска у нас был прикручен Яндекс.Сервер, хотя на самом деле, как по мне, надо было использовать Lucene или что-то на его основе.
> Сомневаюсь, что оракул подойдет для вконтакте или фейсбука.
На facebook, судя по Вашему линку, юзается Orcale MySQL... это мало чем лучше Oracle Database, скорее наоборот. Да и на Оракле свет клином не сошелся... у нас выбор был продиктован консерватизмом и существующим опытом. Есть куча других (и не обязательно реляционных) хороших СУБД - не обязательно тратить кучу денег и времени на изобретение своей. Ну и даже в этом случае я не назову это "разработкой соцсети", скорее сопутствующим проектом.
А вы сами когда нибудь писали базу данных? Или только использовали готовые?
Я не предлагаю вам писать базу, я лишь пытаюсь объяснить, почему это необходимо для крупных соцсетей. Если вы не можете меня понять, тогда скажите, вы действительно считаете, что разработчикам вконтакте делать нечего и скучно, поэтому они пишут свою базу, которая, если упадет, уронит миллионы соединений и приведет к большим тратам? Вы действительно считаете, что одни из лучших программистов в России разрабатывают сообща какую-то простую в реализации вещь?
Ну... я тут писал выше, что разработку СУБД далеко не считают простой. Но я и не считаю правильным называть это разработкой соцсети. Это скорее сопутствующий проект.
Разработка же самой соцсети - тоже не простая в реализации вещь - т.к. объем задачи не маленький, она требует очень правильно и эффективно применять многие готовые решения, тщательно тестировать и пр. Но умение писать алгоритмы чуть сложнее элементарных там совсем не обязательно.
Не все пользуются таким разделением. В частности автор статей выше включает БД в архитектуру соцсети. И я тоже, т.к. вокруг нее все крутится, соцсеть - это по сути очень удобная база данных. Что имел в виду JKeeJ1e30, мне неизвестно.
1. Если так пошло, то автор статей в архитектуру включает и процессоры Intel. Их разработка не есть разработка соцсети. ;)
2. Там же написано и то, что "хотели бы сделать СУБД универсальной и опубликовать под GPL" (читай: отделить мух от котлет - СУБД от соцсети). Т.о. то, что оно пока сильно связано - есть недоработка.
3. Как по мне, то соцсеть - это по сути очень удобный интерфейс к базе данных, ну и сама база данных, которая под СУБД крутится. И эта СУБД вполне может быть универсальной.
Иначе говоря, если кто-то хочет идти работать в абстрактную соцсеть в надежде применять своё алгоритмическое мышление, то смею разочаровать. Идите лучше в разработчики СУБД. :)
Вопрос серьёзно задаю. Если так, то выбор понятен. Иначе, Вы, видимо, банковский служащий достаточно высокого ранга. И когда-то бросили программирование, чтобы двигаться в банке по карьерной лестнице. Что Вас подвигло на такой выбор?
С другой стороны кто-то предпочитает чтоб программирование оставалось хобби, искусством - а не становилось ремеслом... ;-)
На этом сайте и философы встречаются =).
Если не тайна - какой направленности заведение, где вы работаете - аутсорсерская контора, или всенародный веб-портал - или ещё что?
Из олимпиадных механизмов: один раз использовал бин.поиск чтобы найти виновника ошибки в системе контроля версий xD
Аналогично. В работе использовал только бин. поиск. Изменил время работы программы с более чем 24 часов до 2-3 минут.
Однако из-за участия в олимпиадах у меня появился иной подход к работе. Обычно рабочие задачи требуют только умения их делать.
Предположим если я вижу задачу на контесте, которую я уже делал, то мне необходимо лишь набрать её код, и обычно это занимает 5-10 минут. Теперь, когда я получаю задание на работе, я разбиваю его на подзадачи, которые могу сделать и решаю как один контест. Где стараюсь писать очень быстро. Возможно немного утрирую, но работать в обычном режиме мне очень удобно, и я не устаю от этого. А если работать в "олимпиадном" то получается очень быстро, однако постоянно работать так ещё сложновато.
Слышал, что в играх требуются алгоритмисты. у нас в объявлении было написано: "Зание математики и алгоримтов". Больше нигде не встречал.
Ну так в этой фирме работает несколько студентов, которые слышали максимум про Дейкстру, и то на первом курсе, а парасочетания и КМП - это вообще китайская грамота!
Так что если объявление пафосное - это ни о чём не говорит. ;-)
Лучше всего заслать в компанию инсайдера и от него уже узнавать, что там на самом деле.
Сейчас я нафиг оттуда ушел в стартап, и стало по-интереснее. Понтов, правда, больше нет :о)
В обоих случаях от ICPC понадобилась медалька (особенно в первом) и надрюченный мозг, полученные знания применения не нашли.
Для штатов.
С инвесторами общался не я, но факт наличия человека с медалькой упоминался. Не известно, играл ли он какую-то роль :о)
Разработчик в сфере телекоммуникаций, ~ 2 года.
Задачи разделил бы на два класса:
1. Поиск и устранение ошибок, с анализом кучи логов, и зачастую не в самом приятном коде, - по мне так весьма азартное и, если не лениться попутно что-то рефакторить, то даже креативное занятие. Навыки экстренного исправления ошибок из СП здесь не лишние.
2. Доработки/разработки - на первый план выходит анализ бизнесс-требований, проработка всевозможных кейсов, обеспечение совместимости и масштабируемости решения. Здесь часто возникают интересные логические задачи, но с алгоритмами из СП они имеют очень мало общего.
Надо сказать, что к работе над какими-то в большей степени алгоритмическими проектами не тянет. У меня скорее вызывает интерес перспектива участия в проектировании и сопровождении больших и сложных систем - одним словом, архитектура.
Перешёл на другую работу - и уже пришлось нарисовать и Левенштейна, и модификацию Дамеро, и нечёткие подстроки, и уже до попыток рожания регекспов на их основе дошёл - и начинаю забывать что всё было крайне занудно полтора месяца назад.
Может это пагубная специфика банковских/финансовых задач?