Pull to refresh

Comments 46

Так неожиданно читать, что четверокурсник, финалист ACM никогда не пользовался линуксом, не знал что такое putty.
Но с другой стороны это очень здорово, дает надежду на будущее)

И Яндекс в очередной раз радует своей рекрутской системой.
UFO just landed and posted this here
Я бы все же не стал делить на олимпиадников и промышленников. Когда решаешь задачу, действительно не задумываешься над тем, что кто-то будет читать твой код, но в команде читабельность кода превыше всего. Можно успешно и решать задачи, и работать в команде, благо научиться писать читабельный код не так уж и сложно, а некоторые на олимпиадах даже пишут читабельный код и при этом получают первые места (не буду тыкать пальцами), хотя лично я на олимпиадах и в команде пишу абсолютно разными стилями.
UFO just landed and posted this here
Молодец! Не останавливайся)

А Яндекс молодцы, да.
никогда не пользовался линуксом, не знал что такое putty

Это, вкупе с отсутствием опыта с VCS, отличительная черта спортивных программистов.
Главное чтобы вовремя поблизости оказался кто-нибудь, кто расскажет что изучить. И направит в сторону либы в которой половина задачи уже реализована, а то олимпиадник сгоряча и XML парсить вручную может начать, например.
У вас какие-то экстремальные проявления спортивных программистов. Вполне себе не отличаются от любых других по этим параметрам. Так же я видел просто программистов не знающих про VCS, отличающихся тягой к велосипедостроению.
Понятно что случаи бывают разные, ни в коем случе не пытаюсь говорить за всех программистов, но тенденцию такую отметить можно смело.
Как участник этой же программы могу только присоединиться к данному посту. Летняя стажировка это круто и очень многое дала мне в плане промышленного программирования и себя как разработчика.
Дизайн приложений не легче чем имплементация выученных алгоритмов/структур данных или даже создание новых. Создать неподдерживаемый софт с супер-крутыми алгоритмами — нехитрая задача. При этом у многих олимиадников ЧСВ как у 3 Цукербергов.
Не в обиду, но мое личное мнение — что спортивное программирование хорошо лишь тем, что поддерживает «хакерский» стиль мышления, который позволяет решать различные задачи нестандартными методами + знание, как это устроено «под капотом».
А методологии программирования хороши лишь тем, что позволяют упорядочить процесс разработки. А фотошоп хорош лишь тем, что может обрабатывать фотографии. Выражение «лишь тем» очень коварное
Олимпиадный программист не все обязан решать олимпиадными методами и никто, вроде, не говорит, что олимпиадников надо ставить на все рабочие места. Но многие задачи требуют для себя именно «хакерский» стиль.
Таким образом вы говорите, что автору не следовало идти в промышленное программирование. В промышленном программировании не нужны гении, там нужны просто грамотные инженеры. Гениям, имхо, лучше идти в науку — девелопить вьюшки хорошо для них слишком скучно, а тех, кто девелопит их плохо, и без олимпиадников хватает.
Вы под «промышленным программированием» подразумеваете только написание «дейтингов на пхп» и собирание стандартных вещей из стандартных модулей? Не поверите, но в промышленном программирование есть много интересных задач с написанием новых вещей, алгоритмов, решений. Вон в статье оно и есть. Статья в общем-то про работу в крупной компании с интересными задачами. Таких компаний достаточно много. И наука в них используется, и продвигается.
А чистая наука вещь совсем на любителя.
Про дейтинг на php ничего не могу сказать, т.к. не писал на php уже более четырех лет, но в средненькой вьюшке крупного iOS-приложения (сравнимого с Facebook или DropBox) найдется много над чем подумать. Науки там нет — одно прикладное программирование. Конечно, во время такого прикладного программирования учишься параллельно и некоторым системным вещам, которые еще меньше относятся к науке (если не считать их самих по себе отдельной наукой).
Я не говорю, что такое программирование тупое и бездуховное занятие. Просто я как а) олимпиадник б) занимающийся промышленным программированием не понимаю почему это должно быть мне скучно. Да и спортивное программирование к науке имеет очень опосредованное отношение.
Согласно вашему ходу мыслей выходит, что математику тоже не стоит изучать, чтобы программировать. Если ваше программирование заключается исключительно в создании вьюшек и клонировании сайтов и приложений, то оно действительно скучное. В моей понимании в «промышленном программировании» есть множество интересных задач, требующих знание математики, структур данных и алгоритмов
Вы меня не совсем правильно поняли — я не говорил, что не нужно знание математики, но, как показывает мой личный опыт, люди с инженерной специализацией — с весьма средними знаниями вышки, ограниченными первыми двумя курсами вуза — лучше справляются с повседневными задачами, коих в каждодневном программировании большинство.

Они не мнят себя звездами, не чураются рутинной работы (коей, опять же, в любом крупном проекте большинство), не испытывают внутреннего дискомфорта от просьбы дизайнера «подровнять вьюшки по пиксельной сетке 8x8».

С другой стороны, я не обобщаю — среди олимпиадников тоже встречаются люди, не пораженные звездной болезнью. Но, по моим наблюдениям и к моему сожалению, среди олимпиадников процент «звезд» значительно выше.
С этим утверждением, я, как олимпиадник, даже соглашусь — по себе знаю, что в проекте предпочту работать над интересными задачами, а от рутины буду отбрыкиваться руками и ногами. Но моя точка зрения здесь в том, что для общего блага проекта задача менеджера в том, чтобы оптимально распределять задачи по способностям и интересам каждого.

Если Петя идеальный инженер, и не видит разницы между «выровнять вьюшки по пиксельной сетке», «настроить связь либы А с либой Б» и «оптимизировать поиск по внутренней структуре данных до двух секунд вместо двух минут», а Коля бывший олимпиадник, и для него третья задача в разы интереснее первых двух, и на ней он способен добиться отличных результатов в рекордное время, а на первых двух будет прокрастинировать неделю, то выбор довольно очевиден. Просто подкидывайте сотрудникам их личные, идеальные задачи. На любом проекте можно сделать такое распределение (в конце концов, если у вас в команде есть олимпиадник, значит, вы его зачем-то наняли, то есть процент алгоритмических задач в вашем проекте достаточно высок).
«Не видит разницы» все же редкость. Идеальному инженеру тоже интересны сложные задачи, а рутинные воспринимает как неизбежное зло. Но если ему оставить только рутину, то есть вероятность его потерять — уйдет туда, где олимпиадников или нет, или их не выделяют, давая всем интересные и рутинные задачи в плюс-минус равной пропорции.
Мир же не делится на чёрное и белое, на исключительно алгоритмические и исключительно примитивные задачи. Есть полумеры, инженерные задачи с отдельными моментами «на подумать», или алгоритмические задачи, для которых требуется вначале подготовить инфраструктуру для тестирования. Проще говоря, хороший менеджер умеет решить задачу о взвешенном паросочетании между задачами и работниками так, чтобы каждый остался в среднем доволен своими заданиями.
В начальном комменте у вас не было слова «в среднем», но была фраза «выбор очевиден». Я как раз заострил внимание на том, что не очевиден, что распределение задач по принципу максимальной производительности конкретного человека на конкретных типах задач при всей своей очевидной выгодности в краткосрочном плане может привести у неочевидным проблемам в долгосрочном.
И все же, я знаю несколько сфер, где креатива больше и не нужно отбирать у простого инженера (такого как, например, я) его работу :) Сходу:

— финансовая аналитика — вот где по-настоящему много статистики и математики. Не будучи голословен, мой друг с сугубо математическим образованием и ph.d. устроился в один из крупных банков Лондона на такую должность, креатива там достаточно, зарплаты — вдвое-втрое выше среднего даже по GB.
— моделирование процессов в Matlab, например расчет физ. процессов определенного автомобиля. В свое время делал курсач на данную тему как инженер по автоматике, но использовал, конечно, готовую мат. модель. Для меня большинство выводов и формул давалось с диким трудом, а математик бы решил не подавившись.

А оптимизацию быстродействия все же оставьте инженерам, в 90% случаев наших знаний вышки для этого хватает.
> Не в обиду, но мое личное мнение — что спортивное программирование хорошо лишь тем, что поддерживает «хакерский» стиль мышления, который позволяет решать различные задачи нестандартными методами + знание, как это устроено «под капотом».

И это именно тот набор навыков, который требуется от хорошего инженера, не так ли?
От инженера скорее требуется прежде всего предсказуемость результата.
Не совсем понятно какой смысл вы вкладываете в предсказуемость результата, можете написать более развернуто?
Для инженера важнее умение решать задачу стандартными, апробированными, технологичными способами, если задача не сформулирована как «найти нестандартное решение» или очевидно, что стандартное решение не проходит формальные критерии (например по себестоимости). Поиск нестандартного решения может занять неопределенно долгое время, а бизнесу нужна предсказуемость, которую дают прежде всего стандартные способы. Пускай меньше прибыль, но меньше и риски. «Хакерский» стиль мышления хорошим инженерам не необходим, он необходим отличным, способным не только решать задачи от менеджмента, но и находить их без его указаний, а то и вопреки им.
Да, в своем комментарии я имел ввиду именно отличных инженеров.

Кстати, хороший спортивный программист должен обладать и предсказуемостью — довольно большой процент задач на соревнованиях требует быстро и безбажно «собрать» из стандартных алгоритмов решение.
Проблема то в том, что обычным программерам не нужно писать свою сортировку, и не нужно знать 100+ алгоритмов. Нужно уметь ориентироваться в проекте, где куча приложений с количеством строк кода в N*100.000, и еще отдельная разветвленная логика в билд скриптах. При этом, в некоторых из этих проектов полная вакханалия в коде, антипаттерны, говнокод, который нужно уметь рефакторить (если конечно, не хочешь завалить сроки или вырыть себе яму). При этом, не отвлекаясь от текущих задач.
Я уже молчу, что зачастую все решают «soft skills», типа как знать, какие проблемы ты можешь решить сам, а какие надо эскалировать выше.

Вообще я вижу фундаметальную проблему в том, что большинство задач в спортивном программировании решается методом algoritmic decomposition. В индустрии такого давно НЕТ (этак с конца 80-х). Фреймворки повсюду, кода в разы больше и задачи другие.

Еще раз — что мне не нравится, это опухшее ЧСВ *некоторых* олимпиадников, которые заняв места на паре олимпиад, считают, что любой, кто не знает, к примеру, алгоритм Флойда-Уоршела — ЛОХ, и вообще непонятно за что ему деньги платят.
Не меньше раздражает мнение некоторых «практиков», что олимпиадники вредны. И опять же у вас тезис какой-то, что олимпиадные навыки будут напрямую использовать в работе, а по другому олимпиадники не работают.
Никто не утверждает, что для 100% вакансий надо какие-то mad skillz. Вообще большинство вакансий может занимать трудолюбивый и исполнительный птушник. Но есть еще меньшинство вакансий для которых нужны навыки отличного инженера с «хакерским» подходом.
>Вообще большинство вакансий может занимать трудолюбивый и исполнительный птушник.
Вот оно — ЧСВ. Хакер != олимпиадник. Более того — алгоритмы и структуры данных это не rocket science, это проходят в универах на первых курсах. Если типичный олимпиадник конкретно эту тему знает лучше среднего студента — не делает его рок-звездой.
Да при чем тут ЧСВ? В большинстве отраслей основной костяк работников не нуждается в высшем образовании.
Олимпиадник это не знание тысячи алгоритмов. Олимпиадник это не рок звезда. Просто успешный олимпиадник с большей вероятностью может решать сложные задачи, находить нестандартные пути решения, делать это быстро и четко. Этот навык не обязателен для большинства мест работы, но никто не говорит «только олимпиадники и везде!».
>Просто успешный олимпиадник с большей вероятностью может решать сложные задачи, находить нестандартные пути решения, делать это быстро и четко.
Этим спортивный программист мало чем отличается от победителя олимпиад по математике, физике или другим точным наукам. Да и от любого хакера вообще. Только вот в отличии от вышеупомянутых без опыта в программировании, олимпиадник вполне может называть переменные «a,b,c» писать жуткий код и при этом презирать «практиков».
Спортивное программирование совсем не приучает к «best practices». Скорее наоборот.
Я придерживаюсь разных стилей написания кода на олимпиадах и в проектах. Да, оно не приучает к «best practices» (в плане стиля кода и используемых библиотек), цель спортивного программирования в другом. Но я не называю свои переменные в проекте «a,b,c». Научиться писать читабельный код на самом деле не так уж и сложно. Сложнее научиться добиваться успехов в олимпиадах
ЧСВ у меня низкое, я не знаю множества библиотек, не работал с многими языками и фреймворками, на которых хотел бы, и я определенно не гуру в использовании коммандной строки. До хакера мне очень далеко
С чего вы взяли что олимпиадник будет писать жуткий код? Жуткий код = невозможность его отладить и невозможность объяснить его сокоманднику (если олимпиадник участвует в ACM контестах).
В постоянной команде из 3 человек можно придерживаться короткого стиля, понятного каждому участнику, но непонятного за пределами команды. Для сокомандника этот код будет вполне ясным, но другим он может показаться жутким. Для себя же свой код, написанный 5 минут назад практически всегда будет ясным
Я учился в том самом «OrelSTU», и тоже участвовал в ACM ICPC (не так успешно, правда), знаком со многими олимпиадниками. У всех с ЧСВ все нормально. Откуда ваша статистика?
Спасибо за рассказ. Я в качестве практиканта участвовал в проекте «Ябракадабра», когда он только начинался — в 2010 году. Интересно, остался ли там еще написаный мной код?
Эх, кураторы говорят, что весь изначальный код переписали. Уже ведь три десятка практикантов через этот проект прошло:)
Алекс, я с большим интересом прочитал пост, узнал много деталей о том, как именно будет выглядеть этот волнующий момент для меня самого (тоже олимпиадника) через какое-то время, спасибо!
Появился только один вопрос: как натура олимпиадная и творческая ты, случайно, не забыл об NDA? :-) Из знакомых ребят, которые ездили в фейсбук стажироваться, никаких деталей о том, чем они там занимались, вытащить не удалось, они отбивались запретом разглашать эту информацию. В яндексе такого нет?

UPD: Ой, я невнимательный — запостил не автор, оказывается. А поделитесь кто-нибудь инвайтом с человеком — он всегда писал много и хорошо. Если кто знает ресурс CodeForces, посвященный спортивному программированию, то этот товарищ является одним из ведущих тамошних блоггеров.
Есть соглашение о конфиденциальной информации и объектах интеллектуальной собственности. Действует в течение 3 лет после прекращения гражданско-правового договора
Отвечу за автора:
Ябракадабра — открытый проект, и NDA на него не распространяется.

А исходники можно где-нибудь посмотреть?
Да его уже долго собираются выложить в опенсорс, но всё никак не выложат.
Оно какое-то время даже лежало в открытом доступе
Sign up to leave a comment.

Articles