# 44: Biết rõ nhiều hơn hai ngôn ngữ lập trình

Suy nghĩ của những người lập trình lâu năm rằng từ lâu họ đã biết chuyên môn lập trình có liên quan trực tiếp đến số lượng các cơ chế lập trình khác nhau mà họ cảm thấy thỏa mái khi làm việc với nó. Nó không chỉ là biết hay chỉ là biết một ít mà thực sự có thể làm việc với nó.

Mỗi lập trình viên đều bắt đầu với một ngôn ngữ lập trình. Nó có ảnh hưởng lớn đến cách mà lập trình viên tư duy về làm phần mềm. Bất kể có bao nhiêu năm kinh nghiệm lập trình với ngôn ngữ lập trình đấy, nếu như họ chỉ dừng lại ở việc học mỗi một ngôn ngữ họ sẽ chỉ biết có mỗi mình nó. Một lập trình viên mà chỉ biết một ngôn ngữ lập trình duy nhất họ sẽ bị giới hạn bởi tư duy của ngôn ngữ lập trình đấy.

Một lập trình viên mà học hai ngôn ngữ lập trình sẽ thách thức hơn, đặc biệt là nếu nó có cơ chế khác so với ngôn ngữ đã học. C, Pascal, Fortran, tất cả đều là ngôn ngữ lập trình cơ bản. Chuyển từ Fortran sang C thì giới thiệu được một ít căn bản và không nhiều thử thách. Ta từ C hay Fortan chuyển qua học C++ thì sẽ có những thách thức căn bản hơn trong cách xử lí với các chương trình. Chuyển từ C++ sang Haskell là một bước thay đổi đáng kể do đó nó có một thách thức thấy rõ hơn. Chuyển từ C sang Prolog là một thử thách rất khó khăn.

Chúng ta có thể liệt kê một số cơ chế lập trình: procedural, object-oriented, functional, logic, dataflow,..

Chuyển từ mô hình này sang mô hình khác tạo nên một thử thách lớn nhất.

Tại sao những thử thách này lại tốt? Nó là cách để làm chúng ta suy nghĩ về việc triển khai các thuật toán và các cách thức và chuẩn của mô hình mà chúng ta áp dụng. Đặc biệt, Trộn lẫn các kiến thức học được với nhau là cốt lõi của thành công. Cách thức tìm ra giải pháp cho một vấn đề trong một ngôn ngữ có thể không thể thực hiện trong một ngôn ngữ khác. Cố gắng giải quyết vấn để bằng cách thức của ngôn ngữ này chuyển sang giải quyết với ngôn ngữ khác dạy cho chúng ta về một vấn đề mà cả hai ngôn ngữ đang giải quyết.

Ngữ lập trình với nhau có tác dụng rất lớn. Có lẽ rõ ràng nhất là việc sử dụng ngày càng nhiều các phương thức biểu đạt khai báo trong các hệ thống bằng các ngôn ngữ mệnh lệnh. Bất kì ai thành thạo lập trình hướng thủ tục đều có thể dễ dàng áp dụng phương pháp khai báo ngay cả khi sử dụng ngôn ngữ như C. Sử dụng phương pháp khai báo thường dẫn đến các chương trình ngắn hơn và dễ hiểu hơn. C++ là một ví dụ cho sự hỗ trợ hết mình cho lập trình tổng quát, cái mà hầu như luôn cần một phương thức khai báo.

Hậu quả của tất cả những điều này là nó khiến mọi lập trình viên phải có kỹ năng lập trình tốt trong ít nhất hai mô hình cơ chế khác nhau, và hợp lí nhất là thực hiện ít nhất năm đề cập ở trên. Lập trình viên nên luôn luôn hứng thú với việc học ngôn ngữ lập trình mới, tốt nhất là từ một mô hình xa lạ. Ngay cả khi công việc thường ngày luôn sử dụng một ngôn ngữ, sự thành thạo của việc sử dụng một ngôn ngữ đó là khi một người có thể áp dụng các cơ chế của ngôn ngữ lập trình khác và không đánh giá thấp nó. Nhà tuyển dụng nên chú ý và cho phép sử dụng ngân sách đào tạo nhân viên của họ học các ngôn ngữ lập trình hiện không sử dụng làm chính trong công việc mục đích để tăng độ tư duy trong công việc và sử dụng các ngôn ngữ lập trình.

Mặc dù đó là một sự khởi đầu, Khóa đào tạo một tuần không đủ để học một ngôn ngữ mới: nó thường mất tầm một vài tháng để sử dụng được tốt, ngay cả khi ngoài giờ, để có được kiến thức làm việc được với một ngôn ngữ. Nó là cách thức sử dụng, không chỉ là cú pháp và các cơ chế mô hình tính toán, đó là những yếu tố quan trọng.