«Программирование мне нравится тем, что могу создавать и творить абсолютно другую реальность. К тому же мне нравится решать проблемы в исходнике. Словно прохождение квеста по написанию идеального кода.» (Дима, 14 лет)
Этот юный парень начал совершать свои первые шаги в программировании в 8 лет. На сегодняшний день у него уже сформировался определённый бэкграунд, который позволил ему в 13 лет написать и опубликовать в Google Play свою первую мобильную игру-головоломку CubenatiK и продолжить реализовывать личные проекты.

Однако, подводные камни в работе и обучении встречаются не редко.

  • В каком возрасте Вы пришли в сферу IT?
  • Вспомните с чего начинали?
  • Как реализовывали личные проекты?
  • К чему Вы стремились?
  • И чего достигли сегодня?
  • Какими были первые результаты и провалы?

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

Предлагаю поделиться историями личных достижений и успехов в сфере ИТ. Уверена, что многие рекомендации могут для кого-то оказаться очень полезными и своевременными.
В том числе и для нас.

Детство


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

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

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

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

В 5 лет у Димы был проявлен настойчивый интерес к настольному ПК и, следуя нашей политике воспитания, встал вопрос о том, как извлечь из компьютера максимальную пользу для ребёнка, не пичкая его одними мультиками и видео с ютуба.

Мы подобрали обучающие компьютерные игры, научили самостоятельно пользоваться устройством: показали как включать и выключать ПК, как правильно запускать игры. Теперь работа с компьютером и выполнение игровых заданий стали для ребёнка настоящим ритуалом. К слову, самой любимой игрой стала «Тим и Тома на Южном полюсе», с помощью которой он обучался математическим навыкам, правописанию.



«Тим и Тома на Южном полюсе»
Разработчик – United Soft Media.
Предметная область – филология, математика.
Предметы – русский язык, математика.
Сборник увлекательных игр поможет учащимся 2–3 классов повторить некоторые темы по русскому языку и математике.
Возраст пользователя: 6–9 лет.


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

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

Примерно через полгода, когда Диме было уже 6 лет, совершенно случайно заметили, как он выполняет игровые задания, в которых необходимо складывать и вычитать трёхзначные числа. Мы были очень удивлены, ведь он делал всё довольно быстро и без ошибок!!!

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

О школе


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

— Целеустремлённость и самостоятельность — два очень важных качества, которые мы заметили у Димы с ранних лет. Если его заинтересовать каким-то вопросом, задачей, он мог с головой погрузиться в решения до тех пор, пока не находил ответ. Поэтому, когда в 7-8 лет стали предлагать ему выполнение заданий на развитие логики и последовательного мышления, более подробно рассказывать о языках программировании, о работе компьютеров, это тоже начало со временем приносить свои плоды.

Дома я продолжал выполнять задания, которые мне подбирали родители. С 8 лет начал постепенно изучать двоичную и шестнадцатеричную системы счисления. Трудно сказать, что всё это тогда вызывало во мне какой-то живой интерес.

Впервые я серьезно отнесся к получаемым знаниям, когда удалось применить их на практике. В 9 лет начал «программировать» с роботом Lego Mindstorms NXT 2.0, делая простые программки. Тогда же я в первый раз принял участие в городском конкурсе по робототехнике и программированию, где занял третье место. Это был хороший опыт, который в дальнейшем и подогрел во мне интерес к реальному программированию.

— Впоследствии было решено начать изучение программирования на более профессиональном уровне. Следующие два года, с 10 до 12 лет, Дима посвящал свободное время знакомству с языками Ассемблер, Java, С++, С#. Во время каникул читал учебники и выполнял задания в компиляторе. А когда начинались школьные будни на практику времени совсем не оставалось. Поэтому было принято совместное решение перейти на семейное образование и сделать у ребенка изучение программирования приоритетным.

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

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

Вообще, стоит заметить, что это очень важно, когда ты сам можешь принимать какие-то решения и твоим решениям доверяют. «Ты должен изучить», — такого построения вопроса касательно программирования не было. Мне советовали, подсказывали, приводили примеры, но не настаивали. От этого я ощущал значимость своей инициативы по изучению. При этом я не считал часы и минуты до прогулки или отдыха. Та ответственность, которую я взял на себя была для меня важной и определяющей. Я читал книги, которые сам находил и применял знания на практике. Чем больше нового узнавал, тем быстрее хотелось вписать это в свою прогу.

При этом, всё вышесказанное совсем не соответствует школьной действительности и «обязаловки». Можно сидеть и три месяца читать теорию о том, как вырастить яблоню. А можно начать это делать, и когда понадобится ответ на вопрос, например: «где сажать дерево»,- найти эту информацию в источниках и сразу же применить её. В таком случае на процесс уйдёт гораздо меньше времени. При этом быстрее увидишь результат. И если даже в какой-то момент ошибёшься, то есть возможность исправить ошибку или начать всё заново.

В школах используют первый вариант. Пытаются поместить в наши головы огромное количество информации и твердят, что это всё очень необходимо в нашей жизни. Ну да, конечно! Очень важно знать, что такое абсциссы, ординаты и как называются их соотношения. Гораздо важнее знаний о том, как выстраивать дружбу, как ориентироваться на местности, как отстаивать свои права, устраиваться на работу или помогать бедным.

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


Переход на семейное образование


Я перешёл в седьмой класс и отходил примерно месяц на занятия, а в октябре уже бросил школу. Разговоры о переходе на семейное образование начались примерно с августа 2018 года и воспринялись мной с огромным энтузиазмом. Правда я больше рассчитывал, что начнётся вообще своообооодаааа от уроков!)))

Мои ожидания оправдались лишь частично. Наконец-то мне не надо было вставать рано утром, идти в школу, выслушивать требования учителей, выполнять домашние задания и получать оценки. При этом зона моей личной ответственности увеличилась. Если раньше стимулом «учить» были хорошие отметки, то теперь мне психологически пришлось перестраивать приоритеты, ценности и задачи.

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

Во-вторых, передо мной не стояло задачи «выучить» все предметы. При этом, я выделил основные, на которые сделал упор: алгебра, геометрия, русский и английский языки, информатика и физика. Все остальные уроки изучались в формате чтения, ответов на вопросы и конспектирования основной информации. В таком режиме обучение проходило гораздо проще, ведь мне не приходилось зубрить придуманную кем-то историю, писать сочинения на тему «Фольклорные элементы в поэме М. Ю. Лермонтова «Песня про купца Калашникова» и биться за четвертные оценки.

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

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


CubenatiK


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

Я пытался найти в интернете необходимую информацию. Так наткнулся на видео-уроки Гоши Дударя. Благодаря его лекциям познакомился с java, python, android studio и unity. К тому же очень пригодился его курс по созданию игр для андроида. Собственно, просматривая его уроки, я одновременно практиковался над своей первой игрушкой. И это немыслимым образом меня вдохновляло. Я видел как у меня на экране возникал новый мир!

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

Есть сцена игры, на ней поле из вертикальных блоков, куб игрока и вражеский кубик. Игральный кубик содержит скрипты, считывающие свайпы, двигающие кубик, и т.д. У кубика врага прописан только скрипт определяющий жив он или мёртв. Когда два кубика подходят друг к другу, считывается касание и проверяются цифры на верхних поверхностях. Например, враг повержен. В таком случае скрипты в карте обнаруживают, что враг исчез и делают рандомную генерацию нового уровня с запуском вражеского кубика на поле. Это краткая механика. Постепенно добавлялись усложнения, такие как таймер и различные бонусы.

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



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

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

В итоге пришлось миксовать. Я создал файл json и записывал в него текущую карту: позицию плит, кубиков, счёт игры и т.д. Если игрок выходит во время игры, то все позиции благодаря json у него сохранятся. Но для случаев, когда выход происходит в момент генерации уровней, я запустил отдельный тип сохранения — On Generation. Для него нет необходимости сохранять массив данных самой игры, а только счёт, уровень и этап генерации.



Рисовать и создавать 3D объекты приходилось с помощью Blender и Adobe Illustrator, которые в свою очередь тоже приходилось изучать в процессе работы, как и встраивание рекламы. Но, наверное я повторюсь, когда изучение каких-то вещей происходит в момент практики, работы, то можно дать стопроцентную гарантию, что эти знания превратятся в навыки и умения.

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

Я уставал. Частенько бывали периоды, когда хотелось всё бросить и отдохнуть. Работа велась нон-стоп полгода. Мы приехали семьёй в Грузию на пару месяцев, чтобы немного сменить обстановку, открыть там юридическое лицо и закончить CubenatiK. Это частично помогло мне и придало второе дыхание, к тому же всё ближе был мой декабрьский дедлайн. Отступать было некуда, да и отступать было бы тяжелее, чем закончить. Конечно приходилось искать мотивацию. Но на самом деле работы с каждым днём становилось всё меньше, да и та, что оставалась в последний месяц, не была трудной. Скорее монотонной. Но я старался относиться максимально серьёзно к поставленной цели. К тому же хотел довести CubenatiK до логического завершения. Думаю, я с этим справился.

Впереди теперь сдача аттестации за 8 класс, запуск еще одной игры в гугл-плей, в которой осталось дошлифовать визуал и управление. К тому же есть идеи двух приложений, разработкой которых тоже хочется заняться.

Скучаю ли я по школе? Нет конечно!


В завершении этой статьи хочется задать Вам следующие вопросы:

  • Поделитесь, какими были Ваши первые шаги, успехи и трудности в IT?
  • Какой совет можете дать начинающим ребятам?
  • И будем очень благодарны рекомендациям полезных статей, семинаров, онлайн-уроков, авторов и тд.