Kỹ sư cao cấp Google tiết lộ Ngôn ngữ lập trình tốt nhất năm 2022
“Học ngôn ngữ lập trình nào?” dường như là câu hỏi mà Minhaz - Một kỹ sư cao cấp của Google thường xuyên nhận được.
Đôi khi, câu hỏi này lại có nghĩa là: “Tôi nên chọn học Java, Python hay JavaScript?”
Thành thực mà nói, tác giả viết bài này sau khi đọc rất nhiều những câu hỏi và bài viết tương tự cùng chủ đề, và quyết định đưa ra một cái nhìn rất khác, một câu trả lời rất khác. Bạn sẽ cảm thấy “bị lừa” với tiêu đề đầy “kinh điển” phía trên.
Vậy thì, Học cái nào bây giờ nhỉ?
Lời khuyên của tôi là: “Chẳng riêng một ngôn ngữ nào mới là tốt nhất cả!”
Không thành vấn đề nếu bạn bắt đầu với C++, Java, Python hay Javascript hay bất kỳ một ngôn ngữ nào khác. Học một ngôn ngữ mới không mất nhiều thời gian và nó cũng không phải là ưu tiên số 1 trong việc học lập trình.
Ngôn ngữ lập trình là phương tiện cuối cùng bạn dùng đến trong hành trình này. Và trong thực tế, chúng ta có xu hướng tiếp tục chuyển sang ngôn ngữ này hoặc ngôn ngữ khác để hoàn thành công việc chứ không chỉ đóng đinh ở một ngôn ngữ duy nhất.
Tôi bắt đầu hành trình của mình với C++ ở trường trung học, nhưng lại dành phần lớn thời gian để làm bằng Javascript ở trường đại học. Công việc của tôi tại Microsoft đòi hỏi tôi phải làm rất nhiều C#/.Net và Typescript và khi chuyển sang Google, tôi bắt đầu làm việc trên Android Camera App - vì vậy tôi bắt đầu làm việc với Java. Ngay sau đó tôi chuyển sang lĩnh vực chụp ảnh tính toán của máy ảnh và những ngày này tôi dùng rất nhiều C++ (mã sản xuất) và Python để tạo mẫu.
Và trong suốt cuộc hành trình này, học một ngôn ngữ mới chưa bao giờ là vấn đề gì đó quá lớn cả.
Tôi phải thừa nhận rằng theo thời gian, chúng ta đã xây dựng các “loại” ngôn ngữ lập trình khác nhau dựa theo cách chúng được sử dụng. Một số ngôn ngữ được sử dụng hoàn toàn để đánh dấu như HTML hoặc XML, trong khi những ngôn ngữ khác hoàn toàn dành cho các tập lệnh như shell script hoặc bat scripts, một số có bản chất chức năng, những ngôn ngữ khác thì không, v.v.
Sẽ phải đánh đổi nhiều thứ khi chuyển từ “loại” này sang “loại” khác. Nhưng một khi bạn có hiểu biết cơ bản về những “loại” này, rào cản trong việc học một ngôn ngữ mới sẽ trở nên không còn đáng kể.
Ơ thế thì… Chúng ta nên làm gì?
Theo ý kiến của tôi, kỹ năng quan trọng nhất để làm việc chính là khả năng giải quyết bất kỳ vấn đề nào gặp phải.
- Nếu cần làm một ứng dụng web, bạn có thể tạo nó không?
- Bạn có một ứng dụng Android, bạn có thể cải thiện hiệu suất không?
- Bạn có một vấn đề có thể giải quyết được với trained neural network - bạn có thể tiếp tục làm được không?
Ngay cả khi bạn “chưa bao giờ” làm những việc đó trước đây nhưng bạn lại cần phải làm nó bằng bất cứ giá nào (nếu không thì điểm thấp, thì sếp chửi, thì vân vân và mây mây...)
Cuối cùng, tất cả đều giống nhau, vì vậy hãy tiếp tục và tập trung vào việc học các công nghệ mới, cố gắng đào sâu hơn vào các khái niệm phức tạp, ngay từ đầu, hãy cố gắng khám phá nhiều thể loại khác nhau cho đến khi tất cả bắt đầu giống giống nhau. Cuối cùng, hãy chọn thứ gì đó mà bạn thực sự thích và đi sâu!
Ok, nhưng nếu có một số đề xuất cụ thể sẽ rất tuyệt!
Đối với những độc giả đã bận và tâm đọc đến tận đây, tôi cảm thấy mình nên đưa ra nhiều khuyến nghị trực tiếp hơn. (Tôi không xin lỗi đâu nha!)
Tôi có các khuyến nghị khác nhau cho các lập trình viên trong các giai đoạn khác nhau của sự nghiệp.
Nếu bạn chỉ vừa mới học lập trình
Tôi khuyên bạn nên chọn một loại công nghệ mà bạn muốn làm - nó có thể là web, là thiết bị di động (Android/iOS), phát triển trò chơi, phát triển ứng dụng khác, đào tạo mô hình ML, xây dựng ứng dụng máy tính để bàn, v.v.
Nhưng mấu chốt là phải tiếp nhận một công nghệ và học các ngôn ngữ có liên quan. Nếu có thể, bạn nên tìm hiểu bằng cách xây dựng phần mềm ngẫu nhiên và dành thời gian phù hợp cho nó. Và đừng quên tiếp tục tìm hiểu sâu hơn về cách công nghệ đang hoạt động và thay đổi mỗi ngày.
Cuối cùng, hãy bắt đầu tìm hiểu các khái niệm cơ bản hơn đang được trừu tượng hóa bởi các thư viện bạn đang sử dụng như concurrency hoặc multithreading, databases, graphics rendering, image processing, networking etc.
Bạn thấy đấy, một chương trình dù viết bằng bất kỳ ngôn ngữ nào hoặc được biên dịch trực tiếp thành các lệnh hợp ngữ hoặc thành các mã byte trung gian thì cuối cùng lại được biên dịch thành các lệnh hợp ngữ để phần cứng thực thi. Nếu bạn chấp nhận thực tế này, các cú pháp trên các ngôn ngữ sẽ bắt đầu trông rất giống nhau.
Một yêu cầu nhất định, chẳng hạn như "Tăng mọi giá trị của mảng lên 1" có thể được xử lý theo các cú pháp khác nhau:
Với Python:
y = [i + 1 for i in x]## orfor i in range(0, len(x)):
x[i] = x[i] + 1
In JavaScript:
for (var i = 0; i < x.length; ++i) x[i]++;// Orvar y = x.map(val => ++val);// Orvar y = Array.from(x, val => ++val);
Với Go:
for i:= range x {
x[i]++
}
Tất cả những thứ này ít nhiều biên dịch thành một cái gì đó như:
increment(int*, int):
cmp w1, 0
ble .L1
mov x2, x0
add x1, x0, w1, sxtw 2
.L3:
ldr w0, [x2]
add w0, w0, 1
str w0, [x2], 4
cmp x2, x1
bne .L3
.L1:
ret
Điều thú vị hơn ở đây trong loạt ví dụ là một vài trong số chúng dẫn đến sao chép mảng trong khi những ví dụ khác thì không - và tôi khuyên bạn nên tập trung tìm hiểu thêm về các loại vấn đề đó và tác động của chúng đối với chương trình.
Nếu bạn có kinh nghiệm và thành thạo một số ngôn ngữ lập trình nhất định nhưng cảm thấy rằng mình đang tụt hậu
Tôi vẫn khuyên mọi người như vậy — hãy lùi lại một bước và nghĩ xem điều gì khiến bạn hứng thú. Sau đó, nghĩ về những điều mới mẻ mà bạn cần học.
Ví dụ: trong khi làm việc với Camera App, tôi có cơ hội làm việc trên “Chế độ ban đêm” trong Camera App, chế độ này yêu cầu chúng tôi chụp một loạt ảnh và hợp nhất chúng để tạo ra hình ảnh phơi sáng tốt và ít nhiễu. Điều này rất tốn kém về mặt tính toán và chúng tôi cần các thuật toán chạy trên phần cứng hạn chế tài nguyên trong một ngân sách độ trễ nhất định.
Đây là một vấn đề rất thú vị đối với tôi và yêu cầu tôi phải học lại C ++, các khái niệm xử lý hình ảnh, v.v.
Và học như vậy mọi thứ sẽ dễ dàng và vui vẻ hơn rất nhiều. Tôi khuyên bạn nên tìm những hướng đi như vậy và bắt đầu học những gì cần thiết.
Hết rồi! Nếu dài quá lười đọc thì tóm tắt cho bạn đây: Đừng quá bận tâm tìm kiếm cái gọi là “ngôn ngữ tốt nhất” nữa!