10 заметок с тегом

обучение

О карантине и обучении

Всем привет!

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

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

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

Golang

Короче, я стал учить Golang)

Это уже не первый мой подход к этому языку. У меня были попытки его освоить и ранее, но после Ruby всё кажется «некрасивым»)

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

Но всё-равно, выбрал Golang в качестве второго языка.

Сейчас читаю книгу «Язык программирования Go». Не сказать, что она простая в восприятии. Если бы у меня не было опыта программирования, то, скорее всего, я бы ничего не понял. Но всё-равно интересно.

Но теории, естественно, недостаточно. Нужна практика. И поэтому, параллельно своему обучению, я пишу на Golang торгового робота скальпера для торговли акциями на бирже ММВБ и параллельно осваиваю фишки языка, включая работу с go-рутинами)

Проект получился как-то сам собой. Дело в том, что у меня открыт брокерский счет в Тинькофф Инвестиции. И у них есть API для работы на бирже, как раз предназначенный для создания роботов. И под это дело, разработчики банка сделали SDK, написанный на Go.

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

Весь функционал разнесён по пакетам, под каждый функционал сделан отдельный интерфейс.

Но это, скорее баловство и желание лучше понять, как работает сам язык, нежели попытка на этом что-то заработать.

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

Но если честно, что-то много всего навалилось в последнее время... Мне совсем не скучно дома, так как всегда есть куча дел, которые требуют внимания, времени и сил. Просто все эти три вещи в дефиците.

Жду не дождусь майских праздников, чтобы наконец отдохнуть и восстановиться.

2020   golang   веб-разработка   жизнь   обучение

Алгоритмы, ReactJS и другие новости

В последнее время у меня не много новостей. Однако, я стараюсь фиксировать свой прогресс и достижения в письменном виде. Это помогает собрать все мысли воедино, вернуть фокус на цели, да и просто весело)

Основная работа

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

За это время я успел поработать на трёх разных, достаточно крупных, рельсовых проектах и пощупать их изнутри. Все проекты работаю в связке Rails + ReactJS с примесью рельсовых вьюх (на Slim или на Haml).

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

И это меня конечно, несколько, демотивирует...

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

Алгоритмы

Я, наконец, взялся за своё фундаментальное образование и начал учить алгоритмы и структуры данных.

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

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

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

Паттерны проектирования

Помимо алгоритмов и структур данных я также занялся изучением паттернов проектирования.

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

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

Все изученные паттерны я также храню в отдельном репозитории.

ReactJS

Весь август я провёл погружаясь в Реакт. Не то, чтобы я так сильно хотел стать full-stack разработчиком, скорее просто для общего развития и понимания, как Реакт взаимодействует с рельсами.

В процессе работы у меня было немного свободного времени на одном из проектов. Где я поковыряться с ним чуть более полно.

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

Получилось прикольно! Теперь хочу сделать свой блог в этой же связке.

SMM Collector

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

В общем и целом, всё хорошо)

Новая работа, переезд и запуск SMM Collector

Всем привет. С момента последней записи, в моей жизни произошло несколько важных изменений.

Я запустил SMM Collector, нашёл работу Ruby on Rails разработчиком и переехал в Москву)

А теперь по порядку.

Москва и новая работа

Прошло ровно два месяца как я был принят на работу RoR разработчиком в одну из московских компаний, которая занимается разработкой на заказ.

Окончательно осознав, что в Краснодаре работу мне не найти, в середине января я решил испытать удачу, изменив в своём резюме: «Готов к переезду в Москву».

Каково же было моё удивление, когда резко выросло количество собеседований и откликов со стороны московских рекрутёров.

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

В общем, уже через неделю после принятия оффера, я оказался в Москве-сити.

И сразу сделал вот такое фото, для истории:

Для меня переезд был особенно волнительным мероприятием, так как последние 14 лет я прожил в Краснодаре.

В итоге, Москва оказалась очень крутым городом, который по своей энергетике оказалась мне очень приятной.

А вот такой вид открывается из окон офиса:

О самой работе возможно расскажу как-нибудь в другой раз. Но если коротко, то мне повезло. И с проектами и с командой.

Сейчас один рабочий день по интенсивности проходит как три. За эти два месяца

  • Я, наконец, узнал что такое коммерческая разработка.
  • Стал лучше понимать как работает React и как он взаимодействует с рельсами через API.
  • Теперь больше и глубже работаю с Git.
  • Задеплоил приложение на 4-х разных серверах, используя Docker
  • Настроил CI в Jenkins для production окружения.
  • А ещё я очень много дебажу)

Работы много и она интересная. Приходится очень быстро учить разные вещи и сразу внедрять их в работу. Это стресс, но пока мне всё нравится)

SMM Collector

Ещё я, будучи уже в Москве, доделал и запустил свой второй SaaS-проект: https://smmcollector.ru

Это сервис поиска целевой аудитории для таргетированной рекламы ВКонтакте.

Там реализовано всё, что я планировал сделать на первом этапе:

  • Реализовал ServiceObject паттерн, добавив новый слой, чем существенно облегчил себе жизнь.
  • Отрефакторил код, который переиспользовал после предыдущего проекта. Стало красивее)
  • Научился работать с API ВК, реализовав сложные сценарии для поиска.
  • Поработал с отложенными задачами (пощупал CRON).
  • Глубже поработал с AJAX.
  • И сделал ещё кучу других интересных (и не очень) задач.

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

Доступ к сервису по модели: «Плати сколько хочешь»

Я долго думал и решил, что не буду пока брать за этот продукт деньги.

Любой пользователь ВКонтакте может зайти в личный кабинет и начать работу c сервисом абсолютно бесплатно.

Сейчас, в планах собрать первую базу пользователей, расширить функционал и получить отзывы.

А после того как доведу продукт до ума, то введу за него плату.

Вот как-то так всё)

2019   веб-разработка   жизнь   обучение   стартап

Промежуточные итоги и цели до конца 2018 года.

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

Итоги после обучения

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

Нужно что-то спарсить? Написал свой парсер. Нужно протестировать какую-то гипотезу? Быстро собрал прототип и запустил его в продакшн.

Чувствуешь себя тем самым парнем с фото в начале поста) Офигенное чувство свободы!

Кстати, скоро будет новый осенний поток. И если вы хотите пройти обучение, пишите мне в ВК или на почту. Я скину вам промокод на хорошую скидку в 8500 рублей.

Ещё я ушёл со своей основной работы и занимаюсь теперь только веб-разработкой на RoR. Поскольку фрилансить как руби разработчик я пока объективно не могу, то по старым связям беру заказы на фрилансе (сверстать какой-нибудь лендинг или настроить рекламу).

Если говорить о Rails-разработке, то практически 80% времени я занимаюсь своим сервисом «Твой ЖК»

Твой ЖК — сервис аналитики жилых комплексов

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

За это время я написал такое количество кода, что мне самому не верится в то, что я это вообще сделал:

  • Два раза поменял основную страницу сайта.
  • Сделал свою небольшую маркетинговую воронку продаж.
  • В разы ускорил проверку любого жилого комплекса.
  • Подключил и настроил приём платежей по API с Робокассой.
  • Сделал свою внутреннюю аналитику по пользователям и отслеживаю её для дальнейшего маркетинга.

Теперь главная страница сайта выглядит так:

Да, самое важная новость! У меня появились первые клиенты, которые заплатили денег за мой базовый продукт.

Я подсчитал свою экономику и выяснил, что на текущий момент мой ROMI равен 86%!!!

То есть спрос есть, идея провалидирована, она прибыльна. Самое время всё это масштабировать.

От продукта я плавно перешёл к маркетингу. И это основной затык во всей моей схеме. Первых пользователей я фактически привлёк через рекламу и массовую рассылку. Сейчас акцент хочу сделать на контент-маркетинге (для чего у сервиса теперь есть блог).

В общем, расчехляю все свои текущие знания по маркетингу, продолжаю гуглить новую информацию по продвижению стартапов (для меня этой новый рынок). Ещё читаю материалы зарубежных коллег. Очень круто заходит https://www.indiehackers.com вот этот ресурс. Жалко, что у нас нет ничего подобного.

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

На самом деле, моя дорожная карта разработки (и продвижения) продукта обширна и постоянно чем-то пополняется.

Скучать как видите не приходится)

Однако есть и проблемы

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

Допустим, мне нужно добавить в проект какой-нибудь новый функционал. Я его добавляю. Но насколько хорошо я его сделал?) Это главный вопрос.

Сейчас количество кода в проекте достаточно ощутимо для меня. Сама структура рельсов обязывает меня структурировать код и у меня пока нет проблем с «ориентированием в проекте». Новый функционал добавляется легко, я не путаюсь. Однако они скоро могут возникнуть.

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

У меня пока же всё происходит медленнее, чем хотелось бы. И меня это парит...

Цели до конца года

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

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

Но будем реалистами, вероятность этого события «крайне мала». В Краснодаре таких вакансий практически нет. По разговорам с другими выпускниками ХП, устроиться Rails-разработчиком на удалёнку не самое простое мероприятие, если у тебя нет хотя бы года опыта.

Построить прибыльный сервис «Твой ЖК», нарастив хорошую базу пользователей с хорошим показателем рекуррентных платежей.

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

Так что я пока партизаню)

Всем спасибо за внимание.

Я вижу матрицу... Или матрица видит меня?)))

И вот прошло четыре месяца моего обучения. Можно подвести предварительные итоги.

Основной блок по рельсам завершён. Идёт продвинутый блок.

Из свежего, появился новый проект BBQ: https://bbqmaster.herokuapp.com/

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

Информации настолько много, что мозг раскалывается.

Ещё я изучил Bootstrap, хотя не собирался этого делать. :)

RSpec

Сейчас всё внимание на тесты. Тема интересная и я бы не сказал, что сложная. Но с тестами есть две проблемы:

  1. Не всегда понятная и не очень удобная документация.
  2. Не всегда ясно что и как тестировать.

Пока вижу решение в том, что нужна практика. Преподаватели с интенсива, как могут, помогают.

Задеплоил своё первое приложение. Твой ЖК.

Ещё у меня радостная новость. Я задеплоил своё первое (не учебное) веб-приложение на VPS сервере.

Это клон моего консольного приложения Sales Checker, но только в виде rails-приложения.

Вот сайт: http://tvoyjk.ru

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

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

Моя активность на GitHub

Стараюсь ежедневно писать код и вносить свежие коммиты в свои репозитории:

Там видно, что в мае были небольшие перерывы, отчего я отстал от основной группы. Примерно на две недели.

Сейчас разрыв сократился на полторы недели от основного потока.

Кроме того:

  1. У меня появился свой VPS сервер на DigitalOcean. Кстати, если вы зарегистрируйтесь по моей ссылке, то получите на счёт 10$. Этого хватит на 2-а месяца работы вашего сервера (по самому минимальному тарифу).
  2. Обновил свой профиль на GitHub. Теперь у меня появились приватные репозитории, куда я и перевёл три свои рабочих проекта.
  3. Настроил VPN для Slack. РКН вынудил меня это сделать, потому что иначе Slack просто не работает. :)
  4. Подбил своё резюме здесь и на HH.

Что изменилось после курса?

Мне трудно передать словами насколько я счастлив, что попал на интенсив «Хорошего программиста». Я до сих пор считаю мою победу в их конкурсе чудом. Но видимо мне это больше всех было нужно, поэтому я и победил. :)

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

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

Просто в какой-то момент ты понимаешь, что можешь сделать это. Ты видишь матрицу. :)

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

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

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

А дальше что?

Я сейчас работаю по найму в одной компании, не связанной с Ruby on Rails разработкой. А мне бы хотелось устроиться на работу именно в такую компанию. Неважно, занимается она аутсорс разработкой или пилит свой продукт. Мне очень нравится эта среда. Я очень хочу влиться в  команду разрабов и там уже расти как специалист.

Но пока рекрутёры не ломают мою дверь и не закидывают предложениями о работе, я буду глубже закапываться в тему рельс и Руби. :)

Скорее всего, после интенсива я буду также изучать и React.

Сейчас у меня есть идеи для трёх интересных приложений.

Одну идею я уже реализовал. Минимальный MVP работает (приложение выполняет свою основную задачу), осталось его довести до презентабельного вида.

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

А после этого я приступлю к тому, ради чего всё это затевалось, пилить свой FinFine.

Вот как-то так.

Рельсы-рельсы, шпалы-шпалы...

Шла 13-ая неделя обучения. И это была одна из самых тяжелых недель во всём интенсиве...)

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

Просто, у меня как-то сразу всё смешалось.

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

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

Если раньше я мог после 8 часового рабочего дня выделять по 2-4 часа на занятия, то теперь мне это сделать сложнее. Короче, all I need is REST)))

По Ruby on Rails я сделаю отдельный отчёт после того как закончу по нему основной блок, а пока поделюсь успехами, причём не только учебными)

Задеплоил своё первое RoR приложение

Да, оно учебное. Да, на Heroku) Но зато первое и очень крутое!)

Это клон Ask.fm.

Одни пользователи (в том числе и анонимные) могут задавать вопросы, на которые отвечают другие пользователи.

Мой GitHub-аккаунт постепенно «прокачивается»

Пусть я уставший и упоротый, но сделать коммит и «git push» в мастер — это святое!)

Постепенно приучаю себя ежедневно писать код и отправлять свежие изменения в свои репозитории.

Всё взаимодействие с Git проходит более уверенно. Моё портфолио постепенно разрастается и не только учебными программами. И это главная новость!

Sales Checker — парсер Россреестра

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

Конкретно эта программа родилась из моей личной «боли».

Занимаясь интернет-рекламой в строительной компании мне приходится мониторить конкурентов, в ручную собирая и обрабатывая данные по продажам разных жилых комплексов (ЖК). Эти данные я беру из Росреестра, вводя вручную кадастровый номер земельного участка, на котором находится ЖК.

Стандартная проверка одного ЖК занимает порядка 5-30 минут (в зависимости от количества записей о продажах).

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

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

В итоге:

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

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

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

Такие дела!

Закончил блок продвинутого Ruby в «Хорошем программисте»

Хочу сказать, что это было нелегко... Но о-о-очень круто!)))

Впечатления от Ruby и программы интенсива уместилось в несколько крупных блоков.

ООП и RubyWay

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

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

XML и(vs) JSON

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

По ощущениям JSON проще и удобнее, чем XML. Схожесть JSON с ассоциативными массивами близка к 100%. Читать и обрабатывать такие данные очень легко и приятно.

И вот насколько мне понравился JSON, настолько и не понравился XML. Сложно, запутанно, как-то всё через жопу... Работать с ним какое-то «мучение». У меня пока что ещё очень много вопросов по поводу гема Rexml (именно он читает XML и обрабатывает XML данные).

Этому вопросу нужно выделить отдельное время, чтобы по-лучше изучить.

Ещё разобрали SQL, но пока что поверхностно, глубоко не погружаясь в этот вопрос.

Тесты и RSpec

Наконец-то я пощупал тесты) Оказывается это совсем не страшный, а очень интересный и полезный инструмент. Тот кто придумал тесты — гений!)

Наверное, я уже никогда не забуду тот момент, когда написал и запустил свой первый автоматический, а затем ещё и интегральный тест. Почувствовал себя чуть ли не богом) Вот прям проникся идеей TDD. Классная штука!

Тесты действительно облегчают процесс разработки кода. Например, раньше, чтобы «протестировать» работают ли мои методы для самописных классов, мне приходилось писать их отдельно в irb или выносить в отдельный файл. И если он показывал свою работоспособность, то затем переносился в основной код. Это, мягко говоря, неудобно. С изучением RSpec можно сразу же к нужным методам написать свои тесты, а затем прогонять их, спокойно изменяя основной код и видя всю картину целиком.

Наблюдения по курсу и моей успеваемости

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

Проблема ещё и в том, что в целом программа обучения стала сложнее.

Какие-то вещи воспринять тяжелее, чем другие. Вопросы также вызывают сторонние гемы (библиотеки). Например, REXML — гем для работы с XML файлами. Не всегда документация написана понятным языком. Да, этот гем что-то делает, но как он это делает, мне не до конца понятно.

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

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

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

Самое главное — прогресс есть!

Я за эти полтора месяца узнал больше чем за последние полгода. Стал более уверенным в ООП (хоть и не всё понимаю). Чтобы улучшить свои знания и разобраться в этом вопросе, купил и читаю книгу Ruby. Объектно-ориентированное проектирование. После основной программы обучения, как закрепление практики, заходит просто отлично. Рекомендую!

Ещё недавно поймал себя на мысли, когда выполнял очередное домашнее задание, что мне очень нравится писать код. Я могу просидеть 4-5 часов над решением трудной задачи. И мне это не скучно, мне это не надоедает. А когда задачка решается — это такой кайф!)

Веб-разработка

Сейчас уже началась веб-разработка (основы HTML, СSS и JS), к которой я уже более-менее подготовлен. Эти задачи проходят пока легко и у меня есть время закрыть долги по прошлым домашним заданиям.

Ещё установил рельсы, задеплоил первое своё веб-приложение на heroku. В общем, всё по красоте)

В сухом остатке

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

В общем, курс — отличный, уроки — крутяцкие, преподаватели — молодцы!)

А я продолжаю вести наблюдение)

Прошёл первый блок по Ruby в «Хорошем Программисте»

Пока я готовлю вторую часть статьи о самообучении в веб-разработке, расскажу как проходит моё текущее обучение на интенсиве по Ruby on Rails от проекта «Хороший программист».

Если совсем коротко, то очень круто!) Отличный интенсив и прямо всем его рекомендую, кто хочет заниматься разработкой на Ruby on Rails.

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

1. Ты постоянно пишешь код, решая интересные задачи.

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

Важность постоянно погружение в написания кода вообще трудно переоценить. Здесь с этим всё в порядке.

2. У тебя есть наставники, которые проверяют твой код и дают обратную связь.

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

Другие разработчики (ученики) тоже вносят вклад в процесс обучения. Например, меня несколько раз сильно выручил чат в Slack-е, где мы все сидим в одной лодке и куда-то гребём)

Что уже сделано за эти 4-е недели?

Сейчас закончился первый блок программы по основам языка Ruby. Разобран его синтаксис, простые типы данных, основы ООП. Мы успели разобрать работу с библиотеками (гемами). Я успел поработать с файлами, исключениями, познакомился с регулярными выражениями. Освежил свои знания по работе с Git-ом.

Ещё я успел перейти с Visual Studio Code, на RubyMine. Учусь сейчас работать в нём, но по ощущениям эта очень удобная и понятная IDE. Потом отдельно о ней напишу.

Со следующей недели начнётся углубленное изучение по языку Ruby и его ООП. Жду эту неделю прям с нетерпением!)

Предварительные итоги и впечатления:

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

Для себя я определи, что смотрю все видео-уроки и делаю все домашки.

Кроме того:

  • Для меня особенно была полезна работа с файлами (так как раньше ни разу этого не делал). Научился это делать, чему безмерно рад.
  • Ещё раз убедился, насколько в Ruby понятный ООП, в отличие от того же PHP. А его синтаксис так просто божественен!)
  • Где-то на третье неделе я вообще перестал «боятся» домашние задания, появилась какая-то уверенность в том, что я делаю. Этому способствовало и то, что на курсе уделяется особое внимание постановке и решению задач, отчего даже самую сложную проблему можно разбить на шаги и решить её по готовому алгоритму.
  • Ещё оказалось, что регулярные выражения — это не так уж и страшно, как я думал в начале)
  • Ну и вообще, у меня ни разу, за четыре недели не возникло ощущения, что мне скучно, или мне надоело. Это прям огромный плюс к мотивации учиться и работать дальше.

В общем, курс нравится. Буду продолжать вести наблюдение)

Однако есть одно но!

Если вы ранее не занимались программированием и не сталкивались ни с одним языком типа Ruby, Python или PHP, не спешите записываться на интенсив.

Я бы всё-таки рекомендовал вам вначале потратить месяц или полтора на то, чтобы освоиться с Ruby самостоятельно по тем урокам и документации, что есть в интернете бесплатно. Начните с того же хорошего программиста. На их YouTube канале есть отличные ролики, которые мягко погрузят вас в язык. И только после этого можно идти на курс.

Объясню почему.

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

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

Но это всего лишь моё мнение.

О самообучении в веб-разработке (часть 1)

Мысль о том, чтобы стать профессиональным full-stack веб-разработчиком меня посетила ещё в июне 2016 года.

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

Поскольку информации будет много, я решил разбить её на три части:

  1. Front-End (расскажу как я учился вёрстке и джваскрипту)
  2. Back-end (опишу свои мытарства при выборе серверного языка программирования)
  3. Скорость и результаты самообучения (философская часть, с выводами)

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

Front-End — начало

Начнём с того, что я уже 7 лет занимаюсь интернет-рекламой. Моя специализация — трафик и аналитика.

На тот момент я слабо знал HTML и CSS, но мне хватало этих знаний для моей работы. Я мог немного поправить вёрстку на сайте, подключить счётчики Метрики и Analytics и всё. JavaScript мне вообще казался клинописью. О серверных языках я даже и не заикался.

С этими «знаниями» я и стартовал в мире веба в июне 2016 года.

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

HTML5 и СSS3

С изучением HTML и СSS проблем не возникло. Мне повезло, поскольку я «варился» в теме интернет-маркетинга. Маркетолог не обязан уметь верстать макеты по тем исходникам, что присылает дизайнер, но ты очень плохой интернет-маркетолог, если не умеешь хотя бы починить «поплывшую» вёрстку у себя на лендинге.

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

Первое, что я сделал — подтянул свои знания HTML5 и CSS3.

Я перепробовал и пересмотрел кучу разных материалов, но лучшее, что я видел, было на сайте HTMLacademy.

У них отличные интерактивные уроки! Материал подаётся настолько простым, понятным и живым языком, что за несколько недель я сверстал с нуля свой первый одностраничник на чистом HTML и СSS.

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

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

JavaScript и прочие ангуляры с реактами

Что касается JS, то я ещё не погружался в этот язык очень глубоко.

Я успел пройти только пару тематических курсов на Codeacademy.

Там я познакомился с синтаксисом языка, попробовал написать какие-то свои простые скрипты.

Ещё, мне понравился сайт https://learn.javascript.ru. На мои вопросы по JS, Гугл чаще всего отсылает меня именно сюда.

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

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

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

Что ещё предстоит изучить:

В ближайших планах: освоить LESS (или PostCSS, пока не решил). Также я хочу подтянуть знания JS, освоить AJAX и работу с DOM-деревом, изучить простую анимацию и эффекты.

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

Что изучать не планирую:

Я понимаю, что время на обучение ограничено, а фронтенд развивается c такой скоростью, что мне просто физически не изучить все технологии. Да это и не нужно!

Для реализации моих целей, мне отлично подходят знания в HTML5, CSS3, базовые знания JS и библиотеки в виде React.

Что касается других технологии...

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

Также не хочу углубляться в изучение jQuery. Я периодически подключаю эту библиотеку к лендингам (не понимая как она работает) из-за того же AJAX, но я уверен, что знания React в этом плане будут лучше.

В итоге:

  1. Если вы хотите работать фронтендером, зарывайтесь в JavaScript с головой. Это ваша и мама и папа на ближайшее будущее. Параллельно с этим учите React JS или Angular. Ну и NodeJS, если хотите заниматься бэкендом (об этом в другой части).
  2. Если вы не практикуетесь в языке, как например я (сейчас мало пишу на JS, так как изучаю Ruby), то навык написания кода конкретно на этом языке программирования (ЯП) — теряется.
  3. Предыдущие два пункта абсолютно не значат, что второй язык не нужно изучать, если не освоил первый или сконцентрировать всё своё внимание только на одном ЯП! Я заметил интересную вещь, что погружаясь в изучение разных ЯП, ты лучше их понимаешь. Логика работы этих языков очень похожа. Взглянув на какой-то код, ты можешь понять как он работает. То есть у тебя реже возникает «ступор» и чаще происходит узнавание кода. А это прекрасно!
  4. Только с погружением во френтенд я разобрался с тем, какие технологии мне нужны на самом деле. Поэтому выбирайте технологии и инструменты, исходя из своих целей и задач!

Конец первой части.

2018   веб-разработка   обучение   фронтенд

Hello, world!

Две недели назад я выиграл участие в интенсиве по обучению веб-разработке на Ruby on Rails от проекта «Хороший программист».

Видео с конкурса, где я одержал победу:

Ссылка на интенсив

Обучение начнётся 29 января и продлится 5 месяцев.

Здесь я буду делиться своими мыслями, успехами и неудачами, возникшими по ходу обучения.

2018   веб-разработка   жизнь   обучение