Какой стек учить для инди разработки?

 Публичный пост

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

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

Задам сразу рамки:

  • Инструмент должен быть достаточно легким для освоения даже не для программиста (например, Гугл Таблицы)
  • Под разработкой я подразумеваю разработку различных сервисов в формате сайта, приложения, бота в Телеграме и тп

Например, для своего сайта я использую только HTML и этого достаточно для реализации моих проектов.

66 комментариев 👇

Экосистема JS (в т.ч. Typescript, Node). Позволяет одним стеком закрыть широчайший список задач. Для казуального программирования один из лучших выборов.

Для затравки vanilla js + html + css на клиенте, а на сервере node.js+ postgresql - дешево быстро и сердито позволяет написать абсолютно любую небольшую фигню.

  Развернуть 1 комментарий

@glebkudr, я бы кстате заменил постгрю на sqlite.

  Развернуть 1 комментарий

@slonoed, она строго сингл-юзер (даже на чтение!), но таки да, с нее удобно начинать для себя

  Развернуть 1 комментарий

@glebkudr, тут ребята научились ее запускать как baas https://turso.tech/ аналогично штукам с постгресом

  Развернуть 1 комментарий

@alroniks, sqlite это на самом деле отличная замена файловой системе, в этом качестве она работает очень круто

  Развернуть 1 комментарий

@glebkudr, она не строго single user. Можно включить WAL: https://www.sqlite.org/wal.html.

А с fly.io ее можно и вовсе использовать как распределенную eventually consistent базу: https://fly.io/docs/litefs/

  Развернуть 1 комментарий
Kirill Platonov Программист, предприниматель 14 марта в 18:34

Ничего лучше Ruby on Rails и Hotwire для быстрого бутстрапинга любых веб проектов не придумали: https://rubyonrails.org/ и https://hotwired.dev/
Вкатиться с нуля можно тут: https://gorails.com/path

Ближайшие альтернативы - Python и Django / PHP и Laravel.

JS/TS/React/GraphQL/Mongo - это стек для сжигания инвесторских денег и смены фреймворков каждые два года.

  Развернуть 1 комментарий

@kirplatonov, это же про бекенд, правильно? Или этим можно покрыть все?

  Развернуть 1 комментарий

@IvanKaptsov, это фуллстек. Rails покрывает бекенд, Hotwire фронтенд и гибридные мобильные приложения. И хорошо интегрированы между собой.

  Развернуть 1 комментарий

@kirplatonov, понял, спасибо!

  Развернуть 1 комментарий

@kirplatonov, про сжигание денег сильно не согласен. Рельсы – это только веб приложение. В запросе не было такого ограничения.

Причем в этом же веб приложении у вас скорее всего в какой-то момент образуется JS/TS (как в том анекдоте: чпок, добрый вечер)

Но на том же стеке для сжигания денег, например, можно делать еще вполне сносные мобильные приложения. А на рельсах этого делать нельзя.

  Развернуть 1 комментарий

@konclave, Rails+Hotwire это фуллстек фреймворк. Он покрывает не только бекенд, но и фронтенд. Конечно вам понадобится JS, но минимальное его количество.

Hotwire состоит из несколько библиотек:

  1. Turbo - для создания SPA-эффекта без использования SPA, с помощью частичного обновления контента без перезагрузки страниц, через обычные HTTP запросы или веб-сокеты
  2. Stimulus - для добавления бизнес логики на JS в серверный HTML
  3. Strada - для создания "сносных" гибридных мобильных приложений, которые строятся на базе сервера и Turbo

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

Но сравнивая свой личный опыт бутстрапинга инди проектов и опыт знакомых коллег - ничего продуктивнее описанной связки Rails + Hotwire сейчас на рынке нет.

  Развернуть 1 комментарий

@konclave,

на том же стеке для сжигания денег, например, можно делать еще вполне сносные мобильные приложения

Ага, и десктоп на Электроне, прости господи 😅

  Развернуть 1 комментарий

😱 Комментарий удален модератором...

  Развернуть 1 комментарий

@Berd, ну слышал и слышал 😂

  Развернуть 1 комментарий
Oleg Gromov Пишу коды, иногда некоды, предпринимаю 17 марта в 23:25

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

Иначе из "инди-разработки" состоится только разработка.

  Развернуть 1 комментарий
  1. Наверное, начнём с языка программирования JavaScript. На нём и сайт сделать интерактивным, напарсить данных, бекенд развернуть, расширение для браузера. Хотя, я пошел в сторону python, в нем тоже удобно писать скрипты и сайты в режиме фигак-фигак в продакшн. Но JavaScript всё равно нужен даже на сайте на питоне, так почему бы сразу не перейти на него?

  2. Вероятно понадбится какая-то БД. Думаю, сейчас самое универсальное это postgres, на крайняк можно хоть json в неё складывать (получаем NoSQL, хе-хе).

  3. Скорее всего понадобится знание очереди задач. Это штука, которая сама в порядке очереди передаёт запрос на какую-то функцию и следит за исполнением. Например, письма рассылать, пдф конвертить, писать промпты AI ассистенту — всё что требует какого-то времени на обработку.

  4. Тебе точно нужно будет как-то захостить твою штуку. Бот, сайт, saas сервис. В идеале, конечно, это сделать через systemd для общего как это работает на сервере. А сразу после перейти на докер, потому что удобнее. Ну или сразу фигач в докере. Хотя выдача сертификата letsencrypt в докере чутка взорвала мне мозг.

  Развернуть 1 комментарий

@Anthon, я бы отнесся к js с опаской. Без него никуда, не спорю. Но фреймворки и библиотеки появляются и устаревают быстрее, чем успеешь забутсрапить проект. Можно погнаться за модой и пропасть. Плюс почти все надо делать руками. Рельсы или Джанга по скорости и стабильности дадут большой рывок на старте.

  Развернуть 1 комментарий

@AndreiEres, тогда бутстрапим на рельсах или джанге, а на js верстаем кнопки)

  Развернуть 1 комментарий

@AndreiEres,

Но фреймворки и библиотеки появляются и устаревают быстрее, чем успеешь забутсрапить проект

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

  Развернуть 1 комментарий

@kuwabara, а это и не причина. Это условия. Причина:

Можно погнаться за модой и пропасть.

  Развернуть 1 комментарий

@AndreiEres, если что, сам реакт не обновлялся вообще последние 2 года, и в компаниях, которые любят тугосерить (например, банки) вполне себе стартуются по сей день новые проекты на ванилла реакте той самой двухлетней версии, устаревшем стартере create-react-app и даже без редуксов или наворотов для стилей (максимум sass). Про все эти новые темы аля next.js, vercel, tailwind - список можно продолжать до бесконечности - там не слышали. Более того, у них и технической необходимости использовать тот же next.js тупо нет, потому что они пилят б2б говнище

Поэтому твой тейк "фреймворки и библиотеки появляются и устаревают быстрее, чем успеешь забутсрапить проект" вызывает большие вопросы)

  Развернуть 1 комментарий

@kadron141, или наоборот, судя по твоему коменту :-)

  Развернуть 1 комментарий

@AndreiEres, я тебе и на скучном дотнете или джаве могу накидать по 10 новых и старых базз-вордов

  Развернуть 1 комментарий

@AndreiEres,

Но фреймворки и библиотеки появляются и устаревают быстрее, чем успеешь забутсрапить проект

Ну это неправда. Биг 3 фронтенд фреймов не меняются уже 12 лет, просто не нужно брать свелт и подобное, Vue/React и всё.

На бекенде аналогично, Node.js уже старый и стабильный, а Express всё ещё топ по популярности для простых апишек. Если хочется более серьезного то Nest/Adonis.

  Развернуть 1 комментарий
  • Go (на самом деле любой язык, на котором в 2024 пишут бэкенд, и который нравится)
  • HTMX для интерактивных интерфейсов
  • PostgreSQL / MongoDB. Managed, например от DigitalOcean.

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

Такой стек подойдёт для "создания почти любых проектов", но не могу не отметить, что в целом любой ЯП на сервере + голый HTML + любая БД достаточны для инди проекта, если ты хорошо программируешь (даже на JS ba dum tss)

  Развернуть 1 комментарий
Князев Денис Разработчик интерфейсов 14 марта в 11:35
  Развернуть 1 комментарий

В целом любой высокоуровневый язык, у которого есть фуллстек-фреймворки с историей в десяток-другой лет, то есть python/django, php/laravel, ruby/rails или js/(что там сейчас на жс в моде?). Готовые фреймворки сэкономят тебе кучу времени на тривиальных задачах (общение с БД, аутентификация пользователя, роутинг, кэширование, куча всего), а если ты достаточно долго/много будешь пытаться пилить свои штуки, то в конце концов можно будет выделить собственный бойлерплейт на основе выбранного фреймворка, в который можно будет засунуть всё, что нужно конкретно тебе в (почти) любом твоём проекте, это ещё сэкономит время при запуске новых приложений. Я так и сделал для себя, потому что идей много, а пилить одни и те же базовые вещи каждый раз ужасно лениво.

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

  Развернуть 1 комментарий

Если нет отвращения к JS, то я бы брал его. Есть либы под всё что угодно, есть куча всего готового. Express/Nest/Adonis (клон Laravel) для бекенда и Vue/React для фронта/серверсайда. На мобилки или через PWA или через фреймы поверх Vue/React.

Альтренатива - PHP/Laravel. Самый приятный бекенд фреймворк ин термс оф девелопер экспириенс. Есть Livewire чтобы писать интерактивный фронт без JS фреймворков. Есть Inertia чтобы писать С фреймворками гибридно, не делая полностью отдельный фронтенд.

Вторая альтрернатива - Python + Django/FastApi/Flask. Если нравится питон, вариант надёжный но штуки типа Livewire там нет, так что или по старинке или с отдельным фронтендом.

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

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

Сервер - если в европе/снг, советую таймвеб клауд, цены топ, серваки в польше и нидерландах. Есть и в РФ, там совсем копейки стоят. DO/Vultr норм но дороже, если нужно хостится в USA норм вариант.

AWS и прочий серверлесс не надо, там нужно очень хорошо понимать зачем это вам и уметь правильно всё готовить иначе можно влететь на бабки.

С развертыванием и настройкой сервера может помочь Ploi.io и подобные провижен тулы. Есть даже бесплатные вроде.

БД - mysql. Самая простая, инфы тонна, работает обычно всё из коробки из любого фреймворка. 0 проблем за 12 лет работы с ней. Потом если что переедете на NoSQL или постгрю или что то серьезнее.

В целом как то так.

  Развернуть 1 комментарий

Если вопрос именно про «учить», то никакой. Лучше взять то, что уже хорошо знаешь.

  Развернуть 1 комментарий

@AndreiEres, а если никакой?)

  Развернуть 1 комментарий

Ruby on Rails + Hotwire

  Развернуть 1 комментарий

На js ты сможешь написать практически все)

Есть всякие go, Python, php считающиеся простыми в освоение.

На самом деле я перебрал уже много языков, остановился сейчас на js/ts, понравилось что то мне фронт пилить и видеть красоту сотворенную. Вот сейчас начал засматриваться на Golang, возможно потрогаю для интереса)

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

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

В вопросе присутствует деление на ноль. Условие "для реализации почти любых проектов?" нельзя ограничивать рамками "может освоить не программист/уровень гугл таблиц".
А так, чем меньше телодвижений позволит стек, и чем ниже его порог входа, тем лучше. Я бы взял php и любой актуальный фреймворк (ларавель, к примеру) С хостингом проблем нет, на начальных этапах думаю даже все эти приколы с современной инфраструктурой типа докера и кубернетеса можно смело пропускать. Если проект разовьется во что-то более сложное, пыха позволит это реализовать. На пыхе можно писать плохо, она многое прощает. А можно писать хорошо, когда научишься. Во всех актуальных php фреймворках есть генераторы всяких интерфейсов и интеграция с актуальными js фоеймворками, и сделано это таким образом, что если задача простая и типовая, то о js слое думать не нужно. Ну и в заключение могу сказать, что серебряной пули нет, а "любой проект" может реализовать только "любой программист"

  Развернуть 1 комментарий

Вот народ накинул про сайтостроение, но ведь не всегда же инди про это.

Если бы я с нуля сейчас занимался бы прикладным ML, то самую хайповую тему, а именно языковые модельки, я бы делал в одно лицо при помощи:

  • понятно питон, не душить змею не получится
  • huggingface+langchain для интерфейсов моделей и обвесов для неё
  • streamlit для примитивной веб-формочки, чтобы с ней работать
  Развернуть 1 комментарий

@mighty_conrad, а откуда данные брать?

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@ganqqwerty, вопрос какой-то уровня "тыкнуть в небо". Если мы про LLMки, то:

  • До 100 документов я бы в принципе не лез в тренировку, а обвешивал модель RAGом

-Больше трогал в рамках туторов, например файнтюнить OpenLLaMa-3B можно на 10к пар вопрос-ответ, типа No_Robots https://huggingface.co/datasets/HuggingFaceH4/no_robots, на больше у меня железа нет, а я всё ещё верю в обязательность инхауса для своих проектов.

  • Для чего-то серьёзного руки не доходили сами, я сошлюсь на оценки Карпатого и скажу, что файнтюнить абстрактную LLM в вакууме на узкую задачу может потребовать до 100к качественно размеченных объектов для тренировки.
  Развернуть 1 комментарий
Витя Лившиц Софтварный работяга 14 марта в 10:07

Не благодари
https://create.t3.gg/

upd: прошу прощения, я перегрелся на работе и не дочитал тему...

  Развернуть 1 комментарий

@livshitsVitya, можешь в паре слов рассказать, для чего это и почему это то, что нужно?

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

@livshitsVitya, мне кажется, что уже по первому пункту "Инструмент должен быть достаточно легким для освоения даже не для программиста" не проходит. По второму тоже частично. Похоже, действительно "не благодари" =)

  Развернуть 1 комментарий

@konclave, что-то меня бес попутал.... простите, пожалуйста....

  Развернуть 1 комментарий

@livshitsVitya, звучит сложно, но интересно на самом деле. Мне советовали изучить и использовать TypeScripts, предполагаю, что он не далеко по сложности от T3

  Развернуть 1 комментарий

@livshitsVitya, зря удалил, хорошо что в Телеграме в боте остались сообщения

  Развернуть 1 комментарий

@IvanKaptsov, ну тут тогда нужно определиться с критериями. Либо нужно легкий в освоении даже не для программиста, либо сложно и интересно.

Легко и сложно это взаимоисключающие критерии.

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

  Развернуть 1 комментарий

@livshitsVitya, блин, как вернуть всё в зад :(

  Развернуть 1 комментарий

@ste1v0, если Витя разрешит, могу обратно вставить его сообщения

  Развернуть 1 комментарий

@konclave, ага, понимаю. Отвечу также как Вите ответил:

Мне интересны разные инструменты, которые я могу использовать, главное чтобы велью было соответствующее.
То есть условно я изучаю HTML за неделю и могу сделать простой статичный сайт. Или за пол года изучить какой-то инструмент, который мне позволит почти любой крутости сайт собрать. Понятно, что нужно будет доучиваться в процессе, но тут вопрос во что инвестировать время и голову)

  Развернуть 1 комментарий

@IvanKaptsov, мне кажется, что NextJS это не то, с чего нужно начинать, потому что это уже как бы абстракция над абстракциями. И только для веба.

Если мы берем только веб, то он работает на html, css + javascript + http. То есть чтобы сделать что-то, работающее в браузере, нужно изучить эти три языка и концепции + иметь представление, как это все данные к себе затягивает.

Дальше нужно понять что такое Typescript и как он превращается в javascript – то есть тулинг. Иначе не очень понятно – ты написал одно, а в браузере другое. Как так?

React это тоже как бы абстракция над html + typescript – библиотека со своим синтаксисом, чтобы писать приложения

Tailwind – надстройка над css тоже со своим синтаксисом.

Переезжаем на бэкенд – нам же откуда-то надо данные отдавать. Ну и html и css тоже кто-то отдавать должен.

NextJS - это еще одна коробка в которую закиданы React и еще куча всего.

Подождите, но реакт это же для того чтобы в браузере? А, еще серверные компоненты есть? А что, зачем, чем отличается?

ORM? Это что такое? Еще абстракция? А что под ней? Базы данных? Ой, а они тоже разные бывают? tRPC? это зачем? Это как GraphQL только с типами написано? А что такое GraphQL? что такое RPC?

В общем, выглядит для начала просто неопреодолимо сложно, на мой взгляд.

Возможно, надо ограничить сложность технологий, например только html,css и какой-нибудь Django с питоном, чтобы был только бэкенд + база фронта.

Или начать вообще с ботиков в телеге, потому что там даже фронта не нужно.

  Развернуть 1 комментарий

@konclave, а javascript отбросить на раннем этапе?

  Развернуть 1 комментарий

@IvanKaptsov, если начинать с нуля, то, на мой взгляд, нужно ограничить область изучения.

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

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

Лучше начать с малого и наращивать, чем начать с чего-то грандиозного и слиться не дойдя до середины.

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

  Развернуть 1 комментарий

@IvanKaptsov, Я не фронтэндер, но мне кажется что любой сайт можно собрать на html+css+js. Просто потому что все остальные инструменты так или иначе на них написаны.

Инструменты это про корпорации, устойчивость, простоту кода.

У вастрика кажется был лонгрид про это: https://vas3k.blog/notes/indie_vs_corpo/

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

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@achevozerov,

Я не фронтэндер, но мне кажется что любой сайт можно собрать на html+css+js. Просто потому что все остальные инструменты так или иначе на них написаны.

На базовом уровне это так, но пилить функциональные веб-приложения на ванилла js/css это занятие, мягко говоря, непростое и неэффективное. Очень много будет копипасты, очень много времени будет уходить на тупорылые действия по типу отобразить элемент/спрятать элемент и так далее. Весь тулинг же был придуман, чтобы сложное было делать проще, а сложное здесь начинается с todo-app

На ванильном стэке можно кое-как пилить информацинные сайты-визитки, но и то это во многом обезьянья работа

  Развернуть 1 комментарий

@kadron141, а что тогда учить?

  Развернуть 1 комментарий

@IvanKaptsov, возвращай 😌

  Развернуть 1 комментарий

@livshitsVitya, это консольная утилита, позволяющая поднять fullstack приложение на тайпскрипте, с уже прикрученной авторизацией, prisma ORM для бд, trpc для fully typesafe http. Тебе останется просунуть пару ключей от удаленной базы (советую Railways или PlanetScale если postgtress захочешь условный или монгу, но для начала можешь обойтись локальной sqlite) в локальный конфиг, ключ для способа авторизации OAuth, который ты выберешь. Затем пушишь в гитхаб, подсоединаешь это все к vercel. Поздравляю, твое приложение полностью готово к тому, чтобы обмазываться бизнес-фичами. В следующий раз ты вспомнишь про инфру тогда, когда количество юзеров перевалит за бесплатный тир версела

  Развернуть 1 комментарий

@livshitsVitya, вот тут идейный вдохновитель этого стека фундаментально рассказывает про технологии внутри
(

)

  Развернуть 1 комментарий

@IvanKaptsov & @livshitsVitya, спасибо! <3

  Развернуть 1 комментарий

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

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

  Развернуть 1 комментарий

@livshitsVitya, Из того же разряда но генерит чуть больше:
https://kirimase.dev/

  Развернуть 1 комментарий

Если рассматриваете no-code, то Bubble для более сложных веб-сервисов, или Webflow/Wix для сайтов формата лендингов.

  Развернуть 1 комментарий

JS(TS) + Tailwind + React + Next + Supabase - для веба + бека
JS(TS) - для нэйтива

Если DL, то питон придётся поучить

  Развернуть 1 комментарий

@chashechnikovvadim, вот да, тоже к этому скатился. Начинал с R, через питон, но если планируется хоть какая-то масштабируемость, то JS и вся его инфраструктура.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб