Все началось, когда появились материалы недельного курса. Я знал, что в учебной программе было четыре проекта, но был поражен тем, как быстро был указан первый проект. Мой первый проект Ruby CLI появился со списком требований, который напугал бы любого. От меня требовалось «очистить» сайт по моему выбору и составить список полученных данных в структурированном виде. Нужна была хорошая объектная ориентация.

Я спросил своего инструктора: «Сколько времени у нас есть на выполнение этого проекта?». Он ответил через Slack: «Эй, Генри, в понедельник у нас будет 20-минутная сессия, на которой ты будешь кодировать свой проект и отвечать на вопросы в последние 10 минут», пока мое сознание обрабатывало информацию, пришла еще одна строка: «просто шучу, ха-ха!».

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

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

Пришло время найти тему моего проекта. Какой сайт я бы парсил? Зачем мне его расчесывать? Стоило ли стричь? Идея проекта заключалась не столько в парсинге, сколько в том, чтобы показать свои навыки работы с объектно-ориентированным программированием на Ruby; поэтому я решил, что парсинг не так важен, как структура моей программы и то, как объекты смогут взаимодействовать друг с другом.
Проверка на практике — парсинг оказался важным и сложным.

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

Я нашел много сайтов и посмотрел их структуру. Я решил пойти с — www.veganricha.com.

Вы спросите, как я начал программировать? Я открыл www.repl.it и начал собирать данные с veganricha.com. При этом я смог найти себя. Я также заметил, что это хороший сайт для парсинга. Я смог получить больше данных и продолжил создавать свой класс Scraper в repl.it, прежде чем перейти в свою локальную среду. Когда мне нужно было определить другой класс, я создал свою локальную среду, используя гем под названием Bundler. Набрал в своем терминале bundler gem install veganni (veganni — это название моего драгоценного камня), и моя локальная среда была создана каким-то волшебным образом.

Я считаю, что создание кода похоже на полет. Самые сложные части — это взлет (начало написания кода) и посадка (завершение вашей первой версии).

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

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

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

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

Присвоение моим методам хороших имен изменило все и сделало мой код более читаемым, как если бы каждый метод рассказывал мне историю своего класса.

После нескольких часов попыток усовершенствовать свой код я наткнулся на эту цитату:

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

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

Вы можете проверить мой проект CLI здесь: veganni

Вот несколько советов по созданию вашей первой CLI-программы:

1. Как только у вас появится идея, начните экспериментировать и кодировать. Самое сложное — это начать.
2. Постарайтесь увидеть основную структуру вашей программы. Поначалу держите его Stupid Simple (KISS).
3. Дайте красивые имена своим классам, методам и переменным. Заставьте их рассказать вам историю.
4. Постарайтесь, чтобы ваши методы выполняли только одно, но не более двух действий.
5. Если вы чувствуете, что теряетесь в своем коде, пришло время остановиться и спросить себя, почему?
6. Сделайте свой код читабельным. Имеет ли смысл читать это вслух?
7. И последнее, но не менее важное: используйте git и коммиты как можно чаще.

Интересующий ресурс:
Как создать Ruby gem с помощью Bundler