it-swarm-vi.com

Làm thế nào để nhận ra một lập trình viên giỏi?

Công ty chúng tôi đang tìm kiếm lập trình viên mới. Và đây là vấn đề - có nhiều nhà phát triển trông thực sự tuyệt vời trong cuộc phỏng vấn, dường như biết công nghệ bạn cần và có nền tảng công việc tốt, nhưng sau hai tháng làm việc, bạn phát hiện ra rằng họ không thể làm việc trong một nhóm, viết một số mã sẽ khiến họ mất một thời gian rất dài, và hơn nữa, kết quả không tốt như mong muốn.

Vì vậy, bạn có sử dụng bất kỳ bài kiểm tra chính thức (có bất kỳ?)? Làm thế nào để bạn nhận ra một lập trình viên tốt - và một người tốt? Có câu hỏi 'tốt' đơn giản nào có thể tiết lộ các vấn đề trong tương lai không? ... Hoặc đó chỉ là về "cảm giác" của bạn về người đó (ví dụ, chủ yếu là trải nghiệm của bạn) và thử anh ấy/cô ấy?

Chỉnh sửa: Theo câu trả lời của Manoj, tại đây là câu hỏi liên quan đến nhiệm vụ mã hóa tại buổi phỏng vấn xin việc.

133
gius

Khiến họ nói về những gì họ quan tâm. Tôi chưa gặp một nhà phát triển thực sự đam mê khi nói về lập trình nhưng thực sự không thể viết mã. Tất nhiên chúng cũng có thể tồn tại - và cuộc phỏng vấn của bạn cũng nên kiểm tra năng lực - nhưng niềm đam mê là một chỉ số tốt trong kinh nghiệm của tôi. (Lưu ý rằng điều đó không giống với khả năng "nói chuyện" về mặt từ thông dụng.)

Hỏi họ những gì họ không thích về ngôn ngữ hoặc nền tảng yêu thích của họ. Làm thế nào họ sẽ sửa chữa mọi thứ? Họ muốn thấy gì trong phiên bản tiếp theo? Họ có dự án sở thích? Nếu họ đã có một blog, hãy đọc nó. Kiểm tra sự hiện diện trực tuyến chung của họ.

157
Jon Skeet

Thuê người giỏi là khó .

Nó đã có một số sai lầm thực sự cho tôi để có được tốt hơn về nó. Bạn bắt đầu tin tưởng đường ruột của mình hơn rất nhiều sau vài lần đầu tiên bạn không tin tưởng và hối tiếc.

Tôi rất tôn trọng câu hỏi trên màn hình điện thoại của Steve Yegge và đã sử dụng điều này làm cơ sở để phỏng vấn mọi người với một số thành công.
[.__.] Tôi cũng nghĩ rằng mình đã trở nên tốt hơn khi phỏng vấn mọi người sau khi đọc Hướng dẫn của Joel về phỏng vấn du kích (bây giờ ở phiên bản 3.0, trước phiên bản dành cho web và mọi thứ, nó chỉ cần có ngoan nhé).

Ngoài ra còn có 57 câu hỏi khác (tính đến ngày 20/11/2008) trên Kỹ thuật phần mềm Stackexchange được gắn thẻ phỏng vấnmột số trong số chúng có vẻ rất phù hợp, vì vậy hãy kiểm tra chúng.

84
Hamish Smith

Một vài ý tưởng:

  • Đặt một số câu hỏi mở từ nhiều góc độ khác nhau:

    • Xem lại một số mã. Xác định cái gì? Lỗi kỹ thuật, sự không nhất quán về kiểu dáng, nhận xét, thuật toán, khả năng bảo trì, v.v ...
    • Viết một số mã. Tìm quy trình, chống đạn, dễ đọc, v.v.
    • Tạo một thiết kế cấp cao cho một hệ thống nhỏ. Tìm kiếm sự hiểu biết về vấn đề, cách tiếp cận, giao tiếp, tính đầy đủ, chi tiết.
    • Mô tả quy trình phát triển phần mềm. Tìm kiếm thiết kế, cộng tác, đánh giá, thử nghiệm, thói quen tốt/xấu và kinh nghiệm tổng thể.
  • Chọn một cái gì đó mà bất cứ thứ gì khác mà ứng cử viên tuyên bố là biết rõ. Đặt một câu hỏi đơn giản và sau đó, dựa trên câu trả lời, hỏi một câu hỏi khác, chi tiết hơn một chút và tiếp tục "đào" cho đến khi bạn đạt đến giới hạn kiến ​​thức của ứng viên. Điều này cung cấp cho bạn một ý tưởng về:

    • Trung thực: anh/cô ấy có biết nhiều như đã tuyên bố không?
    • Độ sâu của kiến ​​thức: anh/cô ấy học được những điều tốt như thế nào?
    • Giao tiếp: làm thế nào tốt anh/anh ấy giải thích một cái gì đó xa lạ với bạn? Là quá trình suy nghĩ hợp lý?
    • Phản ứng với các tình huống căng thẳng: anh/cô ấy làm việc chăm chỉ để trả lời như thế nào? Có phải anh/cô ấy giả không? Là "tôi không biết" không thể tránh khỏi dễ hay khó?
  • Hỏi cách ứng viên xử lý các tình huống khác nhau trong các công việc trước đây: làm việc nhóm, dự án quá hạn, gỡ lỗi, vv . Là câu trả lời tích cực hay tiêu cực? Đam mê? Thông minh? Kiêu ngạo?

Tôi tìm thấy những ứng viên tốt nhất để nhiệt tình, dày dạn, tự tin nhưng lịch sự và quan trọng nhất, hiện tại. Bạn cần biết có ai đó bên trong. :-)

47
Adam Liss

Để nhận ra một lập trình viên giỏi, bạn phải là một lập trình viên giỏi. Điều đó có nghĩa là bạn phải biết lập trình rất tốt để xem qua những điều được nói và thực hiện trong cuộc phỏng vấn, và bạn phải biết những câu hỏi để hỏi.

Tôi đã thấy các ứng viên đưa ra câu trả lời sai trong cuộc phỏng vấn, nhưng lời giải thích của họ đã cho thấy rằng họ biết chủ đề (và do đó có thể dễ dàng có được câu trả lời đúng bằng cách tìm kiếm trên mạng). Để thấy điều đó, bạn phải biết rất rõ chủ đề bạn đang đặt câu hỏi.

Một điều nữa là để tránh các câu hỏi về các chi tiết có thể dễ dàng bị googled. Những câu hỏi đó chỉ cho thấy ứng viên giỏi ghi nhớ mọi thứ như thế nào, chứ không phải nếu người đó thực sự có kiến ​​thức và hiểu bạn đang tìm kiếm.

Đề nghị của tôi là nhận được sự giúp đỡ từ một người biết nhiều về lập trình và có kỹ năng con người tốt, để giúp đỡ trong các cuộc phỏng vấn.

Chỉnh sửa: Tôi cũng đã viết một bình luận về các cuộc phỏng vấn ở đây .

39
Eigir

Hãy nhớ rằng khả năng lập trình không phải là tất cả. Bạn có thể có lập trình viên giỏi nhất thế giới làm việc cho bạn, nhưng nếu họ ghét làm việc với người khác, bạn sẽ không thấy họ rất hữu ích.

Một nhân viên lập trình nên được xếp hạng cao hơn trong danh sách so với hầu hết các nhà tuyển dụng dường như xếp hạng nó. Ở nơi làm việc hiện tại của tôi, họ rất cẩn thận về việc thuê đúng loại người.

Mọi người thường có thể học để trở thành lập trình viên tốt hơn, mọi người thường không thể học để trở thành con người tốt hơn.

24
Doctor Jones

Làm cho họ mã. Đưa ra một vấn đề có thể được giải quyết trong 4 hoặc 5 giờ và kiểm tra mã cho tài liệu, phong cách mã hóa, cách anh ấy lên kế hoạch cho giải pháp trước khi thực sự bắt đầu viết mã, v.v. Anh ấy không cần phải thực sự giải quyết vấn đề. Và như Jon Skeet đã đề cập, hãy khiến họ nói về lập trình, ngôn ngữ họ chọn và những thứ tương tự. Bạn có thể ghi lại niềm đam mê trong một lập trình viên giỏi. Hỏi có bao nhiêu trang web liên quan đến lập trình mà họ theo dõi - như stackoverflow. Các blog họ theo als có thể là một chỉ số tốt.

16
Manoj

Tôi thích câu trả lời đam mê. Tôi tin rằng bạn phải đam mê những gì bạn làm việc để thực sự giỏi về nó.

Một chương trình lập trình tốt ở bên cạnh công việc (ít nhất một lần trong một thời gian). Anh ấy/cô ấy thích giải quyết các vấn đề lập trình. Và khi anh ấy/cô ấy không thể tìm thấy một chương trình giải quyết một nhu cầu cụ thể ở nhà, anh ấy thường sẽ cố gắng tự giải quyết nó.

Nhưng có một số loại lập trình viên.

  • Bạn có những người yêu thích tài liệu. Cá nhân tôi ghét tài liệu. Nhưng tài liệu những gì được thực hiện có thể quan trọng.
  • Bạn có "tin tặc". Những câu hỏi rất hay trong việc giải một câu đố phức tạp trong đó nếu bạn tìm google ở ​​đâu, có lẽ bạn sẽ không tìm được lời giải. Họ có thể giải quyết vấn đề "bất kỳ" miễn là họ có các công cụ họ cần.
  • Bạn có những người tự giáo dục để trở thành lập trình viên chỉ vì thị trường tốt cho việc được thuê để lập trình. Những điều đó thường tầm thường vì họ thiếu niềm đam mê.
  • Bạn có những người tuyệt vời trong giao tiếp và họ "có thể giải quyết bất cứ điều gì" nhưng một khi họ nhận được công việc, họ sẽ nhờ mọi người khác giúp đỡ cho vấn đề họ đang giải quyết.

Nếu bạn có thể tìm thấy "hacker" cũng tài liệu rất tốt và có kỹ năng giao tiếp tuyệt vời, tôi sẽ tin rằng bạn đã trúng số độc đắc.

Oh, và một điều cuối cùng. Bạn có thể không muốn một lập trình viên có tham vọng lãnh đạo, vì anh ta sẽ chỉ sử dụng lập trình để khởi chạy. Điều đó có nghĩa là bạn sẽ mất tài nguyên đó sớm hay muộn.

Một câu hỏi tôi sẽ hỏi khi thuê một lập trình viên sẽ là: "Tại sao bạn lại tự học như một lập trình viên?". Đó sẽ là một tặng cho chết nếu họ do dự ở đó.

Đó là ý kiến ​​của tôi.

16
Wolf5

Một người bạn của tôi đang làm việc trong một công ty nơi họ có thêm một bước trong quy trình tuyển dụng: sau khi sàng lọc và phỏng vấn ban đầu, một ứng viên phải "thử việc" trong vài ngày. Anh ấy nói với tôi rằng mặc dù một ứng viên có mọi kỹ năng và tài năng cần thiết, họ không thuê anh ấy vì anh ấy một không phải là một người tốt để làm việc với.

7
Svante

Rất khó để nhận ra một lập trình viên chỉ dựa trên một cuộc phỏng vấn xin việc.

Một số điều quyết định rằng ai đó là một lập trình viên giỏi là:

  • có khả năng làm việc theo nhóm
  • viết mã tốt có thể hiểu và duy trì
  • có thể tìm hiểu về các công nghệ mới

Vì vậy, bạn có một số gợi ý nhỏ bạn có thể tìm hiểu trong một cuộc phỏng vấn:

  • Ứng viên có biết một ngôn ngữ công nghệ/lập trình hay anh ta biết nhiều ngôn ngữ? Nếu anh ta biết các ngôn ngữ khác nhau, anh ta dường như có thể học những điều mới và anh ta có thể biết về những nhược điểm trên công nghệ/ngôn ngữ ưa thích hiện tại của mình. Vì vậy, yêu cầu kiến ​​thức bên cạnh công nghệ bạn sử dụng trong công ty của bạn.
  • Yêu cầu các dự án anh ấy đã làm việc, đặc biệt là các dự án sở thích và nguồn mở. Các dự án sở thích cho bạn thấy rằng anh ấy thích lập trình và thực hiện nó ngay cả khi rảnh rỗi (và cách này giúp cải thiện kỹ năng của anh ấy). Trong một dự án nguồn mở, bạn có thể tra cứu mã anh ấy đã viết. Nếu dự án liên quan đến nhiều người, bạn có thể nhận được gợi ý về kỹ năng làm việc nhóm của anh ấy. Trong một dự án hệ điều hành, bạn có thể tra cứu lưu trữ danh sách gửi thư để biết thêm.
6
Mnementh

Bạn có thể thực hiện một số bài kiểm tra trong cuộc phỏng vấn.

Nhưng nhiều khi cũng có một vấn đề với chính môi trường làm việc. Chắc chắn điều này có thể không xảy ra trong tổ chức của bạn, nhưng nó khá phổ biến trong lĩnh vực công nghiệp phần mềm khiến khoản nợ công nghệ trở nên quá lớn. Sau đó, khi bạn thuê người mới, họ sẽ không giúp được gì nhiều nếu họ tốt hay không, vì nợ nần. Tối đa hóa khả năng đọc và dễ hiểu của mã chương trình của bạn giúp những người mới tham gia vào công việc.

Ngoài ra nhiều người như vậy mà họ có thể hợp tác, nhưng đôi khi không có cách nào để hợp tác. Ví dụ, nếu tất cả mọi người là nhà phát triển, họ có nghĩa vụ phải làm công việc của họ. Vâng, họ làm. Nhưng bạn có một kiến ​​trúc sư, điều khiển dự án phát triển và tiếp tục các cuộc họp và như vậy không? Các nhà phát triển bình thường có thể cảm thấy rằng họ không có nhiệm vụ cần thiết để bắt đầu các cuộc họp và họ có thể nghĩ rằng việc ngắt lời người khác bây giờ và sau đó không phải là cách.

Giao tiếp với nhau không nên là mục tiêu cuối cùng. Càng ít giao tiếp, càng tốt, nhưng chỉ khi ít có thể. Ít trở nên có thể nếu bạn có một kiến ​​trúc sư. Tổng số lượng giao tiếp có thể ở mức tốt, nhưng bạn nhận được nhiều kết quả hơn cho cùng một lượng giao tiếp.

3
Silvercode

đầu tiên tôi bắt đầu với những thứ phỏng vấn thông thường, tôi xem xét rất quan trọng để xem liệu người trước mặt tôi có xứng đáng với điều gì không, và để xác định kỹ năng và kiến ​​thức của anh ấy/cô ấy.

Sau đó, tôi sử dụng một vài kỹ thuật trong lĩnh vực Java, như thảo luận về một số nguyên tắc, chủ yếu được lấy từ Java hiệu quả.

Ở giai đoạn này, khi tôi nghĩ rằng tôi có thể có một lập trình viên giỏi trước mặt, tôi đưa cho anh ta một đoạn mã để xem lại mã. Những gì tôi muốn thấy là anh ta có thể xác định chính xác các phần nguy hiểm của mã, đưa ra một số gợi ý về các cải tiến, tìm ra những cạm bẫy về hiệu suất đa luồng VÀ anh ta có thể phân biệt giữa các nhận xét quan trọng và "nhận xét hương vị". Tất cả điều này giúp tôi tìm được một nhân viên thành thạo hơn.

nhưng cuối cùng tôi luôn nhớ rằng tuyển dụng là một loại cờ bạc ... rất rất khó lường ...

3
baba smith

Tôi biết điều này không trả lời những gì bạn đang hỏi nhưng tôi đề nghị, luật pháp cho phép, luôn thuê trên cơ sở tạm thời lúc đầu (hai tuần hoặc một tháng, tùy thuộc vào công việc). Nếu người đó xứng đáng với muối của anh ta, anh ta sẽ không phản đối, ngoài ra đó là một biện pháp bảo vệ cho cả hai bạn (bạn có thể để anh ta đi và anh ta có thể sẽ không thích công việc và rời đi).

2
Vinko Vrsalovic