Ngôn ngữ lập trình: Công cụ hay là giá trị cốt lõi?

If programming languages were anime girls. : ProgrammerHumor

Bài viết này dành cho ai đang mông lung về lựa chọn ngôn ngữ lập trình của một sinh viên công nghệ thông tin may mắn được trải nghiệm một vài điều hay ho ở trường Đại học và vẫn ra trường đúng thời hạn.

Từ thuở còn thơ

Là lúc mới mới vừa vào Đại học với ngôn ngữ lập trình duy nhất mình biết Pascal, mình có may mắn được biết đến blog https://toidicodedao.com/ của anh Phạm Huy Hoàng. Trên blog của anh ấy có một bài với tiêu đề “C# là ngôn ngữ tuyệt vời nhất. Java, PHP, C, C++, Ruby chỉ toàn là thứ rẻ tiền” mà mãi đến giờ mình vẫn nhớ. Tiêu đề có thể gây war một tý nhưng nội dung lại trái ngược. Có đoạn như thế này: “Về bản chất, ngôn ngữ chỉ là công cụ. Ngôn ngữ chỉ là thứ chúng ta sử dụng, nó không định hình nên con người chúng ta. Để mở rộng tầm nhìn, bạn hãy thử tìm hiểu nhiều ngôn ngữ xem”. Thật sự lúc đọc bài viết đó, và sau này mua cuốn “Code dạo ký sự” cũng có bài viết đó trong đó nhưng mình vẫn chưa hiểu lắm, nếu không muốn nói mình chỉ cố tình giả vờ hiểu. Mãi đến khi học Đại học năm 2, năm 3 rồi đến bây giờ, khi tiếp xúc với nhiều ngôn ngữ hơn như C/C++, Assembly (không hiểu sao mình qua được môn nay) , C#, Java, Python, JS, PHP, Rust, Go, … cũng như tiếp xúc nhiều hơn với các group trên mạng, thì mình mới thấy có một cuộc chiến rất khốc liệt về ngôn ngữ lập trình. Nhưng trớ trêu thay, đây không phải cuộc chiến của ngôn ngữ cạnh tranh với nhau, mà là của những người dùng ngôn ngữ đó. Hiện tại không khó để bạn tìm được các bài trên Facebook với nội dung đại loại “JS là số 1” hay “Python là số một”, và kém may mắn thay, những bài viết này không gây bait như của a Hoàng mà nội dung và tiêu đề đồng nhất. Nghĩa là có những người tôn thờ một cái và gạt bỏ những cái khác. Nhưng đối với mình, ngôn ngữ chỉ là công cụ.

Đến lúc có suy nghĩ riêng

Vì sao ngôn ngữ chỉ là công cụ? Vì đó chỉ là thứ để hiện thực hóa ý tượng và đưa ra thành sản phẩm. Công cụ có nghĩa là có thể sẽ có những thứ mới hơn, cải tiến hơn, như từ thời kỳ đồ đá, rồi đến đồ đồng, đồ sắt và giờ là đồ điện tử (cái này không phải ngôn từ chính thống nhé). Công cụ có thể mượn, có thể mua, thứ mình cần là sử dụng thành thạo công cụ đó, như một nghệ nhân thủ công, người thợ mộc dùng đục đẻo, khoan, cửa,… Và tất nhiên kỹ năng sử dụng công cụ cũng quan trọng. Có công cụ đa năng, nhưng cũng có những công cụ chỉ dùng được với một mục đích duy nhất và cái quan trọng của chúng ta là lựa chọn công cụ phù hợp với nhu cầu của bản thân.

Điểm danh những dụng cụ làm gỗ tại nhà cho người thích làm mộc

Qua những trải nghiệm

Học chương trình ở Đại học thì lập trình C/C++ chắc không ai là không học. Mình cũng vậy, học nhiều môn là đằng khác, tuy nhiên đáng buồn là mình không giỏi về lập trình cũng như thuật toán nên không thi Olympic Tin được, nên học chỉ cũng để qua môn mà thôi. Nhưng sau này mình hiếm khi nào dùng, cơ bản vì mình là người thích thử những điều lạ, nhanh gọn và dễ tiếp cận. Ví dụ như muốn viết một web api thì mình sẽ dùng Python, NodeJS hoặc PHP vì nó có các framework, thư viện hỗ trợ điều đó, làm là thấy kết quả ngay. Không tin bạn thử tìm từ khóa “create restfull api with <ngôn ngữ>” và thay từ <ngôn ngữ> bằng các từ như C/C++, C#, Java, Python, NodeJS, PHP, Golang,… để thấy sự khác biệt từ số lượng bài viết cho đến độ dài và độ khó cũng như độ bất khả thi của một tác vụ khi áp dụng ở nhiều ngôn ngữ khác nhau.

Hồi năm 2 có bạn rủ mình học Angular, và mình học vì lúc đó không biết học gì cả, nên bắt đầu thử sức với NodeJS nhưng rồi cũng chỉ ở mức độ biết đơn giản, tạm gọi là chạy được, sau đi thi AngelHack nhóm mình làm sản phẩm di động liên quan đến Momo, nên mình phải học và làm app bằng React Native . Sau mình học Python vì có một bài tập lớn liên quan đến IoT và mình dùng Waston IoT Platform chạy trên Raspberry Pi (Raspbian), triển khai web bằng framework Django. Đúng là Python và JS hiện tại khá đa dạng. Nhưng sau đó mình theo nghiệp tìm hiểu về blockchain, và mình tiếp xúc với Ethereum, cần viết smartcontract (hợp đồng thông minh) nên phải học một ngôn ngữ rất lạ Solidity, và sau này mình nghiên cứu về Hyperledger Fabric (cũng là về blockchain) có viết chaincode (cách gọi khác của smartcontract) bằng Golang (Go) nên phải học Go. Và trong chương trình học thì có học về C#, làm app Winform, web bằng asp.net, học Java và làm web bằng Java Spring Boot (Học viện Kỹ thuật Quân sự). Nhưng mình thấy PHP là ngôn ngữ dùng làm web khá nhiều, quá trình triển khai, yêu cầu server cũng dễ dàng hơn nên mình học về PHP và framework Laravel.

Cứ nghĩ như vậy là kết thúc 5 năm Đại học nhưng đến lúc làm đồ án, thì mới biết nó có dùng một bộ SDK viết bằng RUST và mình cần sửa một số chỗ trong source code đấy (sửa đơn giản thôi) vậy là phải học về RUST

Mấy mảng đang hot hiện nay như Machine Learning, Deep Learning, Big Data thì mình không biết nhưng nếu ai theo mảng nào thì lựa ngôn ngữ phù hợp mà theo. Hiện nay, bên cạnh ngôn ngữ thì làm chủ framework cũng khá mệt.

Cảm hứng cho bài viết này

Dịp nghỉ này mình nghịch 2 source code https://github.com/home-assistant/corehttps://github.com/NabuCasa/snitun viết bằng Python, có nhiều chỗ đọc không hiểu gì, sau gần 2 tuần thì cũng gọi là tạm làm chủ và sửa được chỗ cần sửa. 2 mã nguồn này liên quan đến một nền tảng mã nguồn mở về Nhà thông minh. Sau khi tạm làm chủ được mình tự nghĩ nếu như mình không biết Python và tôn thờ NodeJS, PHP thì làm sao mình làm được. Nên đối với mình, ngôn ngữ là công cụ, và nếu ai đó đang lạc lỏng, mất niềm tin vào ngôn ngữ mình học. Thì mình chỉ muốn nói rằng đừng nản lòng, hãy có niềm tin nhưng đừng tin mù quáng quá là được. Cách đây mấy năm mình cũng lạc trôi và giờ cũng thế nhưng được cái mình tự biết tin vào cái mình làm https://niviki.com/lac-troi-giua-doi-lo-trinh-hoc-lap-trinh/

Và hơn hết, mình biết ở ngoài kia, có những người giỏi hơn mình ngàn vạn lần nhưng có những quan điểm rất duy nhất https://www.facebook.com/groups/CNTT.VN.2019/permalink/842180709690677  nên mình muốn viết để dặn lòng, đừng nên như vậy.

Điều mình hối tiếc

Biết nhiều ngôn ngữ cũng có cái hay, nhưng lại không thực sự giỏi một cái nào. Nên mình quyết chí theo PHP Laravel nếu làm web bình thường. Còn nhu cầu đặc thù thì tính sau. Biết nhiều nhưng không sâu rất dễ gây mông lung và ảo tưởng sức mạnh. Nên nếu được, hãy xây dựng một nhóm, mỗi người một thế mạnh và kết hợp lại với nhau.

Cảm ơn mọi người đã đọc hết bài.

Trả lời

Email của bạn sẽ không được hiển thị công khai.