Что такое спортивное программирование и как оно работает
Об эксперте: Андрей Райгородский, доктор физико-математических наук, профессор МФТИ, Директор Финала ICPC в Москве, Директор Физтех-школы прикладной математики и информатики МФТИ.
Что такое спортивное программирование
Представьте себе коридор с бесконечным рядом запертых дверей. Если превратить их открывание в задачу с алгоритмом, у нее будет несколько решений.
Классическому, «промышленному» программисту поручат отлить лом, вскрывающий как можно больше дверей, и дешевый в производстве. А задача спортивного — понять, какая отмычка взломает все за пять минут. К слову, спортивные программисты встречаются в 70 раз реже.
Ежегодно программисты со всего мира (главным образом, студенты) встречаются на командных и индивидуальных турнирах. Самые престижные: старейший в своем роде чемпионат ICPC (International Collegiate Programming Contest), конкурс Google Code Jam, олимпиада IOI.
Конечно, замки там никто не вскрывает — обходятся математикой и написанием кода. Задания финалов в разы сложнее примера выше, а время жестко ограничено. Да и по накалу страстей ИТ-чемпионаты порой дают фору Олимпийским играм.
Особенности и практический смысл ИТ-спорта
Участникам соревнований есть за что бороться: на кону не только денежные призы, но и вакансии в крупнейших корпорациях с самыми высокими зарплатами.
От спортивных программистов требуется не только решать алгоритмические задачи, но делать это быстро и оптимально. Такие навыки даются непросто: так, подготовка к чемпионату ICPC требует регулярных тренировок по 4–5 часов, занятий с личным тренером, участия в сборах и отборочных турах.
Не следует думать, что речь о какой-то отдельной науке. Основы традиционного и спортивного программирования едины, и поначалу функция соревновательного элемента — заинтересовать подростка. Олимпиады дают мотивацию к учебе, позволяют поступать в вузы без экзаменов — а уже в вузах программисты приобретают более фундаментальные навыки. Среди них умение создавать решения не на пять минут, а на годы вперед для нужд конкретной индустрии.
Олимпиадный опыт не снижает квалификацию, но для полноценной карьеры одних спортивных навыков недостаточно. Преподаватели МФТИ уже много лет избавляют олимпиадников от их «профессионального синдрома»: заботясь только о быстродействии кода, студенты жертвуют универсальностью и прибегают к сомнительным «костылям». А в промышленных программах «костыли» недопустимы.
Говоря проще, программист должен не только «изобретать, как Тесла», но и «продавать, как Эдисон».
Что изменилось за последние годы
Программирование постепенно превращается в профессиональный спорт. Подготовка стала массовой, в отрасль пришли спонсоры: 5–10 лет назад нельзя было вообразить количества открытых сейчас кружков и курсов подготовки. Программа постоянно усложняется: скажем, финалисты 2010-х годов уже не смогут повторить свой успех. На задачах финалов прошлых лет сегодня тренируют новичков.
Как и олимпийский спорт, современные чемпионаты по программированию все сильнее походят на «битвы титанов», где счет идет на секунды. Но такое сходство — лишь следствие повышения ставок. Повышаются они потому, что за ИТ-чемпионатами пристально следят все крупнейшие компании отрасли.
Что нужно бизнесу
С каждым годом карьерные возможности в секторе растут. Но суть не в том, что ИТ-гиганты встают за медалистами в очередь, — такое «коллекционирование» чемпионов для них просто дело принципа. Когда подготовка стала доступна всем, а число олимпиадников выросло в разы, те перестали быть штучным товаром — и стали рыночным.
А значит, спортивной натасканности и медали больше недостаточно для карьеры. Бизнесу нужны не только «теслы», но и «эдисоны». И тех, и других на рынке хватает — поэтому встает вопрос «а что я умею помимо решения задач?».
И тогда судьбу специалиста решают два качества: soft skills и кругозор. Первый термин объединяет эмоциональный интеллект, умения работать в команде, адаптироваться к новым задачам. Стереотип «айтишник — значит интроверт» сильно вредит индустрии, ведь успех разработки — это успех команды и коммуникации между ее членами.
А кругозор программиста — это его способность решать стратегические задачи. Это знания продвинутой математики, логики и профильных дисциплин; это практический опыт; это понимание процессов в индустрии, где он занят, какой бы та ни была. Такой кругозор — продукт всестороннего высшего образования, и ни олимпиады, ни модные сейчас «образовательные услуги» дать его не могут.
Почему россияне так популярны?
Вот уже восемь лет подряд чемпионами ICPC становятся только российские студенты — а в 2006 году лучшие вузы мира (Кембридж, Гарвард, MIT и десятки других) обошла команда Саратовского университета. Авторитет российской программистской школы непоколебим.
Секрет ее успеха — в трех чертах российского образования: охвате, массовости и глубине.
Охват школьных программ знакомит детей с основами программирования уже в 5–6 классах — ранний старт закрепляет навыки «на подкорке». Школьники за рубежом не изучают программирование вовсе или начинают ближе к выпуску, тратя время на азы.
Массовость гарантирует постоянный приток кадров и каждый год повышает планку. Речь о тех самых кружках, университетских курсах и секциях: их число с годами только растет.
Наконец, из российских вузов выходят не просто продвинутые «кодеры», а специалисты широкого профиля. Только в нашей стране есть площадки вроде Физтех-школы ФПМИ при МФТИ, где студенты не выбирают между «спортивным» и «промышленным» программированием. Их учат всему и сразу, развивая тот самый кругозор. В результате одни и те же программисты способны и выигрывать олимпиады, и разрабатывать бизнес-решения. Неудивительно, что спрос на них огромен.
Какую карьеру строят выпускники ICPC
Принято думать, что чемпионы уходят в ИТ-гиганты едва ли не с церемоний награждения. Это не всегда так, особенно для россиян. Фундаментальные знания и опыт позволяют им преуспевать и в банках, и в стартапах, и в собственных проектах. А кто-то и вовсе становится преподавателем или тренером олимпиадного движения (в сообществе экс-участников ICPC больше 300 тыс. лучших программистов мира, многие из которых выступают менторами для молодых коллег).
Особенно же программистов-спортсменов ценят в финансовой сфере: биржевой аналитике, алгоритмической торговле, блокчейн-платформах. Именно там прорывные идеи и нестандартное мышление олимпиадников пригождаются больше всего.
Как вырастить спортивного программиста?
Главный совет: начинать как можно раньше. Лучше всего — в 11–13 лет. Если закрепить в этом возрасте все базовые термины и методы, то уже к старшим классам можно приниматься за первые конкурсы, пробовать себя на молодежных хакатонах. В идеале — посещать курсы или летние сборы от центров подготовки, подобрать толкового репетитора.
Первым испытанием часто становится олимпиада по информатике или другой конкурс, дающий право поступить в вуз без экзаменов. А в вузах процесс встает совсем на другие рельсы: на базе центров подготовки предстоит сформировать команды, приучить их к жесткому графику тренировок, назначить тренеров и восполнить недостающие знания (например, языка: все международные чемпионаты проходят только на английском).
В МФТИ таким тренировочным центром является ЦРИТО — Центр развития ИТ-образования. На базе центра проводятся регулярные тренировки и состязания. Здесь опытные тренеры готовят команды для выступлений на международных соревнованиях, в том числе ICPC.
Несмотря на все усилия специалистов, процесс подготовки к олимпиадам — личное дело каждого программиста. И ключевую роль в успехе сыграют его трудолюбие, сообразительность и умение действовать в команде.
Помогают ли опыт и достижения в спортивном программировании в реальной жизни и работе, или мешают?
Спортивное программирование — очень неоднозначная тема. Одни считают, что достижения в нём — хороший показатель таланта и умений для промышленной разработки, другие — что такой опыт приносит скорее вред.
Например, Питер Норвиг буквально недавно рассказал, что в Гугле есть негативная корреляция между победами человека на олимпиадах для программистов и его успехами в работе. По его мнению, спортивное программирование приучает концентрироваться на сиюминутных задачах, тогда как на работе надо думать о будущем проекта.
В связи с приближением Яндекс.Алгоритма, нашего собственного чемпионата по спортивному программированию, мы решили спросить разработчиков из Яндекса, которые как участвовали и побеждали на различных контестах, так и нет, помогает ли опыт в спортивном программировании в программировании промышленном?
Все этапы Яндекс.Алгоритма в этом году пройдут в онлайне, так что поучаствовать в нём смогут и те, кто не готов куда-то ехать. Алгоритм состоит из нескольких отборочных раундов, в каждом из которых нужно решить пять задач за 100 минут. В финал, который состоится 6 августа, выйдут 25 лучших по результатам отбора. Тренировочный раунд, до которого стоит зарегистрироваться, пройдет 3 мая.
Роман Удовиченко, Минск.
Разработчик геосервисов. В Яндексе — три года.
Работает в Яндекс.Картах над различными задачами, решение которых позволяет улучшать читаемость карт и делать их более удобными для ориентирования. Окончил факультет прикладной математики и информатики БГУ в 2013-м году. Серебряный медалист студенческого чемпионата мира ACM ICPC 2013, финалист и призер еще множества различных соревнований. Автор задач финала Яндекс.Алгоритма 2013 года.
Я считаю, что помогает, потому что какие-то навыки, полученные во время участия в олимпиадах, можно применять в промышленном программировании. При этом стоит терпимо относиться к тому, что в промышленном программировании все должно происходить более размеренно и спокойно. Нужно отучивать себя от привычки сделать что-то быстро, чтобы работало хоть как-нибудь. Это очень полезно на олимпиадах, но мешает в промышленной разработке.
Михаил Парахин, Москва.
Директор по поисковым технологиям. В Яндексе — год
После окончания МИФИ начал работать в ЗАО НТЦ «Модуль». В 90-х это было почти единственное место в Москве, где занимались системами автоматического обучения. Потом ушел в компанию Parascript, которая фактически является монополистом в области распознавания рукописного и печатного текста. Долгие годы работал в США. Последние семь лет — в Microsoft, пять из которых возглавлял в Bing подразделение мультимедийных поисковых сервисов. Прошлой весной пришёл в Яндекс директором по поисковым технологиям.
У меня здесь отрицательный опыт. Люди-ACMщики любят творить страшные вещи в моих проектах, поэтому я их теперь не люблю. Не думаю, что сам опыт мешает, он помогает. Спортивное программирование само по себе приводит к такому стилю, когда ты не освобождаешь память и пишешь все быстро-быстро, так что это потом никто не прочитает. Плюс люди, которые увлекаются именно спортивной частью вопроса, очень хорошо проходят интервью в компании, но при этом работать не умеют, и им надо учиться. Возникает несоответствие ожидаемого и действительного.
Павел Сухов, Нижний Новгород.
Младший разработчик систем хранения геоданных. В Яндексе — год.
Учился в нижегородском филиале Вышки, где уже два года преподает. До Яндекса работал в научно-исследовательской лаборатории. В Яндексе разрабатывает геоприложения.
Главный плюс спортивного программирования – оно учит решать сложные задачи и делать это быстро. Главный минус – оно учит решать сложные задачи и делать это быстро. Но представим, что задача простая и решается не быстро, а долго, методично и упорно. Ты умеешь справляться с заданиями одного стиля и соответственно проигрываешь в решении задач другого стиля. Спортивное программирование — это не панацея, но точно не вред. Это механизм работы с конкретным видом задач.
Алексей Толстиков, Минск.
Разработчик факторов, куратор минского филиала Школы анализа данных. В Яндексе — 3 года.
Многократный участник чемпионатов ACM ICPC, занял 20-е место в составе команды БГУ в финале 2010 года в Харбине. Полуфиналист Google Code Jam, дважды финалист Russian Code Cup. Победитель TopCoder Belarus College Tour. Окончил БГУ, где и преподает.
Это всем известный спорный вопрос. Можно найти как плюсы, так и минусы спортивного программирования и вообще участия в этих алгоритмических олимпиадах. Отчасти они структурируют сознание, потому что студенты или даже школьники, не писавшие проектов, учатся структурировать свой код.
Но в то же время они пишут код, желая сделать все как можно быстрее, и дальше, если мы уже посмотрим на командное соревнование, часто получается так, что написанное понимают только три человека. Участники одной команды учатся очень быстро читать и вникать в один и тот же код, могут написать какие-то алгоритмы чуть ли не символ в символ. Промышленный код должен быть понятен всем.
В этом смысле олимпиадное программирование учит нехорошему, но при этом еще много чему хорошему. Это, на мой взгляд, работа в команде, умение разделять функции внутри небольшого коллектива. В промышленном программировании такое приходит с опытом 2-4 года, а в спорте студенты учатся этому параллельно.
Владислав Малаховский, Минск.
Руководитель бригады интерактивных технологий. В Яндексе — 2 года.
Занимается разработкой Яндекс.Браузера. Учился на факультете компьютерных систем и сетей Белорусского государственного университета информатики и радиоэлектроники. Первые программы на бейсике пробовал писать в 10 лет в кружке Дворца пионеров.
Опыт любой работы в чем-то помогает, вопрос в эффективности. Спортивное программирование дает знания каких-то глубоких алгоритмов и просто навык вовремя распознать, где какой алгоритм применить. Но в коммерческом программировании большую часть времени нет необходимости использовать какие-то сложные алгоритмы, потому что большая часть программы или проекта, который разрабатывается, состоит из достаточно примитивных конструкций, которые знают вообще все. Но в особо сложных местах, конечно, спортивное программирование позволит поспать лишнюю ночь и не потратить время на поиск хорошего решения.
Андрей Черепаха. Минск
Разработчик интерфейсов. В Яндексе — 1 год.
Занимается разработкой интерфейсов поиска Яндекса. Недавно завершил работу над интерфейсами поиска для старых браузеров, которыми до сих пор пользуется значимое количество людей. Учился в Минском государственном колледже электроники. До Яндекса тоже занимался фронтендом. Начал официально работать программистом в 17 лет.
Зависит от человека. Кто-то начинает пихать замороченные алгоритмы и какие-то дикие оптимизации в места, которые вроде не критичны. С таким человеком будет тяжело работать, и такому человеку будет тяжело, потому что любая простая задача для него будет выглядеть сложной. Другие люди, которые пишут код, неважно спортивное программирование, промышленное, просто применяют навыки в нужной ситуации.
Сергей Силаев. Минск
Разработчик. В Яндексе — 1 год.
Занимается анализом и обработкой больших объемов внешних данных. Параллельно преподает в Белорусском государственном университете и Школе анализа данных Яндекса в Минске. Окончил магистратуру факультета прикладной математики БГУ.
Я несколько лет занимался спортивным программированием, и если судить по себе и моим знакомым, то задачи, которые возникают в поиске, очень сильно связаны с алгоритмикой и знание теории алгоритмов действительно упрощает реализацию достаточно сложных вычислительных систем. Но можно выделить один минус – ребята, участвующие в соревнованиях, привыкают работать ненормированно, потому что многие олимпиады удаленные, проводятся ночью. В итоге такой ритм переносится на работу. Кому-то удобно работать по утрам, а кому-то комфортнее прийти вечером и в тишине поработать до полуночи. Для кого-то это плюс, а для кого-то — минус.
Алексей Сикорский, Минск.
Руководитель минского офиса Яндекса. В Яндексе — 3 года
Кроме того, что Лёша курирует наш офис разработки, он ещё и руководит сервисом toloka.yandex.ru, которое имеет в своём названии и белорусские корни. Закончил ФПМИ и эконом БГУ и магистратуру Академии наук по прикладной математике.
У меня есть хобби. Я вот уже лет десять являюсь автором задач и членом жюри наших национальных олимпиад по информатике. В студенческие годы участвовал в ACM, поэтому, как мне кажется, хорошо понимаю душу спортивного программиста. И да, я считаю, что этот опыт очень сильно помогает.
Спортивное программирование тренирует умение добиваться результата в экстремальных условия в ограниченное время. И это очень похоже на жизнь. Часто приходится решать задачи определенной сложности, которые, возможно, и не имеют решения. Олимпиада – модель маленького мира. Достигни результата, получи высокий балл, и все будет хорошо.
Нельзя сказать, что потом все олимпиадники становятся хорошими сотрудниками и делают хорошую карьеру. В большинстве случаев это помогает, они успешны, у них очень хорошо развита креативность. Но есть некоторые минусы. Спортивные программисты — это в принципе субкультура, где к твоему мнению часто прислушиваются, ты окружен вниманием, получаешь призы и начинаешь подсознательно чувствовать себя звездой. Когда потом происходит смена обстановки, ты приходишь на работу и перестаешь быть звездой, тебе нужно свой авторитет завоевать заново. И люди часто не понимают: «Как так? Почему, когда я прихожу, никто меня не слушает?» Или думаешь: «Я и так все знаю. Зачем мне надо что-то изучать?»
Второй момент — это интерес. Спортивные программисты привыкли очень сильно увлекаться и в будущем готовы выполнять только интересные задачи. Но в каждой работе есть задачи, где нужно пройти какой-то путь и зафиксировать результат. На эту финишную прямую не всех хватает. Не у всех представителей спортивного программирования хватает внутренней самоорганизации, чтобы пройти маленький промежуток рутинной работы.
Кто такой олимпиадник? Это человек, который привык достигать результата при помощи своей креативной деятельности в экстремальных условиях в ограниченное время. Олимпиада — это некая модель, которая мягко ложится на реальную жизнь. В ней часто приходится справляться с задачами, когда ты не знаешь, есть вообще решение или его нет, тебе приходится проявлять креативность, ты ограничен во времени.
Да, олимпиадник не всегда может построить хорошую карьеру. Но часто люди перестраиваются.
Михаил Лопаткин, Нижний Новгород.
Разработчик ядра мобильного браузера. В Яндексе — 2 года
Пишет мобильный Яндекс.Браузер под Андроид. До Яндекса работал в разных аутсорсинговых компаниях. Окончил Нижегородский ГТУ и сейчас тренирует команду университета по олимпиадному программированию.
Спортивное программирование хорошо тренирует живость ума. С одной стороны, это полезно на работе. С другой стороны, ты изучаешь всякие хитрые алгоритмы, которые по большому счету не очень пригождаются. Какой-нибудь поиск потока в браузере мне еще писать не приходилось, и не думаю, что придется.
Алексей Чернигин, Нижний Новгород
Разработчик мобильной геоплатформы. В Яндексе — год.
Окончил ННГУ им. Н.И. Лобачевского. Работал в телекоммуникационной компании, где занимался разработкой и поддержкой программного обеспечения для узлов сотовой связи. Затем разрабатывал системы видеонаблюдения и алгоритмы компьютерного зрения для розничных сетей. В Яндексе занимается разработкой мобильных геоприложений.
Люди, которые эффективно выступают на олимпиадах, зачастую достаточно тяжело адаптируются в промышленном программировании, потому что спортивное программирование — это больше математика, чем программирование. Сначала любую задачу нужно решить математически, то есть построить теорию, придумать решение и только потом уже превратить в код. Но поскольку здесь ключевым фактором являются скорость и эффективность решения, люди набирают код быстро. Человек, которые его посмотрит, просто не поймет, что там написано. Код должен быть такой, чтобы было сразу понятно, что тут происходит. Код, который написан олимпиадником, зачастую может быть быстрым, но люди потом будут долго в него смотреть и думать, что же тут происходит. Поэтому ребят приходится переучивать, точнее даже доучивать писать качественный код. Но, безусловно, они талантливые математики, талантливые программисты, и у них огромный потенциал.
Олег Игнатьев, Москва.
Разработчик качества поиска Картинок. В Яндексе — год.
Призер Всероссийской олимпиады школьников по информатике, победитель командного чемпионата Москвы. Четвертьфиналист ACM ICPC. Студентом занял седьмое место на полуфинале Россия. Окончил ВМиК МГУ.
Спортивное программирование даёт много вещей, которые помогают. Скажем, за полчаса я могу написать кучу кода и проверить какой-то прототип вместо того, чтобы потратить неделю на проверку. За 30 минут я могу понять, стоит ли мне чем-то заниматься неделю или нет. Без спортивного программирования я бы этому не научился. Плюс соревновательная часть помогает, просто потому что она есть. Соревновательная часть любого спорта помогает в жизни. Я считаю, что минусов в олимпиадном опыте нет, и часто оказываюсь защитником спортивных программистов в спорах.
Их незаслуженно считают плохими промышленными программистами исключительно потому, что ожидают от них сильно большего, потому что их сильно разрекламировали. Спортивный программист отличается от обычного программиста только тем, что выиграл какие-то олимпиады. Вроде бы он ничем не хуже и непонятно, за что его считать плохим программистом.
По моему опыту, ему не нужно объяснять, как что-то делать с алгоритмической точки зрения, можно сказать сделать что-то и никаких вопросов у него не возникнет. В этом отношении с теми, у кого есть опыт в спортивном программировании, проще. Остальные качества у них ровно такие же, как и у всех людей: они ровно столько же ленятся, так же могут не интересоваться работой.
Я видел много обсуждений исследования Норвига. Больше всего нравится замечание, что в нём задавали вопросы спортивным программистам и не спортивным, а интервью у Google действительно очень заточено на то, чтобы первые его очень хорошо проходили. В итоге, если человек не спортивный программист и справился с ним, то, скорее всего, он мегазвезда. Поэтому у не спортивных программистов результаты могли получаться лучше. Но есть еще миллион доводов, почему результаты получились именно такими. Конкретно в то, что спортивные программисты заточены на 5 часов работы я не верю. У меня есть много знакомых, которые постоянно занимаются какой-то деятельностью помимо работы, делают какой-то свой проект и им не жалко на это тратить несколько месяцев.
Михаил Левин, Москва
Руководитель службы анализа больших данных. В Яндексе — 5 лет
Очень большая часть деятельности — работа в наших академических программах. Он преподает в Школе анализа данных, участвует в создании программы обучения на факультете Computer Science Вышки и Яндекса. Дважды завоевывал медали на ACM ICPC в составе команды МГУ им. М.В. Ломоносова.
Это вечный холивар. Конечно, не однозначно, что если человек победил в олимпиаде, то он хороший разработчик. Есть проблема, что людей приходится переучивать. Но я считаю, спортивное программирование помогает вполне в конкретных вещах. С ним быстро возникает понимание, что программы не работают. Приходит опыт программирования, затем — опыт написания программ, которые работают и включают в себя тестирование, продумывание деталей решения, быстрый поиск багов и вообще понятие, что же такое программа, которая работает. Также там есть элементы командной работы, что очень полезно. Да, есть вещи, которые, может, даже мешают работе. Например, код, который пишут олимпиадники, никак не может быть использован в промышленном программировании. Но участники соревнований на это и не ориентируются — им нужно за час сделать что-то, что работает и что потом можно выкинуть. Тем не менее, это помогает быстро создавать рабочие прототипы.
Иван Фефер, Москва
Разработчик ранжирования видео. В Яндексе — полгода.
Учился в Саратовском государственном университете, где очень развиты факультативные занятия спортивным программированием. Участвовал ICL в Казани, Russian Code Cup, VK Cup, Яндекс.Алгоритме. В 2014 году был финалистом ACM ICPC в Екатеринбурге.
Из полезного, что мне дал опыт в спортивном программировании, это, конечно, техника программирования, умение реализовать любой алгоритм независимо от его сложности. Также это какие-то фундаментальные научные знания. Понятно, что напрямую из-за своей фундаментальности они сложно применимы, но мышление развивать помогают.
Во время соревнований по программированию приходится писать много кода, и это формирует технику, стиль — ты всегда пытаешься продумать свою программу, чтобы не запнуться во время её написания. Это тоже помогает в работе. Конкретно мне иногда приходится проводить эксперименты. Благодаря такому опыту, я могу что-то быстро и эффективно написать, чтобы только проверить свою гипотезу. В такой ситуации можно писать так, будто ты на соревновании, не оглядываясь на какие-то стили. Если гипотеза оказывается рабочей, можно всё реализовывать в соответствии со стандартами промышленного программирования.
Да, во время соревнования я пытаюсь решить как можно больше задач за как можно меньшее время. Но я когда работаю, не представляю, что нахожусь на соревновании. Я слышу много мнений о том, что спортивные программисты пишут плохой код. Да, на соревновании я пишу код, цикл поддержки которого не больше пяти часов. Но когда я пишу код, у которого цикл поддержки пять месяцев, я пишу другой код.
На прошлой работе, как и на этой, первое, с чего я начал, — прочитал стайлгайд. И я стараюсь ему следовать. К тому же, ещё во времена моих занятий в центре спортивного программирования в университете у нас даже была одна или две лекции, где преподаватель рассказывал, как лучше писать код, что лучше всегда расставлять отступы, отделять операторы пробелами, разделять логические блоки. Даже в личных соревнованиях код, который написан понятно и прозрачно, лучше напечатанного очень быстро. Потому что в случае, когда ты допустил ошибку и не можешь её найти тестированием, надо сесть и ещё раз прочитать то, что ты написал. Конечно, это написано недавно, но читать неправильно написанный код намного сложнее, чем красивый и правильно написанный.
К тому же, бывают командные соревнования, где члены команды читают код друг друга. Там тоже можно использовать, например, однобуквенные названия переменных, но всё равно внутри формируется свой стиль. Мы всегда знаем, что переменная с названием g означает граф. Конечно, на работе я не называю переменную g, я называю её graph, но для этого мне не пришлось специально переучиваться.
Из всего негативного, что я слышал, самое правдивое — это, наверное, высокомерность. Иногда участие в соревнованиях мирового уровня, особенно успешное, даёт в голову. Всё, конечно, очень персонально, но, на мой взгляд, это даёт лишь объективную уверенность в себе и ни в коем случае не делает тебя лучше других людей.













