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.
Để 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ụ:
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ỏ.
Tóm lại, chúng tôi có 2 mục tiêu cạnh tranh:
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.
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.
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 .
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ể.
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.
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.
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á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/