Общие вопросы (FAQ) по курсу
Что это за курс?
Это заочный курс по алгоритмическому программированию (фактически, по олимпиадным задачам). В первую очередь, он ориентирован на школьников Нижегородской области, у которых в школе нет занятий по алгоритмическому программированию, или которых чем-то не устраивают такие занятия в их школе. Но при этом, если в этом курсе захотят участвовать школьники не из Нижегородской области, я ничего против иметь не буду.
Он давно существует?
Я начал вести такой курс год назад (в сентябре 2014 года). Сначала он задумывался как полностью заочный кружок, потом меня пригласили вести занятия в ННГУ им. Лобачевского. Поэтому курс теперь имеет двоякий вид: и как заочный курс, и как занятия в ННГУ. (Очные занятия со школьниками я еще веду не первый год в лицее 40, раньше еще вел в лицее 8.)
А что за занятия в ННГУ?
По этому же материалу я веду и занятия по воскресеньям в ННГУ им. Лобачевского. Фактически, этот курс — очно-заочный в том смысле, что он очный для тех, кто может ходить на занятия в ННГУ, и заочный для всех остальных. Если вы можете ходить на занятия, то просто приходите; если нет — то следуйте "Инструкции для тех, кто здесь в первый раз" (ссылка на главной странице курса). Правда, не помешает ей следовать и даже если вы будете ходить по воскресеньям.
Чему тут учат?
Основное направление — это алгоритмическое программирование. Начиная с основ программирования, и далее в алгоритмы и структуры данных. Это то, что по-английски называется Computer Science. С существенным уклоном в сторону олимпиадного программирования (в первую очередь по линии Всероссийской олимпиады школьников), тем более что задачи на олимпиадах — это как раз задачи на алгоритмы и структуры данных.
Чему тут НЕ учат?
Мы не будем специально заниматься "техническими" вопросами:
- Созданием пользовательских интерфейсов, кнопочек, окошек и т.д.
- Программированием под конкретные платформы: созданием web-приложений, программированием под Android, iOS и т.п.
Мы будем изучать алгоритмы, которые лежат в основе многих таких программ (мы не будем обсуждать, как сделать кнопку "сортировать по алфавиту", но будем обсуждать, как реализовать сортировку, когда список объектов для сортировки уже есть).
Кроме того, мы не будем специально готовиться к ЕГЭ или поступлению в вузы. Тем не менее, задачи части C ЕГЭ по информатике — это фактически довольно простые олимпиадные задачи, поэтому если вы хорошо решаете олимпиадные задачи, то проблем с ЕГЭ у вас быть не должно.
Вы действительно будете учить?
И да, и нет. Формат заочного курса подразумевает, что существенную часть материала вы будете изучать сами. Я буду скорее направлять вас, советуя, где можно посмотреть тот или иной вопрос, на каких задачах отладить навыки, а также буду довольно активно комментировать ваши программы. Кроме того, вы всегда можете со мной связаться (контакты на главной странице курса) и задать любой вопрос.
Какой язык программирования?
Сложный вопрос, точнее вопрос с длинным ответом.
Во-первых, если вы — начинающий школьник из Нижегородской области, то я рекомендую использовать Pascal (Free Pascal). Теоретические материалы для начинающих я буду подбирать именно по Pascal.
Еще один вариант для нижегородцев — это C++, но я настоятельно не рекомендую его выбирать, если вы только начинаете учиться программировать. Если же вы где-то уже научились неплохо писать на C++ (контрольный вопрос: какой тип данных вы используете для работы со строками и насколько это для вас сложно), то можете писать на C++.
К сожалению, на нижегородских олимпиадах других языков не бывает. Поэтому если — вы школьник из Нижегородской области, то других вариантов у вас, по сути, нет.
Тем не менее, если вы — не школьник из Нижегородской области, или не собираетесь участвовать в олимпиадах, или по каким-либо еще причинам варианты выше вас не устраивают, то (см. еще и следующий вопрос) можете выбрать любой язык, который поддерживается этим сайтом (только еще раз хорошо взвесьте все плюсы и минусы). Помимо Pascal и C++ я также могу рекомендовать Python, он весьма хорош для начинающих. Можете выбрать и другие языки, но я их хуже знаю и потому не смогу вам давать подробные советы.
Если у вас возникают вопросы, то свяжитесь со мной.
Что от меня требуется для занятий?
От вас требуется, в первую очередь, желание заниматься. Я не ваш школьный учитель, не ваш родитель, я не могу чего-то требовать от вас; ваше присутствие здесь — дело добровольное. Я не буду вас торопить, или ругать вас, если вы ничего не делаете неделями. Но при этом понимайте, что каких-либо результатов можно добиться только регулярными занятиями; если вы хотите конкретных цифр по тому, сколько времени надо выделить, то я бы считал, что как минимум два раза в неделю часа по 2-3 выделить надо, а лучше больше. (Для школьников, которые ходят ко мне на очные занятия, я рекомендую, в добавок в 2-3 часовому очному занятию, еше примерно столько же заниматься дома.) Но следите за этим сами, я не буду стоять у вас над душой. (Родителям и учителям: если вы хотите контролировать успехи ваших детей, см. отдельный документ по ссылке с главной страницы курса, и/или напишите мне.)
Тот же принцип с моей стороны относится и к остальным вопросам: я лишь советую вам что-то, но не могу требовать. Если вы хотите выбрать определенный язык программирования вопреки моим рекомендациям — ну хорошо; и т.п.
Но при этом учтите, что не только ваше участие здесь — дело добровольное, но и моя вам помощь — это тоже дело добровольное. Естественно, я с большей радостью буду помогать школьнику, который активно занимается, чем школьнику, который что-то пытается делать раз в месяц, и т.п.
А какие изначальные знания требуются? И каких классов могут быть школьники?
По программированию — от никаких и выше. Вообще, заочный формат позволяет реализовать почти индивидуальное обучение (т.е. я готов каждому школьнику выдавать личные задания), поэтому я готов принимать школьников, начиная от тех, кто ничего не умеет, и до школьников существенно более высокого уровня.
Важными являются предварительные знания по математике. Опыт показывает, что чем сильнее математическая подготовка у школьника, тем он лучше занимается программированием. Поэтому если вы участвуете (пусть и на невысоком уровне) в математических олимпиадах — это вам плюс.
Я ожидаю здесь видеть школьников от 7 и до 11 класса. Если школьник сильный (участвует в олимпиадах или конкурсах по математике, или как минимум весьма хорошо знает школьную программу), то можно и 5-6 классы. Для сильных школьников, чем раньше начать заниматься программированием, тем лучше.
Что надо сделать, чтобы начать заниматься?
Прочитайте документ "Инструкция для тех, кто здесь в первый раз" (ссылка на главной странице курса) и сделайте то, что там написано.
Когда можно начать заниматься? Когда "следующий набор"?
К курсу можно присоединится в любое время. Все равно занимающиеся школьники имеют довольно разный уровень подготовки, поэтому никакой единой программы типа "на этой неделе проходим то-то, на следующей то-то, а если вы пропустили или слишком поздно узнали о курсе, то ждите следующей группы или следующего года" нет.
Единственное — во время праздников или летом у меня может быть ограничен доступ к интернету, поэтому я могу не так быстро отвечать на ваши письма, смотреть ваши решения и т.д.
То же относится и к очным занятиям, можно присоединиться в любое воскресенье. Только проверьте, нет ли на главной странице курса объявления об отмене очередного занятия (например, из-за праздников); кроме того, летом занятий нет. На всякий случай можете мне заранее написать и уточнить, когда проходят занятия.
— И как думаешь, Василич? Будет от этой работы толк?
— А вот поработаешь, Петр Николаич, увидишь!
(Лев Успенский. Сопка «Камянистка», или торжество науки.)
Конечно, я не гарантирую, что стоит начать заниматься, и вы сразу достигнете высоких результатов. Это зависит от многого, в том числе то того, что за пределами моего влияния — в первую очередь, математического образования, общей математической культуры, да и одаренности школьника; а также от трудолюбия и желания заниматься. Но думаю, что для большинства школьников, имеющих нужный склад мышления, эти занятия будут полезны.
А кто вообще вы такой?
Я — Петр Андреевич Калинин, к.ф.-м.н., старший разработчик компании Яндекс, выпускник ВШОПФ ННГУ. Я в свое время активно участвовал в различных олимпиадах: бронзовый призер международной олимпиады школьников по информатике (IOI) 2001 года, золотой призер IOI 2002 года; в составе команды ННГУ дважды участник финала чемпионата мира по командному программированию ACM (ACM ICPC). Я много лет езжу преподавателем в Летнюю компьютерную школу, крупнейшую российскую летнюю школу по алгоритмическому программированию; я постоянный член жюри Нижегородской городской олимпиады школьников по программированию. Я ученик В.Д. Лелюха.
Вы всегда можете связаться со мной, контактные данные указаные на главной странице курса.