paint-brush
Tại sao bạn cần học nhiều ngôn ngữ lập trìnhtừ tác giả@wagslane
3,410 lượt đọc
3,410 lượt đọc

Tại sao bạn cần học nhiều ngôn ngữ lập trình

từ tác giả Lane Wagner5m2022/07/31
Read on Terminal Reader
Read this story w/o Javascript

dài quá đọc không nổi

Boot.dev là một giáo trình khoa học máy tính có pin trong trình duyệt. Phần lớn chương trình chỉ có thể sử dụng JavaScript, Python và Go. Toàn bộ chương trình giảng dạy cho [Boot.dev] sẽ chỉ yêu cầu sử dụng tổng cộng khoảng 6 ngôn ngữ. Học nhiều ngôn ngữ loại bỏ tầm nhìn đường hầm của bạn và giúp bạn hiểu các cách tiếp cận lập trình khác nhau. Bằng cách cho bạn tiếp xúc với các ngôn ngữ khác nhau, bạn sẽ bắt đầu thấy một số lợi ích, nhược điểm, điểm tương đồng và khác biệt giữa các phương pháp tiếp cận khác nhau đối với [lập trình]

Company Mentioned

Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Tại sao bạn cần học nhiều ngôn ngữ lập trình
Lane Wagner HackerNoon profile picture

Tôi đã xây dựng Boot.dev như một dự án phụ trong vài năm qua và gần đây đã có nhiều sinh viên mới hỏi câu hỏi tương tự:


“Tại sao chương trình giảng dạy về khoa học máy tính của bạn yêu cầu tôi học nhiều hơn một ngôn ngữ lập trình?”


Có vẻ như một số lượng lớn sinh viên tham gia nền tảng với ý kiến rằng họ muốn “hoàn toàn thông thạo một ngôn ngữ duy nhất” hơn là “chia nhỏ nỗ lực của họ”. Trong khi tôi dự định giải thích điều này tốt hơn trong chính ứng dụng trong tương lai, tôi muốn viết bài đăng trên blog này để cung cấp lời giải thích chuyên sâu về lý do tại sao chúng tôi để bạn học một số ngôn ngữ trong suốt chương trình CS của chúng tôi.

Đầu tiên, một số thông tin cơ bản trên Boot.dev

Để bạn có thể hiểu tôi đến từ đâu, hãy để tôi giải thích Boot.dev là gì và mục tiêu của nó với tư cách là một nền tảng giáo dục.


Boot.dev là một giáo trình khoa học máy tính bao gồm pin trong trình duyệt. Chúng tôi có một số ý kiến mạnh mẽ về cách tốt nhất để học viết mã. Ví dụ:


  • Chúng tôi dạy các khái niệm về khoa học máy tính và kỹ thuật phần mềm trước tiên. Các công nghệ cụ thể chỉ là một cơ chế mà chúng tôi dạy các khái niệm.
  • Chúng tôi hoàn toàn thực hành
  • Chúng tôi có các khóa học có hướng dẫn và các dự án không có hướng dẫn
  • Chúng tôi dạy các công nghệ và ngôn ngữ hiện đại
  • Chúng tôi có một chương trình giảng dạy tuyến tính để sinh viên không phải lo lắng về những gì họ sẽ học tiếp theo
  • Chúng tôi tăng cường trải nghiệm nhiều nhất có thể để giữ cho học sinh có động lực

Vậy tại sao toàn bộ chương trình học không thể được dạy bằng một ngôn ngữ duy nhất?

Nếu bạn xem toàn bộ chương trình giảng dạy CS mà chúng tôi đã lên kế hoạch trong lộ trình công khai trên Github , bạn sẽ thấy rằng về cơ bản là không thể. Có một số khái niệm được kết hợp chặt chẽ với các công nghệ cụ thể đến mức không có ý nghĩa gì nếu bạn cố gắng dạy chúng theo cùng một cách. Hãy xem một vài ví dụ nhỏ.


  • Thật khó để thực sự dạy cơ sở dữ liệu mà không có SQL
  • Thật khó để dạy lập trình chức năng mà không có một ngôn ngữ chức năng thuần túy
  • Thật khó để dạy OOP mà không có ngôn ngữ hướng đối tượng
  • Thật khó để dạy giao diện phần cứng mà không có trình hợp ngữ
  • Thật khó để dạy đánh máy nếu không có ngôn ngữ được đánh máy mạnh
  • Thật khó để dạy web mà không có JavaScript
  • Thật khó để dạy ML mà không có Python

Tóm lại, chúng tôi có 2 mục tiêu cạnh tranh:

  • Chúng tôi muốn dạy tất cả các khái niệm bằng cách sử dụng ít công nghệ nhất có thể
  • Chúng tôi muốn dạy tất cả các khái niệm bằng cách sử dụng các công nghệ dạy khái niệm tốt nhất

Vậy bạn sẽ dạy tôi bao nhiêu ngôn ngữ?

Trong suốt quá trình lấy bằng CS truyền thống ở trường đại học, tôi đã sử dụng hơn 12 ngôn ngữ lập trình. Tôi nghĩ đó là quá nhiều. Tôi không muốn dạy ngôn ngữ vì mục đích dạy chúng. Đó thực sự là một bài toán tối ưu hóa mà chúng tôi muốn giới thiệu càng ít ngôn ngữ càng tốt, đồng thời giảng dạy hiệu quả mọi khái niệm mà chúng tôi muốn dạy. Tôi tin tưởng rằng toàn bộ chương trình giảng dạy cho Boot.dev sẽ chỉ yêu cầu sử dụng tổng cộng khoảng 6 ngôn ngữ và phần lớn chương trình chỉ có thể sử dụng JavaScript, Python và Go.

Học nhiều ngôn ngữ xóa bỏ tầm nhìn đường hầm của bạn

Có một lợi ích bổ sung khi học một vài ngôn ngữ lập trình khác nhau mà chúng ta chưa nói đến. Bằng cách cho bạn tiếp xúc với các ngôn ngữ khác nhau, bạn sẽ bắt đầu thấy một số lợi ích, hạn chế, điểm tương đồng và khác biệt giữa các phương pháp lập trình khác nhau.


Nếu bạn chỉ viết một ngôn ngữ lập trình, thật dễ dàng cho rằng một cách thực hiện nhất định là “cách tốt nhất”, “cách đúng đắn”, hoặc thậm chí có thể là “cách duy nhất”.

Ví dụ: JavaScript và Go có các cách tiếp cận cực kỳ khác nhau đối với luồng lỗi:

 // JavaScript try { doSomethingDangerous() } catch (err){ console.log(err) } // Go err := doSomethingDangerous() if err != nil { fmt.Println(err) }

Bằng cách cho bạn làm quen với một số ngôn ngữ, tôi tin chắc rằng bạn sẽ hiểu sâu hơn về từng công nghệ và khi nào bạn có thể muốn sử dụng các công cụ khác nhau.

Liệu tôi có phải là một người làm tất cả mọi ngành nghề, là bậc thầy của tất cả không?

Riêng tôi, tôi không nghĩ như vậy. Tôi thực sự nghĩ rằng nếu bạn chỉ tập trung vào một ngôn ngữ lập trình duy nhất từ khi bắt đầu hành trình học tập cho đến khi công việc viết mã đầu tiên của bạn, bạn thực sự sẽ ở trong tình trạng tồi tệ hơn nếu bạn dành một chút thời gian để mở rộng tầm nhìn của mình.

Một số người cho rằng “học viết mã” là “học một ngôn ngữ lập trình”. Họ nghĩ rằng nếu bạn học Python và sau đó muốn học JavaScript, bạn sẽ bắt đầu lại từ con số 0.


Điều đó không thể xa hơn sự thật.

Học ngôn ngữ lập trình thứ hai của bạn sẽ mất 1/5 thời gian học ngôn ngữ đầu tiên, bởi vì ~ 80% khái niệm bạn đã học sẽ áp dụng cho cả hai ngôn ngữ. Khi bạn đã sử dụng 3 hoặc 4 ngôn ngữ mã hóa khác nhau, bạn có thể xem mã bằng hầu hết mọi ngôn ngữ và hiểu nó nói gì. Đôi khi bạn có thể thấy mình cần phải tra cứu cú pháp, nhưng dù sao thì mọi người đều làm vậy .


Chà, ít nhất bạn có thể giảm số lượng ngôn ngữ có mục đích chung không?

Nếu bạn đã duyệt qua chương trình giảng dạy, bạn có thể nhận thấy rằng chúng tôi đã giải quyết 3 ngôn ngữ để dạy phần lớn nội dung:


Chúng tôi sẽ cố gắng sử dụng 3 ngôn ngữ này nhiều nhất có thể , chỉ kết hợp các công nghệ khác theo yêu cầu của chủ đề. Ví dụ, sử dụng SQL khi chúng ta đang nói về cơ sở dữ liệu quan hệ.

Hãy để tôi giải thích lý do tại sao chúng tôi chọn ba điều này cụ thể.

Tại sao lại sử dụng JavaScript?

Bạn không thể thực sự thoát khỏi JavaScript những ngày này. Thật khó để tìm hiểu về lập trình phụ trợ (đó là điều mà hầu hết sinh viên của chúng tôi quan tâm) mà không hiểu tại sao chương trình phụ trợ lại tồn tại. Một chương trình phụ trợ chỉ tồn tại để cung cấp năng lượng cho giao diện người dùng, vì vậy, trước tiên chúng tôi cần hướng dẫn cho bạn một số kiến thức cơ bản về giao diện người dùng. Nếu bạn định xây dựng giao diện người dùng trên web, nó gần như chắc chắn sẽ sử dụng JavaScript, vì vậy chúng tôi buộc phải thực hiện điều này.

Tại sao lại là Python?

Python tránh xa bạn, nói theo cú pháp. Thuật toán và cấu trúc dữ liệu là những khái niệm mà sinh viên thường khó nắm vững hơn, vì vậy chúng tôi rất hợp lý khi chọn một ngôn ngữ cho phép sinh viên của chúng tôi tập trung nhiều nhất có thể vào logic. Python cũng đọc giống tiếng Anh theo nhiều cách, điều này một lần nữa giúp bạn dễ dàng hiểu được thuật toán trong Python đang làm gì trong nháy mắt. Ngoài ra, chúng tôi có nội dung về AI và ML ở cuối chương trình học, vì vậy, đó là tình huống hai con chim trên đá, nơi chúng tôi có thể truy cập lại Python vào thời điểm đó mà sinh viên của chúng tôi không cần học thêm một ngôn ngữ nào.

Tại sao phải đi?

Bằng CS của chúng tôi tập trung vào lập trình phụ trợ và cá nhân tôi đã thành công rực rỡ với Go như một ngôn ngữ phụ trợ. Go sẽ giúp việc dạy những thứ như đồng thời, trình biên dịch và hệ thống phân tán dễ dàng hơn so với một số lựa chọn khác mà tôi đã nghĩ đến. Tôi nghĩ rằng cuối cùng chúng ta có thể có một khóa học Rust ở cấp độ thấp hơn nữa về quản lý bộ nhớ thủ công, nhưng tôi vẫn chưa quyết định về điều đó.

Câu hỏi? Bình luận? Mối quan tâm?

Cách tốt nhất để liên hệ trực tiếp với tôi là tham gia máy chủ Boot.dev Discord . Bạn cũng có thể @ tôi trên Twitter . Hãy cho tôi biết bạn nghĩ gì về cách tiếp cận của chúng tôi!


Cũng được xuất bản tại đây https://blog.boot.dev/education/learn-multiple-programming-languages/