Обложка: Как программировать с детства и создавать большие проекты уже в школе? Юный программист ответил на вопросы из комментариев

Как программировать с детства и создавать большие проекты уже в школе? Юный программист ответил на вопросы из комментариев

Недавно мы предложили вам задать свои вопросы Адаму Арутюнову — молодому разработчику, который с 6 лет стал изучать азы программирования и создавать свои первые флеш-игры; в 15 лет поступил в Яндекс.Лицей, где выучил Python с нуля, а также начал решать прикладные задачи и разрабатывать первые рабочие проекты в рамках учебной программы.

Адам ответил на все вопросы читателей Tproger.

Про обучение в школе и в Яндекс.Лицее

Аня Чуватова:

Как обстояли дела с информатикой в школе? У нас с этим было очень грустно, уроки выглядели как переписывание программы с бумажки в комп. На Паскале, конечно. Учителя как-то поддерживали вашу деятельность?

Я закончил информационно-математический лицей №56 в Ростове-на-Дону. По программе, кажется, дают «КуМир» с четвёртого класса, Паскаль — с восьмого. В девятом классе немного работали с базами данных, через полгода это даже пригодилось мне в промышленной разработке.

На уроках у меня была возможность развивать те навыки, которые считал нужными. Когда изучал Haskell — решал на нём алгоритмические задачи. Когда чувствовал, что надо отработать какие-то экзаменационные задания — тратил время на них. Нужно было запилить фичу в API на удалённом сервере — подключался по SSH и работал. Учителя информатики не заставляли меня идти строго по программе, и я сам мог решать, на что тратить время.

Денис Якимчук:

Как построено обучение в Яндекс.Лицее? Сколько часов в неделю уходит на обучение? Получается ли совмещать с учебой в школе и другими занятиями? Много ли реально практических задач?

Яндекс.Лицей — бесплатная двухгодичная программа для школьников, где учат программированию на Python. Первый год — изучение языка с нуля до хорошего уровня, второй — получение навыков промышленного программирования. Второй курс поделён на три части — оконные приложения на PyQt, игры на Pygame и веб на Flask и SQLAlchemy. В конце каждой части нужно сделать и защитить проект.

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

Задач очень много — за два года решается порядка 600. А распределение времени — это всегда вопрос приоритетов. В тот момент учёба в Яндекс.Лицее была самой важной задачей. В Яндекс.Лицей отбирают только тех, кто хочет развиваться в IT и готов к постоянной прокачке навыков.

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

Дойти до конца непросто — нужно проявить упорство. В моей группе из всех зачисленных выпустилась треть — и они уже программируют на уровне джуниор-разработчиков.

Дастан Мукажан:

С какого и до какого класса можно там учиться? Можно ли учиться там гражданам других стран?

Сам Яндекс.Лицей рекомендует приходить к ним в восьмом или девятом классе, потому что если прийти в десятом, то нагрузка на втором курсе накладывается на подготовку к экзаменам. А тем, кто помладше, возможно, будет сложнее усваивать программу.

Но в первую очередь смотрят на знания и мотивацию. Насколько я знаю, на первом курсе учится немало семиклассников и даже шестиклассники. Это круто.

Сейчас по программам Яндекс.Лицея учатся в России и Казахстане. Если гражданин другой страны захочет поступить в Яндекс.Лицей, лучше узнать все правила поступления у конкретной площадки.

Аня Чуватова:

Что помогало не бросить? Просто интерес был, какая-то цель или, может, компания, которая тоже занималась программированием?

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

В декабре 2020 года получилось так, что я закрыл сразу четыре достаточно тяжёлых проекта, и в конце месяца подумал: «Всё, теперь месяц не буду программировать». Я продержался шесть дней. Третьего января я подумал: «А почему бы и не пройти этот курс по Haskell?».

Kat Nick:

Остаётся ли время на другую жизнь? Спорт, хобби, просто погулять с друзьями?

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

Когда я говорю, что сделаю что-то за неделю, это значит, что я буду работать с понедельника по пятницу, или субботу, часа по три в день с учётом того, что иногда приходится вставать и, чтобы восстановить концентрацию, наворачивать пару кругов по библиотеке, куда я обычно прихожу с ноутбуком.

А ещё я веду два канала в Телеграме.

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

Второй — «Сны». Я полтора года записывал все сны в заметки на телефоне, их накопилось ровно сто семьдесят один. А полгода назад я понял, что можно самые интересные из них подробно переписывать в виде постов. Новые сны тоже пишу туда.

Подписывайтесь!

Про проекты

Ivan Ivan:

Над какими проектами работаешь сейчас?

На сайте я рассказал про несколько проектов, например, эти я сделал в Яндекс.Лицее:

  • QLAdmin — админка для управления базами данных SQLite с низким порогом входа;
  • Untitled — классическая RPG с атрибутами, характеристиками, заклинаниями, эффектами и боссами;
  • Pycon — платформа для решения алгоритмических задач на Python. Интегрируется в университеты, позволяет проверять навыки программирования с помощью работ и контестов.

С последним проектом произошла интересная история — после защиты преподаватель предложил проверить его на настоящих студентах, и в июне 2020 года прошло первое небольшое (но настоящее) альфа-тестирование Pycon, летом я его дорабатывал, а в ноябре началось двухмесячное бета-тестирование. Это даёт огромный опыт, потому что когда твоим проектом пользуются 500 человек и отправляют десятки решений в минуту — это просто очень приятно, а ещё учит ответственности и заставляет думать наперёд.

После тестирования я отправил проект на конкурс от министерства цифрового развития, информационных технологий и связи Ростовской области, где Pycon получил третье место и статус лучшего IT-проекта области – 2020.

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

Конечно, совсем без программирования не получается — там нужно написать микросервис, здесь с командой решили запилить прикольную штуку на хакатоне, и экзамен по информатике, в конце концов, тоже требует подготовки.

Semyon Chaykin:

Как к тебе приходят идеи проектов?

Это хороший вопрос, потому что идеи-то обычно приходят в мгновение, а остальное время уходит на оценку и сравнение их с другими идеями.

Когда я учился в Яндекс.Лицее, чаще приходилось отталкиваться от стека и технологий. Сначала нужно было делать оконное приложение, потом игру, а в конце — веб с API. Я часто брал наиболее общую идею — если нужно сделать приложение с базой данных, можно же сделать админку для базы данных!

А когда я решил создать проект для школы на конкурс, то сделал очень простую вещь — просто пошёл к преподавателям и стал спрашивать: «Какие процессы в школе сейчас можно автоматизировать?». В итоге с учителем математики мы придумали Чеккер — платформу для проверки знаний с помощью тестов.

Про изучение программирования

Сергей:

Как выглядит изучение программирования в 6 лет? Можете ли посоветовать курсы, книги, обучающие видео для детей?

Первым моим языком был ActionScript 2.0. Это скриптовый язык для Flash-приложений, который воспроизводил Flash Player. У меня была отличная книга Дмитрия Гурского «ActionScript 2.0: программирование во Flash MX 2004». В тот момент она была для меня своего рода Библией — можно было найти ответ на любой вопрос по программированию на ActionScript. У меня всегда был интернет, но часто книга была удобнее.

Конечно, я не мог понять всех процессов, которые происходят в коде. Я не знал, почему после function сначала ставят круглые скобки, а потом фигурные, и писать надо в фигурных, и почему в гайдах после круглых иногда пишут Void. Но это не главное — ведь я умел этим пользоваться. Я мог сделать на флеше всё, что захочу. Я не знал объектно-ориентированного программирования, но сама структура флеша, в которой объекты можно создавать на холсте от руки, восполняла этот пробел.

Сейчас, конечно, можно уже не бросать ребёнка посреди реки, чтобы он научился плавать, а начать хотя бы с бассейна. Но я рад, что когда-то попал в такие условия — потому что я сразу начал программировать по-настоящему. На языке, который создан не для обучения, с книгой, на обложке которой написано «ДЛЯ ПРОФЕССИОНАЛОВ». Поэтому я бы посоветовал не играть в No-Code и не перетаскивать плашки в «Скретче», а попробовать дать что-то несложное, можно даже неактуальное — какой-нибудь Бейсик. Или даже «КуМир».

Дмитрий Буйлин:

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

Раньше я делал проекты исходя из того, что я знаю, а теперь я учусь, исходя из того, что надо сделать. Для этого я искусственно усложняю себе задачу. Например, я решил поднять свой сайт не на Python, а на Node.js. Когда нужно написать бэкенд, заставляю себя прикручивать не ту базу, которой я пользуюсь всегда, а пробую другую. Чтобы решить искусственно усложнённую задачу, надо прочитать несколько статей и потратить время на практику. Я думаю, это хороший способ.

Sobakons:

Я в процессе познания C++, Python и C#. Сейчас начинаю изучать HTML и CSS. Очень хочется больше практики, ибо вдохновения хоть отбавляй. Пыталась куда-нибудь впихнуться на стажировку (мне не нужны деньги, я просто хочу заниматься чем-то по-настоящему интересным для меня), но результат наверняка вам понятен :/ Как же быть?

Мне кажется, ответ лежит на поверхности — если вдохновения много, это значит, что можно брать свои идеи и реализовывать из них проекты. Это классно, потому что:

  • это прокачка навыков проектирования и разработки;
  • это даст хороший опыт работы с людьми, если проект получится кому-то продать (в широком смысле) или договориться о тестировании. Если работать над продуктом вместе с командой, это помогает учиться убеждать, формулировать свою точку зрения и договариваться;
  • всегда можно завалить проект: понять в середине, что это не то, что нужно, или что знаний и навыков недостаточно. И никто не поругает.

RAGE :D:

Мне 15 лет. Я прохожу курсы, при помощи которых начал учить С++. Сейчас могу работать со стандартными понятиями ЯП (типы данных, циклы, функции, сохранение и чтение данных из файлов и так далее). Хочу после окончания школы поступить в ВУЗ по специальности «программист». Стоит ли, и если нет, то как быть?

Я думаю, что сейчас есть смысл не думать об этом.

Три года — это очень много. В 15 лет я только поступал в Яндекс.Лицей. Прямо сейчас я бы порекомендовал просто продолжать учиться. Никто не знает, что будет через три года, захотите ли вы получать образование в классической форме или к тому моменту уже будет множество альтернатив; не захотите ли вы сразу работать вместо учёбы.

Чем больше вы успеете узнать и сделать к концу школы — тем шире у вас будет выбор. И тем сложнее будет определиться :—).

Про планы на будущее

Кирилл Минин:

Планируете ли вы получать высшее образование? Или, учитывая опыт и знания, не видите в этом смысла?

Это очень-очень-очень нетривиальный вопрос. Настолько, что я не знаю на него ответ.

С одной стороны, скорее всего, если потратить пять лет на практику, это даёт преимущество перед теми, кто только что окончил вуз. С другой стороны, здесь нужно быть предельно аккуратным и продумать всё до мелочей: рассчитать финансы и учесть негативные последствия. Переоценить себя очень просто.

Многое зависит и от вуза. Крутые университеты дают хорошие знания и выделяют время для практики. Можно рассмотреть и альтернативные варианты: учиться не в вузе, а где-то ещё. Или потратить время на самообразование. Я до сих пор в суперпозиции — но никто не мешает в любой момент передумать.

Пишите советы в комментариях.

Ivan Ivan:

Какие вообще планы? Развитие своих проектов, работа в крупной компании? Если это не секрет, конечно.

Все основные планы перечислены в вопросе :—).

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

Универсальный совет школьникам: хотите учиться — учитесь, хотите работать — работайте. Есть время, чтобы попробовать всё, и очень много прав на ошибку. Удачи!