Web çerçeveleri neden programlama dilleri gibi basit, zarif ve eğlenceli değil? [kapalı]


10

C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java, vb.Gibi herhangi bir programlama dilini düşündüğümde - herhangi bir kullanarak bir bilgisayar uygulaması geliştirmeyi çok isterim bu dillerin.

Ama web çerçevelerini düşündüğümde (çoğunlukla PHP yapıyorum) - Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django, vb.

Neden bana bir programlama dili gibi basit, eğlenceli ve güçlü yapılar sağlayan web çerçeveleri yok?


2
"Bu dillerden herhangi birini kullanarak bir bilgisayar uygulaması geliştirmeyi çok isterim." Ve bu dillerden herhangi birinde usta mısınız? Çünkü ne yaptığını bilen biri size hiçbir dilin zarif ya da eğlenceli olduğunu söylemeyecektir. Bunlar sadece hedeflerinize ulaşmak için araçlardır ve araçların sorunları ve kusurları vardır.
Euphoric

14
@Euphoric 10 yıllık tecrübemle katılmıyorum. Bazı diller şunlardır çalışmak eğlenceli; diğerleri acıdır. Ve zarif olan bazı iyi tasarlanmış olanlar da var. Ancak hepsinin kendi sorunları olduğunu kabul ediyorum.
Izkata

@Izkata 10 yıl sonra hepsiyle mi?
Euphoric

5
@Euphoric Bir avuç dilde yaklaşık 10 yıl, ancak oldukça farklı türlerin tümü (C'ye karşı Javascript sırasına göre) ve yaklaşık 3 yıl daha bir sürü. Soruda belirtilenlerin üçte birini kullandım ve daha pek çok şey belirtilmedi (en sevdiğim Rebol dahil). Benim için, örneğin, Javascript ve Rebol "eğlenceli" dillerken, Rebol ve Lisp "zarif" (Haskell'in de olduğunu duydum, ama bilmiyorum). Eğer bir dili yeterince kullanırsanız ve güçlü ve zayıf yanlarına karşı koyarsanız, bu "eğlenceli" ve "zarif" görüşler hızla kendi başlarına oluşur.
Izkata

4
Bir programlama dilindeki temel, atomik kavramların sayısı küçüktür ve anlaşılması kolaydır, bu nedenle bu kavramlar etrafında zarif araçlar oluşturmak kolaydır. En basit web etkileşimini çalıştırmak için gereken indirgenemez kavramların sayısı çok daha fazladır. Karmaşık sorunlar kaçınılmaz olarak karmaşık, çirkin çözümler üretmektedir.
SK-logic

Yanıtlar:


19

Python tarafında olmama rağmen yıllarca bu soruyu sordum. Bu fenomen için tek bir açıklamam yok, ama işte konu hakkındaki düşüncelerim:

  • Web çerçeveleri XMLish biçimlendirme dili - HTML, mevcut web-triad HTML-CSS-JavaScript'in bir istemci-sunucu yolu ile ilgilenmelidir. Birbiriyle etkileşime giren üç dil, bir tarayıcı DOM ve yürütme modeli (ve güvenlik modeli) anlamına gelir. Aslında, her işlevsellik parçasının (bir "modül") kodu üç dilde de olmalıdır. Buna ek olarak, jQuery'nin seçici dili bakımı bir dil daha haline geliyor.

  • HTML + CSS, nesneleri yerleştirmek için sezgisel ve matematiksel olarak sağlam bir modelden yoksundur. Tcl / Tk bile geometri yöneticilerini tanımlamada IMHO'dan daha iyidir. Bu, programcının HTML oluşturmayı katı terimlerle tanımlamasını ve bunun yerine şansa güvenmesini önler: "belki bu div çoğu zaman tarayıcıların çoğunda çalışır". Yine de bu tarafta bazı olumlu gelişmeler var, örneğin HTML5 ve Twitter Bootstrap.

  • Web teknolojisi organik olarak büyüdü ve çerçeveler onunla büyüdü, bu yüzden şekilleri zarif gerekli değil. Bu, programcının yetersiz olan, kullanımdan kaldırılacak API'leri hatırlaması gerektiği anlamına gelir.

  • Web tarayıcılarının hala küçük uyumsuzlukları vardır ve web çerçevelerine gereksiz karmaşıklık katar

  • Genel mimari bir karmaşa. Bu, arka uç tarafında istek / yanıt ve ön uç tarafında veriye dayalı oluşturma ile birbirine bağlanan arka uç ve ön ucun bölünmüş bir düşüncesidir. Yürütme sırası çok iyi tanımlanmamıştır (senkronizasyon çaba gerektirir) ve stilleri, komut dosyalarını uygun yuvalara yerleştirmek gerekir (neredeyse tüm js komut dosyalarının gövde etiketinin sonundan önce yerleştirilmesi gerekir). Önbellekleme, arka uçtan proxy'ye / sunuculara ön uçtan geçen bir başka özelliktir. Ve form işlemeden bile bahsetmiyorum!

  • Web çerçevesi mutlaka bir çok kavram ve işleme borusu ekleyerek bu karmaşıklıkların çoğunu ele alır.

  • Web endüstrisinde emek genellikle grafik tasarımcı, web tasarımcısı / web programcısı ve arka uç programcısı arasında en az rol olarak ayrılır. İlk ikisinin programlama becerileri olması gerekmez, bu yüzden farklı bir soyutlamaya ve araçlara ihtiyaç duyarlar ve çerçeveler de onları kolaylaştırmalıdır.

Özetle, web çerçeveleri çok fazla karmaşıklık oluşturmaya çalışmaktadır (karmaşıklığın kendisi büyüyor), ancak standartların ve diğer hareketli parçaların hızlı gelişimi nedeniyle elde edilmesi çok zordur. Programlama dilleri çok daha olgunlaşır, çünkü yeni özelliklerin kullanılmaması genellikle bir sorun değildir.

Bence, uygun bir web çerçevesi oluşturmak ancak GUI standartları yürürlüğe girdikten (mobil cihazlar gibi farklı çalışma modlarını kapsayan) ve altta yatan teknolojiler yeterince kararlı hale geldikten sonra mümkün olacaktır.

Web-çerçevelerinde basit yapılar bulunmaz, çünkü web-teknoloji alanında böyle bir şey yoktur. Düşük seviyeli soyutlamalar mutlaka daha yüksek seviyeye sızmaktadır.


3

Bence bunların çoğu WWW sınırlamaları ile ilgili. Özellikle, durumu sunucu ve istemci arasında depolamanın yerleşik bir yolu yoktur. İstemci bazı veriler ister, sunucu bunu sağlar ve bağlantı kapatılır. Bu nedenle, tüm bu web platformları, sunucu çağrıları arasında durum koruma yöntemlerini bir araya getirmelidir.

Bir kez küçük bir web uygulaması yapmak zorunda kaldım ve o zaman hiç sunucu / istemci programlama yapmamıştım. Hepsini anlamak için birkaç hafta sürdü ve en zor kısmı, istemci ve sunucunun bulunduğu yeri takip etmek için kafamı bulmaya çalışıyordu.

Bu hiç değişecek mi? Şüpheliyim. Web mimarisinde köklü bir değişiklik gerektirecektir.


2

Genel olarak, nedenleri birden fazla olabilir:

  1. Çerçeve durumunda soyutlama boşluğu daha büyüktür. Modern bir yordamsal / OOP dili, bir makine üzerinde soyutlama sağlar, ancak bazı makine yapılarını tutar (bir değişkene bazı veriler atama / bellek ünitesine bazı veriler yazma veya bir prosedür çağırma vb.); bir çerçeve çok daha fazla kavramla çalışan bir web uygulaması geliştirmek için soyutlama sağlamaya çalışırken, boşluk o kadar büyük değil.
  2. Çerçeveler programcının bakış açısından daha karmaşık olabilir; bu ilk noktanın bir sonucu gibidir. Bir programlama dili oldukça basittir, basit yapıları vardır (değişkenler, prosedürler vb. İçin). Ayrıca standart kütüphane ES'ye yazma veya koleksiyonları kullanma gibi basit şeyleri özetler. Standart kütüphane aynı zamanda çok modülerdir, başka bir modülle modül arasında çok az bağlantı vardır veya hiç yoktur; koleksiyonları kullanmak için ES'yi bilmenize veya tam tersini yapmanız gerekmez. Standart kitaplığın bazı bölümleri oldukça karmaşıksa, mini bir çerçeveye yerleştirildiklerine dikkat edilmelidir (örn. Java Koleksiyonlar Çerçevesi veya Yürütücüler çerçevesi). Çerçeve durumunda, çerçeveyi tam gücüyle kullanmak için tüm akışı, tüm parçaları bilmeniz gerekir. Ayrıca, aa çerçevesi zaten oluşturulmuş bir uygulamadır;
  3. Bir programlama dilinde olduğu kadar çok kaynak bir çerçeveye konmaz. Bunun açıklanması gerekmediğine inanıyorum.

0

Ah, ama bunun tam olarak sorun olduğunu görüyorsun. Çerçevelerin Turing tamamlanmış olması gerekmez. Özlü bir şekilde belirli bir dizi görevi yerine getirmek için bir araya getirilebilen daha kısıtlı soyutlamalardan oluşmaları beklenir. Yani bahsettiğiniz tüm çerçeveler tam olarak eğlenceli değil çünkü sınırlı bir soyutlama seti sunmuyorlar. İçlerinden daha sızdıran soyutlamalar sağlarlar ve kendi başlarına tamamlanması muhtemel olan soyut bir makine oluştururlar. " Tuhaf makineler " kavramı aklıma gelen en yakın şey. Tüm bu çerçeveler web uygulamaları için "garip makinelerdir" ve "garip makineler" bir çerçevenin ne olması gerektiğinin tam tersidir.


1
+1 veriyorum, çünkü yazının başıboş doğasına rağmen, çerçevelerin mutlaka Turing-complete olmadığı doğru. Bu tam bir genel amaçlı dilin çekicilerinden biridir, nasıl olduğunu biliyorsanız her şeyi yapma yeteneği.
Izkata
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.