Когда я думаю о практически любом языке программирования - таком как C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java и т. Д. - я просто удивительный, я бы хотел разработать компьютерное приложение, используя любой из этих языков.
Но когда я думаю о веб-фреймворках (я делаю в основном PHP) - таких как Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django и т. Д. - я как бог нет.
Почему нет веб-фреймворков, которые предоставляют мне простые, забавные и мощные конструкции, такие как язык программирования?
Ответы:
У меня был этот вопрос в течение многих лет, хотя я на стороне Python. У меня нет ни одного объяснения этому феномену, но вот мои мысли на эту тему:
Веб-фреймворки должны иметь дело с языком разметки XML - HTML, являющимся частью текущей веб-триады HTML-CSS-JavaScript клиент-серверным способом. Это означает три языка, которые взаимодействуют друг с другом, DOM браузера и модель исполнения (и модель безопасности). По сути, каждая часть функциональности («модуль») должна иметь свой код на всех трех языках. Чтобы добавить к этому, язык выбора jQuery становится еще одним языком для заботы.
В HTML + CSS отсутствует интуитивно понятная и математически обоснованная модель размещения объектов. Даже Tcl / Tk ИМХО лучше в определении менеджеров геометрии. Это мешает программисту определять HTML-рендеринг в строгих терминах и полагаться на удачу: «возможно, этот div будет работать большую часть времени в большинстве браузеров». С этой стороны есть некоторые позитивные события, например, HTML5 и Twitter Bootstrap.
Веб-технологии выросли органически, а фреймворки выросли вместе с ними, поэтому их форма не обязательно должна быть элегантной. Это означает, что программист должен помнить API-интерфейсы, которые являются неоптимальными, устаревшими и т. Д.
У веб-браузеров все еще есть небольшая несовместимость, и это добавляет ненужную сложность веб-фреймворкам
Общая архитектура беспорядок. Это раздвоенное представление о бэкэнде и внешнем интерфейсе, которые связаны между собой запросом / ответом на внутренней стороне и рендерингом, управляемым данными, на внешней стороне. Порядок выполнения не очень четко определен (синхронизация требует усилий) и размещение стилей, сценариев в соответствующих слотах (почти все сценарии js должны быть помещены до конца тега тела и т. Д.). Кэширование - это еще один аспект, который распространяется от серверной части к прокси-серверу (-ам) и клиентской части. И я даже не упоминаю обработку форм!
Веб-фреймворк обязательно решает большинство из этих сложностей, добавляя множество концепций и конвейеров обработки.
В веб-индустрии труд обычно распределяется между графическим дизайнером, веб-дизайнером / веб-программистом и программистом бэкенда в качестве минимального набора ролей. Первые два не обязательно имеют навыки программирования, поэтому им нужны разные абстракции и инструменты, и фреймворки должны облегчать их тоже
Таким образом, веб-фреймворки пытаются абстрагироваться от множества сложностей (сами усложняются), но этого очень трудно достичь из-за быстрой разработки стандартов и других движущихся частей. Языки программирования гораздо более зрелые, потому что обычно не проблема не использовать новые функции.
Я думаю, что создание удобной веб-инфраструктуры будет возможно только после того, как будут внедрены стандарты GUI (охватывающие различные режимы работы, например, мобильные устройства), и базовые технологии будут достаточно стабильными.
Веб-фреймворкам не хватает простых конструкций, потому что в области веб-технологий таких вещей нет. Абстракции нижнего уровня обязательно переходят на более высокий уровень.
источник
Я думаю, что многое из этого связано с ограничениями WWW. В частности, нет встроенного способа хранения состояния между сервером и клиентом. Клиент запрашивает некоторые данные, сервер предоставляет их, и соединение закрывается. Таким образом, все эти веб-платформы должны объединить свой собственный метод сохранения состояния между вызовами сервера.
Я должен был сделать небольшое веб-приложение один раз, и в то время я никогда не занимался программированием сервера / клиента. Мне потребовалось несколько недель, чтобы понять все это, и самое сложное - попытаться понять, где находятся клиент и сервер.
Это когда-нибудь изменится? Я сомневаюсь в этом. Это потребует фундаментальных изменений в архитектуре сети.
источник
Вообще говоря, причин может быть несколько:
источник
Ах, но вы видите, что это именно проблема. Каркасы не должны быть завершены по Тьюрингу. Предполагается, что они состоят из более ограниченных абстракций, которые могут быть составлены вместе для выполнения определенного набора задач в сжатой форме. Так что все упомянутые вами фреймворки неинтересны именно потому, что они не предоставляют ограниченный набор абстракций. Они предоставляют неплотные абстракции, чем сами по себе, составляют абстрактную машину, которая, скорее всего, завершена по Тьюрингу. Понятие " странные машины " - самое близкое, о чем я думаю. Все эти фреймворки являются «странными машинами» для веб-приложений, и «странная машина» является противоположностью того, чем должна быть фреймворк.
источник