Theo tôi, những gì mọi người thường coi là "ngôn ngữ lập trình" thực sự là ba điều riêng biệt:
- Loại ngôn ngữ và cú pháp
- Ngôn ngữ IDE
- Thư viện có sẵn cho một ngôn ngữ
Chẳng hạn, khi ai đó đưa ra C # trong một cuộc thảo luận, bạn có thể nghĩ rằng anh ấy / cô ấy đang nói về cú pháp ngôn ngữ (1) nhưng chắc chắn 95% rằng cuộc thảo luận sẽ liên quan đến .Net framework (3). Nếu bạn không thiết kế một ngôn ngữ mới, thật khó và thường vô nghĩa khi cô lập (1) và bỏ qua (2) và (3). Đó là bởi vì IDE và thư viện chuẩn là "yếu tố thoải mái", những thứ ảnh hưởng trực tiếp đến trải nghiệm sử dụng một công cụ nhất định.
Vài năm qua tôi cũng đã tham gia Google Code Jam. Lần đầu tiên tôi chọn C ++ vì nó có hỗ trợ tốt để đọc đầu vào. Ví dụ: đọc ba số nguyên từ một đầu vào tiêu chuẩn trong C ++ trông như thế này:
int n, h, w;
cin >> n >> h >> w;
Trong khi ở C # giống như thế này:
int n, h, w;
string[] tokens = Console.ReadLine().Split(' ');
n = int.Parse(tokens[0]);
h = int.Parse(tokens[1]);
w = int.Parse(tokens[2]);
Đó là chi phí tinh thần nhiều hơn cho một chức năng đơn giản. Mọi thứ thậm chí còn phức tạp hơn trong C # với đầu vào đa dòng. Có lẽ tôi chỉ đơn giản là không tìm ra cách nào tốt hơn khi đó. Dù sao, tôi đã không vượt qua được vòng đầu tiên vì tôi có một lỗi mà tôi không thể sửa trước khi kết thúc vòng thi. Trớ trêu thay phương pháp đọc đầu vào làm xáo trộn lỗi. Vấn đề rất đơn giản, đầu vào chứa một số quá lớn đối với số nguyên 32 bit. Trong C #int.Parse(string)
sẽ đưa ra một ngoại lệ nhưng trong C ++, luồng đầu vào tệp sẽ đặt một cờ lỗi nhất định và âm thầm làm cho nhà phát triển không nghi ngờ không biết về một vấn đề.
Cả hai ví dụ cho thấy cách thư viện được sử dụng thay vì cú pháp ngôn ngữ. Đầu tiên chứng minh tính dài dòng và cái còn lại thể hiện độ tin cậy. Nhiều thư viện được chuyển sang nhiều ngôn ngữ và một số ngôn ngữ có thể sử dụng các thư viện không được xây dựng riêng cho chúng (xem câu trả lời của @ vartec về Python với các thư viện C).
Để kết thúc việc này, biết đúng thuật toán sẽ giúp. Trong các cuộc thi mã hóa, điều đó rất quan trọng, đặc biệt là khi các tài nguyên như thời gian thực hiện và bộ nhớ bị hạn chế. Trong phát triển ứng dụng, nó được hoan nghênh nhưng nhìn chung không quan trọng. Bảo trì là quan trọng hơn đó. Có thể đạt được bằng cách áp dụng các mẫu thiết kế chính xác, có kiến trúc tốt, mã dễ đọc và tài liệu liên quan và tất cả các phương pháp đó phụ thuộc rất nhiều vào các thư viện bên trong và bên thứ 3. Vì vậy, tôi thấy điều quan trọng hơn là phải biết loại bánh xe nào đã được phát minh và làm thế nào để chúng phù hợp sau đó làm thế nào để làm cho riêng tôi.