5. На абстрактных примерах и олимпиадных задачах далеко не уедешь.
Зря Вы так. Вспомните
свою тему более чем двухлетней давности. Вы там жаловались, что не можете просто так взять и написать программу и мы там соревновались, кто быстрее парсер калькулятора напишет. У меня тогда 16 минут получилось и я сказал, что это медленно, в былые годы на такие задачи уходило около 10. Так вот, эти навыки набиваются именно на олимпиадах. Любую (я подчёркиваю) любую задачу можно научиться писать относительно быстро, правильно, при этом даже не отлаживая и чтобы она сразу запускалась без единой ошибки компиляции. Это навык остается на долгие годы. Конечно, навык не супер полезный в обычной жизни, но с этими знаниями, без которых данный навык в принципе не развивается, человек даст большую фору любому другому программисту при прочих равных условиях.
Вы, наверное, имели в виду, что одних олимпиад мало. Да, мало. Нужно ещё тщательно изучать само железо через программирование на низком уровне. Нужно научиться чувствовать заранее, что будет, если написать такой-то код. Такое ощущение приходит с опытом. Но всё это познаётся (поначалу) через решение олимпиадных задач. "Тетрисы" и всё остальное потом пишется как-то само собой. Хотя к этому моменту захочется написать не тетрис, а Doom какой-нибудь. Но мне повезло больше, я эту стадию просто перепрыгнул, хотя был момент, когда могло затянуть.
Помню, смотрел вступительные задания разных фирм, где требуются программисты алгоритмического толка (не просто кодеры). Смешные задания, решаются за 5-15 минут. Зато они вгоняют в ступор любого опытного программиста, который олимпиадами вообще не занимался. Такой будет решать часа 2 в лучшем случае. Идти на работу в такие фирмы, конечно, я не собирался.
Далее, часто наблюдаю за стараниями учёных в той области, которой я занимаюсь. Картина печальная: учёный не может написать качественную программу в принципе, поэтому полученные им научные результаты (которые являются результатом анализа данных, выведенных программой) легко повторяются простенькой программой, собранной на коленках. Да и то, такая программа считает в разы быстрее и для более сложных входных данных. Связываешься с этим учёным, говоришь ему, что моя программа дескать лучше. Он восхищается "как так?". Да всё просто: олимпиадная школа. Главное, вовремя из неё уйти, чтобы успеть применить эти навыки в науке. Потом к программистской старости живость ума уменьшится и навыки сильно притупятся.
А бывает наоборот: смотришь на код учёного и думаешь "олимпиадная школа" или "хакерское детство" с чувством радости от того, что не всё потеряно изучаешь применённые в коде трюки и хитроумность каких-то конструкций. Иногда даже с пользой для себя. Порой видишь шедевры, смотришь на них как на хорошую картину на выставке ИЗО. Приятно. Приятно когда видишь чужой код и тебе не хочется его улучшить (в плане эффективности и объема, а не личного стиля).
Есть такие люди, хакеры. Не те, которые взламывают всё подряд и чрезвычайно искусны в этом, а высокие мастера программирования. Эффективные программы их исполнения заслуживают изучения. Их знания и навыки уникальны. Как стать таким? Одну ссылку уже дали, но за красивой романтикой, описанной там, скрывается изнурительная работа над совершенствованием своих навыков. И мне кажется в наше время проще всего пройти этот путь через олимпиады по программированию, через соревнования с другими. Когда учишься сам по себе, не с чем сравнить. Нужна планка, задаваемая другими людьми, через которую нужно прыгать. Когда ставишь планку сам, есть риск остаться никем. Хотя, бывают исключения, но будет ошибкой считать исключением именно себя.
Честно говоря, не ожидала, что моя тема вызовет столь бурный резонанс.
Это потому, что все проходили разные школы и каждому кажется, что его школа была не бесполезной. И у каждого на самом деле есть тысяча субъективных доказательство этому из личной жизни. Я свои постарался расписать тоже с подтекстом "очень субъективно". А то ведь кодеры и чистые теоретики (которые не умеют программировать, но любят изучать сложность алгоритмов) начнут обижаться.