Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?
Всем добра, вопрос от чайника, прошу сильно не бить по голове). Изучаю питон и Джанго. И у меня появились вопросы по поводу использования Django. Он конечно очень удобный, позволяет на лету сделать любой не динамический сайт, встроенная система аутентификации, удобная админка, свой REST Api. Итого мы получим хоть и работающий, но голый скелет. Прикрутив Bootstrap мы немного приукрасим скелет, но он все равно не будет отвечать требованиям современных динамических сайтов, типа асинхронная подгрузка комментов, вывод онлайн лайков, дизлайков. Все это может реализовать только умелый js программист. А так как мы бэкенд написали на Django, то для этого программиста придется писать REST Api и затачивать под его требования. И таким образом для получения полноценного сайта нам нужны усилия трех разных человек - дизайнер, питонист, яваскриптер. И допустим если питонист уволится, запьет - яваскриптер не сможет временно заменить его и продолжить работу. Или если яваскриптер уйдет - питонист тоже не сможет делать его работу. В итоге проект повиснет в ожидании исполнителя. А если у нас и фронтенд, и бэкенд будут на javascript, у нас и программисты друг друга лучше будут понимать, да и в случае чего один другого временно может заменить. Ведь многие же яваскриптеры изначально начинают работу с фронтенда, а потом некоторые переходят в бэкенд. А Python разработчики имеют дело в основном только с бэкенд - и понятия про фронтенд у них будут на уровне dummy html, css, bootstrap. В итоге получается что у JS огромное преимущество перед Python в области разработки сайтов, так как на нем можно сразу писать и бэк, и фронт.
1) Если мы пишем фронтовую часть на js это не значит что мы сможем писать бэк на js. Его тоже нужно учить и понимать как всё функционирует.
2) Дело не в удобстве а в том, для чего каждый инструмент подходит лучше в разных ситуациях.
Кому-то нравится синтаксис. Кто-то привык использовать другие инструменты и тд.
В общем если ты не знаком с конкретным инструментом, будь он на том же языке, это тебе не сильно поможет.
Однако. Если ты понимаешь как устроено направление. Это будет в разы полезнее.
Бекенд - это не язык. Это понимание соответствующих технологий работы с базами данных, кешированием, работы со структурами данных, протоколами, технологиями, алгоритмами, построением архитектуры и связыванием с внешними сервисами и прочее...
А поскольку это охватывает очень большой пласт проблем - и произошла специализация.
А Python разработчики имеют дело в основном только с бэкенд - и понятия про фронтенд у них будут на уровне dummy html, css, bootstrap.
Угу... При таком подходе - с чего вы взяли тогда что у фронта будут достаточные знания о работе бекенда? Раз по-вашему бекендер только в dummy html может, - а фронтендер сразу с ходу сможет оптимизированные запросы к БД к примеру писать? )))) Если ваш фронтендер настолько крут - то в принципе незнание языка не помеха, поскольку язык - только инструмент.
Вроде стало чуть понятнее. Дело в том, что с яваскриптом, да и вообще фронтендом отношения у меня ниже уровня чайника. И пока не до конца понимаю понимаю работу фронтенда - а именно откуда он берет данные для всяких "асинхронных" вызовов и безопасность этих вызовов. Допустим у нас есть динамический чат с системой лайков, дизлайков на js, как было во многих онлайн браузерных играх. Вроде по правилу разделения на бекенд и фронтенд, клиентская часть не должна иметь прямой доступ к серверной части. А значит этот чат должен напрямую обращаться к серверу. И тут я захожу в тупик - как лучше с фронта брать данные с бэка? Делать доступ через REST, писать какие-то http запросы для получения данных.. и как тогда бекенду на Django работать с таким динамическим фронтом и передавать ему данные. В общем в голове снова каша)
lutokris, разные подходы могут быть. Для чата быстрее всего сокеты на стороне сервера поднимать надо, к примеру, а на стороне фронта просто "слушать" сокеты, и выводить оттуда сообщения, либо отправлять.
Фронт будет в данном случае будет общаться посредством сокетов.
lutokris, добавлю про сокеты, в Django сокеты реализуют с помощью фреймворка Django Channels (3 последняя версия). При открытие сокета напрямую связи с серверной частью у клиента нет, взаимодействие происходит только в рамках обработчика получненных сообщений на серверной части с клиентской части по ранее открытому соединению.
Тоже самое с REST. Все в каком-то смысле очень тривиально. Чтобы к примеру ассинхронно пулить данные динамечески на страницу, можно юзать (ну я точнее юзаю) AJAX на фронте, просто кидаешь json по нужному url и получаешь туда же ответ, ну или не получаешь, смотря что ожидаешь. Дальше уже делаешь с полученными данными все что хочешь.
Так что на самом деле написать динамический и соответствующий современным требованиям сайт на Django вполне реально. Я сам не так давно изучаю, тоже думал что с этим много проблем, но оказалось все проще.
Но в тоже время, Django всё-таки не позиционирует себя как ассинхронный фреймворк, поэтому если нужна "трушная" ассинхронность, то лучше глянуть в сторону того же Tornado. В сравнение с Django более низкоуровневый, но прекрасно работает с ассинхроном.
JavaScript - очень плохой язык, который выжил только благодаря его безальтернативности на фронте, а Node.js была создана только для того, чтобы открыть доступ в мир взрослого программирования несчастным засранцам, вкатившимся через фронт. Причём сам создатель Node.js считает её ошибкой. Лучше уж тогда развернуть ситуацию и писать фронтовый код на чём-нибудь вроде Brython. Только остаётся ещё html и css, а использовать настоящего программиста для вёрстки - это глупый расход ресурсов, проще нанять верстальщика/фронта.
Alexandroppolus, TS лучше JS, но система типов и статический анализ у него серьёзно проигрывает другим компиляторам, а в рантайме всё ещё остаётся слабая динамическая типизация.
В итоге получается что у JS огромное преимущество перед Python в области разработки сайтов, так как на нем можно сразу писать и бэк, и фронт.
Вообще вы не правы, есть много вакансий, на которые нужны только Node.js разрабы.
В итоге проект повиснет в ожидании исполнителя.
А если разраб один, то вообще всё повиснет если он уйдёт. Фулстеков на джанго не намного меньше чем фулстеков на js.
Прикрутив Bootstrap мы немного приукрасим скелет, но он все равно не будет отвечать требованиям современных динамических сайтов, типа асинхронная подгрузка комментов, вывод онлайн лайков, дизлайков. Все это может реализовать только умелый js программист.
Для проектов у которых есть 2 программиста обычно это не ключевые моменты (да и не все пишут соц. сети и клоны ютубов). Есть проекты, где статических сайтов будет достаточно, а если работодатель хочет дешево заплатить за сложную работу, то он должен понимать к чему это может привести.