Làm thế nào để thuê một lập trình viên

Bài viết được dịch từ blog Coding Horror

Thực ra không có gì là bí mật trong việc tuyển dụng các lập trình viên cả. Nhưng tôi có thể chia sẻ lời khuyên về một vài kỹ thuật mà tôi đã thấy nó hiệu quả, và tôi sẽ viết về chúng sau đây vì cá nhân tôi đã thử áp dụng trong nhiều năm qua.

Làm thế nào để tuyển dụng được một lập trình viên giỏi?Làm thế nào để tuyển dụng được một lập trình viên giỏi?

1. Đầu tiên, phải đưa ra một số bài kiểm tra trực tuyến dạng “Hello World” đơn giản.

Tôi biết điều này thì nghe có vẻ hơi khùng, nhưng có một số người tự nhận mình là lập trình viên nhưng lại không biết lập trình. Tới tận ngày hôm nay, tôi vẫn nhận những thông báo đều đặn từ nhiều người nói với tôi rằng họ có những ứng viên mà không thể làm được những bài kiểm tra lập trình thuộc loại cơ bản nhất có thể tưởng tượng được.

Đó là lý do tại sao mà những bài kiểm tra lập trình vô cùng đơn giản là bước đầu tiên trong bất kỳ một quá trình phỏng vấn lành mạnh nào. Những bài kiểm tra này nên được thực hiện trực tuyến, và mục đích thì không phải là để chứng tỏ rằng ứng viên đó là một dạng thiên tài về lập trình, mà rằng họ biết lập trình là cái khỉ gió gì. Vâng, nghe thì thật đáng buồn và nản lòng nhưng điều này thì rất cần thiết, nhưng nếu bạn không thực hiện bước kiểm tra cơ bản này thì tin tôi đi – chắc chắn là bạn sẽ hối hận đấy.

Một số dịch vụ làm công việc kiểm tra lập trình trực tuyến này khá tốt (tôi chắc là có nhiều hơn, nhưng đây là những công cụ mà tôi đã từng sử dụng) là Interview ZenCodility.

2. Hỏi xem hồ sơ portfolio của họ (danh sách những dự án đã làm trước đây).

Bất kỳ một lập trình viên giỏi nào cũng nên có một trang portfolio về những thứ mà họ đã từng làm việc trên đó. Nó không cần phải hào nhoáng. Tôi đang chỉ tìm kiếm manh mối của những thứ mà bạn đã để lại trên Internet để giúp đỡ những người khác. Hãy chỉ cho tôi profile của bạn trên trang Stack Overflow nơi mà tôi có thể nhìn thấy dạng giao tiếp và cách bạn là người giải quyết vấn đề như thế nào. Gửi cho tôi đường link đến kho chứa code của một vài dự án mã nguồn mở của bạn. Bạn có một blog chuyên nghiệp không? Một tài khoản trên tumblr? Một tài khoản twitter? Hay là một vài từ ngữ nào đó mà tôi chưa bao giờ nghe tới? Rất tốt, hãy xem xét chúng. Chia sẻ các ứng dụng mà bạn đã thiết kế, hoặc các trang web mà bạn đã từng làm việc trên đó, và mô tả phần nào trong đó là của bạn làm.

Chỉ cần xem dạng công việc nào mà người ta đã làm, và dạng sản phẩm trực tuyến nào mà họ đã tạo ra, thì đó là nguồn thông tin vô cùng hữu ích để bạn có thể biết về những người đó là tốt (hay xấu).

3. Người được thuê phải phù hợp với văn hóa công ty.

Giống như GitHub, tôi nhận thấy rằng chính sự phù hợp về văn hóa thường là một điều cho thấy trước sự thành công hơn chỉ là người có khả năng lập trình siêu hạng.

Chúng tôi nói về [triết lý sống] trong suốt quá trình tuyển dụng, cái mà chúng tôi thường rất để ý đến. Chúng tôi muốn bất kỳ một GitHubber tiềm năng nào biết rằng họ đang gia nhập vào tổ chức như thế nào và đảm bảo rằng họ có thể hòa nhập được. Một phần của điều đó là có một buổi ăn tối cùng nhau và nói chuyện về những chủ đề như là văn hóa, triết lý sống, các sai lầm mà chúng tôi đã phạm phải, các kế hoạch, hay bất cứ điều gì khác.

Trước đây khi chúng tôi thuê một số người chỉ vì các kỹ năng của họ mà ít quan tâm đến họ phù hợp với văn hóa của công ty ra sao hoặc liệu họ có hiểu triết lý của công ty không. Và đương nhiên là những người này không làm việc hiệu quả. Vì vậy giờ đây khi chúng tôi quan tâm về các kỹ năng của các nhân viên tiềm năng, thì một phần quan trọng khác là chúng tôi cũng phải xem liệu họ có thể hòa nhập được với chúng tôi hay không.

Tôi nhận ra rằng không phải tất cả mọi công ty đều một cộng đồng xung quanh công việc mà họ đang làm, nhưng nếu bạn có một cộng đồng thì bạn nên thử tìm thuê từ chính cộng đồng của bạn bất cứ khi nào có thể. Đây là những người mà bị thu hút một cách tự nhiên tới công việc mà bạn làm, và đã bị lôi cuốn vào bởi sự hấp dẫn của công ty bạn và dành sự ủng hộ của họ cho bạn. Điểm lợi thế của những ứng viên này là sẽ trở nên phù hợp với văn hóa công ty cao hơn mức bình thường. Đó chính là điều mà bạn muốn!

Nếu có một số người dùng tạo ra một module đáng kinh ngạc cho trò game của bạn? Hoặc nếu họ tìm thấy một lỗ hổng bảo mật và cố gắng báo với bạn về lỗ hổng đó? Thì hãy thuê những người này ngay lập tức!

4. Tiến hành một cuộc phỏng vấn chi tiết và có cấu trúc qua điện thoại.

Một khi bạn đã thực hiện qua các bước kể trên, thì giờ đến lúc bạn nên thực hiện một cuộc điện thoại cho ứng viên. Nên nhớ rằng cuộc gọi đó không phải để tán gẫu, nó là để kiểm tra ứng viên. Cuộc gọi đó nên được lên kế hoạch có cấu trúc về chủ đề kỹ thuật, vì vậy cả hai người có thể nhận ra ngay lập tức nếu thấy không phù hợp. Cuộc gọi phỏng vấn đó chỉ bao gồm những vấn đề cơ bản, nhưng phải đảm bảo một số điểm sau:

  1. Trao đổi một chút về lập trình. Ví dụ như “Hỏi họ cách tìm số nguyên lớn nhất trong một mảng số nguyên.”
  2. Một số kiến thức về thiết kế cơ bản. Một số kiến thức về HTML.
  3. Hỏi về Scripting và Regular expressions. “Liệt kê ra một danh sách của những file text trong một thư mục mà chứa các số điện thoại trong một định dạng xác định.”
  4. Cấu trúc dữ liệu. “Khi nào thì bạn nên sử dụng một hashtable và khi nào thì sử dụng một mảng (array)?”
  5. Hỏi về bit và byte. “Tại sao các lập trình viên nghĩ rằng khi hỏi liệu Oct 31 và Dec 25 thì có cùng một ngày không là một câu hỏi vui?”

Cái mà bạn đang tìm kiếm thì không nhất thiết phải là những câu trả lời hoàn hảo, nhưng một số ngữ cảnh sẽ chỉ ra cách ứng viên đó giải quyết những vấn đề như thế nào, và liệu họ có hiểu rõ về các sản phẩm của họ hay không (thêm hoặc bớt khoảng 10%). Mục đích là đảm bảo rằng những ứng viên đó thực sự đã làm ra sản phẩm đó, để cho bước phỏng vấn tiếp theo không tốn thời gian của họ và của bạn. Vì vậy đừng cảm thấy ngại khi mà bạn phải ra quyết định kết thúc một cuộc gọi sớm hơn dự định nếu thấy xuất hiện quá nhiều dấu hiệu cảnh báo không tốt.

5. Đưa cho họ một dự án thử thách.

Vì ứng viên đó đã vượt qua được những bài kiểm tra về lập trình kiểu “hello world”, có một hồ sơ portfolio khá ổn, có sự phù hợp về văn hóa, và đã vượt qua được buổi phỏng vấn sơ bộ qua điện thoại. Bây giờ là lúc hẹn một buổi phỏng vấn gặp mặt trực tiếp, phải không nào? Không đến nỗi quá nhanh như mấy gã cao bồi miền tây!

Tôi đã từng gặp những ứng viên mà vượt qua được tất cả những vòng kể trên, tham gia vào công ty, và hoàn toàn thất bại trong việc Hoàn Thành Công Việc. Có phải tôi đã từng đề cập rằng việc thuê các lập trình viên là điều rất khó phải không?

Nếu bạn muốn quyết định xóa tan sự nghi ngờ về liệu một ai đó có trở thành một nhân viên tuyệt vời hay không, thì hãy đưa cho họ một dự án thử thách. Tôi không nói về những vấn đề lập trình chung chung hoặc trừu tượng, mà tôi đang nói về một thế giới thực, xin thề trước Chúa, đó là những phần công việc mà bạn cần phải hoàn thành ngay lúc này đây trên sản phẩm thực sự của bạn. Một việc gì đó mà bạn muốn đưa nó cho một nhân viên hiện tại, nếu tất cả họ không quá bận rộn làm những công việc khác.

Dự án này nên có một tỷ lệ giờ nhất định, và phải định rõ nhiệm vụ của dự án một cách rõ ràng. Lựa chọn một dự án nhỏ mà có thể lý tưởng để hoàn thành trong một ít ngày, có thể nhiều nhất là từ một đến hai tuần. Ứng viên đó có thể lựa chọn đến công ty, hoặc họ có thể làm việc từ xa tại nhà. Tôi biết rằng không phải mọi công ty đều có những phần công việc với kích thước nhỏ để có thể cắt ra cho một ai đó ở ngoài công ty – nhưng đang cố gắng làm nó để gia nhập vào công ty – nhận làm. Tôi cũng lý luận rằng nếu bạn không thể nghĩ ra một cách nào đó để tạo ra một dự án thử thách nhỏ cho một ứng viên đang cần thuê, thì có lẽ bạn cũng chẳng thể tổ chức tốt công việc cho những nhân viên hiện tại của bạn.

Nếu dự án thử thách đó thành công, thì thật tuyệt vời – bởi giờ đây bạn đã có một ứng viên có phẩm chất rất cao mà có thể chứng tỏ rằng họ có khả năng Hoàn Thành Công Việc, bạn gần như đã hoàn tất công việc cần phải làm. Tới ngày hôm nay, tôi chưa bao giờ nhìn thấy một ứng viên nào vượt qua được dự án thử thách mà lại không biết làm việc. Tôi rất xem trọng việc thực thi trên dự án thử thách đó; nó thì cũng gần như là bạn có thể nhận làm công việc thực sự trong lúc chưa được thuê. Và nếu dự án thử thách đó không hoạt động tốt, thì hãy cân nhắc đến chi phí bỏ ra là rất nhỏ khi đem so sánh với một quá trình phỏng vấn mở rộng cùng với 4 hoặc 5 người khác tại công ty của bạn. Trường hợp xấu nhất, bạn có thể sử dụng dự án thử thách đó cho một ứng viên tiếp theo.

(Một giai đoạn thử việc có thể cũng mang lại kết quả tốt, và về khái niệm thì cũng tương đối giống nhau. Bạn có thể thuê họ trong 6 đến 8 tuần để trước khi ra quyết định “nhận hay không nhận” và mọi người phải đồng ý trước về điều đó.)

6. Hẹn họ đến gặp mặt với chúng ta và bảo họ trình bày về sản phẩm hoặc lĩnh vực công nghệ là sở trường của họ.

Cuối cùng, bạn nên gặp mặt trực tiếp các ứng viên tại một thời điểm nào đó. Điều đó thì không thể tránh được, nhưng so với thời điểm của những bước sớm hơn thì bạn sẽ có đến 95% chắc chắn rằng một ứng viên sẽ là một nhân viên tuyệt vời trước khi họ bước chân vào một phòng phỏng vấn.

Tôi thì còn xa mới trở thành một chuyên gia trong việc phỏng vấn con người, nhưng tôi không thích những câu hỏi phỏng vấn kiểu đánh đố.

Thay vì đó, tôi có lý thuyết của riêng mình về cách chúng ta nên phỏng vấn các lập trình viên như thế nào: đó là đưa cho ứng viên đó 15 phút để trình bày về lĩnh vực mà họ tinh thông nhất. Tôi nghĩ điều này mang lại kết quả tốt hơn rất nhiều so với cách phỏng vấn truyền thống, bởi vì bạn sẽ nhanh chóng biết được nhiều điều…

  • Liệu người đó có đam mê về công việc mà họ đang làm hay không?
  • Họ có thể giao tiếp tốt trong một nhóm nhỏ hay không?
  • Liệu họ có khả năng nghiên cứu trong lĩnh vực của họ hay không?
  • Nhóm của bạn có thích làm việc với gã đó hay không?

Có một thứ mà tất cả các lập trình viên đều nên biết, như Steve Yegge đã nói, đó là làm thế nào để tiếp thị bản thân, tiếp thị code và dự án của bạn. Tôi hoàn toàn đồng ý với điều đó.

7. Không cái nào trong số các bước trên là đảm bảo chắc chắn cả.

Làm ơn hãy chỉ xem danh sách trên là ở dạng tham khảo. Tôi đã nhìn thấy những kỹ thuật này hoạt động hiệu quả, và tôi hiếm khi thấy chúng không hoạt động. Hãy tùy biến lời khuyên này theo những hoàn cảnh của riêng bạn, giữ lại những gì mà bạn cảm thấy phù hợp, và lờ đi phần còn lại (mặc dù tôi xin nhấn mạnh rằng bạn đừng bao giờ bỏ qua bước số #1). Thậm chí trong những hoàn cảnh tốt nhất, thì việc tuyển dụng nhân sự là một việc khó. Một nhân viên được tuyển có thể làm việc không hiệu quả bởi nhiều lý do vượt quá tầm kiểm soát của bất kỳ ai. Con người mà, những gì liên quan đến con người thì đều rất phức tạp.

Nếu bạn nghĩ rằng công việc cũng là một mối quan hệ, một khi bạn sẽ dành 40 giờ mỗi tuần (hoặc nhiều hơn) trong phần còn lại của cuộc đời mình, thì mọi người phải có trách nhiệm tham gia vào một “cuộc hẹn hò thông minh”. Cả công ty và ứng viên nên tạo ra một sự tin tưởng tốt đẹp trong nỗ lực để xem liệu có một sự hòa hợp ở đây hay không. Mục tiêu của bạn đừng chỉ đơn thuần là kiếm một công việc, hoặc thuê một ai đó cho một công việc, mà phải có niềm vui và tạo ra một kết nối yêu thương. Cũng giống như tình cảm yêu đương nam nữ vậy, đừng quá vội vàng vào bất cứ điều gì trừ khi cả hai phía đều cảm thấy phù hợp.

(và xin nói thêm, nếu bạn đang tìm kiếm những cách để quyến rũ các lập trình viên, thì bạn hãy tránh phạm sai lầm bằng cách đọc qua những lời khuyên tuyệt vời từ tác giả Samuel Mullen.)

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s