№31 Нужно ли учить Ruby первым языком программирования с нуля | Игорь Александров, Паша Калашников

Hexlet (00:00.622)
Всем привет, на связи Хекслет, я Василий Кузенков и сегодня мы поговорим о Ruby с Игорем Александровым и Павлом Калашниковым. И не забудьте подписаться на канал, поставить лайк, колокольчик, все дела этому видео. В общем, ребят, давайте начнем.

Hexlet (00:30.83)
Игорь, расскажи про себя, расскажи, чем ты занимаешься, кто ты и больше чем известен. Да, всем привет. Очень рад опять оказаться на канале Хекслита. Прошло уже больше трех лет с первой записи. Те, кто смотрел, знают, что я рубист, TTO, сооснователь Jet Rockets. Те, кто не смотрел, вот, собственно, только что было представление. Чем я знаменит? Последний год я очень много коммитил в Камаль.

а до этого я много комиссов в других библиотеках, пожалуй, хватит. Круто, спасибо большое. Паш, тебе слово. Всем привет, меня зовут Павел Калашников. Я не был на канале Хекси примерно 8 лет, как он появился, я так ни разу не был. Руби я занимаюсь как основным стеком с 2012 года.

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

Какое языкопрограммирование ты в принципе изучал первым? И вообще, как так получилось? Смотрите, с одной стороны меня такая классическая история, да, то есть первый, там, не знаю, 10 классе, 2003 год, какой-нибудь труп Паскаре в школе, а потом непонятно, зачем был C++ в университете, а потом было короткое увлечение питоном, и потом меня занесло совершенно очень невероятную вещь. Я...

Там больше двух лет писал на SmallTalk. Да, а SmallTalk – один из языков, откуда Мацумото вдохновлялся при написании «Всесоздание Руби». А потом так получилось, что нам нужно было… Ну, SmallTalk – очень такая нишевая история. Мы писали на нем биллинг. И большое спасибо моему первому тогда начальнику Диме за то, что он меня, в принципе, терпел и обучал, потому что SmallTalk – это не для каждого.

Hexlet (02:51.022)
А потом нужно было написать веб, и я подумал, что нет, я не могу это сделать на Smalltalk'е, стопроцентно. И я решил это сделать на чём-то, что хоть как-то было близко к Smalltalk'у. Поэтому я выбрал Ruby, вот и всё. И с 2008 года я пишу на Ruby. Да, Smalltalk' это такая интересная конструктивная особенность в нём есть, что ООПшный такой язык. Да. Предвестник всего ООП.

И в Ruby это очень четко прослеживается. Как такой язык стал предком Ruby, прям интересный опыт, прикольно. Паш, а ты с чего начал? Да, я начал программировать в универе активно, уже. Ну, то есть там были тоже C++, C-Sharp был с Java, ну, то есть все в перемешку как... Я не знаю, как в других универах, нашем точно был так.

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

вдохновленный, во-первых, самим языком, во-вторых, то, что вот вместе с этим еще на меня навалился, знаете, Open Source навалился, да, то есть я там ВИМ попробовал, короче, меня 2012 год был просто, а, тут так весело, оказывается, вот, и... вот, наверное так. Вот так что я думаю, что здесь основное не языки решают, да, все-таки. До 2012 года я себя реально, как программист, не ощущал, да, то есть ну не хотелось этим заниматься. Хотя неплохо получалось. Вот. Так что...

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

Hexlet (05:06.893)
Слушай, это очень хороший вопрос, потому что тут надо говорить не только о языке, но и о том, что вокруг языка, то есть мало иметь какой-то инструмент, нужно комьюнити. Так вот, комьюнити Ruby – это, наверное, одна из ключевых особенностей, почему, например, я до сих пор люблю Ruby, и почему я больше 15 лет на занимаюсь. Во-первых, Ruby Community очень сконцентрированная на Rails.

Это и плохо, и хорошо. Плохо, потому что у нас часто обвиняется в том, что нас есть какая-то, знаешь, зашвыренность, типа вот мы знаем там Rails и все. А с другой стороны, это хорошо, потому что нету никакого размывания фокуса, и именно поэтому как бы в Rails появляется столько классных новых. Одна из причин, почему это происходит, потому что очень сильная концентрация на одном продукте, да, на одном проекте. Мы, у нас нету... Окей.

меня сейчас, конечно, будут хейтить. У нас нет двух веб-фреймворков или трех веб-фреймворков, как есть в Python, Node.js и PHP. У нас есть Hanami, да, безусловно, нас есть RODO, нас есть Inatra, может быть, там еще что-то какие-то вещи есть, да? Но двух нету. Но двух нету, правда. Ну, давайте честно, давайте говорить так, есть. Есть один фреймворк, и еще раз, есть и плюс, и минус этого, но...

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

Нет второго фреймворка, нет никаких вторых выборов второго инструмента, альтернатив никаких нету. Может всё-таки есть. Какие вообще преимущества выбирать только один фреймворк? скажем, ну всё-таки альтернативы есть, да? Мы уже поговорили про них немножко. Но вот может иногда стоит посмотреть куда-то ещё, а только в рельсы? Слушай, безусловно стоит посмотреть, надо стоит смотреть не только... Вообще надо смотреть не только на рубе.

Hexlet (07:33.261)
Давайте честно говорить, да, надо смотреть на то, что происходит в соседних стаках. Я рассказал исключительно с точки зрения…

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

историю с Rails 3 и Merb, и с Yehuda Katz, что в какой-то момент произошла совершенно уникальная история. Обычно, наоборот, знаете, фреймборки и вообще какие-то библиотеки, форкаются, да, и разделяются, да, и любые IT-продукты форкаются и разделяются. А с Rails 3 произошло наоборот, произошел мерч двух команд.

Команда Merp присоединилась к команде Rails, хотя изначально было два фреймборга, момент, не изначально, а момент написания Rails 3 было два параллельных фреймборга, был Rails, был Merp, а потом эти команды объединились. Это удивительно абсолютно. Такого я, ну я такого больше не слышал, не видел, ну может быть я что-то не в курсе, но это классно. Поэтому нет, конечно, как разработчику, тем более там начинающим разработчикам, нужно смотреть постоянно, да, смотреть, что происходит.

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

Hexlet (09:21.133)
Знания не очень глубокие, но широкие. Но если ты уже выбрал писать веб, тогда надо углубляться в веб. и всё. Дальше. Да, давайте немножко дальше про Руби поговорим. Из чего он состоит, чем он так хорош. Паш, ты сказал, что было что-то, что тебя привлекло в языке, что тебя заставило остаться. Расскажи вообще из-за чего это произошло, как тебя вообще...

Затянулось всё это дело. Чем так классен Рубин-то для тебя? На третьем курсе я написал на C-шарпе, как это называется, когда… Не дипломное, а вот типа курсовое. Курсовое? На третьем курсе я написал, да, курсовое на C-шарпе. И курсовое у нас там, мы были в командах. А, я вспомнил, я объединился командами, ребятами из другого курса. На курсе младше они были, соответственно, мы там каждый решали свои задачи. Вот.

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

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

В C-sharp был, кажется, один юзабельный класс, популярный он назывался Reflection, я уже могу ошибаться. В Java тоже что-то такое было. А Ruby Code предполагал, соответственно, то, что ты должен метапрогону, то есть он это тебе позволяет, тебя...

Hexlet (11:25.581)
уважает за это и не мешает самое главное, да? Безусловно, безусловно, поработав еще потом годы, я узнал, что метапрограммирование это не только хорошо, а это еще и плохо, когда это в руках людей, которые ну типа болт забили вообще и считают то, что изменять объекты где-то в других местах, да, благодаря волшебным методам Instant Exec и так далее, вот.

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

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

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

живет ли Ruby, развивается ли Ruby и что в нем появляется? Да, здесь, наверное, все-таки в последние года два, наверное, я сфокусировался на Ruby именно как вот на рельсах. Почему? Потому что ребята как будто из команд 37 Сигналов, соответственно, из Basecamp нашли себе новые силы, да, то есть, прям создавать...

Hexlet (13:38.797)
расширять инфраструктуру. Я не припомню такого большого расширения инфраструктуры от core-команды, как за последние пару лет. Если посмотреть последнюю конференцию Rails Vault, всем рубистам. Вот я за последние полгода провел, наверное, собеседование 20. И ни один из рубистов не смотрел Rails Vault. Это как WWDC, Аполловское. Столько же всего, столько же нового просто. Отменяй все дела, у тебя там solid-cache. Каковырять надо.

Вот. И вот я, наверное, больше стожу за этим. Я еле-еле успеваю за всем новым и так далее. То есть, опять же, какой-то новый инструмент появляется. меня там первая задача применить его на PET-проект, потом поковырять. Где-нибудь там что-нибудь... Возможно, даже баг иногда дается пофиксить или где-то поучаствовать в этом. Вот.

И потом интегрировать это в коммерческие продакшн-проекты, что, естественно, порядок сложнее. И когда ты добавляешь в библиотеки со словом «Альфа» в версии, ты, безусловно, берешь на себя полную ответственность за это. Так что, наверное, я здесь фокусировался больше на этом. У меня есть теперь традиция. Каждый раз, когда там выходит от официального твиттера Ruby on Rails, типа, такая-то версия релиза, через 12-15 минут, посмотрите, в последние три-четыре версии так было.

Твит от меня всегда есть, updated. Я сразу начинаю обновлять, спят проектов, и, соответственно, потом ещё пару часов трачу на это. это то, чем занимаюсь последние пару лет. Так что я больше сфокусируюсь на этом, с удовольствием это обсуду. Это про Ruby. Если вопрос про Ruby, то всё-таки, наверное, интересно посмотреть, что всё-таки нового в Ruby. Рельсы, да, как бы Ruby не равно рельсы, но при этом рельс – суперважная штука для рубистов. А Игорь может…

что-нибудь скажешь про Руби, что для тебя нового в языке? Да, ты знаешь, тяжело… Ты когда-то спросил, да, минут назад, что нового в Руби, тяжело сразу сказать, что нового в языке. У меня есть на это объяснение, потому что релизы Руби никогда не подразумевают революцию, такую, как был он Python 2 на Python 3. Релизы Руби всегда, даже в мажорной версии с 2.7 на 3, это всё равно…

Hexlet (16:01.069)
эволюция с большим количеством изменений, с отсутствием совместимости назад, часто было с 2.7 на 3.0 по именованным аргументам, но это все-таки эволюционное развитие. С другой стороны, специально открыл changes по 3.3 и по 3.2, по двум последним мажорным версиям, и просто чтобы...

Из крупного, появилось, 32 появилось WebAssembly. Появился и несколько раз проеволюционировал Just-In-Time Compiler, GIT. Появилась куча перформанс-изменений. По сравнению с 2.0, 3.0 стал быстрее. Да, было много лет назад уже, но, по-моему, стал быстрее в X сколько-то раз.

за эти несколько минорных релизов. То есть язык развивается. Из крупных фич там, я считаю, WebAssembly и Just-In-Time Compilation. И типы, очень странно себя чувствуют в Ruby. есть Моцумото еще в 2019 году на той последней Ruby Rush, которая была offline, говорил, что «да, мы сейчас…»

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

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

Hexlet (18:27.373)
В Python я знаю, что есть большие кодовые базы, которые идут в сторону того, чтобы что-то такое функциональное внедрить. И, кстати, это раскал от community. Это примерно такой же раскол, как внедрение синько-вейтов, когда у тебя есть community, которая пишется с синько-вейтами, которая без Ruby, это удалось избежать. Это очень прекрасно, на самом деле. Это прекрасный пример языка, как по мне, в котором...

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

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

Очень много ресурсов сейчас вкладывают в интеграцию с раз языковыми моделями, с ландчейнами и прочее, прочее, прочее. Каждый день выходят какие-то интеграторы, врэперы для API, и в целом интерфейсы для работы с этими нейросетками. Это как раз таки, при том, с разными, не только с GPT, вы понимаете, со всеми, со всеми, со всеми.

Эта штука пока только растет в этом вопросе, потому что сам активный дискорд, я не знаю, вот вы состоите в этом дискорде Ruby.ai, называется там человек на 500, на данный момент, там прям движуха постоянная. Я сам некоторыми из этих продуктов сейчас пользуюсь, в разработке пока не участвую, времени на это нету, но это стало удобно, прям круто. И понимаете сейчас, если, допустим...

Hexlet (20:42.061)
само мясо разработки, есть нейросеток делается все-таки на Python и других подскоряющих языках, то Ruby представляет инструментарий для этого. То есть нормальный поток из нейросетки, нормальный поток данных, какие-нибудь удобные интерфейсы, все, чтобы опять можно было быстро все это навязывать, привязывать к чему-то и могли быстро начать пользоваться, а думать о том, что и не считать эти безумные пейперы, чтобы разбираться, как все это работает.

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

с существующих моделек, как обычно происходит интеграция? Есть какой-то готовый API, возможно? Я приведу сам простой пример. GPT, соответственно, у него есть несколько… Я сейчас могу ошибаться, не бейте меня ногами. У него, соответственно, есть режим, где он тебе сразу отдаёт ответ, полностью текст. Но этот текст…

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

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

Hexlet (23:03.117)
Тестами, правда, это было очень сложно покрыть, но это уже отдельный разговор, соответственно, который мы можем как-то отдельно провести, но в целом это работало. Так что это вот такие примеры, я могу еще вспомнить, интересно. Вот, собственно, вот так вот. Это, кстати, интересная тема, потому что, да, это один из примеров того, как можно интегрировать такие модельки, не используя там асинхронность. Почему вообще изначальный вопрос такой у меня был, потому что все библиотеки, которые я видел на других языках, они использовали...

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

Я думаю, у тебя точно есть что сказать для новичков про новичков в Ruby. Как они вообще могут туда попасть? И вообще, что им тут делать? Да, у меня есть… У меня есть очень много чего сказать про новичков в Ruby, потому что, в принципе, я их со своей карьерой видел и воспитал уже приличное количество. Я почему-то очень много слышал, что Ruby не подходит как первое язык программирования вообще. А я с этим категорически…

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

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

Hexlet (25:27.437)
А здесь у тебя развязаны руки в другом. Ты можешь написать «так увлечься» — это стилы метапрограммирования, что ты не сможешь становиться. Или еще одна огромная ошибка, потому что очень много новичков начинают сразу заниматься Rails. Тут, наверное, не стоит. Нужно хотя бы какое-то время удерить язык, чтобы перед тем использовать фреймворк. Но лично…

Какого-то вот такого... Red flag'а, hardstapa, что нет, нельзя использовать Ruby как первый язык. Я абсолютно не вижу, по-моему, это... Ну, на мой личный взгляд, абсолютно неправильно. А что может дать Ruby такого, что наоборот это будет хорошим выбором для первого языка? Мы уже поговорили, да, важно не стать Ruby разработчиком, как и React разработчиком, да, так же не стоит быть. Но вот есть другой вопрос. Что же Ruby может такого предложить? Например...

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

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

Здесь очень четкий путь, и изучение, и дальнейшее развитие. Еще раз, по этому есть проблемы, я не идеализирую это. Но для новичка, на мой взгляд, для человека, пришел только в профессию, у него нет широкого взгляда на все то, что происходит сейчас в IT, ему, на мой взгляд, проще, чтобы за него сказали, слушай, вот сейчас ты…

Hexlet (27:40.653)
учишь Руби, а через месяц ты начинаешь учить рейлс, и дальше ты идешь по прямой дороге, почти без развилок. И ты получаешь какую-то профессию, ты получаешь какую-то карьеру. Потому что...

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

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

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

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

Hexlet (29:51.501)
К Ruby разработчику, кто бы устраивался как Ruby разработчика, по-моему, прекрасный вариант. Многие все-таки новички, можете согласятся, что для новичков-то работы и нет в Ruby или есть? Сейчас время пиарить вакансии, я думаю, как будто бы. Я не хочу пиарить вакансии, потому что, итак, спасибо Хекслит, у нас достаточно много на Хекслите, и выпускников Хекслита много у нас, поэтому давайте не будем сейчас пиарить вакансии, но...

На мой взгляд, Ruby-вакантий может быть в абсолютных числах меньше, чем количество вакантий, которых упоминается Python или JavaScript. Но тут нужно помнить факт, что Ruby-вакантия почти всегда равно Rails-вакантия. Почти всегда.

а Python вакансия не равно Django или Flask, а может быть это вообще-то science, а может быть это AI какой-то или что-то. Такая ситуация с JavaScript, здесь еще все хуже. есть JavaScript вакансия ничего не значит абсолютно. Человек, который знает JavaScript, надо читать, что именно он должен знать, какой именно он framework должен знать и так далее.

Поэтому не смотрите, мой совет новичкам, смотрите, пожалуйста, абсолютные цифры. Не меряйтесь, что вот на этом сайте количество упоминаний JavaScript-а столько, Ruby или Python столько. Смотрите предметно на то, сколько в акканте удовлетворяющих конкретно вашу будущую профессию. Очень четко удовлетворяющих вашу будущую профессию. Вот и все. Кстати, да, это еще один такой вопрос. Я думаю, новички тоже...

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

Hexlet (32:16.621)
Я вынужден добавить очень важный момент. Я категорически не согласен с Игорем, что рубль может быть первым языком программирования. И не сколько нас осталось времени подстаивать это до последнего вздоха, что называется эту тему. Если интересно, могу раскрыть свое мнение по этому поводу и потом перейти к... Да, почему? По моему мнению. И я, безусловно, подготовил меньше рубистов, чем Игорь, свою карьеру, но тем не менее, тоже десятки этих людей. И что я заметил, то, что, знаете...

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

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

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

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

Hexlet (34:33.773)
У него уже есть опыт решения проблем, него уже падал сервер, него уже были задачи, с которыми он сидел по 10 дней, у него все это уже было, и он спокойно преодолевает эти проблемы. А у начинающего у него нет в голове ни solid-cache, ни Камалов, релс-волт он тоже не смотрел, у него undefined method days for nil class, понимаете, в голове. И этот undefined method days for nil class может висеть сколько угодно, потому что...

В Python будет написано import вот это, import вот это, import вот это, и там ничего другого в этом файле больше не будет, кроме того, что заимпортили. А в Ruby, будет вот эта переменная, order created, что-нибудь там, и после точки days она может быть чем угодно. И для начинающего, человека, который...

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

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

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

Hexlet (36:51.597)
Игры у тебя, какой взгляд на этот счёт? Слушай, с разной задачи тут зависит всё, во-первых, от проекта. Одна и та же задача по сложности, ну, скажем так, не по сложности, а по количеству того, что мне надо сделать, она может совершенно разное время занять, и совершенно разные проблемы у человека с ней могут случиться или не случиться в зависимости от того…

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

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

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

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

Hexlet (39:17.773)
Но если есть те, кто будут заниматься, то вполне нормально. С чего вообще стоит начинать в таком случае? Как вообще такого человека подготовить, который может дойти до уровня, что я сделал свою первую фичу и отправлю ее в продакшн?

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

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

есть люди, которым нужно читать документацию. Много-много методично читать теорию. вот пока... Опять-таки я видел таких людей, которые говорят, что пока я не прочитаю всю, не знаю, какой-то эстаделип, я не могу заниматься чем-то. Пока я не прочитаю весь Rails Guides, я не могу заниматься Rails. Я, по-моему, до сих пор не прочитал весь Rails Guides, честно.

Но мне это не надо, я тот человек, которому проще… Паша, прочитал? Шеймон Гью? Ну вот, я не прочитал. Мне проще, когда сталкиваются с проблемой, ее решать, понимаешь, практическую проблему. Поэтому для меня подходит вот такой стиль обучения, когда меня кидают или кидали в практическую задачу, как я сказал со Smalltalk, нам нужен был веб, веб-интерфейс, кбиллинговая система. Все, это была вся постановка задачи.

Hexlet (41:29.005)
А еще был Oracle, котором были данные, и был Smalltalk, в который Oracle ходил. Все. И вот как хочешь, так и делай. Я как бы нашел, выбрал, сделал. Все. Мне так проще. Есть люди, которым проще не так. Возможно, что когда я сказал, что Ruby подходит для, как первый язык программирования, ну вот он тоже для кого-то подходит, для кого-то подходит. Не подходит, да. Но не так, что прямо совсем-совсем нет-нет-нет.

Кстати, Паша, для тебя же тоже был Руби, по сути, первым коммерческим языком. То это ты писал на C-sharp'е, говорил. Он для тебя первым коммерческим языком, он при этом так категорично сказал, что Руби, как первый язык, ну вообще не... Да, да. Я сразу хочу добавить, я тоже весь релиз гаусс не прочитал, вообще не знаю, зачем его весь прочитывать, да, то есть, ну, опять же, если кому-то надо, то надо. Есть такие? Да, так что если кто-то считает, что это шейм у нас, то, пожалуйста. Вот, по поводу, да...

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

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

молодежных делал, знаете, мини-приложуки такие на C-sharp, которые для конкретного мероприятия мини-игры делал. Всё это пытался, всё это делал, и вот насколько мне было сложно, я прям очень боюсь за всех остальных. Хотя, может, просто я не такой шумный, да? Ты тоже рассказываешь, что кайфный кейс для Ruby, то есть на Ruby тоже можно делать. У меня в основном есть опыт такой, что я работал с людьми, для которых Ruby был первым языком.

Hexlet (43:48.397)
Для меня, конечно, нет, но я работаю с людьми, которые изучили Руби, прошли, там немножко уже Хекслиппо проходили, потом пришли у нас... У нас тоже есть такой мини-курс по Руби, до Абутофски, и проходили его, и пришли там в мини-стажировка, они прошли весь этот путь. Я не знаю, насколько для них это совершенно первый язык, но уж тоже точно первый коммерческий, как будто как первый коммерческий язык. Паша, ты подтверждаешь, что это офигенный язык, у тоже он установил карьеру. Это кажется круто.

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

Мне не очень нравится. Я не в обиду всем остальным разработчикам. Хороший Джун гораздо лучше недозрелого медла. Почему? Потому что его часто придется переучивать. Потому что...

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

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

Hexlet (46:15.757)
в своей компании, большинство этих синьоров приходило абсолютно, если не совсем зелеными джунами, совсем без опыта, то с каким-то минимальным опытом. И вот именно отсутствие какого-то уже чего-то накопленного позволяло им быстренько-быстренько-быстренько вырасти до хороших знаний. Это мне, я их люблю, я джунов очень люблю.

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

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

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

А может, нет, может, таких проблем нет. Вот язык специфичный, не скажу. Вот главное, контекстное исполнение, то есть то, что ты не всегда знаешь. Мне почему нравится ГО. Написан код, то, что написано, то и происходит. Ничего другого. И сделать ничего нельзя, чтобы что-то другое происходило. То, написано, то и происходит. А вот Рубито написано, что это не происходит, не факт, вообще что-то может произойти.

Hexlet (48:36.813)
И самая большая проблема была с тем, нужно... Знаете, когда мы придумываем какую-то новую функциональность, придумываем структуры и так далее, по умолчанию, мозг соединяется, грубо говоря. Я сейчас из головы придумал пример. Папка Appmodels, user.rb, users, controller. И вот нас мозг автоматически соединился со всеми этими контекстами. И когда мы пишем что-то там, какой-нибудь service object,

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

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

лучше явно, поэтому лучше Python, лучше Go. Ну и все, Все остальное хуже там будет уже. Из языков, я не знаю, из первой двадцатки. Так что да, наверное, самое сложное было всегда, когда я понимал, что меня Джун сидит там два часа, смотрит вот в одно место, я говорю, ты открой другие места. А он не знает какие, потому что ментальная карта еще не составлена. А еще со временем появляется такая, знаете...

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

Hexlet (50:55.149)
Тут единственное, что часть того, что говорил Паша, абсолютно справедливая для любых языков, то есть там object-orientated mindset, как вот я для себя это называю, как бы если у тебя его нету, то, простите, тебе будет тяжело в любом объектно-ориентированном языке. Или, например, если...

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

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

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

ты что-то импортируешь, и вот только с этим имеешь дело. Мне, наоборот, это сложнее. Почему? Потому что мне нужно задумываться, знаешь, а что я откуда там заимпортирую, а что там еще есть. Мне, опять-таки, проще иметь дело сразу со всем и пользоваться сразу всем, чем заниматься вот таким…

Hexlet (53:09.005)
тем, чем предлагает Python, да, занимает, ну смысле не предлагает, а то, как устроен Python. И, например, с Ruby, опять-таки, что мне нравится, наверное, стоит просто понимать мою там background со smalltalk, когда всё есть объект, это лучше, чем когда язык маскируется под объектно-ориентированный, а многие…

языки, которые мы считаем объектно-ориентированными, так скажем, маскируются под объектно-ориентированный язык, полностью не являясь объектно-ориентированным языком. Руби тоже, несмотря на очень большую, очень хорошую реализацию именно принципов ООП, он, естественно, не стопроцентно реализует все то, что подразумевалось быть ООП. Но мне проще, есть, чем ближе…

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

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

И это интересная концепция, потому что я как-то переписывал ТУЗу, Силай ТУЗу с Ruby на Rust и разбираться с тем, как работает, как там устроено всё в Ruby, как там все объекты между собой связаны, где связь прослеживается. Это было довольно таким, ну, приключение на все новогодние праздники. Мы сейчас можем очень далеко уйти. Так, знаешь, там, что такое...

Hexlet (55:29.965)
То есть кто как понимает ООП, и что хорошо, что плохо в ООП, и как надо делать в ООП, как не надо делать в ООП, тут я считаю, в принципе, каждого свое мнение. Ты знаешь, там раньше... Я тоже... Ну, там, сильно давно я пытался писать такой сложный код. Сложный код с кучей каких-то...

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

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

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

не основываясь на каких-то паттернах программирования или абстракциях, основываясь на реальных вещах, она очень близка к тому, как по крайней мере сейчас пишет Дэвид и вся команда 37Signals. Я не говорю, что я прав, я не говорю, что это очень хорошо, но я, по крайней мере, увидел, что ладно, я не одинок. И мне стало кайфово, это очень классно. Кэмфайер внутри максимально простой. Он сделан...

Hexlet (57:56.941)
максимально понятно. И я думаю, что даже никакому джунгу, который его тут опосадил, никаких проблем разобраться с тем, как устроен камфайер внутри, будет. Конечно, это маленький продукт, но я хочу сказать что, что успех продукта не зависит от того, насколько он сложный или несложный, насколько он маленький или большой, насколько он там сложно написан, просто написан.

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

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

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

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

Hexlet (01:00:19.597)
Что будешь использовать на проекте RSpec или MiniTest? Для тех, кто не знает, это два фреймворка, соответственно тестовых в Ruby. Что будешь использовать, RSpec или MiniTest? Вот, и люди там начинают рассуждать, и я вот сразу вижу. А правильный ответ знаете какой? Если на проекте RSpec, значит RSpec, а если на проекте MiniTest, значит MiniTest. Вот, а ты на это... всё. Вот, и я думаю, что для новичка важно как раз-таки вот этот кругозор настроить, чтобы он... вот...

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

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

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

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

Hexlet (01:02:33.837)
И все специалисты, которые я знаю, которые... за ростом которых я наблюдал, либо они мои ровесники, либо те, кто помладше, специалисты, которых есть спид-проекты, круче, я сейчас отвечаю за слова, специли, которых есть спид-проекты, в среднем круче тех, у кого нету. Возможно, опять мое поломанное мировоззрение, но то, что вижу я. Это прям...

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

Commitment в Open Source — не всегда написание кода. Надо вот это понимать. Никто от вас не ждет, что вы придете в Rails и начнете закрывать pull-реквесты или пилить свои фичи, которые сразу же пойдут в мастер, в мейн. Не знаю куда. И нет. Нет. Commitment в Open Source — это код-ревью. То есть это просмотр изменений.

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

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

Hexlet (01:04:59.213)
Зато коммит в Open Source мне заходит, причем в чужой Open Source, мне заходит замечательно, прекрасно, я очень люблю то там, то тут, что-то там где-то подделать, где-то больше, где-то меньше. Вот и все. А вот сколько вообще, сколько примерно нужно усилий, по-вашему, чтобы новичок смог впервые закоммитить в Open Source, что он должен знать?

Куда вы можете закомитить с минимальным количеством знаний, Паш? Чем меньше библиотек, тем лучше. Первый ваш комит должен быть в библиотеку с одним старым, которую вы нашли и который делает одно действие, у которого есть одна функция. Вы решили его заиспользовать. Мой первый комит в Open Source был в библиотеку под названием AutoHTML. Вы уже не знаете, что это такое. Она уже заещала давно. Но знаете, что она делала? Она брала...

строку ссылки видео на YouTube и делал из нее эмбед-отставку, короче, вы поняли, да, то есть вот. Делает ровно одно действие. Мне понадобилось какое-то это. Я зашел туда, сделал, через там неделю приходит чувак, мержит, и ты такой, ничё си, еберный театр. Я аж террорпенсор сделаю! Вот. Всё, то есть да. Понятное дело то, что это маленькая библиотека, вот типа Contribution этот...

Code of Conduct не нужно читать, если он там есть. Там разработчик один чувак, и кто-то еще к нему такие, как я, залетные. Там не будет висеть полтора года твой полреквест, в котором будут обсуждать полтора года люди. Там просто... Его либо смержат, либо не смержат, потому что забили уже на этот проект. И ты просто себе форкаешь, добавляешь авто HTML from Паша, и все. Ну ладно, не так не надо делать. Это глупость. Ну вы поняли. Авто HTML, что-нибудь там, и все.

Дальше твоя библиотека, делай с что хочешь. И вообще про Open Source в один важный момент, надо помнить. В русскоговорящем IT-сообществе то, что я заметил, есть к Open Source какие-то непонятные соответственно... то есть люди до сих пор не в курсе, что эта штука открытая, она именно то, чем является. Надо понимать то, что в современном мире, когда...

Hexlet (01:07:22.061)
количество вакансий все-таки уменьшается, давай честно признаемся, да, то есть и ты в итоге конкурируешь с большим количеством специалистов, специалистов Open Source — это публичное доказательство компетенции. Я это повторяю, вот я повторяю 500 раз в месяц, да, в разных статьях, в твиттере, где угодно, потому что это важно всем прознать. Open Source — это твоя публичное доказательство компетенции. Это не тот рассказ, что «я в компании N, мы делали продукт а что ты там делал?» Ну не знаю, вот это вот это, как доказать, что…

там делал, вообще непонятно. А тут прям исходный код открыт. И этот исходный код, если он еще в… Да даже если в библиотеку AutoHTML. Пришел автор библиотеки AutoHTML, посмотрел на твой код и принял его к себе, понимаете, да? То есть все, вот… у тебя уже какой-то там плюсик есть. Вот. Так что делайте Open Source, пожалуйста, да? Вот. И более того…

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

Я вот недавно YouTube канал завел. Да? Ничего себе. Круто. Надо подписаться, поставить лайки. Спустя много лет разработки. Ссылка будет в описании. Ссылка будет в описании по-любому. Да. Ещё тогда ссылка на мой твиттер добавьте, там активничать начал. много статьи теперь там пишу. Кстати, да. Получается одна из таких...

топовых стратегий, чтобы стать крутым разработчиком, ну даже не крутым, а быть новичинающим разработчиком, это вести публичную деятельность в виде опенсорса. Хотя он может быть, ну, часто никому, возможно, не нужен, но зато он будет что рассказать, что показать. Слушай, он… Ты понимаешь, что значит «не нужен»? Он не нужен может быть в этот момент времени, да? Там через какое-то время ты встретишь тех, кто использовал твою бюретеку, и тебе скажут, блин, ну классно, посмотри, я увидел тебя наконец-таки живьем, да?

Hexlet (01:09:44.877)
или тех, там... Чья была эта библиотека, увидят себя как коммитеры. У меня было так. Я встречался с людьми, с которыми я очень давно как-то там коммуницировал по каким-то open-source вещам, и мы на Ruby Rush и так, «О, это ж ты! Да, это ты! Ты помнишь там пять лет назад?» Да, всё, я помню пять лет назад. Поэтому нет. Open-source – это замечательно, участие в открытых проектах – это прекрасно.

Комитмент в Open Source не значит написание кода. Член Rails Core Team, Xavier Noria, который написал Zedwerk, да, то есть, ну, я считаю, очень уважаемый в рубисообществе человек, он начал свою работу с Rails с того, что находил в комментариях коду синтактические ошибки.

Ну и вообще ошибки орфографические, короче, языковые ошибки в английском языке. Что ему это дало? Он прочитал всю, весь репозиторий Rails. У меня тоже такой опыт был, это был 2013 год. Я даже не знаю вышла эта книжка или нет. Короче, чуваки писали совместно на русском языке книжку про Ruby. Блин, может вы сейчас вспомните, я тогда взял, пришёл, я помню, я начал читать её, то, что там уже было.

И понял, что там много пунктационных ошибок. И помню то, что я первые две главы прочитал, сразу везде запятые проставил там, где нужно. Ладно, мне моя жена филолог потом код-ревью сделала, чтобы я не опозорился, называется. Но вот да, то есть... И это приняли, насколько я помню. Я реально думаю, господи, ну я ж читаю, я же уже здесь. Чего мне там проставить? Вы бы знали, как я был рад, ко мне я написал курс по трибскрипту для Хекслита?

и на CodeBasics, и когда ко мне прилетали люди, которые исправляли за меня фотографические ошибки, вы не представляете, как я был рад, что кто-то этим занимается, помимо редакторов, кто-нибудь ты по-любому пропустил, и я прям с радостью их сразу опрувил, принимал, тоже был рад. Кстати, классный Contribution, и вообще у Hexlet очень много проектов для новичков, куда можно законтребьютить, и есть в том числе Hexlet CV, он, если мне не изменяет память, он на Ruby, на рельсах.

Hexlet (01:12:06.061)
Вот кажется прикольным проект, куда можно залететь, попробовать что-нибудь законтребьютить на Ruby в полезный инструмент. Я когда говорю немножко про бесполезное, это про pet projects, которые на самом деле редко кто смотрит. Я, например, всегда смотрю на интервью перед собесами, чего у есть на GitHub, захожу, смотрю, какие репозитории открыты, что он какие иши закрывал, какие у pet projects есть. Это очень круто помогает мне как нанимающему человеку.

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

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

на какую-то конструктивную беседу, пожалуйста. С огромным удовольствием. Да, я тоже был рад поучаствовать. Жалко вам не удалось, вместо меня найти кого-нибудь красивый, но что же делаешь? Время такое, знаете, да. Так что, да. Ну, подписывайтесь на Twitter, Паша. Так что и подписывайтесь на канал Хекслита. Ставьте лайки, смотрите наши видео и всем пока. Всем пока. Спасибо.

Creators and Guests

Василий Кузенков
Host
Василий Кузенков
ex-тимлид в Dualboot Partners, ведущий
Паша Калашников
Guest
Паша Калашников
Ruby-разработчик с 2012 года. Вел IT Way Podcast
№31 Нужно ли учить Ruby первым языком программирования с нуля | Игорь Александров, Паша Калашников
Broadcast by