Tại sao các khung web không đơn giản, thanh lịch và thú vị như ngôn ngữ lập trình? [đóng cửa]


10

Khi tôi nghĩ về hầu hết mọi ngôn ngữ lập trình - như C, C ++, PHP, SQL, JavaScript, Python, ActionScript, Haskell, Lua, Lisp, Java, v.v. - Tôi rất thích phát triển ứng dụng máy tính bằng bất kỳ của những ngôn ngữ đó.

Nhưng khi tôi nghĩ về các khung web (tôi chủ yếu là PHP) - như Cake, CI, Symfony, Laravel, Zend, Drupal, Joomla, Wordpress, Rails, Django, v.v. - Tôi giống như thần không.

Tại sao không có các khung web cung cấp cho tôi các cấu trúc đơn giản, thú vị và mạnh mẽ như ngôn ngữ lập trình?


2
"Tôi rất tuyệt vời, tôi rất thích phát triển một ứng dụng máy tính sử dụng bất kỳ ngôn ngữ nào." Và bạn có thành thạo bất kỳ ngôn ngữ nào không? Bởi vì bất cứ ai biết những gì họ đang làm sẽ nói với bạn rằng không có ngôn ngữ nào là thanh lịch hay vui vẻ. Chúng chỉ là công cụ để đạt được mục tiêu của bạn và là công cụ có vấn đề và sai sót.
Euphoric

14
@Euphoric Với 10 năm kinh nghiệm, tôi không đồng ý. Một số ngôn ngữ rất thú vị để làm việc với; những người khác là một nỗi đau. Và có một số được thiết kế tốt là thanh lịch, là tốt. Tuy nhiên, tôi đồng ý rằng tất cả họ đều có vấn đề riêng.
Izkata

@Izkata 10 năm với mỗi người trong số họ?
Euphoric

5
@Euphoric Khoảng 10 năm trong một số ít ngôn ngữ, nhưng tất cả các loại khá khác nhau (theo thứ tự C so với Javascript) và khoảng 3 năm nữa. Tôi đã sử dụng một phần ba trong số những câu hỏi được đề cập trong câu hỏi và nhiều câu hỏi khác không được đề cập (bao gồm cả yêu thích của tôi, Rebol). Ví dụ, đối với tôi, Javascript và Rebol là ngôn ngữ "vui vẻ", trong khi Rebol và Lisp là "thanh lịch" (và tôi cũng nghe nói Haskell cũng vậy, nhưng tôi không biết điều đó). Nếu bạn sử dụng một ngôn ngữ đủ và chạy theo những điểm mạnh và điểm yếu của nó, những ý kiến ​​"vui vẻ" và "thanh lịch" này sẽ nhanh chóng tự hình thành.
Izkata

4
Số lượng các khái niệm cơ bản, nguyên tử trong ngôn ngữ lập trình là nhỏ và dễ hiểu, do đó dễ dàng xây dựng các công cụ thanh lịch xung quanh các khái niệm đó. Số lượng các khái niệm không thể giảm được yêu cầu để vận hành tương tác web đơn giản nhất là một cách lớn hơn nhiều. Các vấn đề phức tạp là không thể tránh khỏi việc tạo ra các giải pháp phức tạp, xấu xí.
SK-logic

Câu trả lời:


19

Tôi đã có câu hỏi này trong nhiều năm, mặc dù tôi ở bên Python. Tôi không có một lời giải thích nào cho hiện tượng này, nhưng đây là suy nghĩ của tôi về chủ đề này:

  • Các khung công tác web phải xử lý ngôn ngữ đánh dấu XML - HTML, một phần của bộ ba HTML-CSS-JavaScript hiện tại theo cách máy chủ-máy khách. Nó có nghĩa là ba ngôn ngữ, tương tác với nhau, một DOM trình duyệt và mô hình thực thi (và mô hình bảo mật). Trong thực tế, mỗi phần chức năng (một "mô-đun") phải có mã của nó trong cả ba ngôn ngữ. Để thêm vào điều này, ngôn ngữ bộ chọn của jQuery đang trở thành một ngôn ngữ cần quan tâm hơn.

  • HTML + CSS thiếu mô hình âm thanh trực quan và toán học để đặt các đối tượng. Ngay cả Tcl / Tk cũng IMHO tốt hơn trong việc xác định các trình quản lý hình học. Điều này ngăn lập trình viên xác định kết xuất HTML theo các thuật ngữ nghiêm ngặt và dựa vào may mắn thay vào đó: "có lẽ div này sẽ hoạt động hầu hết thời gian trong hầu hết các trình duyệt". Có một số phát triển tích cực ở bên này, ví dụ, HTML5 và Twitter Bootstrap.

  • Công nghệ web đã phát triển một cách hữu cơ và các khung đã phát triển cùng với nó, vì vậy hình dạng của chúng không cần thiết phải thanh lịch. Điều đó có nghĩa là lập trình viên nên nhớ các API không tối ưu, sẽ bị phản đối, v.v.

  • Các trình duyệt web vẫn có sự không tương thích nhẹ và nó làm tăng thêm độ phức tạp không cần thiết cho các khung web

  • Kiến trúc tổng thể là một mớ hỗn độn. Đó là một suy nghĩ phân tách về back-end và frontend, được gắn liền với yêu cầu / phản hồi ở phía phụ trợ và kết xuất dựa trên dữ liệu ở phía trước. Thứ tự thực hiện không được xác định rõ ràng (đồng bộ hóa đòi hỏi nỗ lực) và việc đặt các kiểu, tập lệnh vào các vị trí thích hợp là bắt buộc (hầu như tất cả các tập lệnh js cần được đặt trước khi kết thúc thẻ body, v.v.). Bộ nhớ đệm là một khía cạnh khác, trải dài từ phụ trợ đến proxy (ies) đến giao diện người dùng. Và tôi thậm chí không đề cập đến việc xử lý biểu mẫu!

  • Web-framework nhất thiết phải xử lý hầu hết các phức tạp này bằng cách thêm rất nhiều khái niệm và đường ống xử lý.

  • Trong lao động ngành công nghiệp web thường được phân chia giữa người thiết kế đồ họa, người thiết kế web / lập trình web và lập trình viên phụ trợ như một nhóm vai trò tối thiểu. Hai cái trước không nhất thiết phải có kỹ năng lập trình, vì vậy chúng cần một sự trừu tượng và công cụ khác nhau, và các khung cũng sẽ tạo điều kiện cho chúng

Tóm lại, các khung web cố gắng trừu tượng rất nhiều sự phức tạp (tự phát triển phức tạp), nhưng rất khó đạt được do sự phát triển nhanh chóng của các tiêu chuẩn và các bộ phận chuyển động khác. Ngôn ngữ lập trình trưởng thành hơn nhiều, vì thường không có vấn đề gì khi không sử dụng các tính năng mới.

Tôi nghĩ rằng, việc tạo khung web thuận tiện sẽ chỉ có thể thực hiện được sau khi các tiêu chuẩn GUI được đưa ra (bao gồm các chế độ hoạt động khác nhau, chẳng hạn như thiết bị di động) và các công nghệ cơ bản sẽ đủ ổn định.

Các khung web thiếu các cấu trúc đơn giản vì không có những thứ như vậy trong miền công nghệ web. Trừu tượng cấp thấp hơn nhất thiết phải rò rỉ đến cấp cao hơn.


3

Tôi nghĩ rằng rất nhiều trong số đó phải làm với những hạn chế của WWW. Cụ thể, không có cách nào được xây dựng để lưu trữ trạng thái giữa máy chủ và máy khách. Một khách hàng yêu cầu một số dữ liệu, máy chủ cung cấp nó và kết nối được đóng lại. Như vậy, tất cả các nền tảng web này phải kết hợp phương pháp riêng để giữ trạng thái giữa các cuộc gọi máy chủ.

Tôi đã phải tạo một ứng dụng web nhỏ một lần và tại thời điểm đó tôi chưa bao giờ thực hiện bất kỳ chương trình máy chủ / máy khách nào. Tôi mất vài tuần để tìm ra tất cả và phần khó nhất là cố gắng để theo dõi nơi khách hàng và máy chủ đang ở.

Điều này sẽ bao giờ thay đổi? Tôi nghi ngờ điều đó. Nó sẽ đòi hỏi một sự thay đổi cơ bản trong kiến ​​trúc của web.


2

Nói chung, các nguyên nhân có thể là nhiều:

  1. Khoảng cách trừu tượng là lớn hơn trong trường hợp khung. Một ngôn ngữ thủ tục / OOP hiện đại cung cấp sự trừu tượng hóa trên một máy nhưng vẫn giữ một số cấu trúc máy (chẳng hạn như gán một biến một số dữ liệu / ghi một số dữ liệu trong một đơn vị bộ nhớ hoặc gọi một thủ tục, v.v.); khoảng cách không lớn, trong khi một khung cố gắng cung cấp sự trừu tượng để phát triển một ứng dụng web hoạt động với nhiều khái niệm hơn.
  2. Các khung có thể phức tạp hơn theo quan điểm của lập trình viên; điều này giống như một hệ quả của điểm đầu tiên. Một ngôn ngữ lập trình khá đơn giản, nó có các cấu trúc đơn giản (nếu, cho, các biến, thủ tục, v.v.). Ngoài ra, thư viện tiêu chuẩn trừu tượng hóa những điều đơn giản như viết vào IO hoặc sử dụng các bộ sưu tập. Thư viện chuẩn nó cũng được mô đun hóa rất nhiều, có ít hoặc không có kết nối giữa mô-đun với mô-đun khác; bạn không cần biết IO để sử dụng các bộ sưu tập hoặc ngược lại. Cần lưu ý rằng nếu một số phần của thư viện chuẩn khá phức tạp, chúng được đặt trong một khung công tác nhỏ (ví dụ: Khung sưu tập Java hoặc khung Executors). Trong trường hợp khung, bạn cần phải biết toàn bộ dòng chảy, tất cả các phần để sử dụng khung ở mức đầy đủ. Ngoài ra, aa framework là một ứng dụng đã được xây dựng;
  3. Không có nhiều tài nguyên được đặt trong một khung như trong ngôn ngữ lập trình. Tôi tin rằng điều này không cần giải thích.

0

Ah, nhưng bạn thấy đó chính xác là vấn đề. Các khung không được coi là Turing hoàn chỉnh. Chúng được cho là bao gồm các khái niệm trừu tượng hạn chế hơn có thể được kết hợp với nhau để thực hiện một tập hợp các nhiệm vụ cụ thể theo cách cô đọng. Vì vậy, tất cả các khung mà bạn đề cập không có gì chính xác vì chúng không cung cấp một bộ trừu tượng bị hạn chế. Họ cung cấp các bản tóm tắt rò rỉ hơn là bản thân họ tạo nên một cỗ máy trừu tượng nhiều khả năng Turing hoàn thành. Khái niệm " những cỗ máy kỳ lạ " là điều gần gũi nhất mà tôi nghĩ đến. Tất cả các khung đó là "máy lạ" cho các ứng dụng web và "máy lạ" ngược lại với khung nên là gì.


1
Tôi đang cho +1 vì mặc dù tính chất lan man của bài đăng, nhưng điều đó đúng trong các khung đó không nhất thiết phải là Turing-perfect. Đó là một trong những điểm thu hút của một ngôn ngữ có mục đích chung hoàn chỉnh, khả năng làm bất cứ điều gì nếu bạn biết cách.
Izkata
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.