Câu đố logic rắc rối - Chúng có thực sự hữu ích trong việc đánh giá các kỹ năng lập trình? [đóng cửa]


88

Trong cuộc phỏng vấn cuối cùng mà tôi tham dự, tôi được yêu cầu giải một câu đố mà tôi dự kiến ​​sẽ đo chính xác blah lít nước với hai thùng có dung tích - blah và blah lít tương ứng. Tôi đã không thể giải câu đố trong thời gian nhất định (~ 5 phút).

Người phỏng vấn hơi thất vọng và nói rằng một lập trình viên phải có "những" kỹ năng này. Tôi không hiểu anh ấy đang nói về những kỹ năng gì.

Tôi luôn cảm thấy kỳ lạ về những loại câu đố thường được hỏi trong các cuộc phỏng vấn xin việc lập trình. Tôi không hiểu điều gì, nếu có, là mối liên hệ giữa những câu đố và lập trình như vậy. Chính xác thì những kỹ năng nào mà người phỏng vấn có ý định đánh giá với những câu đố như vậy?


20
trông giống như câu đố jug Die Hard 3 youtube.com/watch?v=lZ64IR2bz5o
JF Dion

64
Một vấn đề lớn với những câu hỏi như vậy là họ thường đo xem người nộp đơn đã thấy vấn đề đó trước đây chưa, và "đã thấy rất nhiều câu đố logic" không phải là một tiêu chí tuyển dụng thực sự tốt.
David Thornley

37
Đây chỉ là thực hành tuyển dụng voodoo. Những người khác hỏi những câu hỏi này để họ cảm thấy như họ đáng lẽ phải thế. Họ biết rằng không trả lời câu hỏi là "xấu" và trả lời là "tốt", nhưng họ không thể cho bạn biết lý do tại sao ngoài câu trả lời không như "nhà phát triển cần những kỹ năng này". Họ là một sự lãng phí thời gian và một chỉ số cho thấy người phỏng vấn không phải là người phỏng vấn có thẩm quyền.
Rein Henrichs

5
Vâng, những bài kiểm tra này là không tốt. Nhưng, thật tuyệt khi một lập trình viên ít nhất có chút hứng thú với những câu đố này. Lời khuyên của tôi: chỉ cần nghiên cứu các câu đố, vượt qua cuộc phỏng vấn, và sau đó quyết định nếu bạn muốn tham gia.
Công việc

10
Tôi sẽ hỏi điều này trong một cuộc phỏng vấn với hy vọng tìm được ứng viên hỏi, "WTF điều này có liên quan gì đến lập trình không?" và làm cho họ một đề nghị trước khi họ ra khỏi bãi đậu xe.
JeffO

Câu trả lời:


97

Một số người hỏi họ trong nỗ lực đánh giá khả năng và cách tiếp cận để giải quyết vấn đề của bạn. Cá nhân, tôi không nghĩ rằng những câu đố như vậy cung cấp một chỉ số chính xác. Trong "thế giới thực", bạn có nhiều hơn năm phút để tìm ra nếu bạn làm việc với một đóng gói bin vs một gói trở lại vấn đề, ví dụ. Ban đầu, đôi khi rất dễ hiểu nhầm vấn đề trong tay cho đến khi bạn đang áp dụng giải pháp sai. Điều đó xảy ra với những người có 1, 5, 10 hoặc thậm chí 20 năm kinh nghiệm.

Cuộc phỏng vấn tốt nhất 'câu đố' là những câu hỏi mà bạn ngồi xuống máy tính để giải quyết vấn đề trong lĩnh vực mà bạn yêu cầu chuyên môn. Tôi cũng không thích "Vâng, một lập trình viên nên có thể ..." suy nghĩ bởi vì nó không đi vào xem xét rằng người ta lo lắng khi nhấn với một cái gì đó bất ngờ trong một khung cảnh đó là đã căng thẳng. Chắc chắn, bạn có thể giải quyết rằng nếu bạn có thời gian để suy nghĩ về nó .. và có lẽ bạn có thể giải quyết nó nhanh hơn nếu bạn nhận ra rằng cuộc sống của bạn sẽ kết thúc nếu bạn không. Bạn có muốn làm việc ở một nơi mà cuộc sống của bạn sẽ kết thúc nếu bạn không thể giải quyết vấn đề trong năm phút ? Bạn sẽ bị sa thải nếu bạn không thể ?

Tất cả các lập trình viên vĩ đại cũng nên là người giải sudoku vô địch? Tôi chắc chắn rằng có rất nhiều, nhưng nó không giống như một số điều kiện tiên quyết cho năng lực.

Tôi không nói rằng bạn không nên được kiểm tra về cách bạn tiếp cận vấn đề, nhưng các bài kiểm tra sẽ rất vui và mời 'người giỏi nhất' mà người nộp đơn phải đưa ra, dựa trên lĩnh vực chuyên môn của họ. Chứng tỏ rằng bạn thông minh như một nhân vật mà Bruce Willis miêu tả có vẻ vô nghĩa, vì các nhà sản xuất đã bỏ ra một khoản tiền khá lớn để có được cảnh đó vừa phải.

Nói cách khác, nếu bạn phát hiện ra rằng bạn đang được phỏng vấn bởi một người ít hiểu biết về những gì bạn thực sự sẽ làm , xin lỗi đi vào phòng vệ sinh và không bao giờ quay lại.


8
Đây là viễn cảnh tất cả những người phỏng vấn cần phải có. Giải quyết một vấn đề trong miền của bạn và nhận xét của bạn về sự căng thẳng và những câu hỏi bất ngờ là ngang bằng!
Chris

20
+1 cho "thế giới thực", bạn có hơn năm phút để tìm ra câu trả lời hay!
Ant's

7
cũng thích thực tế rằng chúng thường được trình bày như thể người phỏng vấn bắt nguồn câu hỏi và tự giải quyết nó :)
RyBolt

10
Tôi rất khó tính excuse yourself to go to the restroom and never return!
Florian Margaine

Vâng, tôi luôn cố gắng làm cho ứng viên cảm thấy thoải mái nhất có thể, vì vậy tôi thực sự có thể cố gắng tìm hiểu xem người đó sẽ tốt như thế nào cho công việc. Yêu cầu "điểm mạnh của bạn" thay vì "bạn thích gì?" và những câu đố ngớ ngẩn thay vì những triết lý mã hóa sẽ không cho tôi bất kỳ dấu hiệu nào về việc người đó làm việc tốt như thế nào.
nháy mắt

56

Microsoft đã bắt đầu sử dụng những câu hỏi này vào đầu những năm 1980. Khi Microsoft trở nên thành công đáng chú ý, các công ty khác bắt đầu sao chép chúng, nhưng một vài điểm chính đã bị mất trong dịch thuật.

Vào thời điểm đó, Microsoft đã cố gắng đảm nhận nhiều vị trí kỹ thuật nhưng không lập trình: nhà văn kỹ thuật, người thử nghiệm, hỗ trợ điện thoại, v.v. Những công việc không phổ biến này trở lại trong ngày và những người có kinh nghiệm thực tế trong các lĩnh vực này rất khó để tìm thấy. Như một sự thay thế, Microsoft nghĩ rằng họ có thể thuê những người thực sự thông minh, thông minh, linh hoạt và đào tạo họ trong công việc. Vì những người này không có nền tảng lập trình, nên việc hỏi họ các câu hỏi lập trình trong cuộc phỏng vấn là vô nghĩa. Các câu đố đã được chọn để thử và xác định những người thông minh và có kỹ năng phân tích đặc biệt tốt. Các lập trình viên thường được đưa ra các vấn đề lập trình bảng trắng, mặc dù họ cũng có thể được hỏi câu đố trong bữa trưa hoặc bữa tối.

Những câu hỏi này không bao giờ có nghĩa là thất bại. Chúng được dự định là khởi đầu của một cuộc trò chuyện về cách bạn sẽ giải quyết vấn đề và cách bạn nghĩ về những vấn đề bạn chưa từng thấy trước đây. Cách chắc chắn duy nhất để "thất bại", là từ chối cố gắng giải quyết vấn đề. Tại thời điểm này, đây là một chiến lược mới và bạn không thể tìm kiếm các câu hỏi trên Google.

Biên tập:

Một thời gian sau khi viết câu trả lời này, tôi đã đọc The Computer Boys Take Over , một lịch sử của điện toán thể chế trong những năm 1950 và 1960. Rõ ràng việc thực hành hỏi những lời trêu ghẹo não và câu đố của các ứng cử viên cho các công việc lập trình đã quay trở lại những năm 1950. Hoa Kỳ đã cố gắng vi tính hóa hệ thống phòng không của mình và IBM ước tính rằng họ sẽ cần vài nghìn lập trình viên để thực hiện công việc. Câu trả lời đã gây sốc và bối rối: chỉ có vài chục "lập trình viên chuyên nghiệp" trên toàn thế giới. Một số cách tiếp cận đã được thử: kiểm tra năng khiếu lập trình trừu tượng, tuyển dụng các nhà toán học làm lập trình viên, tuyển dụng người chơi cờ và người giải câu đố ô chữ, và sàng lọc các ứng viên bằng câu đố và trêu ghẹo não.

Cuối cùng họ đã thành công trong việc tuyển dụng đủ lập trình viên để hoàn thành dự án, nhưng kết luận là không có phương pháp sàng lọc nào tốt hơn cơ hội xác định các tân binh tiếp tục thành công đáng chú ý là lập trình viên.


49

Chúng có hữu ích không? Không thật sự lắm. Chúng đã từng rất phổ biến tại Microsoft, chúng thậm chí còn được gọi là "câu hỏi của Microsoft", và đã có những cuốn sách viết về chúng, đây thực sự là một cuốn sách đáng đọc ..

Có 2 vấn đề với họ. Thứ nhất, nếu người nộp đơn nghiên cứu (và đọc cuốn sách) họ sẽ biết họ bằng mọi cách và thứ hai, ngay cả khi họ có thể giải quyết chúng như thế nào cho thấy rằng đó sẽ là một dev / test / PM tốt.

Vì những lý do này, họ hiếm khi được hỏi nữa tại Microsoft. Sẽ tốt hơn nhiều nếu đặt câu hỏi mã hóa hoặc câu hỏi giải quyết vấn đề không yêu cầu câu trả lời "lừa". Nói cách khác, bạn cần đặt câu hỏi cho phép bạn khám phá các kỹ năng và hành vi của người nộp đơn khi họ cố gắng giải quyết vấn đề - với tư cách là một người phỏng vấn tôi muốn họ đặt câu hỏi, đưa ra giải pháp và sau đó theo dõi khi họ tìm ra một vấn đề, thậm chí có thể không tìm thấy giải pháp trong thời gian họ có nhưng ít nhất là đi về nó một cách hợp lý. Điều đó phản ánh công việc thực tế cuộc sống. Tôi chưa bao giờ phải đo 3 pint bằng cách sử dụng 2 xô và một con gà (hoặc bất cứ câu hỏi nào).

Điều đó nói rằng, tôi đã được hỏi một vài câu hỏi mẹo trong thời gian của mình, và bây giờ tôi coi mình là một chuyên gia vận chuyển gà và cáo trên những chiếc thuyền nhỏ và tính toán thời gian sống của một con ruồi sống trên tàu. Tôi chưa bao giờ phải sử dụng thông tin này, nhưng ai biết được, có thể một ngày nào đó ....


26

Bạn có thể muốn đọc cuốn sách Làm thế nào bạn sẽ di chuyển núi Phú Sĩ? . Lý do là nhiều người sử dụng câu đố trong phỏng vấn, và ý kiến ​​của tôi là nó là sự kết hợp giữa hành vi sùng bái hàng hóa ( "Microsoft làm điều đó và nếu chúng ta muốn thành công như họ, thì chúng ta nên làm những gì họ làm làm " ) và tình huynh đệ nóng bỏng ( " bởi trời ạ!, tôi đã phải trả lời những câu hỏi đó và bạn nên tin rằng chàng trai tiếp theo sẽ phải trả lời chúng! " ).

Lịch sử của những câu hỏi này khi thực hành phỏng vấn bắt đầu với William Shockley vào những năm 1950. Chúng là một loại câu hỏi phỏng vấn khá phổ biến ở Thung lũng Silicon mà những người phỏng vấn hỏi bởi vì những người phỏng vấn khác đang làm điều đó (và có lẽ họ biết điều gì đó mà người phỏng vấn này không biết?). Shockley dự định chúng là một bài kiểm tra trí thông minh, và câu hỏi với 2 thùng là một trong bài kiểm tra IQ Binet IQ ban đầu vào năm 1916.

Rất có thể, những người thực hiện phỏng vấn thực sự muốn xem bạn tìm kiếm câu trả lời như thế nào, vì vậy họ sẽ không thể tính toán được câu hỏi, chẳng hạn như có bao nhiêu máy bơm xăng trong thành phố của bạn. Những loại vấn đề là vấn đề Fermi . Hai bài đăng trên blog thú vị của Jeff về chủ đề này là Câu hỏi phỏng vấn khó nhất từ ​​trước đến nay và Bạn ước tính tốt đến mức nào? Phần III .

Cá nhân, tôi có ý kiến ​​thấp về các loại câu hỏi này vì chúng thường được sử dụng bởi những người phỏng vấn không biết họ đang làm gì, cũng như làm thế nào để tìm kiếm các nhà phát triển. Trừ khi bạn sẽ làm việc cho một công ty tạo ra các câu đố / câu đố, họ thuộc về đống bụi của lịch sử cùng với "điểm yếu lớn nhất của bạn là gì" (trả lời sự thật cho điều này và bạn kết thúc cuộc phỏng vấn của mình theo cách xấu) hoặc "tại sao là nắp hố ga tròn "(không phải tất cả đều như vậy).


3
+1, Không thể đồng ý nhiều hơn với đoạn cuối!
năm11

+1 cho liên kết vấn đề Fermi: thật thú vị khi xem liệu ai đó có thể đưa ra ước tính với giới hạn lỗi hợp lý hay không. Bạn cũng có thể yêu cầu một phạm vi tin cậy về "có bao nhiêu quốc gia?" Tuy nhiên, tôi nghĩ rằng việc biết suy nghĩ theo cách này, trong khi đáng ngưỡng mộ và hữu ích, không thực sự cần thiết cho sự phát triển. Nó hơi giống một nhà phát triển biết tính toán hoặc thống kê: điều đó tốt, nhưng nói nhiều về nền tảng của họ hơn là liệu họ có giỏi trong công việc hay không.
poolie

17

Những người khác đã cung cấp câu trả lời mà tôi đã nêu lên như một vấn đề bắt buộc . Lý do tôi viết một câu trả lời khác là vì những gì tôi muốn nói có lẽ sẽ không phù hợp với một bình luận, và bởi vì có điều gì đó phải được nói về cách một cuộc phỏng vấn công việc lập trình tốt có thể như thế nào.

Trong cuộc phỏng vấn tốt đầu tiên tôi nhớ, chúng tôi đã nói chuyện rất nhiều, không vội vàng. Đầu tiên trong một giờ, trên điện thoại, về thiết kế hướng đối tượng và những ưu và nhược điểm của việc triển khai nó trong C ++. Sau đó, trên trang web, tôi đã nói chuyện với nhiều người về thực tiễn phát triển phần mềm, tích hợp, kiểm tra, kiểm soát phiên bản và quản lý cấu hình của họ, về các nhóm và trách nhiệm, về công nghệ và về thiết kế. Đó là một cuộc phỏng vấn cả ngày bao gồm bữa trưa với những người đã phỏng vấn tôi. Nhìn nhận lại, tất cả là về việc liệu tôi có phù hợp với những gì họ đã làm hay không.

Kể từ đó, các cuộc phỏng vấn tốt đã kéo dài từ một đến hai giờ về phát triển phần mềm. Không có câu hỏi nào giải quyết vấn đề, không có câu đố và không có thách thức về mã hóa.

Nếu tôi được phỏng vấn ai đó cho một công việc lập trình ngày hôm nay, tôi sẽ tiến hành thích. Tôi muốn hỏi ý kiến ​​về chiều rộng của các chủ đề và để lại chiều sâu:

  1. Bạn thích ngôn ngữ lập trình nào? Tại sao?
  2. Làm thế nào để tiếp cận xử lý ngoại lệ?
  3. Không phải lợi ích của thiết kế lớp là một huyền thoại?
  4. Không tích hợp liên tục là một gánh nặng cho hiệu quả?
  5. Bất cứ ai đã viết một đoạn mã nên sở hữu nó, phải không?
  6. Bạn làm gì để đi vào "dòng chảy".
  7. Làm thế nào nên báo cáo lỗi được bao gồm trong một kế hoạch dự án?
  8. ...

Đó là những câu hỏi có nhiều hơn một câu trả lời, và tất cả chúng đều là về các chủ đề mà nhà phát triển phần mềm nên có ý kiến ​​chính xác. Tôi hoàn toàn đồng ý với các câu trả lời đề cập đến các vấn đề thực tế trước đây gặp phải như một chủ đề cuộc trò chuyện (không phải là câu hỏi).

Các nghiên cứu khoa học hơn về phát triển phần mềm hiệu quả kể từ Peopleware nói rằng các lập trình viên giỏi nhất là những người hiểu được động lực của phát triển phần mềm, ngay cả khi họ không có IQ cao nhất. Tôi thà lấy một tân binh ham học hỏi hơn một người có nnhiều năm kinh nghiệm đã trải qua nhiều 1năm kinh nghiệm lặp đi lặp lại n. Sự thiên vị cá nhân của tôi là hướng tới những ứng viên có xu hướng suy nghĩ vượt trội, đồng thời biết cách phù hợp với hộp hiện tại (của tôi).


Câu trả lời tuyệt vời. Offtopic: Câu hỏi ví dụ số 3 của bạn khiến tôi tò mò. Tôi quan tâm đến việc biết thêm về ý kiến ​​của bạn về thiết kế lớp.
năm11

2
@missingfaktor # 3, như đã nêu, là một câu hỏi mẹo để châm ngòi cho một cuộc trò chuyện về những điều được thực hiện nhanh chóng so với những điều được thực hiện đúng. # 4 và # 5 giống nhau. # 7 có lẽ là khó nhất và chỉ thích hợp cho vai trò lãnh đạo.
Apalala

1
@missingfaktor Tôi, một lần nữa, đã đưa ra một câu trả lời cho một câu hỏi khác. Bài viết Wikipedia này, những bài liên quan và các liên kết bên ngoài cung cấp nhiều thông tin về lý do tại sao phân tách mối quan tâm là tối quan trọng đối với việc thiết kế và xây dựng hệ thống phức tạp: en.wikipedia.org/wiki/Modularity
Apalala

Có ý nghĩa. Cảm ơn rất nhiều! :-) Một lần nữa, câu trả lời tuyệt vời. Làm cho nhiều điểm tốt không được đề cập trong các câu trả lời khác ở đây.
năm11

Cá nhân tôi cũng sẽ thêm một câu hỏi về dụng cụ. Những người quan tâm đến các công cụ họ sử dụng, có xu hướng trở thành lập trình viên tốt hơn. Là người dùng Emacs, tôi thích người dùng vim hơn một người chỉ nhún vai và không quan tâm.
Singletoned

13

Chúng có thể hữu ích trong việc đánh giá các kỹ năng giải quyết vấn đề , tất nhiên đó là một trong những khía cạnh quan trọng của lập trình.

Là một người phỏng vấn của nhiều người trong nhiều năm qua, tôi thường không hỏi những câu hỏi kiểu gotcha khá giống với câu hỏi mà bạn dường như mô tả, nhưng tôi cũng có thể hỏi điều gì đó và hỏi "bạn sẽ giải quyết như thế nào ...".

Mong đợi của tôi trong trường hợp đó là nghe bạn nói rõ cách tiếp cận vấn đề của bạn. Dữ liệu nào khác bạn sẽ cố gắng thu thập? Làm thế nào bạn sẽ kiểm tra giả thuyết của bạn, vv


1
Tôi đã làm điều tương tự trong khi phỏng vấn vô số người. Điểm của câu hỏi là xem cách họ làm việc đối với giải pháp, không nhất thiết là nếu họ có câu trả lời đúng. Bạn có thể nhận ra các lập trình viên giỏi khá nhanh chỉ bằng cách xem quá trình này.
Dave Wise

2
@Dave, hãy thử tôi. Khi tôi giải những câu đố như vậy, tôi thường lấy một mảnh giấy, vẽ biểu đồ hoặc bảng hoặc hình vẽ đại diện cho các diễn viên hoặc viết những con số có liên quan đến quá trình giải quyết vấn đề trong tâm trí tôi; Tôi làm tất cả trong im lặng hoàn toàn đôi khi bị phá vỡ bởi tiếng thì thầm không thể phân biệt. Vì vậy, tôi có phải là một lập trình viên giỏi?
P Shved

4
Heisenberg sẽ không chấp thuận. Một người có thể đưa ra một giải pháp tốt cho một vấn đề nhưng không giỏi trong việc truyền đạt quy trình nội bộ mà họ đã sử dụng. Yêu cầu họ làm như vậy không chỉ kiểm tra khả năng của họ trong hoàn cảnh mà họ sẽ không làm việc mà còn bị thiên vị bởi khả năng hoặc không có khả năng giải thích cho người khác về quá trình suy nghĩ của họ hoạt động như thế nào. Họ thậm chí có thể không nhận thức được cách nó hoạt động chính họ.
Jason

4
Một số người tin rằng chỉ vì họ là người hướng ngoại mà mọi người nên là người hướng ngoại. Đội ngũ hiện tại của tôi là một nhóm những người hướng nội và cho đến nay, đó là nhóm tốt nhất tôi từng có niềm vui khi được làm việc cùng.
Dunk

2
@Charles Điều tôi đã nói là những người hướng nội thường cần phải NGHINK vấn đề trước khi họ có thể đưa ra giải pháp thỏa mãn họ và sau đó họ có thể giải thích cho người khác. Điều đó hoàn toàn khác với "Không thể giao tiếp". Người hướng ngoại thường cần phải NÓI theo cách của họ thông qua việc giải quyết vấn đề. Các poster ban đầu rõ ràng mong đợi một phong cách hướng ngoại để giải quyết vấn đề.
Dunk

8

Đây chỉ là thực hành tuyển dụng voodoo. Những người khác hỏi những câu hỏi này để họ cảm thấy như họ đáng lẽ phải thế. Họ biết rằng không trả lời câu hỏi là "xấu" và trả lời là "tốt", nhưng họ không thể cho bạn biết lý do tại sao ngoài câu trả lời không như "nhà phát triển cần những kỹ năng này". Họ là một sự lãng phí thời gian và một chỉ số cho thấy người phỏng vấn không phải là người phỏng vấn có thẩm quyền.


5

Đó là lý do cũ kỹ mà bạn phải có các kỹ năng logic cơ bản; bất cứ điều gì khác có thể được dạy. Nhưng điều đó không hoàn toàn đúng. Đọc logic Boolean , điều kiện và vòng lặp, không giống như có thể giải một câu đố logic .

Điều đó nói rằng, trong thời của các ngôn ngữ thủ tục, có lẽ đúng là ai đó có thể giải quyết những vấn đề này sẽ có xu hướng cao hơn để có thể áp dụng bất kỳ vấn đề nào về mặt chuyển đổi. Nhưng theo tôi, lập trình OO / Chức năng đòi hỏi một tư duy kỹ thuật, điều này khá khác biệt (mặc dù không mâu thuẫn).

Cá nhân tôi không chắc chắn tôi muốn có một công việc với một công ty vẫn cho rằng logic quan trọng hơn kỹ năng lập trình thực tế.

Tuyên bố miễn trừ trách nhiệm: Tôi rất giỏi trong các câu đố logic và có lẽ tôi sẽ không bắt đầu công việc này nếu không có sự hợp lý này.


2

Người phỏng vấn phải được đề cập đến kỹ năng giải quyết vấn đề và logic, đó là một phần công việc hàng ngày của một lập trình viên. Khi đưa ra một vấn đề, bạn cần có khả năng phân tích nó, chia nhỏ nó và viết một giải pháp cho nó bằng cách sử dụng phương pháp tối ưu nhất.

Bạn có thể tranh luận một câu đố như thế thể hiện khả năng của bạn như thế nào. Tôi không thấy công đức khi đặt câu hỏi giải đố thay vì chỉ hỏi một vấn đề lập trình thực tế.


1

Lập trình không phải là viết các dòng mã, mà là giải quyết các vấn đề cho và từ những người khác (khách hàng, người dùng, v.v.).

Nó xảy ra rằng đối với các lập trình viên, giải pháp có dạng chương trình.

Vì vậy, đó là lý do tại sao điều quan trọng là phải có khả năng giải quyết vấn đề và tại sao nó được thử nghiệm.

Điều đó đang được nói, tôi không chắc rằng giải câu đố khó là cách tốt nhất để đánh giá ai đó.


1

Câu đố trong các cuộc phỏng vấn thuộc hai loại: "câu đố logic" (giống như câu hỏi bạn được hỏi) và loại "nghĩ khác". Loại suy nghĩ khác nhau (tôi không chắc chúng còn được gọi là câu đố bên?) Thường là loại này: Có bao nhiêu lá trong cây đó? hoặc có bao nhiêu thợ may có mặt trong thành phố của bạn?

Tôi ổn với "Câu đố logic" bởi vì chúng có nhiều nhất một hoặc hai giải pháp và có thể đạt được bằng logic đơn giản. Và tôi tin rằng các câu đố logic rất tốt ở một mức độ nào đó bởi vì quá trình cần thiết để giải quyết chúng rất giống với cách mà một lập trình viên cần suy nghĩ trong cuộc sống thực.

Kiểu "nghĩ khác" khiến tôi không có kết thúc vì chúng buộc bạn phải đưa ra các giả định, và sau đó, thực hiện một số tính toán dựa trên các giả định. Nói một cách đơn giản, nếu người phỏng vấn của bạn đồng ý với logic của bạn nhưng không phải với các giả định của bạn, hoặc ngược lại, bạn đã thua. Có quá nhiều chỗ để người phỏng vấn không đồng ý với giải pháp của bạn.

Khi tôi phỏng vấn, tôi không hỏi những câu đố logic. Lý do: Hầu hết các ứng cử viên ngay cả những người có 3-4 năm kinh nghiệm, thất bại hoặc bỏ cuộc khi tôi yêu cầu họ viết mã các vấn đề đơn giản trong sách giáo khoa như chuỗi Fibonacci hoặc palindromes.

Tuy nhiên, vấn đề với các câu đố là các lập trình viên không giỏi biết rằng chỉ bằng cách tìm kiếm các giải pháp cho các câu đố phổ biến như vậy trên mạng, họ có thể gây ấn tượng với người phỏng vấn. Rất ít người sẽ thành thật đủ để nói rằng họ đã biết giải pháp.


Theo palindromes, bạn có nghĩa là vấn đề rất khó khăn trong việc tìm chuỗi con palindrom dài nhất trong chuỗi đầu vào trong thời gian tuyến tính? :-)
b_jonas

1

Hai điểm:

  1. Lập trình chủ yếu khác với giải câu đố. Nó được giải thích một cách chính xác bởi Steve McConnell tại "Code Complete":

    Gì? Bạn không cần phải siêu thông minh? Không, bạn không. Không ai thực sự đủ thông minh để lập trình máy tính. Hiểu đầy đủ một chương trình trung bình đòi hỏi một khả năng gần như vô hạn để tiếp thu các chi tiết và một năng lực tương đương để hiểu tất cả chúng cùng một lúc. Cách bạn tập trung trí thông minh của bạn quan trọng hơn mức độ thông minh của bạn. Như Chương 5 đã đề cập, tại Bài giảng Turing Award năm 1972, Edsger Dijkstra đã gửi một bài báo có tựa đề là Lập trình viên khiêm tốn. Những người giỏi nhất trong lập trình là những người nhận ra bộ não của họ nhỏ như thế nào. Họ khiêm tốn. Những người kém nhất trong lập trình là những người từ chối chấp nhận thực tế rằng bộ não của họ không bằng nhiệm vụ. Bản ngã của họ giữ họ khỏi những lập trình viên tuyệt vời. Bạn càng nhiềuhọc cách bù đắp cho bộ não nhỏ của bạn, bạn sẽ trở thành một lập trình viên giỏi hơn . Bạn càng khiêm tốn, bạn sẽ càng tiến bộ nhanh hơn.

  2. Những câu đố như vậy có thể hữu ích trong quá trình phỏng vấn, nhưng Chỉ khi người phỏng vấn nhìn vào Quy trình , chứ không phải kết quả.

Nhưng lý tưởng là các câu đố nên phức tạp hơn và liên quan đến lập trình (như dự án nhỏ 2 giờ), theo ý kiến ​​của tôi. Vấn đề là người phỏng vấn là người và không có "kỹ năng phỏng vấn" hoàn hảo.


Bạn có thể nói điều gì sai với câu trả lời của tôi không nếu bạn bỏ phiếu -1, làm ơn.
klm123

1
+1, vì đó là một câu trả lời hay. Tôi đã nâng cấp nó thậm chí nếu không, chỉ để hủy bỏ một downvote không giải thích được.
missingfaktor

0

Có một vài cách khác nhau để kiểm tra các vấn đề như vậy:

  1. Biết một giải pháp trước đó. Trong phim ... Die Hard with a Vengeance ... giải thích điều này cho tôi ...? là một ví dụ về việc biết một giải pháp cho trường hợp blahs lần lượt là 4,3 và 5. Một số người sẽ có thể nhanh chóng khai thác kiến ​​thức nội bộ của họ về một giải pháp trong quá khứ và điều chỉnh nó nếu cần. Đây thường là những gì tôi tin rằng một người phỏng vấn sẽ mong đợi có thể hoặc không phải là một ý tưởng tốt.

  2. Kỹ năng ứng biến sáng tạo. Đây sẽ là trường hợp nếu bạn không biết một giải pháp trước đó hoặc thậm chí nhận ra vấn đề là một thứ mà người ta có thể mô hình hóa như một phương trình Diophantine. Do đó, câu hỏi là bạn có thể sử dụng nhanh chóng những gì được đưa ra và tìm ra giải pháp cho vấn đề theo cách sáng tạo cùng với việc giải thích lý do tại sao những gì bạn có là một giải pháp hợp lệ cho vấn đề.

Hoặc có thể là điều khiến một người vượt qua câu hỏi một cách thỏa đáng mặc dù trong mỗi trường hợp cũng có một chút kiểm tra kỹ năng giao tiếp của một người vì người ta cũng có thể thử trả lời: "Điều này có thực sự phù hợp với vị trí mà tôi không áp dụng? Những kỹ năng này được sử dụng lần cuối khi nào? " điều đó có thể dẫn đến một cuộc đối thoại thú vị nếu người phỏng vấn sẽ cởi mở về chính xác những gì họ muốn thấy rằng có lẽ một cách tiếp cận khác có thể được xem là hiệu quả hơn ở đây.


0

Đây không phải là một vấn đề đặc biệt khó khăn. Chỉ có ba bước là bắt buộc và chỉ có hai lựa chọn ở mỗi bước. Tôi sẽ ngạc nhiên nếu bất kỳ đồng nghiệp nào của tôi không thể giải quyết nó trong một thời gian rất ngắn. Chúng tôi không trình bày những vấn đề như vậy trong các cuộc phỏng vấn, nhưng tôi nghĩ thật hợp lý khi đặt những câu hỏi như vậy. Chúng chắc chắn hữu ích hơn các câu hỏi chi tiết về cú pháp hoặc thư viện.

OTOH, tôi nghĩ rằng các vấn đề lập trình là hữu ích hơn.


0

Bạn phải nhớ rằng không có cách nào để biết một cách chắc chắn tuyệt đối rằng ai đó sẽ giỏi trong công việc. Đặc biệt là một công việc CS vì nhiều thách thức mà công việc có thể có trong cửa hàng không thể dự đoán được.

Vì vậy, nhà tuyển dụng tiềm năng phải đoán về hiệu suất trong tương lai của bạn.

Bằng cấp, khuyến nghị và GPA có thể đạt được với thời gian / nỗ lực và kỹ thuật xã hội, kinh nghiệm làm việc có thể được tô điểm và / hoặc sai, và các bài kiểm tra tiêu chuẩn thực sự quá cơ bản để thể hiện quá mức khả năng. Vì vậy, sơ yếu lý lịch có thể đưa ra một số dấu hiệu về mức độ nỗ lực / cam kết trong lịch sử của bạn, nhưng không ai trong số đó sẽ nói lên khả năng thực tế của bạn để giải quyết các vấn đề khó khăn xảy ra trong thế giới khoa học máy tính. Tôi không thể nghĩ ra một cách tốt hơn để dự đoán loại khả năng đó hơn là một vài câu đố logic / toán học / CSy tốt.

Hãy nhớ rằng đây là một trò chơi đoán và thực tế là tất cả mọi thứ đều giống nhau trong số chúng ta muốn thuê một người có thể giải những câu đố đó hơn là không thể.

Vâng, bạn có thể học các câu đố phỏng vấn, nhưng tôi nghĩ bạn sẽ thấy mình bị bỏng nếu câu đố được đưa ra không khớp với câu đố bạn học ... và miễn là bạn không ghi nhớ các câu đố và lời giải của chúng, có thể nghiên cứu các câu đố chính họ sẽ làm cho bạn trở thành một người thông minh hơn theo cách thực tế, giống như bất kỳ nền giáo dục thực sự nào.


3
Tôi không biết về bạn, nhưng khi phỏng vấn, tôi thích mô tả một vấn đề khó khăn thực sự xảy ra trong thế giới của công ty chúng tôi gần đây và xem người được phỏng vấn sẽ tiếp cận nó như thế nào. Thật thú vị, gần đây chúng tôi không có khách hàng nào lôi kéo chúng tôi đo lượng nước bằng hai thùng. Chủ yếu là những gì chúng tôi làm liên quan đến lập trình máy tính.
Carson63000

@ Carson63000 không phải là một vấn đề thực sự mà công ty bạn gặp phải sẽ là một ý tưởng tồi, nhưng thường bị cấm thời gian vì các chi tiết cụ thể của vấn đề trong thế giới thực và việc thực hiện giải pháp. Đó là lý do tại sao các câu đố liên quan đến xô là rất lớn bởi vì chi phí đầu vào rất nhỏ và đi thẳng vào các bit thú vị.
8steve8

Tôi tưởng tượng bạn có thể thấy sự tương tự giữa vấn đề xô và, giả sử, viết phần mềm để hoàn thành một nhiệm vụ trong khi sử dụng số lượng tìm kiếm đĩa tối thiểu hoặc yêu cầu http.
8steve8
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.