Как стать автором
Обновить

Комментарии 152

Несколько неожиданный финал, и да, не совсем понятно, о чем же собственно Ваша статья.
Финал простой. Мальчик в 9-м классе, поэтому не до конца понимает ценность олимпиадников в команде.
Информатика, математика, физика. Даже не удивительно, что парень занимается разработкой игр, ему там многие бы позавидовали с такой школой. А то приходят и локти кусают, от банального «почему не учил вектора» до «почему прогуливал сопромат».
В единственной строке входного файла INPUT.TXT записано одно натуральное число А, оканчивающееся на цифру 5, не превышающее 4*105.
Хех, ну надо же, какой привет из прошлого…
До сих пор помню ту олимпиаду, которую завалил, поскольку думал, что O(N2) при N = 107 — это очень мало…
Думаю, что там имелось в виду 4*10^5.
Эх… Так захотелось опять в школу и на олимпиады… Жаль что пролетело это время беззаботности и свободы… (Тут, думаю, автор со мной не согласится, но прийдет время и точно так-же станет грустить за школьной и институтской жизнью)

А что у вас сейчас со «свободой»?
А не считаете ли странным то, что будучи 17-летним подростком, вы задаете вопрос “А что у вас сейчас со «свободой»?” тому, кому 23 лет. Когда мне было 23 лет я вовсю потерял чувство свободы, потому что мне пришлось работать программистом и не потому что так хотел а потому что должен был! Но вместо этого я мечтал о том чтобы продолжить учебу, но это никак не было возможным. И это я называю быть “не свободным”. Так что ваш вопрос для меня кажется по меньшей мере странным.
Я бы задал тот же вопрос. Мне 22. Почему я могу полностью распоряжаться своим временем и делать то, что хочу, что мне интересно? Что не так?

На мой взгляд, «отсутствие свободы» каждый сам себе старательно создает. Это просто вопрос приоритетов и целей.
Слово «свобода» в данном случае я использовал с философской точки зрения, если можно так выразится. Может правильней было сказать «меньше ответственности». Сейчас я работаю преподавателем в колледже и обязанностей стало на порядок больше по сравнению с периодом учёбы. Хотя осознал я это только перед самим дипломированнием, а до этого единственной мечтой было поскорее защититься и выпустится в широкий мир полный новых свершений и бла-бла-бла…
Могу ответить на Ваш вопрос. Мне 24. Живу и работаю в США.
Увы, но распоряжаться могу только временем на выходных. Так как в будние дни приходиться работать.
Более того один выходной и почти все вечера отдаю собственному проекту. Так что из 7 дней я могу отдыхать только один. Когда мне было 17 — все было диаметрально противоположно, денег особо много не надо было. Так что работал всего пару дней в неделю, а остальное время получал удовольствие от жизни. Сейчас же надо платить за жилье\машину\еду etc. и позволить себе самому распоряжаться своим временем — нету возможности.
Так создай эту возможность. Уж для кого, а для программистов это даже проще, чем для остальных.
Вы удивитесь. Вот я и создаю, как я уже сказал по вечерам и выходным. Сейчас в ущерб себе, но с тем что бы в будущем получить из этого выгоду.

И вы совершенно не правы насчет того что программистам это проще. Разработка ПО это такая же работа как любая другая. Она требует тратить на нее время и силы. И от этого никуда не денешься.

Можно конечно работать по пару дней в неделю, но и профита от этого будет меньше. А если хочеться кататься на красивых машинах, кушать в хороших ресторанах и жить в большом доме — то надо работать.
А это я еще в разводе, а если жена и дети есть? Их тоже надо поддерживать, кормить одевать и т.д.

Так что чем старше становишься тем, в большинстве случаев, становится меньше времени.
Программист может поднять свой проект, люди многих других профессий — нет. Бизнес конечно каждый может открыть теоретически, но все равно у IT специалистов тут серьезная фора. Особенно если разбираться в финансах и инвестировании ))

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

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

Ага, расскажите Дурову.

А если честно — олимпиадные задачи — классическое ATDD (обычно несколько проверочных тестов указанно). Причём в условиях автоматической проверки. Так что к ежедневным сборкам такой человек весьма подготовлен.

И да, если Вы будете на олимпиадах выдумывать всегда велосипеды — вы проиграете. Использовать надо в основном проверенные решения и алгоритмы.
Скажем так, на олимпиаде требуется умение быстро собрать свой велосипед из проверенных запчастей-алгоритмов.
Ну так и в реальной жизни редко когда «скачал и заработало» — тоже допиливать и группировать известные технологии приёмы надо. Ну а уж рабочая извилина — везде пригодится
В реальной жизни другой уровень у этих готовых технологий. Участвовал давненько в олимпиадах, когда активно уже не плохие программы писал, знания из разработки «традиционных» программ не особо пригодились в олимпиадах, точнее совсем там никак не применялись.
Хм, могут ли минусующие назвать причину? А то как-то интересно…
Дважды чемпионом мира был Николай Дуров, а ВКонтакте написал его брат Павел Дуров.

Правка: это ответ на пост на уровень выше.
"«ВКонтакте» осуществляет финансовую поддержку развивающихся Олимпийских игр по программированию в России и спонсирует команды программистов Санкт-Петербурга и Северо-Запада России. Среди работников компании лучшие российские программисты, лауреаты международных конкурсов по программированию и математике."

Именно это я имел ввиду. А вот чтоб поднять свою компанию — надо прежде всего быть хорошим управленцем, а не программистом.
Ну ВКонтакте, Яндекс и mail.ru нанимают олимпиадников не потому, что у них какие-то очень релевантные скилы с олимпиад, а потому что если добился чего-то в олимпиадах, значит голова на плечах есть, значит сможешь добиться многого и на производстве.
Вот за что я не любил никогда эти задачи:
Входные данные
To be or not to be
Выходные данные
1 2 3 4 5 2

если мы заменяем каждое слово, то на выходе должно получиться 1 2 3 4 1 2. И вот таких ошибок полным-полно. Не говоря уже о «по разному» настроенных компиляторах (хотя в положении написаны «используемые аргументы», на деле не всегда получается одинаково). Чаще всего ошибки компилятора были как раз-таки при использовании паскаля.

В целом — конечно, это интересный опыт. Жаль, что ему уделяют мало внимания на первых этапах, что приводит к вышеописанным ошибкам.

П.С. наверное стоит извиниться, ведь прочитав фразу еще раз, там подразумевается также и регистро-зависимость. «To» !== «to»
Это — не ошибка! «To» и «to» — два разных слова.
Слова считаются одинаковыми, если они равны с точки зрения сравнения строк, причем строчные и заглавные буквы считаются различными.

PS какая замечательная задача получилась…
«To» != «to»
И нам это вдолбили в голову еще на общем курсе, когда тема была «Строки».
Верно, но не всегда.
В любом случае надо смотреть условие задачи. Подобные вещи всегда оговариваются заранее на любом уровне кроме школьного.
нам это вдолбили в голову еще на общем курсе
Хм… Что-то мне вот это видео вспомнилось (смотреть с 07:40 до 10:30).
А минусовать-то за что? я же добавил, что касательно задачи, не учел все данные. А сам комментарий — мой опыт, в мое школьно время.
пример — часть условия. так что даже если в условии не написано «регистро-зависимый», то из примера это должно стать понятно
По поводу приспособленности к реальной работе. Языки и технологии — это всё вторично. Умение формализовать задачу, придумать оптимальный алгоритм её решения — вот это настоящее дао программирования. Олимпиады качают именно этот скилл.
В реальной работе редко важны алгоритмы. А вот языки и технологии — постоянно. И архитектурные навыки.

Если провести аналогию, то, по вашему, в строительстве не важны инструменты и техника, а самое главное — крутой цемент замешать и хорошие кирпичи сделать. Так вот, кирпичи и цемент уже за вас сделаны (алгоритмы большей частью придуманы). А вот владение краном и экскаватором очень пригодится (языки и технологии).
Смотря какая работа. Как и на стройке. Бывают дизайнеры и архитекторы, а бывают работяги на экскаваторе. Если хотите всю жизнь писать сайты на php, то нет проблем. Тогда изучайте php и будьте счастливы.
Я про что и говорю. При разработке сложных программных систем важнее всего навыки архитектуры. Олимпиады его не качают.
Безусловно, олимпиады хороши и очень полезны, но они скорее качают скилл «getting things done». Быстро накодить, чтобы выполняло задачу. Важный практический скилл. Но это не «дао программирования».

А хорошее знание «своего» языка, сопутствующих фреймворков и инструментов — это ценный багаж, который позволяет быстро и качественно выполнить задачу. Многие это недооценивают. Говорят, что «если ты реальный программист, то можешь на чём угодно писать». О да, конечно, могу, но сколько времени займёт то, что называют «get up to speed»?

И у разных языков и технологий разная «стоимость разработки». Не всегда хочется менять одно на другое. Это как с шуруповёрта на отвёртку поменять. Результат одинаковый, но процесс…
Реальная задача из реальной практики. Сделать небольшой модуль ERP для конкретного производства. Есть заявки, есть схемы сборки, есть список участков производства, на которых можно выполнять операции, есть список рабочих, которые обучены определённым операциям. Надо сделать админку для ввода заявок, списка рабочих и т.д. и на выходе получить распечатки с расписанием, какой рабочий куда должен пойти, чего и сколько напилить.

Один программист сто лет кодит для Web, админку сделал за неделю. Он умеет сгенерировать PDF для распечатки. Одна беда — полгода мучил генератор расписаний. И всё время какие-то баги находились — то какой-то участок не догружал, то не поровну распределял работу по рабочим, то просто неэффективное решение было. Вручную можно было всегда посидеть и лучше придумать. И всё никак и никак. Потому что у него теоретической базы не было. И его алгоритм был просто кучей эвристик.

А потом случайно взяли олимпиадника. Что такое индексы в базе данных — не знает, на перле никогда в жизни не программировал, как web работает — знает только как пользователь. Да, у него месяц ушёл, чтобы «get up to speed». Только алгоритм заработал уже через неделю. «Всего-то» надо было записать условия задачи в виде системы линейных неравенств и решить «обычную» задачу нахождения максимума. И программа стала искать очень крутые решения. Предусмотрел все граничные условия, ни разу с тех пор к этому алгоритму не возвращались.

Понятно, что хорошие кодеры всегда нужны. Которые в совершенстве знают язык, платформу, технологию. И могут писать много и хорошо. Беда в том, что если требования меняются, то такой «программист на C++» наотрез отказывается изучать node.js или переходить с Windows на Linux. Люди сами себя прибивают гвоздями к одной нише и в ней кормятся. Каждому своё, наверное.
В реальной работе важно умение быстро учиться. То, чему сейчас научится школьник, через 5 лет будет уже не так актуально, и получится, что когда он мог развивать мозги он изучал технологии и языки, которые(конечно не все) уже умерли.
Я в свое время (а закончил школу я в 2006 году) учился в похожих условиях — в физмат классе лицея №35 г.Челябинска. Много участвовал в олимпиадах по математике, физике, программированию, выше областного уровня, правда, не побеждал (на регионе в третий десяток входил — и то неплохо =)). Это, конечно же, очень полезный опыт. Особенно командные соревнования по программированию.

Но, к сожалению, вывод из этой статьи (для меня по крайней мере) оказался верным на 100%. Участвовать в олимпиадах надо, да. Это очень полезно и круто. Но ставить во главу угла только победу и параноидально к этому идти все же, как мне кажется, не стоит. Из моих сверстников так называемые «победители многих олимпиад» не только не смогли нормально устроиться в дальнейшем на работу, но даже закончить университет. Все эти герои, кто поступил на смежные со мной специальности, вылетели к концу 1-2 курса. И тому есть объективные причины. Самая главная выглядит так: этот самый «победитель» смотрит, что большинство программы по матану, программированию и физике он уже знает, перестает ходить на пары и в конце его ожидает неприятный сюрприз в виде неизвестного ему материала на экзамене. Синдром «да я это уже знаю и умею!» встречается на каждом шагу! Такие люди не просто не полезны, они вредны для хорошего трудового коллектива.

Искренне желаю автору не сбиться с верного пути, не схватить «звездную болезнь» и все будет отлично! =)
Ну, не соглашусь с вами. В 11 классе в 2008 году довелось добраться до заключительного этапа, так только для этого я проделал кучу работы: до этого 2 лета подряд ездил дополнительно учиться в ЛКШ, там набрал коллосальное количество знаний, (да и с тех пор книга Кормана всегда под рукой), которое потом мне не раз пригодилось, в том числе и в учебе: по той же дискре и линалу кучу однокурсников выручал решениями многих задач.
А так вот тебе и экстремальные условия и умения быстро писать понятный код.
Я тоже с 14 лет занимаюсь олимпиадным программированием, но я не согласен с ТС. Да, не стоит забывать про учебу в университете, где учат соверменным методологиям промышленного программирования и учат писать код, но олимпиады — это ничем не заменимый опыт. Во-первых они развивают умение выполнять задачачи быстро, качественно и с помощью наиболее оптимального алгоритма, ведь на каждую задачу ставятся жесткие рамки по вермени и по память и большой набор тестов. Также приходится учиться безошибочному кодингу, иначе серьёзный алгоритм замучаешься отлаживать, а за каждую попытку по системе ACM и многим другим начисляется штраф. Из всего этого рождается правильный стиль программирования, кто бы что ни говорил. Конечно, многие олимпиадники пишут код без пробелов и отступов, лишь бы побыстрее закодить задачу, но по моему опыту это только увеличивает время её решения. Я сам привыкал к стандартам месяц, но когда стиль был доведен до автоматизма, время решения задачи очень сильно сократилось. И я уже не говорю об нижеупомянутом «умении мыслить», набрав достаточный опыт (более 5 лет) и большой багаж продвинутых алгоритмов, ты можешь взглянуть на задачу любой сложности и в голове сразу рождается мат модель задачи и оптимальный алгоритм её решения. Недаром многие известные IT компании проводет олимпиады по программированию (Google Code Jam, VK Cup, ABBYY Cup), а наиболее успешных участников приглашают к себе на работу.
Могу уточнить про пробелы, отступы и названия переменных: лично я быстро привык к правильной разметке кода с отступами (часто очень помогают системы автоматизированного написания кода с отступами и пробелами), а интуитивно-понятные названия переменных и комментарии только ускоряют решение и отладку задачи.
НЛО прилетело и опубликовало эту надпись здесь
Я вот тоже школьник, правда в 8-ом классе, нахожу такие олимпиады, ИМХО, бесполезными, максимум забавными. Я учавствовал в Киеве, и даже занял 1-е место на уровне города (дальше не пустили по возрасту), но сейчас понимаю что ничего не решает.

Сколько бы те несостоявшиеся программисты-математики говорили о важности спортивного программирования как такового, этот факт остется преувеличенным. Давайте подумаем, чему нас учат задачки с Codeforces или TopCoder. Они «учат мыслить» и «писать правильный код» скажут нам труъ олимпиадники.

«учат мыслить»: учат строить исключительно математическую модель решения (комбинаторика, графы, дин. прог)
«писать правильный код»: ну-ну. разобраться в решении кого-либо невозможно. Как и дебажить его код. Пишут в условиях гонки такой код, от которого дурно. — эти люди не слышали о coding styles…

Не выигрывал я топовые контесты по спорт. программированию, только сижу сейчас в Googleplex, штат Калифорния. Научился мыслить — да. Научился писать код — конечно, только спорт. программирование мне тут порядно навредило.

У меня есть несколько знакомых, которые попали в Google, Microsoft, etc через спорт. программирование. Они сами жаловались, что там их полностью переучивали. Это путь умного человека к хорошему программисту, который пройти очень сложно.

А насчет PE могу сказать, что это только лень писать нормальные чекеры :)
НЛО прилетело и опубликовало эту надпись здесь
Сейчас везде ООП. Я его достаточно легко понял так как занялся им еще до усердной работы над олимпиадами.
НЛО прилетело и опубликовало эту надпись здесь
Конечно везде ООП. Мыслить объектами легче чем pure массивами и указателями.
Выбирайте Python/C++. Java и C# — прошлое. Очень плохие вещи, на мое мнение.

А я на олимпиадах с простых задач стебусь, пишу решение типа:
class Solution
{
public:
    Solution();
    ~Solution();
    void init();
    void solve();
    void results();
};
НЛО прилетело и опубликовало эту надпись здесь
Google Code-In 2012 — я финалист. Сейчас в Маунтин-Вью приехал повстречаться (оплатил Гугел мне поездку) с людьми из Гугела, поработать немного. Отчет на хабр пишу.

П.С. Насчет джавы и шарпа — сугубо личное мнение — ИМХО, как говорят.
НЛО прилетело и опубликовало эту надпись здесь
Могут, но я не прочь порисковать! А я бывало похожее, но уж очень не настолько категоричное, писал в постах про шарп… Карму хомячки только так сливают
НЛО прилетело и опубликовало эту надпись здесь
Нет, ну отражать свою неполноценность в минусах к карме — дело очень популярное на хабре. Вот за комментарии мои тут получил горку минусов и даже отняли кармы (моя прелесть :D). Хотя я так и не получил комменты с ярким хэйтингом.
НЛО прилетело и опубликовало эту надпись здесь
Это уже философия. Ты или общество — система права или нет. Мозги так сломать можно :D
НЛО прилетело и опубликовало эту надпись здесь
Все. Хватит, а то ребята еще hate-HATE. Прошелся по твоим комментам — помог чем смог :)
Java и C# — прошлое.

Карму хомячки только так сливают

Знаете, оскорблять сообщество — там где с вами не согласно приличная часть этого сообщества — это уже хамство.
Да никого я не оскорбляю. Разве что тех, кто без повода сливает карму. Вы вырываете из контекста слова и говорите, что я называю джава-разрабов и шарперов хомяками. Но не так ведь!

А то, что Java и C# — прошлое, мое ИМХО. Я уверен что много кто меня в этом поддержит
Как я увидел так и цитировал.

По поводу Java и C#.
Какой язык имеет достаточно серьёзный уровень реализации ООП при приемлемой скорости выполнения, который вы видите на замену этим?
Python или С++ (который, к сожалению умирает...)

П.С. Вы бы в контексте Java не говорили о перфромансе.
Python или С++ (который, к сожалению умирает...)

Python не имеет статической типизации.
С++ имеет не очень приятный синтаксис и заставляет всё время отвлекаться от бизнес-задачи на решение технических деталей.

Ни один из этих языков не совсем подходит для создание бизнес-ориентированных проектов. Тут как раз раздолье C# и Java.

Вообще, советую поучаствовать в большой командной разработке, прежде чем выносить языкам приговор.
Насколько Java и С# кросс-платформены? Java — ладно, но чего стоит эта кросс-платформенность? Перформанса. Я не видел ни одной java проги, которая не «лагает»

А насчет шарпа? Реально поднять на нем Win/Mac/Linux (Android/iOS/BlackBerry) приложение?

С++ сейчас ИМХО самый лучший вариант. Сочитание перформанса и кросс-платформенности.
Про Mono слышали? А также Monotouch, monodroid и так далее. Кроссплатформенность есть. И даже без тех страшных глюков которые принято упоминать в связи с этими словами (у mono сейчас очень мощная поддержка и развиваются они отлично).
В нашей фирме разрабатывают/поддерживают приложение на C# очень ограниченными ресурсами под следующие платформы:
— Windows
— Android
— iOS

Пока не добрались до WP, но там C# вообще нативный.
Если бы разрабатывали на C++ оно бы до сих пор света не увидело. Слишком мало разработчиков(не то что толковых, а вообще), слишком длинный цикл разработки — не подходит он для бизнеса, как я уже говорил.
Вы понимаете, что перформанс джавы при правильном ее применении очень даже высокий…
Тот, кто говорит, что Java медленная просто не умеет готовить Java-машину.

Цитата:
Я не видел ни одной java проги, которая не «лагает»
Конец цитаты

Посмотрите на программы, обрабатывающие биржевые данные, например, с NYSE. На 2010 год они справлялись с 500 000 транзакциями в секунду. Сейчас еще больше. И все это на джаве.

Я ни в коей степени не ругаю с++, наоборот, сам на нем пишу и очень доволен

И еще. Как еще гугл терпит такое вот сочИтание непонимания?
А так, Вы, конечно, молодец)
500 000 транзакций в секунду — это разве показатель эффективности?
Мне вот кажется, что <sacrasm>уж моя-то программа в секунду весь миллиард обработает</sacrasm>!

Пока нет сравнения биржевой программы на C++ и на Java, эти 500 000 транзакций в секунду — пустой звук для неспециалиста в данной области.
О чем я говорю? Наш спор выглядит так: я говорю, что шарп и джава хуже, чем С++ (фигней страдаю, короче), а вы их защищаете.

Так как джаверов больше чем С++ров, то вы получаете плюсы, а я — минусы.
Предлагаю прекратить. Все языки нужны, все языки важны. Кому-то больше по душе Java, кому-то C#, кому-то C++. Факт таков, что применяется и то, и другое.
Вообще-то Python Java/C# и C++ сравнивать нельзя. Это разные языки со своим кругом задач. С++ — это низкоуровневый язык, в то время, как Python динамический язык с более высоким уровнем абстракции, чем Java(привет капитан). Python можно сравнивать с Ruby/PHP/Perl… etc. Java и C# между собой, а С++ разве что с Objective-C и то с натяжкой.

Есть куча задач, которые решались и будут решатся Java(и да я видел программы на Java которые не лагали, тем более таких полно на C#).

Про какую мультиплатформенность идет речь? На питоне можно написать мультиплатформенное оконное приложение, которое не будет тормозить? На Java можно, даже на C# можно постаратся. Если производительность критична — берем С++ с qt, но и там не так все гладко может быть.

К тому же, не стоит забывать, что Java принесла прекрасную платформу JVM, на которой выросли отличные языки, как Scala и Clojure. У .net тоже свои фишки, но все же он больше заточен под винду, mono конечно хорошо, но пока далек от идеала.
На питоне можно написать мультиплатформенное оконное приложение, которое не будет тормозить?


Да. Вы бы не орали так на питон, не попробовал его.
Я и не ору на питон, отличный язык, но для своих целей, я вот на нем скрипты пишу, а еще он для веба годный(реддит на нем написан). Проблема некоторых программистов они считают, что их избранный язык подходит для всего — это узость мышления. Программирование это намного больше чем знание 1 языка, языки всего лишь инструменты.
Пока в MTV – поговорите там в гугле на тему ООП и языков, которые применяются в продкашене. Много интересного можно узнать и про С++, который «умирает», и про «перформанс» Java.
java и c# используются сейчас везде, это самое что есть настоящие, а pyton только для плагинов и веб-бэкэндов
А я очень хочу, чтобы Java ушла в прошлое…
За что вы с ней так? Замечательный язык, правда порой очень сильно достаёт, но всё-же хороший.
Замечательный язык

Был. 10 лет назад.
Навскидку.
1. Абсолютное отсутствие функциональной парадигмы
2. Нету pattern matching
3. Нету пользовательских value type
4. Type Erasure
5. Все коллекции mutable
6. Нету Mix-in'ов
7. Нельзя сделать класс видимым только в определённом наборе пакетов (вроде в Java 9 что-то обещали сделать)
8. С примитивами нельзя работать как с классами
9. Нету перегрузки операторов
<sarcasm>
Стало быть, 10 лет назад в Java присутствовали:
1. функциональная парадигма;
2. pattern matching;
3. пользовательские value type;
4. type inference;
5. immutable коллекции;
6. миксины;
7. можно было сделать классы, видимые в определенном наборе пакетов;
8. с примитивами можно было работать как с классами;
9. была перегрузка операторов.
</sarcasm>
Эм. С чего это Java и C# — прошлое?
C# так вообще быстро расширяющийся, красивый язык с си-подобным синтаксисом, удобен.
Не ради срача, но про то, что Джава и Шарп — прошлое, а Питон — будущее, вы зря сказанули.
Кстати, да. Нарвусь сейчас на минусы. Это было личное ИМХО
А я так и на сложных задачах писал. Между прочим, при помощи правильной перегрузки оператора new можно реализовать очистку «какбыглобальных» переменных между различными тестами, если их напихано несколько в один файл.

struct runner {
  // globals

  void run() {
    // решение
  }

  static void* operator new (/*не помню уже, что тут писать надо*/) {
    static char buffer[sizeof(runner)];
    memset(buffer, sizeof(runner), 0);
    return buffer;
  }
  static void operator delete (void*) {}
};

int main() {
  int n;
  scanf("%d%*c", &n);
  while (n-->0) {
    runner r* = new runner();
    r->run();
    delete r;
  }
}
Вот примерно с такой заготовкой я ездил на финал ICPC… Они как раз любители делать всего один мега-тест для каждой задачи.
О да, комплексные тесты это «или пан, или пропал»
Зря вы себя ломали. ООП и структурное программирование — не противоположности, а совершенно перпендикулярные вещи.

Надо было начинать с оборачивания всего алгоритма в один объект. А там через месяц само собой пришло бы желание разбить его на два…
Учите Scala, не ошибётесь
Поэтому я параллельно и занимаюсь написанием чего-нибудь для себя. Сейчас вот обдумываю идею шутера про красные и синие кружочки в мире прямоугольников.
Столько всяких фреймворков есть, напишите какую-то физическую игрушку на Box2D или какой-то платформер. Это сложнее, но гораздо интереснее!
Зря вы так. Олимпиады учат тому, что можно просто взять и написать программу. Это — такой качественный переход, внезапно произошедший со мной на третьем курсе.

Пишут в условиях гонки такой код, от которого дурно. — эти люди не слышали о coding styles…
Научиться правильно оформлять код — задача на один месяц, проверено на себе.

А насчет PE могу сказать, что это только лень писать нормальные чекеры :)
Напротив, только нормальные чекеры PE и выдают — остальные только WA и умеют. Разумеется, PE — это не лишний пробел в выходном файле. PE — это когда программа выдает «Введите число N:» первой строчкой выходного файла…
Научиться правильно оформлять код — задача на один месяц, проверено на себе.

Это очень зависит от срока прибывания на олимпиадах :). Моих знакомых выше переучивали год-полтора. Оформлять — чертовски сложно. Даже, блин перейти с «a» на «parsedSize» очень сложно. Не говоря о сложностях струкутры.

Напротив, только нормальные чекеры PE и выдают — остальные только WA и умеют. Разумеется, PE — это не лишний пробел в выходном файле. PE — это когда программа выдает «Введите число N:» первой строчкой выходного файла…

Нет, я имел ввиду другое. Я о вещах типа отсутствия \n (EOF) или два пробела. Ведущий пробел или пробел в конце строки. Паскалевские чекеры не умеют читать потоком, они читают символьно, что-ли. А С++овые, или пайтоновские замечательно читают поточно.

Тут и проблема форматирования вывода строго исчезает.
Вы сталкивались не с теми чекерами.
Паскалевская библиотека testlib прекрасно читала поточно, проглатывая где надо лишние пробелы и переводы строк. PE в понимании testlib — это ошибка чтения из потока out (ошибка чтения из inp или ans — это FAIL).
Я вот тоже школьник, правда в 8-ом классе, нахожу такие олимпиады, ИМХО, бесполезными, максимум забавными.

Сколько бы те несостоявшиеся программисты-математики говорили о важности спортивного программирования как такового, этот факт остется преувеличенным

Вы меня простите, но это просто ваша ограниченность и невежество (спишем это на ваш возраст).

Олимпиадные задачи не учат писать правильный код. Но, действительно, они учат думать. Благодаря олимпиадным задачам вы можете хорошо познакомиться с классическими алгоритмами и впитать в себя их идеи.

Многие из этих алгоритмов действительно не часто могут пригодиться на практике. Особенно если вы собираетесь всю жизнь программировать пользовательские интерфейсы и подобное. Если же вы собираетесь заниматься чем-то более серьезным, без знания классики вам будет тяжело. Сходите, например, вот сюда и решите задачи Nearby и Typeahead Search. Вполне себе олимпиадные задачи, имеющие прямое практическое приложение.

Да и дело не только в прямом практическом применении. Это спор из серии «нужна ли математика программисту». Конечно, напрямую часто она не нужна. Программисту даже родной язык в принципе не нужен, ему достаточно разговаривать на C++. Это просто вопрос общей образованности.

Никто не спорит, что на практике не менее важно уметь писать чистый, хорошо спроектированный код. Также важно разбираться в технологиях и все такое. Но, поверьте мне, всё это — ремесло, а не наука. Это приходит с опытом и дело нехитрое, если есть голова на плечах. Понимание математики и алгоритмов просто так с опытом не приходит, и упускать шанс их изучить, участвуя в олимпиадах — глупо.
Я учавствовал в Киеве, и даже занял 1-е место на уровне города (дальше не пустили по возрасту), но сейчас понимаю что ничего не решает.
С незапамятных времен на олимпиадах не запрещено соревноваться со старшими классами, к тому же, в олимпиадах по информатике это (вроде как) можно делать постфактум, ибо задания одни и те же для всех. Что же у вас не стряслось?
Давайте подумаем, чему нас учат задачки с Codeforces или TopCoder. Они «учат мыслить» и «писать правильный код» скажут нам труъ олимпиадники.
Я б с удовольствием почитал бы отзыв на подобии такого, но пока что вынужден констатировать, что вы оспариваете утверждения, которые сами же и сформулировали.

P.S. Вот чего я не могу понять, так это почему столь много людей стремятся обосновать ненужность или даже вредность олимпиад по информатике. А главное, зачем? Этим занимаются, потому что нравится, а не для легкого поступления в вуз, подготовки к собеседованию в Google или бесплатных брендированых футболок.
Там первое место дали только потому что автор семиклассник был. По девятым классом 10 абс. Но автору респект :)
Ну не знаю, не согласен со многими коментаторами, ИМХО абсолютно праивильные выводы сделал паренек. Все таки технологи и теоретики это разные направления, и очень грамотный теоретик хорошо поставить и правильно разложит задачу, но применит знакомую технологию и это вовсе не означает самое оптимальное решение.
Поэтому в многих компаниях разделяют людей на «математиков» — строят мат. модель и «технарей» — пишут грамотную реализацию. И угадайте, кто получает больше :)
А чего мне угадывать, я знаю кто сколько получает. И это зависит не от специализации, а от уровня профессионализма и отвественности. И тут нужен симбиоз а не гонка за ЗП. Делать нужно то от чего удовольствие получаешь, а не то, что якобы, оплачивается выше. Дворник в Букингемском дворце получает побольше многих программистов.
Абсолютно согласен. Тут скорее даже вопрос в уважении со стороны компании. Если я правильно понимаю, то зарплата прямолинейно зависит от того, как тебя ценит компания.
Да согласен, нужнотолько уточнить термин «уважение». В наших реалиях запросто можно вопринять как кумовщину. Я думаю больше уместен термин КПД для компании.
Даже так: «личный КПД относительно компании». В точку!
Принимал участие в олимпиадах с 9 по 11 класс, потом 4 года в университете. Сейчас работаю Java-программистом. Пригодилось умение читать задания и задавать вопросы, умение выискивать спорные места. Жалею, что не учил теорию вероятностей как следует, сейчас это бы мне пригодилось (та же теорема Байеса, которую я сейчас осилить до практического применения никак не могу).
А насколько реально такому человеку, как мне, попрактиковаться в реальной разработке?
А возьмите и напишите какой либо plugin к тому же jQuery и ведите разработку на github.
Напишите к нему тесты.
Вот вам первый шаг.

Затем возьмите framework(самый популярный) для языка, который вам больше всего нравится и сделайте с помощью стандартных элементов/пакетов блог.
Всё это реальная разработка. Вы прочитаете много интересного про то, что должно быть при регистрации, что такое ACL.
Познакомитесь с MVC.

Теперь пришло время смотреть и читать что такое SOLID, DRY и DCI. При чем читать вдумчиво.

А дальше опыт, опыт и опыт.
НЛО прилетело и опубликовало эту надпись здесь
Ну замените слово «jquery» на любой опенсорсный десктопный проект (незнаю, есть ли мобильные опенсорсы, должны быть, наверное)
Я тут привел веб-ориентированную разработку по банальной причине — быстрее сделать и есть возможность сравнить результат. Как получилось у тебя и как делают другие.

Неужели MVC, SOLID, DRY и DCI вы относите только лишь к вебу?
НЛО прилетело и опубликовало эту надпись здесь
А можно написать что-нибудь собственное?
Ну, к примеру, MP3 плеер. Покажу всем мое видение опенсорцного плеера для Linux.
Можно, но не получится.
Я в школе тоже мечтал написать свою ОС для телефонов… Застрял на менеджере памяти.
ОС ведь занятие гораздо более трудное?
У них есть одно и то же качество — их не потянуть в одиночку. Для того же плеера одна только обработка аргументов командной строки заставит опустить руки…

Разве что писать плеер, который работает как фильтр — читает stdin в формате MP3, выводит stdout в формате, пригодном для перенаправления в /dev/что-то-там. Но я не думаю, что подобная программа реально нужна кому-либо, кроме автора.
Если начнете писать плеер, вам придется окунуться в омут спецификации музыкальных форматов.
Затем в специфику работы с аудио драйверами.

Лучше сначала изучить основы разработки, а потом замахиваться нечто грандиозное.
Не надо в омут. Можно взять готовый движок, напр. gstreamer или libvlc. Останется только интерфейс хороший сделать. Можно даже на питоне, например.
Очень тяжело понять MVC на примере работы создания исключительно V.
Или того хуже, если создавать на основе MVVM, то ничего кроме обвязки движка не сделаешь, и ничего это не даст. По своему опыту говорю, т.к. делал где то в 9 классе подобное.
Для реальной разработки вступите в опен сорс проект- это самый лучший вариант из всех.
Вспомнил свои школьные годы :D
У меня больше всего было проблем с русским языком и литературой, как бы это ни было странно.

У меня тоже были двойки и тройки по русскому языку и литературе в школе, хотя экзамен по русскому в университете я сдал на отлично =)

А в общем я немного впечатлён.
обычно этот набор состоит из Pascal (сам пишу, никогда проблем не было), Delphi, C++, Java, Visual Basic, в последнее время добавляют C#
Бедный Python, зачем вы с ним так?
Простите, запямятовал, сейчас добавлю.
Python объективно подтормаживает не некоторых видах операций. И если на крупных соревнованиях проставить разные лимиты времени на разные языки — не проблема, то на начальных этапах есть риск невозможности решить задачу на этом языке из-за технических ограничений тестирующей системы.

Обычно в правилах так и пишут —
предоставление возможности писать на этих языках совершенно не означает, что жюри соревнования гарантирует возможность решить все задачи на каждом из них
Гарантированное решение есть на языках Pascal и С++. Java, Basic, C# и прочие — попадают в область «не гарантированного» решения.

Впрочем, я давно уже не школьник и в школьных соревнованиях не участвую, поправьте меня, если я ошибаюсь.
Если почитать про C# на сайте acm,timus.ru, то увидим:
Решения на C# по времени работы и по объему используемой памяти сравнимы с решениями на Java. Поэтому, почти все задачи на Timus Online Judge могут быть сданы на C# без особых проблем по сравнению с C/C++ и Pascal. Для решения следующих задач лучше не использовать Java и C#: 1220, 1275, 1306.
Вот-вот, и я про то же. Попадется такая задача на олимпиаде — что, сразу прощай первое место?
Мой друг пролетел на С# совсем не из-за этого. Как ему надо было помочь я до сих пор не знаю.
Примерно на такой же олимпиаде был в этом году (олимпиада люберецкого района, учавствуют 5- 11 классы, я из 10), занял 2е место. Что интересно: это была первая олимпиада где разрешили писать на любом из популярных языков, однако, 99% писали на паскале и бэйсике, со своим ноутом и C# чувствовал слегка неуютно.
Если говорить про приспособленность олимпиадников к реальным условиям то: да, совершенно не приспособлены, а оно надо? Задачи там скорее на построение алгоритмов, они не требуют тех знаний, которые дальше первых глав любых книг по кодингу. Если бы было приближение к реальным условиям то как на олимпиаду ушло бы много больше времени.
со своим ноутом
Нет, я подозревал, что районные олимпиады проводятся ужасно, но чтобы настолько? о_О
У них просто информатик был идейный и поставил на все компы линукс. Когда заявился я, сказав что буду писать на шарпе он назвал это дело архаизмом и сказал что я не торт.
Ну, линукс в школах уже становится нормой, такое слово даже в мин. образования выучили.
Но вот «разрешать писать на любом из популярных языков», не имея под них IDE — это они классно придумали!
Может линукс и норма (уверен что выбор пал не из за его реальных преимуществ, а в связи с бесплатностью), однако на практике ученикам, у которых на домашних машинах все та же винда весьма сложно что то в ней сделать без четкого указателя.
Под линукс можно писать на c# на mono
НЛО прилетело и опубликовало эту надпись здесь
Не повезло чуваку со школой. У нас дают слегка забить на уроки, благодаря чему удается уделять 3-4 часа на реализацию своего проекта.
> А так как в РФ с этим проблемы я планирую уехать в Канаду или США.

Про учебу в штатах ничего не могу сказать, сам учился в России, но если это не срастется, то попасть после ВУЗа на работу в штаты, занимаясь олимпиадами, очень возможно. Медалька (или прохождение на финал или даже просто красный рейтинг на TC или CF) помогают рекрутерам не выбросить ваше резюме после прочтения, а на интервью потом будут спрашивать много задачек, похожих на олимпиадные.
Сам дважды медалист ICPC, после второго финала сразу поехал в Microsoft, который меня заметил после победы на чемпионате урала (из MS я потом ушел, потому что там карьерный рост не так быстр, как хочется). За несколько лет здесь очень много общался с разными работодателями, проходил разные интервью, и могу сказать, что медальки ICPC и красный рейтинг ценятся в долине достаточно высоко. Так что не зависимо от точки зрения в споре о том, насколько полезен опыт олимпиад, сам факт участия в олимпиадах весьма ценен.
А когда эти олимпиады проходят? Тоже хочется поучавствовать
Школьный этап проводится осенью. Региональный (четвёртый) — где-то в конце января. Всероссийский — весной. Информация о последних двух появляется на сайте rosolymp.ru, о первых трёх — зависит от школы и региона. Полагаю, можно поинтересоваться у учителя информатики.
Охх… 9-й класс… Написание собственной недооси на асме, участие в олимпиадках по математике и инфе, непрестанно играющий Боб Марли… Как было здорово.
Я, кстати, постоянно заваливал региональный тур. Там всегда есть скучные задачи на парсинг, работу со строками… Некоторые дарования только и могли, что решать такие задачи, а я (наверное, это было неправильно) брался за то, что поинтересней. В итоге всегда допускал какую-то оплошность, которую находил уже после олимпиадки. В итоге на всерос ехали алёшки, у которых там случался полный фэйл.
Здорово, что пока у меня есть свободное время (ибо ещё 11-й класс не закончился), могу заниматься интересными штуками (реверсинг ^^).
а я (наверное, это было неправильно) брался за то, что поинтересней
Это в корне неправильно. На Всероссе у вас тоже был бы фейл.

А ошибки постоянно находятся через 5 минут после окончания тура, это всегда так…
На 3-м курсе участвовал в олимпиаде, дык пришли паскальники, кто-то на си, кто-то даже на пхп пробовал, в итоге я выиграл на питоне, но суть в том что не кому было конкуренцию составлять. Меня сейчас терзают сомненья, я уже год работаю разрабом, а вдруг придет какой-то студент и уделает меня? ИМХО обычные разрабы бояться олимпиадников.
А так как в РФ с этим проблемы я планирую уехать в Канаду или США.


Целепологание конечно у Вас неплохое, но мне кажется в 9 классе тяжело адекватно без идеализирования смотреть на такие вещи, США и Канада — там тоже не все просто, да теоретическая физика в этом возрасте просто термин за которым смутное понимание сферы деятельности, в процессе обучения, а уж тем более работы все на 90% окажется совсем не так как представляли.

А статью тоже почувствовал незаконченной.
Простите меня за незаконченность статьи.
Как я понимаю, физики-теоретики строят модель, а потом она проверяется уже другими физиками, ставящими эксперимент для доказательства или опровержения теории.
Да, США и Канада — штука сложная, для того чтобы поступить в ВУЗ США без материальных средств нужно сдать TOEFL как минимум на 100 баллов из 110. В SAT нужно тоже много (математика 740/800, чтение 670/770, правописание 680/780).
Я почитал отзывы самых разных людей и понял что нужно попробовать самому, одни говорят одно, другие — другое.
Вы представляете, если бы это так и было бы? :)
Да, «теоретик» может производить опыт не своими руками, но он обязан его продумать и переосмыслить результат. Иначе Вы получите человека оторваного от реальности.
призер регионального этапа всероссийской олимпиады по информатике

Я как вечный победитель области скажу тебе, к сожалению, это ничего не дает.
Кроме того, твои одноклассники замучают тебя просьбами решить тебе за них пару задачек.
Вот собираюсь поступать в ВУЗ, возьму с собой пару дипломов, посмотрим, как это повлияет на зачисление.
И да, призер != победитель, я тоже призер олимпиады СпбГу, а льгот на Информатику нет, вот я и не стал пробиваться дальше
А зачем льготы по информатике? Я в них как-то смысла не вижу, ибо они могут повлиять только на информатику, а там пока что экзамены элементарные.
Ну не скажите. ЕГЭ по информатике порой проверяют такие кадры, что у специалиста нет ни малейших шансов получить выше 90 баллов.

Реальный случай на апелляции:
После ключевого слова repeat обязательно должна идти переменная, здесь нельзя писать false!… Ну да, false — тоже выражение. Но у вас же цикл бесконечный получается тогда? Как вы его прервете-то?… А-а-а, вы break используете! Но break — это разновидность goto, его нельзя использовать в программах! Есть ведь теорема Дейкстры, что любой алгоритм может быть представлен в виде композиции последовательностей, циклов и ветвлений, а ваша программа эту теорему нарушает! И вообще, что я с вами спорю, я кандидат наук, а вы кто? Понимаете, ваше решение посчитали ошибочным 4 человека из 5, и среди них КАНДИДАТ НАУК! Все, не буду я вас слушать. Никого не интересует, что ваша программа работает, она написана неправильно, такого в школе не проходили.


Не было бы диплома с олимпиады — фиг бы я получил 100 баллов по информатике в аттестате…
Почему же ничего не дает? Мне это дало 3 разовых стипендии по 100 рублей каждая!
А еще 2 халявных компакт-дисков с играми, одну футболку и море халявных ручек!
Оу-оу, потише, а то от 300 рублей мне снесет крышу :)
А если серьезно, то олимпиады только для тебя самого, хотя диплом тоже важен, наверное. Но как бы то ни было, посмотрим.
НЛО прилетело и опубликовало эту надпись здесь
Я забьюсь в угол и впаду в истерику :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории