Chắc hẳn không ít bạn từng nghe những lập luận phổ biến sau:
- Biết nhiều để làm gì, cái nào cũng dùng được và như nhau cả. Biết cho lắm vào rồi cũng vậy thôi. "Nhất nghệ tinh nhất thân vinh" nhé (*).
- Dùng "X" là đủ rồi không cần có "Y" nữa.
- X là "the best" hoặc dùng X đi, mấy cái kia sắp không còn ai dùng nữa.
(*) Có vẻ các bạn đang bị nhầm lẫn giữa "nghệ" và ngôn ngữ lập trình (cái thuộc về một "nghệ" cụ thể).
Mình nghĩ đơn giản là thế giới quan mỗi người thì họ nghĩ gì, tin gì là chuyện của họ. Nhưng trên tinh thần thích chia sẻ, đặc biệt cho những bạn mới, mình muốn cung cấp thêm một góc nhìn nữa để giúp các bạn có cái nhìn đa chiều hơn.
Trên thực tế là chúng ta cần biết rằng: Chiếc máy tính nó không thông minh hay đúng hơn là máy tính không tự tư duy được!!!
Nếu bạn đang nghĩ về AI (trí tuệ nhân tạo) để phản bác điều trên thì nên nhớ rằng bản thân máy tính sinh ra không thể làm được điều đó. Khác với con người chúng ta khi sinh ra đã có khả năng tư duy và nhận biết thế giới.
Điều kiện để máy tính có khả năng tư duy và ra được quyết định sẽ cần ít nhất 2 thứ: THUẬT TOÁN và DỮ LIỆU. Mà trong đó dữ liệu là chiếm phần quan trọng nhất. Vì dữ liệu là "thức ăn" để nuôi dưỡng các cỗ máy. Thức ăn kém dinh dưỡng mà ép cỗ máy dậy thì thành công thì phi lý quá! Tương tự với thuật toán kém. Các bạn chỉ cần nhớ là máy tính nó chỉ tính toán nhanh, chuyện đúng sai là phải có con người hướng dẫn nó.
Chiếc máy tính này nó "trịnh thượng" và có lòng tự tôn dân tộc siêu cao. Thể hiện qua việc nó không chịu nói tiếng của con người. Con người phải học thứ tiếng của nó: "0" và "1"; gọi là bit hay nhị phân. Các ngôn ngữ lập trình bản chất là ngôn ngữ trung gian để con người dễ dàng giao tiếp hơn với máy tính mà thôi.
Vậy tại sao cần đến nhiều ngôn ngữ lập trình như vậy?! Cán cân "nhanh máy chậm người" hay "nhanh người chậm máy"?!
Tới đây chúng ta hiểu được để máy tính chạy đúng, ta cần chỉ dẫn (khái niệm "chỉ thị") rất cụ thể. Cái cụ thể này nó không hề đơn giản như các ngôn ngữ bậc cao hiện tại như "x =1" đâu nhé. Tới nỗi mà các bạn khai báo biến mà còn phải chỉ nó lưu vô chỗ nào, thanh ghi nào chứ không đơn giản. Nhà bao việc mà chứ phải đi làm những cái này thì khoai quá!!
Các nhà khoa học máy tính giỏi nhất thế giới đã không ngừng nghiên cứu để giúp con người đỡ nhọc hơn. Họ đã phát triển những ngôn ngữ với cú pháp dễ hiểu, dễ đọc và ghi nhớ (như tiếng Anh). Phần lớn những công việc quá sâu sát với phần cứng, hệ điều hành thì các developer không cần quan tâm nữa, trừ khi nó thực sự cần. Kết quả là chúng ta có hàng tá ngôn ngữ ra đời.
Trong đó có những ngôn ngữ bậc thấp, giao tiếp với phần cứng, viết driver, làm hệ điều hành, viết platform cho tới các ứng dụng phổ thông ngày nay. Như vậy ngoài tính chất công việc bắt buộc thì cũng có hai trường phái đối lập: thượng tôn tốc độ thực thi (cho máy) và thượng tôn tiện ích hay tốc độ phát triển (cho người).
Cán cân này đã tồn tại trong suốt thời gian qua. Các bạn sẽ nhận ra cùng một công việc, có những ngôn ngữ phải viết rất nhiều (LoC - Line of Code), nhưng cũng có những ngôn ngữ viết vài dòng thôi là xong. Đáng kể trong đó còn có những ngôn ngữ dạng cân bằng cán cân trên, mảng nào cũng dùng được nhưng không tối ưu hoàn toàn cụ thể cho mảng nào cả. Mỗi ngôn ngữ đều có ưu và nhược xét trên cán cân này.
Tới đây các bạn chắc đã nhận ra việc lựa chọn ngôn ngữ ngoài tính bắt buộc thì yêu tố thuận tiện cho team, phát triển nhanh hoặc tối ưu tốc độ thực thi sẽ được cân nhắc khi ra quyết định. Cụ thể hơn là ưu và nhược của chúng. Việc chỉ biết tới ưu và quên nhược (chủ ý bỏ qua) thì các sản phẩm sẽ gặp rất nhiều vấn đề trong tương lai.
Một điều thú vị là cái ưu nhược của một ngôn ngữ lập trình nếu đứng từ góc nhìn ở trong nó, chưa bao giờ các bạn bước ra ngoài thì không nhìn thấu được.
Mỗi ngôn ngữ đều có triết lý và tính cách đặc trưng riêng. Các bạn có lẽ đã từng nghe qua những trường phái lập trình "Imperative" hay "Declarative", "Procedural" hay "Functional". Gần gũi hơn là sự tranh luận nảy lửa giữa "OOP" hay "Non-OOP".
Thật những điều trên chỉ là của những người ủng hộ trường phái nào mà thôi. Tuy nhiên việc hiểu được những góc nhìn này giúp chúng ta học hỏi được nhiều hơn và quan trọng nhất là lựa chọn chính xác hơn.
Như vậy việc biết nhiều ngôn ngữ sẽ giúp chúng ta có lợi thế lựa chọn phù hợp. Sự phù hợp này dựa trên sự hiểu biết và các lựa chọn một cách đầy đủ và khách quan hơn.
Nếu bạn là người mới, mình sẽ không ủng hộ việc học một lúc nhiều ngôn ngữ. Nhưng nếu các bạn đã trải nghiệm với nghề một thời gian và nay muốn mở rộng kiến thức thì hãy cân nhắc tham khảo góc nhìn của mình ở trên nhé.
Chúc các bạn thành công hơn với sự hiểu biết rộng và đủ sâu với nghề!!
Nếu bạn đang gặp khó khăn với ngành lập trình, có thể bạn sẽ cần xem qua bài viết này:
Việt Trần
Yêu thích tìm hiểu các công nghệ cốt lõi, kỹ thuật lập trình và thích chia sẻ chúng tới cộng đồng
follow me :
Bài viết liên quan
Whisper AI là gì? Công cụ chuyển giọng nói thành văn bản của Open AI
Oct 17, 2024 • 8 min read
Cursor AI là gì? Hướng dẫn Sử dụng Cursor AI cơ bản
Sep 16, 2024 • 13 min read
IDE là gì? Những công cụ IDE phổ biến nhất hiện nay
Aug 22, 2024 • 10 min read
Cookies là gì? Cookies được sử dụng như thế nào?
Aug 12, 2024 • 9 min read
SDLC là gì? Các mô hình Software Development Life Cycle phổ biến
Jul 13, 2024 • 27 min read
System Design là gì? Tại sao Thiết kế hệ thống lại quan trọng với Developer?
Jun 17, 2024 • 10 min read