Одиссея Кода
17 subscribers
1 photo
История о моём путешествии за богаствами ИТ мира.
Download Telegram
Channel created
Channel photo updated
Сегодня можно считать началом моего путешествия в дальние земли ИТ-индустрии.

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

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

С чем я отправляюсь в путь:

- В 2006 году получил высшее образование по ИТ-направлению с непонятной формулировкой «Прикладная информатика».

- Работал системным администратором последние 20 лет в разных городах. Последние 5 лет работаю удалённо.

- Самостоятельно начал изучать веб-программирование еще в те времена, когда верстка была на таблицах. Заработал свои первые деньги программированием, написав для хозяина квартиры, которую арендовал, сайт-визитку на чистом CSS и HTML без какого-либо JS.

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

- Прошёл курсы от HTML Academy по специальности React-разработчик.

- Много раз пытался пройти курс от RS School, но так и не смог...

-Самостоятельно изучал Python, GoLang, PHP на разных платформах.

Я долго искал, чем же я хочу заниматься в ИТ, и, кажется, нашёл.
Это будет сложно. Это будет очень сложно!
Но, несмотря на сложность моей новой мечты, я хочу стать системным архитектором и проектировать огромные информационные системы.

«Первый шаг на вершину небольшого холма и вершину Фудзи выглядит одинаково, отличает их лишь сила намерения».
🔥41
Сегодня ночью мне снились какие-то кошмары про дедлайны. Они, как чайки, кружили надо мной с пронзительным криком: «ИИ-ИИ-ИИ!». Но я не поддаюсь на такие провокации.

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

Сегодня сделал половину первого вводного модуля на Strada. Пока что ничего сложного, но это ведь только первый день. Да и у меня за плечами уже две прочитанные книги по Go и пройденный курс на Stepik.

И при всём при этом я всё равно волнуюсь, потому что знаю, какие монстры ждут впереди. Каково же тогда людям, которые вообще никогда не писали hello world в консоли?
🔥31
Сегодня закончил с вводной теоретической частью и дошёл до первого большого задания.
Надо будет реализовать TODO-лист 🙄
Ну надо — так надо, ведь всё, чего «не хватает» этому миру, — это еще один TODO-лист.

Работа над этим проектом, по оценке курса, займет где-то 6-8 часов. Я сейчас, когда делаю задания, включаю таймер на компьютере, так что потом напишу, сколько у меня ушло на него. А вообще, работа с таймером — это отличная привычка, которую я, к сожалению, внедрил слишком поздно.
Она помогает не просто отслеживать, сколько ты потратил времени на задачу, чтобы понять свою эффективность, она спасает от залипания перед экраном на часы, которые вкладывают фундамент к выгоранию и межпозвоночной грыже.
После 30 лет читы молодости на бесконечное здоровье заканчиваются, нужно приспосабливаться.

Сегодня также был на первом созвоне. Разбирали чужие задания, так как я пока еще ничего не сделал из того, что можно было бы разбирать. Но мне очень понравилось: подробно разбирается код, можно спрашивать советы и какие-то рекомендации.
🔥4👍1
Сегодня закончил 2 из 3 частей финального задания первого модуля. Потратил на это примерно 5 часов, так что оценка времени была плюс-минус правильной. А я, как всегда, слишком переоценил свои силы, так как думал, что всё это сделаю за 2-3 часа.

Много времени тратится на обработку ошибок. Нужно учесть все случаи, которые приведут к поломке программы. А каждый такой случай — это десятки строк кода. Тут 20 минут, там еще минут 25, не успеешь опомниться, как пройдет несколько часов, а список ошибок дополняется и дополняется.

Сегодня написал мне парень, который был на созвоне вчера. Предложил стать study-buddy.Если кто не в курсе, это когда ты учишься с кем-то в паре. Я всегда хотел попробовать такое, но как-то никогда никто не соглашался. А тут мне самому предложили.
Это было неожиданно. 😊
Но сначала мне надо будет догнать его, а он уже в середине 3-го модуля.
🔥5
Фух, еще каких-то 3 часа — и закончил остальные задачи.

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

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

Я, конечно, пытаюсь основное время учёбе уделять с утра, но этого сильно не хватает. Я привык учиться по часов 5–6, но у меня есть только 2, а остальное время — это урывками между рабочими делами.
В понедельник я уже перешёл учиться на второй модуль, и там, как я и ожидал, начались проблемы. Причём не со сложностью задач, а скорее с тем, как подаётся материал.
Авторы пытаются сохранять тот же приветливый и дружелюбный тон повествования, но когда это были задачи уровня: «а вот переменная, а вот мы в неё положили данные», это классно. А когда тебе рассказывают про ссылки на объекты данных в памяти и то, как работать с методами, используя эти ссылки, то фразы типа «это пока сделаем так, а тут додумайте сами, а это сами решите, как реализовать» уже вызывают небольшое неприятное напряжение в ожидании: а что будет дальше?
Приходится идти читать документацию или просить ИИ протестировать меня, правильно ли я понял тему. Ибо уверенности в полученных знаниях нет вообще. А авторы курса заявляли, что все знания уже собраны тут.

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

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

Я, конечно, пока еще совсем новичок, так что следую принципу: сначала надо написать код так, чтобы он работал, потом уже заниматься рефакторингом. Если пытаться сразу написать всё идеально, то процесс может растянуться на годы, а у меня нет столько времени 😁

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

Программный код, написанный мастером своего дела, тоже красивый, но чтобы понять его, нужно знать этот «иностранный» язык. У него есть своя грамматика, лексика и красивые конструкции, которые нельзя оценить только глазами. Их так же, как и любое искусство, нужно научиться чувствовать сердцем и понимать умом.
🔥3👍2
Вчера дописал 14-ю задачу из двадцати 2-го модуля, надеюсь, её сегодня разберут на созвоне.
С удивлением вчера обнаружил, что пошла только 3-я неделя, как я на курсе, а такое ощущение, что прошло уже пара месяцев. Кажется, силы заканчиваются быстрее, чем я рассчитывал, надо бы немного сбросить темп, но так не хочется.
Знания по предмету пока что не очень, хочется пойти почитать больше теории, чтобы понимать материал глубже. Останавливает только то, что у меня совершенно на это нет времени.

Я сейчас на работе снова оказался по другую сторону поиска работы. Нам надо найти сисадмина в компанию, поэтому надо проводить технические собеседования для кандидатов. Я составил список из очень простых 10 вопросов для первичного собеседования с HR и еще 10 практических задач для техсобеседования.

В первые пару дней поиска HR пишет, что откликов очень много, больше 300 человек в первый день, и продолжают расти. Отлично, значит, скоро уже закроем эту вакансию!
Но реальность оказалась совершенно другой: за 2 месяца я провёл только одно собеседование. И то кандидат с треском провалился.

Что же не так?
Кандидаты не берут трубку, когда им звонит HR, чтобы назначить собеседование, другим назначают встречу, а они не приходят и не берут трубку потом. Те, которые приходят, не могут ответить на те 10 вопросов, которые я составил для проверки базовых знаний.
Один кандидат отвечал на них больше 2 часов, а потом просто встал и ушёл.

Я это к чему всё пишу?
Когда буду искать работу, надо понимать, что те цифры, которые показывает сайт поиска работы, — почти полная чушь.
Половина кандидатов просто не придут на собеседование, еще 40 процентов окажутся профнепригодны, еще несколько просто передумают в процессе самого собеседования. И останется всего 2-3 человека, между которыми и будет конкуренция за вакансию.
🔥2🤯2😁1
Скажите, у вас бывает так, что вы покупаете книги или скачиваете их из интернета, складываете на красивую полочку и потом никогда не читаете? (уверен, что да)
Вот у меня так же было с книгой Р. Мартина — «Чистая Архитектура».
Купил её ещё лет 6 назад, мне её посоветовали со словами: «Мастхэв для любого разработчика!».
Я прочитал где-то первые страниц 50, ничего не понял, и с тех пор она создаёт видимость моего могучего интеллекта на полке.
На этих выходных я закончил второй модуль по курсу и решил: прежде чем бежать сразу на третий, начать читать книгу.

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

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

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

Говоря языком программного продукта:
Архитектура — это высокоуровневая абстракция: монолит или микросервисы, протоколы взаимодействий, паттерны безопасности.
Дизайн — это низкоуровневая абстракция: названия классов и методов, алгоритмы, структуры данных, обработка ошибок.

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

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

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

Вообще все эти проблемы с кодом и сложностью понимания задач полностью уходят на второй план, когда понимаешь, что твои усилия были замечены и получили позитивную оценку.
В отличие от «дешевого дофамина», который вызывает только усталость и состояние отупления, я начал снова ощущать уверенность в своих силах, стал нормально высыпаться и каждое утро получаю огромный приток концентрации.
Тяга позависать в соцсетях или компьютерных играх тоже сильно сократилась.
🔥63
На прошлой неделе сделал первые задачи по 3-му модулю, но не удержался и пошёл смотреть лекции на YouTube по горутинам.
Оказалось, что до этого я совершенно неправильно их понимал.
С одной стороны, новое знание немного облегчило муки от пробелов в понимании "что тут происходит", но, как водится, появилось осознание, что эту тему я буду учить еще дольше, чем планировал изначально.

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

А ещё сегодня я впервые решился оставить кому-то комментарии в пул-реквесте. Мне довольно тяжело психологически указывать на чужие ошибки в коде. У меня уже был опыт на одном из курсов, когда это вызвало большой скандал. Я, конечно, был прав, но нервы мне тогда изрядно потрепали.
Но чтение и понимание чужого кода — очень важный навык. Учитывая, как часто сейчас применяют ИИ, возможно, это чуть ли не ключевой навык в современном программировании. Мы теперь живем в таком мире, когда люди будут не просто программистами, а чем-то вроде кризис-менеджера по коду проекта.
🔥11👍4😍3
Сегодня мне пришло уведомление от банка об очередном списании за курс. Оказывается, прошёл уже месяц, а я даже и не заметил. Буду подводить каждый месяц небольшие итоги, чтобы лучше представлять прогресс и скорость, с которой я двигаюсь.

Итак, что же было за этот месяц:

1) Программа обучения:

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

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

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

2) Сколько времени ушло на учёбу:

- Первый модуль я закрыл довольно быстро — за 5 дней, так как уже имел опыт в программировании, в том числе и на Go.

- На второй модуль я потратил 15 дней.

- Третий пока в процессе — сегодня 9-й день, как я к нему приступил.

3) Ощущения от курса:

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

- За месяц стало понятно, что общения в Telegram-чатах курса практически нет. Но если самому проявлять активность, то людей можно раскачать на какую-нибудь движуху.

- Я познакомился с несколькими ребятами с курса, которые тоже очень много занимаются. Это сильно мотивирует не отставать.

4) Что с прогрессом:

- Я каждый день делаю что-то связанное с кодом. Даже когда нет времени или сил, я просто смотрю чужие репозитории, ролики на YouTube, читаю книги.

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

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

Это был отличный месяц! 👍🏻
🔥7
Иногда, при чтении блогов подобных этому, может сложиться впечатление, что автор просто «гений», у него всё получается легко и практически без усилий. Но на самом деле у меня, как и у всех, количество неудач заметно превышает число побед.

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

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

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

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

В целом программа вышла хорошая, лично я ей очень доволен. Но, конечно, она далека от идеала. Однако своих детей любят, даже если они немного кривые и косые 😀

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

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

Можно написать плохой код, который будет работать.
Можно прожить жизнь полную поступков, которые не будут работать.

Программирование может подсветить, указать нам на наши глубинные проблемы, встречи с которыми мы стараемся избегать.
🔥5💯2
Сегодня был очередной созвон, где мы не разбирали код, а просто делились своими успехами и неудачами. Мне рассказать было особо нечего: я как дописал свой прошлый проект, практически ничего не делал. Лёгкая простуда переросла во вполне себе полноценную болезнь. Так что я решил сделать небольшой перерыв на 3–4 дня, пока не стану чувствовать себя лучше.

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

«Пока ты отдыхаешь, другие люди уходят вперёд. Отдохнёшь, когда достигнешь определённого этапа по плану».

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

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

Так что я не чувствую никакой вины или грусти по потерянным 4 дням.
Я ничего не потерял и ни от кого не отстал.
Я не персонаж книги, я обычный человек, который идёт к своей цели.
🔥6👏4