Почему веб-фреймворки не такие простые, элегантные и увлекательные, как языки программирования? [закрыто]

10

Когда я думаю о практически любом языке программирования - таком как C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java и т. Д. - я просто удивительный, я бы хотел разработать компьютерное приложение, используя любой из этих языков.

Но когда я думаю о веб-фреймворках (я делаю в основном PHP) - таких как Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django и т. Д. - я как бог нет.

Почему нет веб-фреймворков, которые предоставляют мне простые, забавные и мощные конструкции, такие как язык программирования?

Райан
источник
2
«Я как удивительный, я хотел бы разработать компьютерное приложение, используя любой из этих языков». Вы владеете каким-либо из этих языков? Потому что любой, кто знает, что они делают, скажет вам, что ни один язык не является изящным или забавным. Это всего лишь инструменты для достижения ваших целей, а у инструментов есть свои проблемы и недостатки.
Эйфорическая
14
@Euphoric С 10-летним опытом я не согласен. Некоторые языки являются забавой работы с; другие - боль. И есть некоторые хорошо продуманные, которые также элегантны. Тем не менее, я согласен, что у всех есть свои проблемы.
Изката
@Izkata 10 лет с каждым из них?
Эйфорическая
5
@Euphoric Около 10 лет на нескольких языках, но все довольно разных типов (порядка C и Javascript) и еще около 3 лет на целую кучу. Я использовал треть из упомянутых в вопросе, и многие другие не упоминались (включая мой любимый, Rebol). Например, для меня Javascript и Rebol - это «забавные» языки, а Rebol и Lisp «элегантные» (и я слышал, что Haskell тоже, но я этого не знаю). Если вы достаточно используете язык и сталкиваетесь с его сильными и слабыми сторонами, эти «забавные» и «элегантные» мнения быстро формируются сами по себе.
Изката
4
Количество фундаментальных, атомарных концепций в языке программирования невелико и их легко понять, поэтому легко построить элегантные инструменты вокруг таких концепций. Количество неприводимых понятий, необходимых для работы простейшего веб-взаимодействия, намного больше. Сложные проблемы неизбежно приводят к сложным, безобразным решениям.
SK-logic

Ответы:

19

У меня был этот вопрос в течение многих лет, хотя я на стороне Python. У меня нет ни одного объяснения этому феномену, но вот мои мысли на эту тему:

  • Веб-фреймворки должны иметь дело с языком разметки XML - HTML, являющимся частью текущей веб-триады HTML-CSS-JavaScript клиент-серверным способом. Это означает три языка, которые взаимодействуют друг с другом, DOM браузера и модель исполнения (и модель безопасности). По сути, каждая часть функциональности («модуль») должна иметь свой код на всех трех языках. Чтобы добавить к этому, язык выбора jQuery становится еще одним языком для заботы.

  • В HTML + CSS отсутствует интуитивно понятная и математически обоснованная модель размещения объектов. Даже Tcl / Tk ИМХО лучше в определении менеджеров геометрии. Это мешает программисту определять HTML-рендеринг в строгих терминах и полагаться на удачу: «возможно, этот div будет работать большую часть времени в большинстве браузеров». С этой стороны есть некоторые позитивные события, например, HTML5 и Twitter Bootstrap.

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

  • У веб-браузеров все еще есть небольшая несовместимость, и это добавляет ненужную сложность веб-фреймворкам

  • Общая архитектура беспорядок. Это раздвоенное представление о бэкэнде и внешнем интерфейсе, которые связаны между собой запросом / ответом на внутренней стороне и рендерингом, управляемым данными, на внешней стороне. Порядок выполнения не очень четко определен (синхронизация требует усилий) и размещение стилей, сценариев в соответствующих слотах (почти все сценарии js должны быть помещены до конца тега тела и т. Д.). Кэширование - это еще один аспект, который распространяется от серверной части к прокси-серверу (-ам) и клиентской части. И я даже не упоминаю обработку форм!

  • Веб-фреймворк обязательно решает большинство из этих сложностей, добавляя множество концепций и конвейеров обработки.

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

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

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

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

Роман Суси
источник
3

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

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

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

Джастин
источник
2

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

  1. Разрыв абстракции больше в случае каркаса. Современный процедурный язык / язык ООП обеспечивает абстракцию над машиной, но сохраняет некоторые машинные конструкции (такие как присвоение переменной некоторых данных / запись некоторых данных в блок памяти или вызов процедуры и т. Д.); разрыв не так велик, в то время как фреймворк пытается обеспечить абстракцию для разработки веб-приложения, которое работает с гораздо большим количеством концепций.
  2. Фреймворки могут быть более сложными с точки зрения программиста; это как следствие первого пункта. Язык программирования довольно прост, он имеет простые конструкции (если для переменных, процедур и т. Д.). Также стандартная библиотека абстрагирует простые вещи, такие как запись в IO или использование коллекций. Стандартная библиотека также очень модульная, с небольшим или отсутствующим соединением между модулями; вам не нужно знать IO, чтобы использовать коллекции или наоборот. Следует отметить, что если некоторые части стандартной библиотеки довольно сложны, они помещаются в мини-фреймворк (например, фреймворк Java Collections или Executors). В случае с фреймворком вам нужно знать весь процесс, все части, чтобы использовать фреймворк в полную силу. Кроме того, фреймворк - это уже созданное приложение;
  3. В фреймворк заложено не так много ресурсов, как в языке программирования. Я считаю, что это не нуждается в объяснении.
m3th0dman
источник
0

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

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