Hầu hết các công ty cho phép bạn viết mã bằng bất kỳ ngôn ngữ nào bạn muốn - ngoại lệ duy nhất mà tôi biết là Google, nơi họ chỉ cho phép các ứng viên chọn từ Java, C++, JavaScript hoặc Python cho các cuộc phỏng vấn mã hóa thuật toán của họ
Tuy nhiên, lựa chọn bạn đưa ra có thể ảnh hưởng đến hiệu suất của bạn nhiều hơn bạn tưởng - và đây là lý do tại sao điều quan trọng là phải sớm chọn một ngôn ngữ lập trình phù hợp trong quá trình chuẩn bị phỏng vấn lập trình - và sử dụng thường xuyên trong thực tế
Có 3 cân nhắc khi quyết định sử dụng ngôn ngữ lập trình nào
- Sự phù hợp cho các cuộc phỏng vấn
- Sự quen thuộc của bạn với ngôn ngữ
- ngoại lệ
1. Sự phù hợp cho các cuộc phỏng vấn
Một số ngôn ngữ chỉ phù hợp hơn cho các cuộc phỏng vấn - các ngôn ngữ cấp cao hơn như Python hoặc Java cung cấp các chức năng thư viện tiêu chuẩn và cấu trúc dữ liệu cho phép bạn dịch giải pháp sang mã dễ dàng hơn
Theo kinh nghiệm phỏng vấn của tôi, hầu hết các ứng viên chọn Python hoặc Java. Các ngôn ngữ thường thấy khác bao gồm JavaScript, Ruby và C++. Tôi hoàn toàn sẽ tránh các ngôn ngữ cấp thấp hơn như C hoặc Go, đơn giản vì chúng thiếu nhiều hàm thư viện và cấu trúc dữ liệu tiêu chuẩn và một số có thể yêu cầu quản lý bộ nhớ thủ công
Cá nhân tôi, Python là lựa chọn thực tế của tôi cho các cuộc phỏng vấn mã hóa thuật toán vì nó ngắn gọn và có sẵn một thư viện hàm và cấu trúc dữ liệu khổng lồ. Python cũng sử dụng các API nhất quán hoạt động trên các cấu trúc dữ liệu khác nhau, chẳng hạn như len[]
, for .. in ...
và ký hiệu cắt trên các chuỗi [chuỗi/danh sách/bộ dữ liệu]. Lấy phần tử cuối cùng trong một dãy là arr[-1]
và đảo ngược nó chỉ đơn giản là arr[::-1]
. Bạn có thể đạt được rất nhiều với cú pháp tối thiểu trong Python
Java cũng là một lựa chọn hợp lý nhưng việc phải liên tục khai báo các loại trong mã của bạn đồng nghĩa với việc phải nhấn thêm phím dẫn đến việc gõ nhiều hơn mà không mang lại bất kỳ lợi ích nào [trong môi trường phỏng vấn]. Vấn đề này sẽ rõ ràng hơn khi bạn phải viết trên bảng trắng trong các cuộc phỏng vấn tại chỗ. Lý do chọn/không chọn C++ tương tự Java. Cuối cùng, Python, Java và C ++ là những lựa chọn ngôn ngữ phù hợp
- Khuyến khích. Python, C ++, Java, JavaScript
- Chấp nhận được [nhưng nên dùng nếu bạn đã quen]. Đi, Ruby, PHP, C#, Swift, Kotlin
- Ngăn ngừa. Haskell, Erlang, Perl, C, Matlab
- Bạn phải điên. Brainfuck, hội
2. Sự quen thuộc của bạn với ngôn ngữ
Hầu hết thời gian, bạn nên sử dụng một ngôn ngữ mà bạn cực kỳ quen thuộc hơn là chọn một ngôn ngữ mới chỉ để sử dụng trong các cuộc phỏng vấn
Nếu bạn bị hạn chế về thời gian, việc chọn một ngôn ngữ mới chỉ để phỏng vấn không phải là một ý kiến hay. Các ngôn ngữ cần có thời gian để thành thạo và nếu bạn đã dành phần lớn thời gian và công sức của mình để sửa đổi/làm chủ các thuật toán, thì hầu như không còn năng lượng dư thừa để thành thạo một ngôn ngữ mới. Nếu bạn đã quen với việc sử dụng một trong những ngôn ngữ chính, thì không có lý do chính đáng nào để học một ngôn ngữ mới chỉ để phỏng vấn
Nếu bạn đã sử dụng Java tại nơi làm việc được một thời gian và không có thời gian để làm quen với ngôn ngữ khác một cách thoải mái, tôi khuyên bạn chỉ nên gắn bó với Java thay vì chọn Python từ đầu chỉ để phỏng vấn. Làm như vậy, bạn sẽ đỡ phải chuyển đổi ngữ cảnh giữa các ngôn ngữ trong quá trình làm việc vs phỏng vấn. Hầu hết thời gian, nút cổ chai là ở suy nghĩ chứ không phải ở văn bản. Phải mất một số thời gian làm quen trước khi một người trở nên thông thạo một ngôn ngữ và có thể sử dụng ngôn ngữ đó một cách dễ dàng
Lý do chính đáng để học một ngôn ngữ mới
- Cuộc phỏng vấn yêu cầu sử dụng ngôn ngữ đó [các vai trò dành riêng cho miền như thiết bị di động/giao diện người dùng/khoa học dữ liệu]
- Bạn không vội bắt đầu phỏng vấn
Những lý do tồi tệ để học một ngôn ngữ mới
- Công ty bạn đang phỏng vấn sử dụng ngôn ngữ đó rất nhiều và bạn muốn gây ấn tượng với người phỏng vấn/chứng tỏ rằng bạn phù hợp với công ty đó
- Bạn muốn thể hiện mình là người sành điệu
3. ngoại lệ
Một ngoại lệ đối với quy ước cho phép bạn "chọn bất kỳ ngôn ngữ lập trình nào bạn muốn" là khi bạn đang phỏng vấn cho một vị trí dành riêng cho miền, chẳng hạn như vai trò Kỹ sư giao diện người dùng/iOS/Android, trong đó bạn sẽ cần phải làm quen với viết mã lần lượt bằng JavaScript, Objective-C/Swift và Java. Nếu bạn cần sử dụng cấu trúc dữ liệu mà ngôn ngữ đó không hỗ trợ, chẳng hạn như Hàng đợi hoặc Đống trong JavaScript, có thể thử hỏi người phỏng vấn xem bạn có thể cho rằng mình có cấu trúc dữ liệu triển khai các phương thức nhất định với độ phức tạp về thời gian được chỉ định không. Nếu việc triển khai cấu trúc dữ liệu đó không quan trọng để giải quyết vấn đề, người phỏng vấn thường sẽ cho phép điều này. Trên thực tế, nhận thức được các cấu trúc dữ liệu hiện có và chọn những cấu trúc phù hợp để giải quyết vấn đề hiện tại quan trọng hơn là biết các chi tiết triển khai phức tạp