2009-08-29 37 views
7

Những tính năng nào có thể được thêm vào ngôn ngữ lập trình mới để làm cho nó trở nên "trực quan" hơn? Khi nói đến các trang web và máy tính để bàn, chúng tôi ưu tiên khả năng sử dụng cao, gần như trực quan khả năng sử dụng. Ngày càng trở nên mong đợi rằng ứng dụng của bạn sẽ "hoạt động". Đối với một lớp học nhất định của các ứng dụng, ý tưởng mà một người phải là RTFM, là một nhãn hiệu chống lại tính hiệu quả của ứng dụng. Mọi người có xu hướng mong đợi ứng dụng hoạt động theo cách họ "nghĩ" nó sẽ hoạt động. Người ta có thể lập luận rằng đây là một tiêu chuẩn đáng giá mà các nhà thiết kế nên phấn đấu.Ngôn ngữ lập trình có nên trực quan không?

Có thể sử dụng cùng một mức độ khả dụng tương tự cho ngôn ngữ lập trình và môi trường nhà phát triển không? Tôi nhận ra có các công cụ như IntelliSense cung cấp các gợi ý và một IDE tốt cung cấp số lượng hỗ trợ . Nhưng còn bản thân ngôn ngữ cốt lõi thì sao? Những gì có thể được thêm vào (hoặc loại bỏ) mà làm cho một số kỹ thuật lập trình nhất định hoặc các thuật toán rõ ràng hơn để thực hiện? Làm thế nào để làm cho biểu thức chính quy hoặc đệ quy linh hoạt hơn? Hoặc là sự điên rồ này?

Lấy ví dụ cụ thể hơn: bố cục lỏng trong HTML, CSS, hoặc Flex và MXML. Trong HTML và CSS, mô hình hộp là bất cứ điều gì nhưng trực quan được cung cấp các triển khai khác nhau của Internet Explorer và các trình duyệt khác. Và trừ khi ai đó đọc tài liệu hoặc nghiên cứu khái niệm về mô hình hộp sẽ rất khó để "chỉ nhận được" khi thiết kế bố cục trên lần đâm đầu tiên của một người tại CSS. Tôi cho rằng đây là số vì sao bảng phát triển mạnh trong những ngày đầu. Mô hình hộp là ẩn trong khái niệm của ô bảng. Với sự giúp đỡ của các công cụ như Dreamweaver, người ta có thể có được tâm trí của mình xung quanh độ rộng và bố cục phần trăm trong các ràng buộc của các ô bảng. Sau đó, CSS đã đến hạn và toàn bộ các lý do hợp lệ là xuất hiện vì sao bảng không dành cho bố cục. Nhưng để đạt được cùng một hiệu ứng nhà thiết kế đã thực sự nghiên cứu triển khai CSS và mô hình hộp, và tiêm một lớp trừu tượng mới vào suy nghĩ của họ.

Trong một ví dụ khác, tôi tìm thấy khi lập trình rất nhiều điều trong ActionScript và MXML, toàn bộ khái niệm về bố trí chất lỏng và độ rộng tỷ lệ phần trăm dựa trên các yếu tố không phải là rất rõ ràng và không luôn luôn làm theo trực giác. Tôi hiểu vấn đề cơ bản của trong đó Adobe Flash player và bố cục cần để hiểu mọi thứ theo thuật ngữ pixel tuyệt đối. Khi nó đến với chiều rộng tiềm năng của một thành phần, tôi hiểu tại sao tỷ lệ phần trăm không rõ ràng ngay lập tức để triển khai ở cấp độ chính của mã . Về lý thuyết, trình phát Flash Trình phát cần biết (hoặc tính toán) chiều rộng chính xác của thành phần sao cho nó có thể cung cấp hình dạng phù hợp cho thẻ video khi vẽ trên màn hình. Nhưng khi bạn giới thiệu một số khái niệm về tỷ lệ phần trăm thì bạn giới thiệu khả năng lý thuyết của một chiều rộng vô hạn . Và để tìm các pixel "vô cùng - 1" không phải là thứ mà máy tính có thể trực tiếp thực hiện mà không có một số lớp trừu tượng và tính toán . Khung nhìn phải được tham chiếu.Chương trình phải biết ranh giới của nó. Vì vậy, độ rộng tuyệt đối là tiêu chuẩn, mặc dù con người có thể thích thiết kế theo tỷ lệ phần trăm.

Khi nói đến ngôn ngữ lập trình, có thể có các biểu thức và tính năng hỗ trợ trực giác khi suy nghĩ về tác vụ lập trình. Hay chúng ta tốt hơn là "suy nghĩ như một máy tính" và chỉ cần RTFM 'hướng dẫn khi chúng ta cần để hiểu cách triển khai một số tính năng hoặc bố cục trong mã ?

Nếu bạn có thể thay đổi cú pháp hoặc ngữ nghĩa của ngôn ngữ lập trình của sự lựa chọn, bạn sẽ thêm, thay đổi, hoặc loại bỏ để cải thiện "tính trực giác" của nó?

Phụ lục, lý do yêu cầu câu hỏi này được lấy cảm hứng từ xem ví dụ về những gì "người mới" có thể đạt được trong Smalltalk trong Alan Kay's lecture: Doing with Images Makes Symbols.

+1

Trên một lưu ý phụ, đây có thể là một cuộc trò chuyện chủ quan và cần được đánh dấu "wiki cộng đồng" – Randolpho

Trả lời

8

"Nếu bạn có thể thay đổi cú pháp hoặc ngữ nghĩa của ngôn ngữ lập trình của bạn lựa chọn những gì bạn sẽ thêm, thay đổi hoặc loại bỏ để cải thiện 'intuitiveness' của nó? "

Lập trình khó. Thực sự khó khăn. Thay đổi cú pháp không quan trọng lắm. IDE không liên quan đến thách thức cơ bản của lập trình.

Điều thường gây bối rối là ngữ nghĩa của ngôn ngữ.

Tôi không biết những gì "trực quan" có nghĩa là đối với một thứ trừu tượng như một ngôn ngữ lập trình. Thật vậy, "trực giác" có lẽ là một điều xấu. Đến với một ngôn ngữ lập trình với trực giác có nghĩa là các khái niệm đã định trước, các thành kiến ​​và rác trí tuệ sẽ chiếm ưu thế.

Tôi sẽ không bao giờ mong đợi "nhận được nó" cho bất cứ điều gì ở mọi cấp độ ở bất kỳ đâu. Lập trình đòi hỏi tư duy rõ ràng - không phải "trực giác" - không phải "kỳ vọng".

Điều duy nhất chúng ta có thể làm là đọc hướng dẫn và hiểu ngữ nghĩa độc đáo, khác biệt, mới lạ của điều mới mà chúng ta đang phải đối mặt.

Tôi biết điều này: đơn giản thanh lịch là điều cần thiết. Tính trực giao của các tính năng. Trong trẻo. Độ chính xác. Không có trường hợp ngoại lệ hoặc trường hợp đặc biệt. Trên tất cả, sự đơn giản.

Phân lớp về các tính năng ngôn ngữ về cơ bản là không tốt.

Che giấu các vấn đề ngôn ngữ bằng cách phân lớp trong một IDE phức tạp còn tệ hơn.


Xem http://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD854.html

"khi đối mặt với những điều mới mẻ và xa lạ, chúng tôi cố gắng liên hệ nó với những gì chúng ta đã quen thuộc với. Trong quá trình của quá trình này, chúng tôi phát minh ra loại suy đó cho phép chúng tôi làm như vậy.Rõ ràng là cách nói trên để hiểu không hoạt động tốt khi chúng ta phải đối mặt với một cái gì đó rất mới, vì vậy mà không có tiền lệ, rằng tất cả các chất tương tự chúng ta có thể đưa ra là quá yếu và quá nông để trở thành giúp đỡ rất nhiều. Một công nghệ hoàn toàn mới có thể tạo ra những hoàn cảnh như vậy và sự hiểu lầm lan rộng về lập trình mạnh mẽ gợi ý rằng điều này đã xảy ra với sự ra đời của máy tính tự động. "

Nói tóm lại, 'trực giác' và 'hành lý hữu trí tuệ' là vấn đề của các lập trình viên. Cách tốt nhất để hiểu một công nghệ là để tiếp cận nó như một cái gì đó tươi, mới và khác lạ.


Bottom Line.

Sự phức tạp là cố hữu.

Bạn có hai lựa chọn.

  1. Phát triển các công cụ trí tuệ (tức là trừu tượng, tóm tắt, v.v.) để đối phó với nó.

  2. Tìm việc ở một trường khác.

Yêu cầu thế giới máy tính phức tạp vốn có thể biến thành một thứ mà bất kỳ ai tìm thấy "trực quan" đều không thể xảy ra. Máy tính quá phức tạp để trở nên "trực quan".

+1

Tôi nghĩ rằng tôi đồng ý. Đó là lý do tại sao tôi cũng hỏi những gì có thể được "loại bỏ" cũng như thêm vào. Và bạn đúng trong trực giác đó là quá mờ của một khái niệm cho thế giới của logic nhị phân và lập trình. Nhưng cách đơn giản nhất này đạt được như thế nào? Chắc chắn chúng tôi không mong đợi tất cả mọi người được lập trình lắp ráp. Mặc dù có thể có giá trị trong sự hiểu biết lắp ráp để hiểu thực hiện cấp cao hơn. Làm thế nào để làm cho nó để các chương trình xóa tâm trí của một người trong hành lý và giả định rằng làm cho nó khó khăn? –

+1

Assembler không phải là "đơn giản". Thật vậy, nó thường quá phức tạp vì các trường hợp đặc biệt phần cứng lạ và phi trực giao. Một số ngôn ngữ (ví dụ: Python) khá đơn giản và dễ nắm bắt. Lập trình không có hành lý - đơn giản là nó. Nếu tâm trí của bạn có hành lý, đó là vấn đề của bạn để lại hành lý phía sau. Thật vậy, đó là nghĩa vụ * của bạn *: đến với một công nghệ với một tâm trí mới mẻ, trống rỗng, không có các định kiến. –

+1

Điểm thú vị.Trong một lưu ý liên quan, tôi cảm thấy như một khía cạnh đã làm cho tôi một lập trình viên tốt hơn là ngây thơ hơn. Về cơ bản tôi gọi nó là chế độ "nghĩ như máy tính" của tôi. Tôi không biết gì về điều gì cho đến khi tôi được nói một cách rõ ràng. Tôi thấy điều này giúp gỡ lỗi. Nhưng nó có thể là tẻ nhạt, nhưng chiến lược cuối cùng hiệu quả. –

3

Một bước mà mọi người đang thực hiện có liên quan đến thư viện lớp cơ sở vì chính ngôn ngữ đó - mặc dù thành thật mà nói, cả hai thường đồng nghĩa - là khái niệm về Fluent API. Ý tưởng cơ bản là làm cho mã "đọc như một câu", ý tưởng cho rằng điều này làm cho mã linh hoạt hơn và có thể duy trì được.

+1

@Randolpho, cảm ơn bạn đã tham khảo Fluent API. Công cụ thú vị. Đây là lý do tại sao tôi hỏi một số câu hỏi rộng rãi bởi vì tôi nhận được câu trả lời thú vị như của bạn giúp tôi học hỏi. Cảm ơn vì sự trả lời. –

5

Một trường khác tôi đã thấy địa chỉ phức tạp của "cú pháp" của ngôn ngữ lập trình là của Visual Programming Languages. Ý tưởng cơ bản đằng sau VPL là lấy các cấu trúc của các ngôn ngữ lập trình (các quyết định, các chương trình con, các hàm, vv) và trình bày chúng một cách đồ họa, thường là biểu đồ luồng dữ liệu. Một trong những ngôn ngữ đó phổ biến gần đây là Microsoft Visual Programming Language. Tôi đã không sử dụng nó, và không thể tuyên bố về quyền lực của nó, nhưng tôi đã sử dụng LabView để có hiệu quả tuyệt vời và tôi có thể nói rằng bạn có thể thực hiện khá nhiều thứ mà bạn có thể nghĩ ngay cả trong LabView - nhưng bạn do phải nghĩ về nó theo một cách rất khác.

Điều đó nói rằng, tôi thấy tôi có sở thích cá nhân đối với mã thay vì VPL.

+0

Tôi cho rằng tôi sẽ thêm một câu trả lời thay vì chỉnh sửa câu trả lời trước đó, vì đó là một chủ đề khác. – Randolpho

Các vấn đề liên quan