Từ kinh nghiệm của tôi trong công ty của tôi, nơi tôi đã thực hiện nhiều cuộc phỏng vấn, rất có thể người phỏng vấn không có manh mối về cách làm điều đó đúng. Vì vậy, họ đã chuẩn bị một bộ câu hỏi kỹ thuật và tính điểm của điều đó và làm cho hồ sơ của bạn. Điều này tuy nhiên có nhiều nhược điểm và không nên được thực hiện vì những lý do sau:
Bạn hỏi kiến thức điểm. Nếu lập trình viên tình cờ chưa bao giờ làm điều gì trong lĩnh vực đó, anh ấy / cô ấy vẫn có thể là một đồng nghiệp xuất sắc, nhưng không biết câu trả lời cụ thể đó. Ngược lại: nếu ai đó đã chuẩn bị cho cuộc phỏng vấn và tìm thấy câu trả lời cho câu hỏi cụ thể đó trên mạng, bạn sẽ có câu trả lời đúng, nhưng người đó có thể không có manh mối nào về chủ đề thực tế.
Mọi người lo lắng trong các cuộc phỏng vấn việc làm. Bộ não có tính năng tuyệt vời này để tắt nhiều khu vực cấp cao hơn (như logic) nếu hoảng loạn, điều đó có nghĩa là: nếu bạn lo lắng, bạn có thể không cung cấp chất lượng câu trả lời trong tình huống hàng ngày. Một số người có thể đối phó với một tình huống căng thẳng như một cuộc phỏng vấn, nhiều người không thể.
Với một câu trả lời đúng, duy nhất, bạn kiểm tra kỹ năng của người đó để tìm câu trả lời cụ thể đó. Đây là một trong nhiều kỹ năng mà đồng nghiệp cần, nhưng không phải là một và chỉ yêu cầu. Do đó, một hoặc hai trong số những câu hỏi đó là đủ để kiểm tra lĩnh vực kiến thức đó, và sau đó các kỹ năng khác nên được truy vấn. Một cuộc phỏng vấn chỉ chứa các câu hỏi giải quyết vấn đề kiểm tra cùng một kỹ năng nhiều lần.
Câu hỏi nhiệm vụ lập trình tốt là gì?
Những câu hỏi "Bạn có thể viết một chương trình ngắn" nổi tiếng có một vấn đề lớn là hầu hết các lập trình viên không thể viết một dòng mã mà không có IDE của họ giúp họ. Nhưng đó là trong các tình huống làm việc hàng ngày không có vấn đề gì cả, bởi vì lập trình viên luôn có IDE giúp anh ta. Vì vậy, hãy hỏi những điều như "Tìm lỗi", "Viết 50 dòng mã làm ..." hoặc thậm chí các câu hỏi đơn giản cần phải tính đến, rằng người nộp đơn không có sẵn công cụ của mình (IDE, Google).
Ví dụ, tôi có thể trả lời bạn bất kỳ câu hỏi nào trong vòng 1 phút nếu tôi có Google giúp tôi, nhưng không có kết nối Internet, tôi dường như bất lực. Tôi gọi đó là bộ nhớ thuê ngoài, và thay vì cản trở tôi, nó giúp tôi tập trung vào những gì thực sự quan trọng - hiểu cơ chế lót - bởi vì mọi thứ khác có thể được tìm kiếm. Nhưng đừng hỏi tôi về chi tiết từ bất kỳ API ngẫu nhiên nào, vì tôi không biết những API đó, tôi có Google cho điều đó.
Điều đó nói rằng, một câu hỏi nhiệm vụ lập trình tốt không nên tập trung vào việc biết API hoặc các kỹ năng mã hóa đặc biệt trừ khi đây là một yêu cầu tuyệt đối cho công việc. Kiến thức có thể thu được, vì vậy tốt hơn là tìm hiểu xem người đó giỏi kiến thức như thế nào hơn là hỏi những gì anh ấy / cô ấy đã biết.
Một câu hỏi hay cho một nhiệm vụ lập trình nên ngắn gọn, đơn giản, có thể được mã hóa trong mọi ngôn ngữ chỉ với một vài dòng mã và đặc biệt - sẽ cho bạn biết càng nhiều càng tốt về cách người đó làm việc và tìm câu trả lời. Thí dụ:
"Viết một hàm bằng ngôn ngữ bạn chọn lấy một mảng các số nguyên và sắp xếp lại chúng theo cách mà số nguyên đầu tiên sau số cuối cùng và tất cả các số nguyên khác thay đổi theo."
Đầu tiên, bất kỳ ứng viên nào cũng nên hỏi vào thời điểm này là: "Xin lỗi ... bạn có thể vui lòng giải thích nhiệm vụ không?". Bởi vì không có lập trình viên nào được đưa ra một mô tả rõ ràng về những việc cần làm bao giờ. Tiếp theo là lời giải thích, rằng mã trong các câu hỏi nên thực hiện dịch chuyển sang trái nội dung của mảng với phần tràn được thêm vào bên phải.
Nhiệm vụ này rất đơn giản, đến nỗi bất kỳ ai tốt nghiệp bất kỳ hình thức cấp độ lập trình nào cũng có thể trả lời đúng. Điều này tính đến việc lập trình viên phải làm việc mà không có công cụ của mình và việc lo lắng sẽ làm giảm khả năng suy nghĩ logic. Tuy nhiên, nó vẫn cho bạn biết cách mọi người giải quyết vấn đề chỉ từ cách đặt câu hỏi và từ cách mọi người tiếp cận nó, đơn giản vì sự dịch chuyển trái là trái với bản năng 'trái sang phải' và buộc mọi người phải suy nghĩ một giây
Có rất nhiều câu trả lời cho câu hỏi này, vì vậy hãy xem xét kỹ cách phát triển mã là phần quan trọng, chứ không phải nếu giải pháp thực sự hoạt động. Người nộp đơn kiểm tra null? Làm thế nào là tràn được lưu trữ? Là một vòng lặp hoặc một mem-set được sử dụng? Làm thế nào để người nộp đơn xác minh tính chính xác của mã? Câu hỏi đơn giản này cho bạn biết toàn bộ tiểu sử về cách người đó làm việc.
Câu hỏi kiến thức chung tốt là gì?
Câu hỏi hay rất dễ trả lời, cho phép có nhiều câu trả lời (được gọi là 'câu hỏi mở') và cho phép bạn tìm hiểu càng nhiều càng tốt về người nộp đơn trong thời gian ngắn bạn có.
Ví dụ:
(Hỏi một lập trình viên C ++): "Bạn biết những ngôn ngữ nào khác ngoài C ++?"
Đây là một câu hỏi cấp độ đầu vào, giúp người nộp đơn có cơ hội công bằng để bảo lãnh tại thời điểm này nếu anh ta không biết gì về chủ đề được hỏi. Một 'không' tại thời điểm này tốt hơn là hành hạ anh ấy / cô ấy bằng một vài câu hỏi mà tất cả anh ấy / cô ấy phải trả lời: "Xin lỗi, tôi không biết gì về điều đó."
Ngoài ra, nó còn cho bạn biết trước hết những ngôn ngữ mà người khác biết, ngoài ra bạn còn biết người đó quan tâm đến thế nào để có cái nhìn rộng hơn về thế giới lập trình, hoặc nếu bạn có ai đó chỉ có ngôn ngữ duy nhất (và do đó là tính năng / kỹ thuật ) lượt xem.
(Tiếp theo sau đó, giả sử anh ta biết Java): Ba điểm khác biệt hàng đầu giữa C ++ và Java trong vấn đề của bạn là gì? "
Đây là một câu hỏi mở cho phép có nhiều câu trả lời, vì vậy người nộp đơn có cơ hội tốt để tìm ít nhất ba câu hỏi. Yêu cầu ba (ý kiến cá nhân) hàng đầu không chỉ giới hạn các câu trả lời có thể, mà còn buộc người nộp đơn phải sắp xếp dựa trên mức độ ưu tiên. Vẫn là (hoặc nên) dễ trả lời.
Đây là một câu hỏi đơn giản kiểm tra rất nhiều kiến thức chuyên sâu về các ngôn ngữ lập trình khác nhau. Làm thế nào sâu là kiến thức về những chủ đề thực sự? Từ những câu trả lời đó, bạn có thể nói rất nhiều về kiến thức và sự hiểu biết thực tế về cơ chế cơ bản của ngôn ngữ lập trình. Người đó đã chi bao nhiêu với các chi tiết bẩn hoặc nếu anh ta / cô ta chỉ là người liên kết các hàm API khác nhau mà không có manh mối thực sự xảy ra bên dưới những chi tiết đó.
Khái niệm câu hỏi cấp độ tiếp theo là câu hỏi kiến thức chuyên sâu đơn giản cũng có thể được sử dụng cho hầu hết các chủ đề khác. Luôn luôn trong chương trình này: câu hỏi bảo lãnh, câu hỏi xác minh, câu hỏi chuyên sâu. Một ví dụ khác (từ một cuộc phỏng vấn Java):
- "Làm thế nào bạn đánh giá kinh nghiệm của bạn với phát triển đa luồng?"
- "Hãy đặt tên cho những gì bạn nghĩ là ba điều quan trọng nhất cần xem xét khi phát triển một ứng dụng đa luồng."
- "Vui lòng đặt tên ba lớp từ API Java có thể giúp bạn phát triển các ứng dụng đó và đưa ra một mô tả ngắn về những gì chúng được sử dụng cho."
Ba câu hỏi này sẽ cho bạn biết nhiều hơn bất kỳ câu hỏi kỹ thuật nào mà người nộp đơn thực sự biết về các chủ đề đó, trong khi công bằng để trả lời xem xét kiến thức điểm và mức độ căng thẳng.
Vì vậy, lần tới khi ai đó hỏi bạn 20 câu hỏi mã hóa liên tiếp, bạn sẽ biết rằng về cơ bản người đó không có ý tưởng nào về cách phỏng vấn ai đó đúng cách. ;)