Việc nắm cách hoạt động của các ngôn ngữ lập trình sẽ giúp bạn như thế nào?
Khi mới bắt đầu biết đến lập trình. Tôi từng nghĩ mọi thứ thật dễ dàng. Bạn chỉ cần cài đặt một số phần mềm cần thiết cho ngôn ngữ mà bạn sử dụng. Làm theo vài bước cài đặt cơ bản và tải thêm IDE (Môi trường phát triển phần mềm tích hợp) là có thể bắt đầu lập trình với một ngôn ngữ mới. Quả thật, có một IDE giúp bạn đỡ tốn thời gian chạy chương rất nhiều.. Chỉ cần một nút bấm và chương trình của bạn bắt đầu chạy.
Tuy nhiên, quá lạm dụng vào sự giúp đỡ của IDE khiến tôi không ít lần gặp khó khăn khi muốn sử dụng một công cụ hỗ trợ mới hoặc cắm đầu làm theo những hướng dẫn step-by-step một cách mù quáng. Tôi nhận ra rằng, lập trình không phải chỉ là những cú pháp, những dòng lệnh của từng ngôn ngữ mà chỉ cần làm theo và gõ y chang là nó sẽ chạy. Nói thẳng ra, các dòng lệnh cũng chỉ là những ký tự vô nghĩa trên giấy (trường hợp này là trên file) mà chính những bộ máy ta sử dụng để truyền vào những dòng lệnh này mới khiến chúng làm nên những điều kỳ diệu.
Bộ máy
Bây giờ nếu như tôi đưa bạn một trình soạn thảo văn bản (Notepad chẳng hạn) và một trình biên dịch cho ngôn ngữ C++ (g++). Liệu bạn có thể viết cho tôi chương trình "Hello World" và cho nó chạy được không?
Hay nếu tôi hỏi bạn rằng quá trình biên dịch một file .cpp gồm có những giai đoạn nào?
Tôi mong rằng bạn hiểu tôi đang muốn nói đến vấn đề gì. Cách vận hành phía sau một trình biên dịch là thứ ta thường bỏ qua trong quá trình học một ngôn ngữ nào đó. Chúng ta phớt lờ bộ máy đó đi bằng cách che phủ lên nó một IDE thật to và thật khủng (như Visual Studio chẳng hạn) mà chỉ chú tâm vào học cách code.
Có thể bạn sẽ nghĩ: "Ok. Tôi có thể không biết cách hoạt động của một ngôn ngữ lập trình nhưng ít ra tôi có thể xây dựng được các ứng dụng chạy ngon lành mà đâu cần mấy thứ đó."
Thật ra thì bạn đúng. Những kiến thức tôi hỏi ở trên kia cũng giống như tôi đang yêu cầu bạn ra chợ sử dụng đạo hàm và tích phân để mua rau vậy. Nhưng ở một mức độ chuyên sâu nào đó, bạn sẽ cần đạo hàm và tích phân để giải quyết một số bài toán mà bạn gặp phải.
Ở dưới đây là 3 nguyên nhân tôi muốn đưa ra để thuyết phục bạn rằng việc nắm được nguyên lý hoạt động của ngôn ngữ lập trình bạn đang sử dụng sẽ có ích trong con đường bạn đang đi.
1. Chúng không khó
Nếu bạn có trình độ tiếng Anh khá và khả năng google thì trên mạng sẽ có những bài viết được viest bởi nhiều lập trình viên có kinh nghiệm trên thế giới. Chúng là những bài viết giúp bạn hiểu được điều gì sẽ xảy ra khi bạn chạy một chương trình. Mọi thứ chúng ta cần ở khắp mọi nơi và luôn luôn sẵn sàng cho chúng ta khám phá. Chỉ là do ta có muốn bỏ công để tìm hay không thôi.
2. Lỗi không phải lúc nào cũng là do code
Vấn đề đau đầu nhất của lập trình viên không gì khác chính là bug. Tuy nhiên có 3 loại bug chúng ta thường gặp đó chính là lỗi cú pháp (syntax error), lỗi logic (logic error) và lỗi thực thi (runtime error). Trong đó tôi gặp nhiều khó khăn nhất với lỗi cuối vì đơn giản là vì một số lý do nào đó, chương trình không thể chạy. Lỗi này yêu cầu bạn phải nắm được nguyên lý hoạt động của ngôn ngữ thì mới có thể debug được.
Tôi lấy ví dụ lỗi cơ bản như là lỗi linking "already definded..." (LNK2005) của C++. Nếu bạn không biết rằng các tệp .cpp được tiền xử lý rồi biên dịch ra các tệp .obj sau đó được Linker kết nối lại thành một tệp .exe hoàn chỉnh thì có thể sau khi đọc thông báo lỗi xong bạn sẽ không biết phải làm gì. Có thể một lần bạn thoát nhờ Stack Overflow, nhưng các biến thể phức tạp hơn thì sao?
3. Biết cách hoạt động giúp bạn nhìn các ngôn ngữ một cách khách quan hơn
Có bao giờ bạn tự hỏi tại sao các game khủng luôn sử dụng C++? Tại sao Java lại được ưa chuộng cho các hệ thống back-end của các công ty lớn hay tại sao Python lại được ưa chuộng trong Machine Learning và Deep Learning đến thế? Mấu chốt trả lời luôn nằm ở cách chúng vận hành như thế nào. Một ngôn ngữ Java với một máy ảo (JVM) cùng với trình thu thập bộ nhớ tự động sẽ quá mất ổn định cho hiệu năng của một game. Một C++ luôn yêu cầu người dùng phải tự kiểm soát tài nguyên và những cú pháp khó hiểu sẽ có thể là một cơn ác mộng cho các nhà Khoa học Dữ liệu cần một cách nhanh chóng và gần gũi để thử nghiệm các thuật toán của mình, ...
Nhờ biết được những điều đó, ta có thể tránh được cái nhìn phiến diện như "ngôn ngữ này hot", "ngôn ngữ này là số một" để có một đánh giá khách quan và logic hơn. Khi đó bạn sẽ biết rằng các ngôn ngữ lập trình chỉ là một công cụ và quyết định bạn nên học ngôn ngữ nào tiếp theo chỉ phụ thuộc vào việc bây giờ bạn muốn làm gì.
Tổng kết
Tóm lại, tôi muốn nói rằng bạn nên đầu tư một chút thời gian để tìm hiểu cách ngôn ngữ lập trình của bạn hoạt động thế nào. Nói cách khác, chú tâm tìm hiểu bộ máy chúng ta đang tương tác chứ không phải cách để nhập input vào bộ máy đó. Nhờ đó:
- Bạn sẽ hiểu sâu hơn công cụ bạn đang sử dụng. Tạo tiền đề cho sự sáng tạo và phát triển của bạn sau này.
- Bạn sẽ đánh giá các ngôn ngữ theo điểm mạnh, điểm yếu trong từng hoàn cảnh để giải quyết vấn đề chứ không đóng khung một phương pháp cho tất cả vấn đề.
Tôi mong rằng một vài chia sẻ nhỏ này sẽ giúp bạn theo một cách nào đó.
Nhận xét
Đăng nhận xét