2009-04-13 45 views
7

Điều gì - 'Biết ngôn ngữ' thực sự có ý nghĩa gì?Điều gì có nghĩa là tốt trong ngôn ngữ lập trình?

Tôi chắc chắn rằng đó không chỉ là cú pháp.

  • biết tất cả/hầu hết các thư viện có sẵn
  • biết làm thế nào các tính năng của ngôn ngữ được thực hiện

Làm sao bạn tìm hiểu các ngôn ngữ mà bạn thông thạo?

+0

@epochwolf - Cảm ơn bạn đã chỉnh sửa, trông sẽ rõ ràng hơn nhiều! – Pranav

Trả lời

7

"Biết" ngôn ngữ lập trình rất giống với "biết" ngôn ngữ của con người - bạn thông thạo khi bạn không phải giữ lại sách hoặc tạm dừng để nhớ đúng từ.

Tôi nghĩ rằng "biết một ngôn ngữ" có nghĩa là có thể đọc và hiểu hầu hết các chương trình (~ 90%) mà không cần tìm kiếm bất kỳ thứ gì trong tài nguyên tham chiếu và biết chính xác nơi cần tìm chi tiết kỹ thuật trên các phần ít người biết đến hơn một khuôn khổ. Đối với các ngôn ngữ/nền tảng không có "khung", chúng tôi có kiến ​​thức về các thư viện chính thường được cộng đồng chấp nhận.

Để viết bằng ngôn ngữ đó, nó có nghĩa là chi tiêu ~ 90% + thời gian cho thiết kế những gì bạn đang viết - bao gồm nghiên cứu về thiết kế - và ít hơn 10% tìm kiếm thông tin tham khảo kỹ thuật.

+0

Cuốn sách 'Java hiệu quả' có kết nối tương tự giữa ngôn ngữ của con người và ngôn ngữ lập trình, trong phần Giới thiệu. (Sách b.t.w được khuyên dùng) –

4

Thật 'biết' một ngôn ngữ để mô tả bản thân là 'tốt' có nghĩa là

  • bạn biết về tất cả các tính năng của ngôn ngữ, bao gồm cả
    • các/tính năng độc đáo tốt và khi sử dụng chúng, cũng như
    • các góc bụi và những gì cần tránh
  • bạn biết về ước chung
  • (như bạn đề cập), bạn biết thư viện của nền tảng
  • bạn biết toàn bộ toolchain (IDE, xây dựng các dự án, gỡ rối, profilers) để bạn có thể thành thạo với ngôn ngữ
2

Tôi nghĩ điều đó thực sự phụ thuộc vào định nghĩa "tốt" hoặc mục đích "tốt".

Ví dụ, hãy xem xét Java.

Hầu hết các công việc sẽ không giải quyết cho bạn bằng ngôn ngữ cốt lõi, họ mong bạn thành thạo với các API cụ thể (ví dụ, Swing cho GUI) hoặc thậm chí API của bên thứ ba (như tất cả các công cụ của Apache) . Bạn không nhất thiết phải biết mọi trường hợp góc.

Nghiên cứu khoa học và công nghiệp có thể yêu cầu bạn thực sự biết ngôn ngữ từ trong ra ngoài.Ví dụ, nếu bạn viết một công cụ phân tích tĩnh hoặc tối ưu hóa trình biên dịch, tốt nhất bạn nên biết về các trường hợp cạnh.

Trong giáo dục và trong QA, điều quan trọng là phải biết tất cả các góc kỳ lạ và rủi ro của chúng. Điều này là điển hình với C++. Trong giáo dục, bởi vì bạn có thể trông cậy vào những sinh viên mắc những sai lầm này một cách vô tình. Trong QA, bởi vì đó là nơi mà một số lỗi của weirder nói dối (ví dụ, điều kiện chủng tộc trong khởi tạo tĩnh). Đối với cách các tính năng được triển khai, tôi nghĩ bạn có thể là một lập trình viên tuyệt vời mà không biết làm thế nào một số thứ được thực hiện (ví dụ, chi tiết của VTBL trong C++), nhưng điều quan trọng là phải biết những thứ khác được triển khai như thế nào (ví dụ: thu gom rác, quản lý bộ nhớ, một số thư viện) để viết mã thực sự tốt và hiệu quả.

0

Với một thuật toán, nếu bạn có thể thực hiện một giải pháp đó là

  • nhanh (hơn nhiều chương trình khác)
  • hiệu quả (sử dụng tài nguyên ít hơn nhiều chương trình khác)
  • nhỏ hơn (sử dụng dấu chân bộ nhớ nhỏ)
  • nhã (dễ hiểu và duy trì)

Tôi nghĩ rằng bạn biết ngôn ngữ tốt hơn ...

1

Theo tôi nó có nghĩa là bạn có thể nghĩ bằng ngôn ngữ đó. Có thể thấy các phần của mã xuất hiện trong tâm trí của bạn khi bạn đi qua câu lệnh vấn đề là một dấu hiệu tốt cho thấy bạn thông thạo ngôn ngữ như thế nào.

3

Cho một dòng mã bằng ngôn ngữ X, dòng đó được viết một lần và có khả năng được đọc nhiều lần hơn (và có khả năng sửa đổi, tất nhiên). Vì vậy, phần lớn trong một ngôn ngữ, phần lớn là đọc hiểu. Đối với một kho văn bản của các chương trình được viết bằng X, bạn có thể đọc nhanh chương trình và hiểu những gì họ đang làm?

  • biết tất cả/hầu hết các thư viện có sẵn? Tôi không nghĩ như vậy, vì có một số tùy ý các thư viện thường được sử dụng được tạo ra trong khi bạn đang học nó. Ngay cả các thư viện cơ sở cho nhiều ngôn ngữ hiện nay có hàng ngàn khái niệm riêng biệt (các lớp) và hàng chục nghìn chức năng.
  • biết cách các tính năng của ngôn ngữ được triển khai? Đó là tài sản của một ngôn ngữ được thực hiện nhất định chứ không phải ngôn ngữ. Nhưng tôi nghĩ nó đóng góp. Biết rằng các cụm từ thông dụng thường được thực hiện như các máy trạng thái (và biết lý thuyết cho điều này) là khá phù hợp với sự hiểu biết về các ngôn ngữ biểu thức thông thường. Mặc dù biết cách mã byte Java hoạt động chưa bao giờ có bất kỳ sự liên quan nào trong các ứng dụng Java mà tôi đã làm ... [1] Tôi đoán một số ngôn ngữ có sự tách biệt rõ ràng hơn so với các ngôn ngữ khác: điều này có thể là sự khác biệt chính giữa cao và ngôn ngữ cấp thấp.

Nếu bạn có một ngôn ngữ cụ thể trong tâm trí, kiểm tra tốt là xem xét các ví dụ nghiêm trọng trong đó. Đối với trường hợp của C, đọc (ví dụ:) hạt nhân Linux, các tiện ích GNU OS, PostgreSQL hoặc Subversion và tìm hiểu cách chúng hoạt động không chỉ là dấu hiệu mà còn có thể là thực hành tốt.

[1] Đã có một bài tập về phân tích tĩnh của bytecode; nhưng giải pháp thực tế có thể đã được viết bằng bất cứ thứ gì.

0

Bạn có thể muốn xem xét ý nghĩa của việc không thực sự biết ngôn ngữ. Ví dụ, tôi thường gặp những người cho rằng họ biết OCaml vì họ biết tiêu chuẩn ML (ngôn ngữ khác của cùng một gia đình) khi, trên thực tế, họ không nhận thức được sự khác biệt giữa các ngôn ngữ hoặc ý nghĩa thực tiễn của họ. Vì vậy, tôi sẽ nói rằng một phần của việc biết một ngôn ngữ là biết những gì phân biệt nó với các ngôn ngữ khác.

C so với C++ là một ví dụ khác. Nhiều người sử dụng để tuyên bố họ biết C++ và sau đó sẽ viết mã C trong C++.

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