Найти в Дзене
Блог ЖД фотографа

Как не стать программистом за 100 тысяч рублей. Личный опыт студента Geekbrains

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

Трудоустройство гарантируем! Часика четыре в неделю! Кто вчера не мог включить компьютер - завтра будет писать программы за сотни тысяч в месяц! - говорили они.

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

Когда в 39-й раз код не запускается
Когда в 39-й раз код не запускается

С чего всё началось?

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

Выбираем профессию

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

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

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

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

Это что, маркетинговый ход, чтобы люди считали себя всемогущими и продолжали обучение, не зная, что их ждёт?

После месячного перерыва на новогодние праздники началось обучение языку java. Первый блок из восьми занятий под названием Java 1 примерно повторял введение в программирование: всё то же самое, только на синтаксисе не javascript, а java. Особых атруднений этот курс не вызвал, за исключением последней лекции, где начался графический интерфейс. Нужно было написать программу, в которой двум котам нажатием одной кнопки присваивается имя, а нажатием другой кнопки они съедают еду из тарелки. Программа была окном, где в три поля ввода нужно напечатать имена для котов, а ниже была кнопка "покормить", нажав на которую, пользователь получал сообщение о том, сколько какой кот съел еды, и какой из котов полностью сыт. Соответственно, степень голодности котов и количество еды для них были вшиты в программу.

Меня разозлило, что даже рисовать это окошко пришлось с помощью кода - графический редактор в IntelliJ Idea (это программа, в которой пишут код, далее будем называть её просто "Идея"), (кстати, простым языком код - это набор символов, написанных на языке программирования, которые компьютер особым образом считывает и понимает, как ваша программа должна работать) так вот, графический редактор в программе IntelliJ Idea отсутствует. Нарисовать кнопки с помощью кода (а это - прописать длину, ширину, положение и другие параметры) - это полбеды. Сделать это хорошо у меня так и не получилось, поэтому я просто взял готовые с чужой работы, но нужно было ещё прописать кнопкам функционал. Я кое-как настроил присвоение котам имён, но часть программы, отвечающая за опустошение тарелок и вывод сообщения о том, что котик сыт, не работала как надо. Тогда я отправил код преподавателю, чтобы он помог найти ошибку, однако в ответ посыпались наводящие вопросы. Дорогой преподаватель, я ничего не понимаю! Вообще! Просто посмотрите мой код и скажите, где я напортачил!

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

Первая четверть продолжила рассказывать об азах языка программирования Java. Первые два блока по восемь занятий поведали мне о таких вещах как введение в объектно-ориентированно программирование, многопоточность, аннотации, средства разработки. Вишенкой на торте был третий блок - разработка игры на движке LibGDX.

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

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

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

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

Вторая четверть была посвящена базам данных и созданию сетевого хранилища. Материала было много, но подан он был не в том формате, которого ожидает человек, изучающий программирование с нуля. Я понял только то, что для работы с базами данных существует несколько программ, основная из которых - mySQL, и чтобы в базе данных что-то достать, нужен SQL запрос. А эти запросы - отдельный язык программирования, с такой же беспомощной методичкой, как в курсе Java 1: выполнить по ней домашку было немыслимо, и вновь приходилось лезть в дополнительную литературу. Худо-бедно самые простые задачи я осилил, но последние три скопировал у других студентов.

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

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

1. Найти чужую проверенную преподавателем работоспособную домашку в гитхабе (специальный сайт, где программисты делятся кодом - github.com).

2. Скачать файлы, и попытаться чужую программу хотя бы запустить на своём компьютере (ctrl+c ctrl+v тут недостаточно)

3. Разобраться в коде и найти места, которые можно изменить, не нарушив работоспособность системы, внести изменения.

4. Запустить уже изменённую программу (если не запустится - искать ошибки)

5. Загрузить на github. Это вам не перетащить файлы мышкой в окошко браузера, как в яндекс.диске, этому процессу посвящена целая отдельная лекция!

6. Отправить вашу писанину преподавателю на проверку. Это вам не скопировать ссылку и скинуть её преподавателю! Для этого нужно выполнить pull request, а что это такое - я сейчас даже объяснить толком не смогу, но это нужно для того, чтобы в гитхабе разные люди могли вносить в один файл свои изменения.

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

Третья четверть была посвящена Spring Framework и разработке интернет магазина на его основе, и тут java начала пересекаться с базами данных SQL (ха-ха, работа сразу с двумя темами, в каждой из которых я соображаю примерно как ваша бабушка в Ворде). Пока я ночи напролёт тонул в коде, чтобы понять, что и где я пропустил, основной материал прошёл мимо меня - и базы данных и фреймворк Spring, а на проверку снова отправлялись слегка переделанные (а иногда и нет) чужие домашки, которые часто даже не запускались. Что я узнал? В Java есть очень крутой и полезный фреймворк Spring, которым надо пользоваться для упрощения работы. А как? А кто ж его, лешего, разберёт?

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

В итоге я не получил сертификат об окончании, так как для этого нужно было сдать итоговый проект 4 четверти, а я даже не скопировал чей-нибудь чужой код, чтобы переделать под себя.

Инструменты программиста

Учёба в онлайн-школе Geekbrains давалось мне тяжело ещё и потому, что было сложно разобраться с инструментами, которыми приходилось пользоваться.

Основной из них - ранее упомянутая мной программа IntelliJ Idea (или просто "Идея"), в которой и происходит написание кода. В ней огромное количество функций, кнопок и менюшек, подвохов, фишек, горячих клавиш и бог знает чего ещё. Я смог самостоятельно освоить 3ds max, Photoshop, Premiere Pro - программы тоже не из робкого десятка, однако, каждой из них я пользуюсь более 10 лет, постоянно узнавая что-то новое. Тут же было необходимо за пару месяцев освоить программу, в которой функционала, на мой взгляд, как в этих трёх вместе взятых.

IntelliJ Idea - рабочее окно
IntelliJ Idea - рабочее окно

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

Преподаватели показывают программу примерно так, как бывает в школе - у вас такое было? Пустая доска. Отвернулся на секунду, повернулся, а доска заполнена формулами. Кричишь: не стирайте! А половины уже нет. Конечно, можно самостоятельно изучить кучу материала по данной программе в интернете (тогда какого чёрта такой ценник за обучение?) или пересмотреть лекцию в записи, но лично у меня на это времени не было. Да и попробуй ещё в двухчасовой записи отыскать то место, в котором у тебя возник вопрос.

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

Кроме "идеи" есть ещё Github, куда надо загружать домашние работы. По нему у geekbrains есть курс видеоуроков. Но, так как github завязан с "идеей", с ним у меня тоже возникли трудности. Только в конце второй четверти я более менее понял, как он работает, до этого делал наугад по принципу "я что-то нажал и у меня заработало".

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

Все рекламные объявления кричат вам, что на обучение потребуется пара-тройка часов в неделю. В моём случае это было не так.

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

1. Вы не сделаете домашнее задание по одной лишь методичке. Кто из вас учился в ВУЗах, наверное, помнят методички, скажем, к лабораторным работам. В них по порядку и точно расписано, как что делается: читая методичку и повторяя то, что там написано, вы достигните нужного результата. В методичках geekbrains разбираются только основы, какие-то отдельные блоки, но вот в самостоятельном написании кода такая методичка бесполезна, а особенно, если вы допустили ошибку в коде. Благо, что "Идея" пишет, где и какая ошибка допущена - с указанием строки, но этого сообщения часто бывает недостаточно и его приходится вбивать в поисковик и гуглить решения, как проблему устранить, что может занять у вас всю ночь.

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

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

Рекламщики обещают трудоустройство, это правда или пустые слова?

Я не стал программистом, так как с моим уровнем знаний соваться на собеседование бессмысленно, однако в моей группе были те, кто стал - 4 человека из 20. Какие они приложили усилия, чтобы хорошо закончить обучение, и какие у них были начальные знания - остаётся за кадром.

Однако о чём рекламщики не соврали - так это о зарплатах программистов. Те, кто только обучился, имеют уровень junior, но на hh.ru я нашёл всего одну такую вакансию с указанной зарплатой 50-80 тысяч. Для того же, чтобы перейти на более высокие уровни Middle и Senior со стотысячными зарплатами, нужно получать опыт, разрабатывая приложения уже на новой работе и получая за это денежки.

-4

В чём подвох?

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

Выводы.

1. Псс, парень! У тебя есть МНОГО свободного времени? Если вы полный ноль в программировании, но хотите стать супер-программистом с зарплатой в сотни тысяч, будьте готовы к тому, что обучение съест абсолютно всё ваше свободное время. Забудьте про семью, про хобби, про уборку в квартире и про правильное питание - всё это вам будет только мешать.

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

3. В geekbrains бестолковые методички, по которым невозможно сделать задание, а также в курсе Java не рассказывают о главном инструменте - программе InteliJ Idea. Это как если бы вы учились, допустим, на автомеханика, не зная, как работать гаечным ключом.

4. Онлайн-школы врут о том, что обучение для вас будет лёгкой прогулкой - не верьте маркетологам! Вы будете думать, что к вечеру возьмёте Киев, а потом пойдёте смотреть концерт Газманова, однако ж постепенно завязнете, если не мобилизуете все свои интеллектуальные и временнЫе ресурсы - именно это произошло в моём случае.

Школе Geekbrains привет.

Спасибо всем, кто дочитал. Надеюсь, кому-то эта публикация будет полезна. Распространите её в своих соцсетях и поставьте лайк. А в комментариях делитесь своими историями обучения в онлайн-школах, а также мнением о моей ситуации. Как бы поступили вы на моём месте?

Посмотрите также пару статей по моей основной теме, вдруг понравится?