Tôi có nên mong đợi các sinh viên gần đây làm quen với các khái niệm lập trình cơ bản? [đóng cửa]


9

Dường như có sự khác biệt lớn giữa những gì tôi mong đợi một người đã học lập trình trong một vài năm ở trường đại học và những gì người ta thực sự biết.

Tôi không cảm thấy như mình đang hỏi những câu hỏi quá phức tạp trong các cuộc phỏng vấn. Một số câu hỏi thông thường của tôi là:

  • Sự khác biệt giữa loại tham chiếu và loại giá trị là gì?

    Nếu có vẻ như người được phỏng vấn không thực sự hiểu câu trả lời của anh ta hoặc nếu anh ta không biết thuật ngữ tôi đang sử dụng, tôi sẽ tìm hiểu thêm chi tiết bằng cách yêu cầu anh ta giải thích cho tôi những gì xảy ra khi tôi viết int i = 0; trong một phương thức, những gì về đối tượng o = 0, đối tượng o = new MyClass (), v.v ...

    Về cơ bản, tôi làm tất cả những gì có thể để lừa người được phỏng vấn nói với tôi về cuộc gọi, đống, v.v. và tôi cố gắng duy trì các khái niệm ngôn ngữ học. Nếu người được phỏng vấn nói với tôi rằng anh ta đã làm rất nhiều C, hoặc C ++ hoặc c #, tôi sẽ đi sâu hơn vào ngôn ngữ cụ thể và có thể vào các chi tiết thực hiện.

    Nếu cần, tôi hỏi người được phỏng vấn rằng một cuộc gọi là gì, hoặc nơi các đối số được chuyển đến một chức năng trong ngôn ngữ bắt buộc của sự lựa chọn của anh ta được lưu trữ.

    hầu hết những người được phỏng vấn không biết gì về một cuộc gọi là gì, chứ đừng nói đến việc cân nhắc quyền anh, v.v.

  • Sự khác biệt giữa một lớp trừu tượng và một giao diện. Trong trường hợp nào bạn nên sử dụng cái này hơn cái kia?

    Thông thường, tôi cũng yêu cầu họ tưởng tượng một thiết kế của một thư viện nhỏ với trường hợp sử dụng nhằm mục đích sử dụng một số kế thừa và một số nhà máy trừu tượng

    Hầu hết những người được phỏng vấn chỉ không biết mục đích thực sự của thừa kế là gì. Họ thường biết một số từ khóa (ảo, ghi đè, v.v.), nhưng không thực sự biết khi nào nên sử dụng chúng, chứ đừng nói đến việc giải thích bảng ảo là gì.

Ngay cả khi tôi sàng lọc CV trước đó, ngay cả đối với những người có 5 năm kinh nghiệm trong các dự án thực tế liên quan đến kiến ​​trúc phức tạp, tôi sẽ nói rằng ít hơn 25% trong số tất cả những người được phỏng vấn của tôi có thể trả lời đúng hai câu hỏi đó. Và khi tôi nói đúng, tôi không có nghĩa là 'chuyên sâu' ... chỉ để có một ý tưởng gần đúng về khái niệm này là gì.

Về đàn em, tôi rất ổn khi thuê một người không biết cách tổ chức thời gian của mình rất tốt, hoặc một người không quen với các quy trình xây dựng công nghiệp chẳng hạn, nhưng tôi có cảm giác rằng nếu ai đó không nghe thấy từ đó " callstack "sau một vài năm học Khoa học Máy tính, anh ta hoặc là ngu ngốc, hoặc không có động lực, hoặc chọn trường đại học của mình rất không chính xác.

Bạn có nghĩ rằng tôi quá cực đoan ở đây? Có phổ biến để học những khái niệm cơ bản này sau khi bạn hoàn thành trường đại học? Bạn có biết những người không quen thuộc với những điều này và trở thành những kỹ sư phần mềm rất giỏi sau một vài năm không? Và bạn có nghĩ rằng công ty của tôi có thể có một vấn đề trong việc thu hút những người tài năng, hoặc bạn có gặp phải vấn đề tương tự trong quá trình tuyển dụng của riêng bạn không?


Biên tập. liên quan đến điều "loại ngay lập tức", nó chỉ là một bản dịch nghĩa đen từ tiếng Pháp sang tiếng Anh, vì chúng tôi thường thực hiện các cuộc phỏng vấn bằng tiếng Pháp. Tôi đã sửa nó trong câu hỏi của tôi. Tuy nhiên, tôi nghĩ rằng tất cả các bạn đều hiểu một cách hoàn hảo những gì tôi muốn nói, loại ý nghĩa của tôi, phải không?


4
Chỉ là một nhận xét nhỏ nhưng tôi sẽ không biết ý của bạn với loại ngay lập tức, loại giá trị mặt khác tôi có thể giải thích cho bạn. Tuy nhiên tôi cảm thấy rằng tất cả những người tốt nghiệp với bất kỳ bằng CS nào cũng có thể trả lời hai câu hỏi đó. Để cải thiện câu hỏi của bạn, có lẽ bạn có thể đưa ra một ví dụ về mức độ đầy đủ của các câu trả lời mà bạn mong đợi.
sebastiangeiger

Học một ngôn ngữ trong hơn 2 năm tại trường đại học, việc thi đấu với các môn học khác khiến sinh viên chỉ còn tối thiểu sau khi bài kiểm tra của họ kết thúc. Điều duy nhất bạn có thể chắc chắn là họ có thể tìm hiểu thông tin đó, hoặc họ đã từng biết nó. Chỉ có kinh nghiệm thực tế mới có thể cung cấp cho họ kiến ​​thức lâu dài. Joel Spolsky đưa ra một ví dụ tuyệt vời về cách thức và lý do tại sao sinh viên thiếu nhiều khả năng mà chúng ta nên mong đợi các lập trình viên có trong bài viết trên blog của mình tại đây - http://www.joelonsoftware.com/items/2009/10/26.html
Justin Shield

@sebastiangeiger; bạn đã cập nhật đúng!
Brann

2
Anh ta phải biết rằng anh ta hầu như không biết gì. Đây là điểm quan trọng để có được tốt hơn theo thời gian.
deadalnix

Brann, thật thú vị, tất cả những người trả lời câu hỏi này đều đề cập đến "loại ngay lập tức" (lỗi dịch thuật) và nói với bạn rằng họ không biết nó là gì. Những người phỏng vấn của bạn có nói: "Tôi chưa nghiên cứu sâu về những vấn đề này?" hoặc họ tự xưng là chuyên gia về, ví dụ, các chi tiết cụ thể về thời gian chạy và hiểu biết sâu sắc về trình biên dịch?
Pindatjuh

Câu trả lời:


15

Thuật ngữ là một nhược điểm phổ biến trong một tình huống phỏng vấn.

Bạn hỏi người được phỏng vấn một câu hỏi sử dụng thuật ngữ có ý nghĩa gì đó với bạn nhưng người được phỏng vấn có thể biết nó bằng một thuật ngữ khác hoặc có thể chỉ biết lý thuyết chung mà không áp dụng cho các ngôn ngữ hoặc môi trường cụ thể. Những hiểu lầm xảy ra sau đó. Cả hai bên đều không vui.

Trên thực tế, hóa ra người được phỏng vấn hoàn toàn hiểu rằng một số giá trị có thể được lưu trữ trực tiếp trong sổ đăng ký và những người khác tham chiếu một đoạn bộ nhớ ở nơi khác, nhưng vì bạn đặt câu hỏi theo cách dẫn tên miền cụ thể, điểm bạn đang hỏi và những gì bạn muốn người được phỏng vấn nói với bạn, không thực sự vượt qua.

Có thể bạn gặp rất nhiều tình huống khi người được phỏng vấn đột nhiên nhấp và nói 'Ồ - đó là những gì bạn đang nói' - và sau đó giải thích khá đầy đủ.

Đó là một sự cân bằng khó khăn bởi vì các lập trình viên mới ra trường sẽ không có trải nghiệm đa dạng mà sự phát triển thế giới thực trong môi trường nhóm mang lại cho họ. Trong khi đó, các nhà phát triển có kinh nghiệm thường không nhớ (hoặc thậm chí quan tâm) tất cả những thứ họ học được ở trường đại học vì đơn giản là nó không liên quan đến việc sử dụng hàng ngày của họ.

Hai loại người này (vâng - đó là người được phỏng vấn và người phỏng vấn) cần học cách giao tiếp với nhau trước khi bạn có thể tìm hiểu về nhau. Trách nhiệm thuộc về người có kinh nghiệm lớn hơn (người phỏng vấn) để đảm bảo điều này xảy ra.

Chưa kể đến việc một số người bị suy giảm trí nhớ hoàn toàn trong các cuộc phỏng vấn. Bao gồm cả bản thân mình. Tôi nhớ đã được yêu cầu viết một chương trình bằng C và tôi không thể nhớ được biểu tượng được sử dụng để truy cập một thành viên từ một con trỏ (->) và phải hỏi ai đó. Nó thậm chí không phải cho công việc đầu tiên của tôi. Cậu bé có khoảnh khắc đó làm tôi thất vọng trong 15 năm qua :-)

Theo tôi, hữu ích hơn nhiều là khả năng giao tiếp, có thể giải quyết vấn đề hiệu quả và đầy đủ; chọn đồ nhanh chóng; thể hiện thái độ nhạy bén tích cực; tương tác tốt với những người khác và các giá trị cốt lõi khác.

Đừng từ bỏ người được phỏng vấn vì họ không biết loại ngay lập tức là gì. Tiến lên.


@Brann - loại ngay lập tức -> loại giá trị. lưu ý
Roger Attrill

Chà, có lẽ nó không đủ rõ ràng từ cách đặt câu hỏi của tôi, nhưng tôi thực sự làm rất nhiều để đảm bảo không có vấn đề về thuật ngữ. Tôi hỏi người được phỏng vấn điều gì xảy ra trong các tình huống cụ thể bằng ngôn ngữ mà anh ta chọn, tôi hỏi anh ta nếu anh ta biết cuộc gọi là gì, tôi hỏi anh ta có "loại" ký ức nào khác không, tôi hỏi anh ta rằng các đối số được truyền vào một chức năng là gì được lưu trữ trong ngôn ngữ bắt buộc của sự lựa chọn của mình. Thực sự, tôi không cảm thấy đó là một vấn đề thuật ngữ. Đôi khi, người được phỏng vấn chỉ KHÔNG CÓ IDEA về những gì xảy ra đằng sau hậu trường khi một lớp học được khởi tạo.
Brann

liên quan đến điều "tiến lên", đó là điều tôi thường làm. Nhưng theo kinh nghiệm của tôi, khi một người được phỏng vấn không biết loại giá trị là gì, anh ta cũng không biết về đồng bộ hóa luồng, cũng như về khái quát để làm gì, v.v. Vì vậy, sau một vài câu hỏi, khi rõ ràng, ứng viên không biết Không phù hợp với công việc, tôi thường cho anh ấy một lời khuyên về những gì cần học để thực hiện tốt hơn trong các cuộc phỏng vấn kỹ thuật và ... tiếp tục với ứng viên tiếp theo :)
Brann

12

Bạn đang yêu cầu kiến ​​thức về ngôn ngữ cụ thể và các thuật ngữ bạn sử dụng không được sử dụng 100% giống nhau trong tất cả các ngôn ngữ. Tôi - đối với một người - không biết "loại ngay lập tức" là gì.

Ngoài ra, hãy xem xét rằng những điều được dạy ở trường đại học không phải là làm thế nào để tạo ra mã tiêu chuẩn trong X, mà là để học được rất nhiều khái niệm cơ bản và thấy các mô hình lập trình khác nhau. Nói cách khác, nó giống như bằng lái xe - mặc dù bạn biết lý thuyết cơ bản, bạn vẫn cần thực hành nhiều.


Tôi đã cập nhật thành "loại giá trị". Nhưng vấn đề là nếu người được phỏng vấn không hiểu câu hỏi, tôi thường giải thích chi tiết hơn và thử nhiều điều để lừa người được phỏng vấn nói với tôi về cuộc gọi, đống, v.v ... (vâng, tôi BIẾT đó là những chi tiết triển khai, nhưng vẫn là những khái niệm chung không thực sự cụ thể về ngôn ngữ IMO)
Brann

Tôi nghĩ khái niệm "callstack" là một trong những khái niệm chung mà bạn đang nói đến. Ngay cả sau khi diễn đạt lại câu hỏi theo mười cách khác nhau để đảm bảo người được phỏng vấn biết tôi đang mong đợi anh ta nói với tôi về phân bổ bộ nhớ, callstack, các loại giá trị, v.v., tôi vẫn, thường xuyên hơn là không nhìn chằm chằm ...
Brann

Nếu tôi hiểu bạn một cách chính xác, bạn muốn biết liệu nhà phát triển có biết con trỏ và biết họ làm gì và sử dụng chúng như thế nào không?

Không, tôi không có. Tôi muốn chắc chắn rằng nhà phát triển có ít nhất một ý tưởng sơ bộ về những gì xảy ra đằng sau hậu trường khi anh ta sử dụng tính năng x hoặc y của ngôn ngữ mình chọn. Hỏi anh ta về con trỏ chỉ là một cách để khiến anh ta nói về những gì anh ta biết về phân bổ bộ nhớ.
Brann

3
@Brann, tất cả các công cụ chi tiết về ngăn xếp cuộc gọi, heap, v.v, về cơ bản chỉ là các con trỏ được áp dụng .

3

"Tôi nghe và tôi quên. Tôi thấy và tôi nhớ. Tôi làm và tôi hiểu." (Và, theo tôi, sự hiểu biết dẫn đến việc duy trì trí nhớ tốt hơn.)

Nói một cách đơn giản, một sinh viên tốt nghiệp gần đây không có nhiều kinh nghiệm, vì vậy như một người khác lưu ý, họ sẽ không có nhiều hơn mức tối thiểu của kiến ​​thức, bất kể ngôn ngữ "được chọn" của họ là gì.

Tôi đã đi đến một trường đại học được thiết kế đặc biệt để hợp lý hóa việc học về chuyên ngành đã chọn (ví dụ: bạn sẽ không có Văn học lịch sử nếu bạn là chuyên ngành CS; gần nhất bạn có thể đến Văn học lịch sử là Khoa học viễn tưởng), và ra khỏi trường đại học, tôi sẽ không thể nói cho bạn biết giao diện gì nếu không có sự khác biệt của nó với một lớp trừu tượng, mặc dù chúng tôi đã học về sự trừu tượng (và giao diện có rất nhiều .Net, công nghệ tôi đã học). Chúng tôi có thể đã chạm vào các giao diện, nhưng nó đã bị mất trong tất cả những thứ khác mà chúng tôi cần biết để vượt qua lớp. Mãi đến khi tôi học đại học, tôi mới biết về giao diện, đặc biệt là theo bất kỳ cách có ý nghĩa nào.

Bạn đã đề cập đến việc thực hiện các cuộc phỏng vấn bằng tiếng Pháp, điều này cho thấy rõ ràng chúng tôi ở các quốc gia khác nhau, vì vậy số dặm của bạn có thể khác nhau, nhưng ở Mỹ, các trường đại học nổi tiếng là đằng sau thời đại công nghệ. Do đó, trừ khi bạn đang xử lý các ngôn ngữ trưởng thành (C / C ++, COBOL, v.v.), nhiều khả năng những gì bạn đã sử dụng ngay cả trong nhiều năm có thể không có trong phiên bản mà sinh viên đã học. Ví dụ: .Net 3.0 đã giới thiệu Entity Framework, WPF, WCF và một loạt những thứ hay ho khác, nhưng ngay cả trường tôi vẫn bị kẹt trên .Net 1.1 và 2.0 (có nghĩa là bị mắc kẹt với ADO.NET và thậm chí không học về Object -Bản đồ bản đồ). Một trường sử dụng PHP có thể bị kẹt trên (không phải OOP) PHP 4.

Cũng nên nhớ rằng, một sinh viên phải lấy một tấn thông tin thường chỉ được sử dụng trong một khoảng thời gian ngắn. Các khái niệm "Nâng cao", như trừu tượng hóa, thường được dạy vào cuối lớp, trong đó học sinh chỉ có thể có một tuần để chơi với nó, trong khi tranh đấu với các lớp khác mà em phải học, và có thể, đầu của một công việc bán thời gian hoặc toàn thời gian. Kết hợp tất cả những thứ đó lại với nhau và thật ngạc nhiên khi người đó có thể nhớ bất cứ điều gì , ít hơn là giữ cho tất cả thẳng.

Ở Mỹ, ít nhất, một sinh viên tốt nghiệp gần đây thường được cho là không biết gì ngoài những điều cơ bản chung (có thể là sự khác biệt giữa chuyển qua giá trị và chuyển qua tham chiếu), bởi vì nó hiểu rằng lý thuyết chung và giải quyết vấn đề là phần chính của trường học, không học các ngôn ngữ trong và ngoài của một ngôn ngữ nhất định.

Tôi khuyên bạn nên sử dụng các câu hỏi mà bạn có nhiều hơn như một thước đo về những gì bạn sẽ cần dạy / dạy lại chúng (hãy nhớ rằng, hoàn toàn có thể họ không học thuật ngữ mà bạn đang cố gắng sử dụng, ngay cả khi bạn nghĩ rằng nó có mặt ở khắp nơi), trái ngược với việc người được phỏng vấn có "vô dụng" hay không. Kết hợp với việc đo lường mức độ sẵn sàng học hỏi và kỹ năng giải quyết vấn đề chung của họ như thế nào (nghiêm túc, đưa cho họ một câu đố để giải quyết và xem họ làm như thế nào), và bạn rất có thể có một ngôi sao nhạc rock trong tương lai có thể đã qua vì họ không biết ý của bạn là "callstack".


Chà, ở Pháp (và tôi nghi ngờ nó giống nhau ở hầu hết các nơi), mọi chương trình giảng dạy CS bao gồm một số mã hóa bắt buộc bằng C (hoặc ngôn ngữ tương tự) khi một người học về phân bổ bộ nhớ trong số những thứ khác) và một số mã hóa bắt buộc trong C ++ / java / .net (nơi người ta tìm hiểu về OOP). Trên hết, bạn cũng làm rất nhiều việc có thể bao quát nhiều lĩnh vực, nhưng nếu những người tốt nghiệp mà không biết phương pháp ảo là gì, điều đó có nghĩa là anh ta đã không nghiêm túc học tập ... Tôi chắc chắn biết những gì đó là khi tôi tốt nghiệp ... Bạn nghĩ gì về một học sinh Toán không biết bộ truyện là gì?
Brann

@Brann - Theo nghiên cứu (nhanh chóng) của tôi về Khoa học Máy tính là gì (cũng như sự hiểu biết trước đây của tôi về nó), CS không phải là chuyên ngành lập trình. Vâng, nó có lập trình trong đó, nhưng nó không nhất thiết là trọng tâm chính của nó. Đối với vấn đề đó, "Khoa học máy tính" rất rộng và khá mơ hồ, nó có thể thay đổi từ trường này sang trường khác. Stanford là một trong những trường CS hàng đầu ở Hoa Kỳ, và trong danh sách lựa chọn khóa học Mùa thu và Mùa đông ( www-cs.stanford.edu/cifts ), nó có ít hơn nửa tá khóa học dường như tập trung vào lập trình thực tế (không chỉ lý thuyết chương trình), trong số khoảng 50 lớp.
Shauna

Điều này có nghĩa là một sinh viên có khả năng sử dụng bất kỳ ngôn ngữ nhất định trong một hoặc hai học kỳ, sau đó không chạm vào nó trong phần còn lại của sự nghiệp sinh viên của mình. Trên hết, anh ấy cũng học về robot và lập trình di truyền, khác biệt rất nhiều so với lập trình / hệ thống nhúng / chương trình cơ sở tiêu chuẩn.
Shauna

Bạn sẽ nghĩ gì về một học sinh Toán không biết bộ truyện là gì? - Điều đó phụ thuộc vào loại Toán mà học sinh chuyên và những gì anh ta thực sự đang làm. Một lần nữa, học sinh hoàn toàn có thể học nó (và do đó, về mặt kỹ thuật không biết nó là gì), nhưng đơn giản là đã quên nó, bởi vì anh ta không bao giờ sử dụng nó trong công việc hàng ngày của mình với mật mã học hoặc toán học rời rạc. Toán học và lập trình thường được coi là chủ đề sử dụng nó hoặc mất nó.
Shauna

3

Bạn có khá nhiều quan điểm hẹp và bạn mặc nhiên cho rằng chúng hoàn toàn.

  • Dường như có sự khác biệt lớn giữa những gì tôi mong đợi một người đã học lập trình trong một vài năm ở trường đại học và những gì người ta thực sự biết.

    Theo hiểu biết của tôi, không có trường đại học, nơi mọi người học lập trình trong một vài năm. Các trường đại học cung cấp các khóa học về khoa học máy tính, trong đó lập trình là một khía cạnh.

  • Sự khác biệt giữa loại tham chiếu và loại giá trị là gì?

    Nguyên tắc nhỏ: Nếu Lisp có thể làm mà không có sự phân biệt, thì đó chỉ là sự lộn xộn;)

  • Về cơ bản, tôi làm tất cả những gì có thể để lừa người được phỏng vấn nói với tôi về cuộc gọi, đống, v.v. và tôi cố gắng duy trì các khái niệm ngôn ngữ học.

    Nói về các khái niệm bất khả tri ngôn ngữ là một ý tưởng tốt. Cả đống và ngăn xếp đều không biết ngôn ngữ.

  • Nếu người được phỏng vấn nói với tôi rằng anh ta đã làm rất nhiều C, hoặc C ++ hoặc C #, tôi sẽ đi sâu hơn vào ngôn ngữ cụ thể và có thể vào các chi tiết triển khai.

    Tất cả các ngôn ngữ này có thông số kỹ thuật. Việc thực hiện không được xác định bởi ngôn ngữ. C và C ++ có thể được biên dịch chéo bằng LLVM để chạy trên Flash Player hoặc bất kỳ thời gian chạy JavaScript nào. Điều này làm cho các giả định của bạn về phân bổ heap và stack.
    Với C #, nó giống nhau nhiều. C # được JITed trước khi thực hiện với rất nhiều tối ưu hóa, có thể được thực hiện. Các biến cục bộ, được thu thập bởi các bao đóng cuối cùng sẽ kết thúc trên heap, thay vì stack, trong khi phân tích thoát cho phép lưu trữ các đối tượng phạm vi cục bộ (thường sẽ đi vào heap) để được lưu trữ trong stack. Phân bổ đăng ký thích hợp cũng sẽ làm giảm đáng kể nhu cầu phân bổ ngăn xếp.

  • Nếu cần, tôi hỏi người được phỏng vấn rằng một cuộc gọi là gì, hoặc nơi các đối số được chuyển đến một chức năng trong ngôn ngữ bắt buộc của sự lựa chọn của anh ta được lưu trữ.

    Bạn sẽ hỏi ai là người chỉ có kinh nghiệm lập trình sâu rộng với Haskell? : P

  • Hầu hết những người được phỏng vấn chỉ không biết ý tưởng của một cuộc gọi là gì, chứ đừng nói đến việc cân nhắc quyền anh, v.v.

    Ý tưởng cơ bản đằng sau autoboxing là, các nguyên thủy cũng có thể được coi là các đối tượng (hoặc ít nhất là các giá trị mà loại người có thể được phát hiện trong thời gian chạy). Liên quan đến sự trừu tượng đó, có ba loại ngôn ngữ:

    1. những nơi nó không tồn tại. Tôi cho rằng Objective-C là ví dụ điển hình.
    2. những nơi nó thực sự giữ
    3. những nơi nó tồn tại nhưng không giữ được. Tôi đoán Java là ví dụ tốt nhất (tôi cho rằng bây giờ nó đã được sửa).

    Tôi không thấy lý do tại sao mọi người không nên sử dụng ngôn ngữ của loại 1 (thực sự đó là một ý tưởng tốt). Tôi không thấy lý do tại sao những người sử dụng ngôn ngữ loại 2 nên thực sự bận tâm. Và tôi nghĩ rằng tất cả những người sử dụng ngôn ngữ thuộc loại 3, tức là một ngôn ngữ có tính năng ngữ nghĩa cốt lõi bị phá vỡ, đang sử dụng ngôn ngữ sai.

  • Sự khác biệt giữa một lớp trừu tượng và một giao diện. Trong trường hợp nào bạn nên sử dụng cái này hơn cái kia?

    Bây giờ đó là rất chủ quan và thực sự phụ thuộc vào ngôn ngữ. C ++ không có giao diện. Mục tiêu-C không có các lớp trừu tượng. Tôi sẽ lập luận rằng bất kỳ ngôn ngữ nào có cả hai đều cần thiết kế lại. Nhiều ngôn ngữ hiện đại sử dụng các đặc điểm, mixin, danh mục, vai trò và các cấu trúc tương tự để cung cấp các giải pháp sạch hơn cho việc tái sử dụng mã hơn là kế thừa các triển khai một phần. Các ngôn ngữ dựa trên nguyên mẫu không có lớp hoàn toàn.

    Cuối cùng, đây là một chủ đề khó và gây tranh cãi. Một cuộc phỏng vấn hầu như không phải là nơi thích hợp để giải quyết câu hỏi này và tôi thực sự sẽ không đóng đinh bất cứ ai ứng tuyển vào vị trí cấp dưới vì không cho tôi một câu trả lời hay.

  • Hầu hết những người được phỏng vấn chỉ không biết mục đích thực sự của thừa kế là gì. Họ thường biết một số từ khóa (ảo, ghi đè, v.v.), nhưng không thực sự biết khi nào nên sử dụng chúng, chứ đừng nói đến việc giải thích bảng ảo là gì.

    Có một số ngôn ngữ hướng đối tượng, không sử dụng tính kế thừa hoặc vtables cổ điển.

Lời khuyên của tôi:

  • Hãy rất cẩn thận khi cho rằng bất cứ điều gì bạn biết về lập trình thực sự là một cơ bản khái niệm lập trình. Bạn có thể cho rằng mọi lập trình viên giỏi đều có sự tò mò để tìm ra câu trả lời cho câu hỏi đó. Tuy nhiên, bạn không thể cho rằng bất cứ ai biết họ là tốt. Tôi có xu hướng tin rằng những người đưa ra quá nhiều tầm quan trọng đối với các chi tiết như vậy thực sự có khả năng không nhìn thấy rừng cho cây.
  • Lo lắng ít về chi tiết thực hiện. Ngôn ngữ lập trình có nghĩa là để tạo ra sự trừu tượng. Bạn cần suy nghĩ về những điều trừu tượng đó và chỉ về chúng. Mã tốt không được viết chống lại chi tiết thực hiện của một ngôn ngữ. Nó được viết để nhúng tốt nhất ngữ nghĩa của giải pháp của bạn vào các tính năng ngôn ngữ. Nếu bạn thành công trong việc đó, mã của bạn sẽ không chỉ trở nên mạnh mẽ mà còn dễ đọc đối với bất kỳ ai quen thuộc với ngôn ngữ và dễ dàng tối ưu hóa hơn cho trình biên dịch.
  • Biết câu trả lời bạn mong đợi không quá quan trọng. Hiểu họ là thế. Nếu ai đó chỉ biết họ, bởi vì họ đọc chúng trong sách giáo khoa hoặc giáo sư của anh ấy nói với họ, thì đó là một giá trị nhỏ. Trên thực tế, bạn có thể giải thích tất cả những điều đó cho chính mình với một vài giờ.
    Điều quan trọng là bạn hiểu làm thế nào những sự thật đơn giản và biệt lập này có thể được áp dụng cho các giải pháp linh hoạt và có thể bảo trì cho các vấn đề phức tạp.

Để đi đến câu hỏi thực sự:

Và bạn có nghĩ rằng công ty của tôi có thể có một vấn đề trong việc thu hút những người tài năng, hoặc bạn có gặp phải vấn đề tương tự trong quá trình tuyển dụng của riêng bạn không?

Tất cả các công ty đều có vấn đề thu hút những người khéo léo, ngoại trừ có thể là những người chơi lớn. Đó là bởi vì có rất ít trong số họ. Và bởi vì giả định, trường đại học đó làm cho mọi người khéo léo. Nó không. Nó ám chỉ họ có kiến ​​thức (giả sử cả sinh viên và trường đại học nắm giữ một phần của món hời). Kinh nghiệm là những gì làm cho mọi người khéo léo.

Có một vài người đã thu thập kinh nghiệm trước khi vào đại học và tiếp tục làm như vậy trong quá trình học. Bởi vì họ thích lập trình và vì khi họ tiếp thu một số ý tưởng mới trong một khóa học, họ sẽ cố gắng xem làm thế nào họ có thể đưa nó vào sử dụng, điều đầu tiên họ trở về nhà. Đây là loại người bạn muốn thuê. Nhưng có một vài trong số họ.
Đó là niềm đam mê lập trình và tự hoàn thiện và theo đuổi nó làm cho các lập trình viên tốt. Đúng giờ.

Tôi nghĩ, điều bạn phải nhận ra là, thật đáng buồn là hầu hết mọi người sẽ vào và rời trường đại học mà không có đủ kinh nghiệm lập trình.
Đồng thời, ngành công nghiệp của chúng ta đang rất cần những lập trình viên giàu kinh nghiệm. Do đó, tôi tin rằng nhiệm vụ của ngành chúng tôi là thực sự cố gắng bước vào. Và phỏng vấn các ứng cử viên cho vị trí cấp dưới, điều bạn thực sự tìm kiếm là những người sẵn sàng học hỏi và cải thiện. Và bạn nên lựa chọn cẩn thận, bởi vì bạn sẽ cần đầu tư nhiều năng lượng và bạn không muốn điều đó trở nên lãng phí.

Hãy nghĩ về nó như thuê một máu tươi để trở thành người lái xe cho đội đua của bạn: Một người lái xe giỏi có đủ hiểu biết về cơ học để sử dụng xe của anh ta tốt nhất, nhưng kiến ​​thức này không có ích gì (thậm chí không phải là đầu nhiều khởi đầu). Những gì bạn đang tìm kiếm là một người sẵn sàng làm việc chăm chỉ để cải thiện bản thân và tốt với nhóm của bạn.


1

Bất kể thuật ngữ "loại ngay lập tức" mà tôi không có đầu mối (loại giá trị? OK, tôi không chắc chắn, cảm ơn vì đã cập nhật), tôi nghĩ bạn đã đúng về câu hỏi của bạn và hoàn toàn không cực đoan. Đây là những câu hỏi có thể trả lời nếu một người sắp ra trường. Tuy nhiên, tôi sẽ không loại bỏ các ứng cử viên ngay lập tức, vẫn còn một số có thể có tiềm năng vì họ muốn học.

Để tiếp tục với sự tương tự giấy phép lái xe: một số người không quan tâm điều gì xảy ra khi họ chèn phím (hoặc nhấn nút "bắt đầu"). Họ chỉ cần làm điều đó và lái xe. Điều này không có nghĩa là họ cũng vô dụng, chỉ là sẽ mất thời gian để họ đạt đến ngôi sao ;-)

Chỉ là một nhận xét cá nhân về bằng cấp / bằng tốt nghiệp: Tôi hiện đang làm việc với những người có nền tảng hóa sinh và công nghiệp có một vài năm kinh nghiệm trong lĩnh vực CNTT và cũng có một số người "có kinh nghiệm" với nền tảng CS, và đoán xem ai là người hiểu biết nhất động cơ xe hoạt động như thế nào? Phải, không phải là những người đã học CS! Vì vậy, tôi chỉ trải nghiệm thực tế là bằng tốt nghiệp không phải lúc nào cũng quan trọng!


2
Một số người có thể dành quá nhiều thời gian mày mò với chiếc xe của họ để đạt được tốc độ tối đa, rằng những chiếc chậm đã hoàn thành trước khi chúng bắt đầu.

đủ công bằng :-)
Jalayn

Tôi hoàn toàn đồng ý về những người đến từ các lĩnh vực khác ngoài CS. nhưng đối với một người thực sự sở hữu bằng cấp CS, không biết loại giá trị nào có vẻ hơi đáng lo ngại để nói ít nhất ...
Brann

@brann, họ có thể không biết thuật ngữ này , nhưng vẫn lưu ý rằng vị trí vật lý của dữ liệu được giữ bởi biến được đặt trong phân đoạn dữ liệu chứ không phải trong heap hoặc ngăn xếp. Ngôn ngữ nào bạn sử dụng vì điều này có vẻ quan trọng?

Tôi đang sử dụng c #. Và tôi đồng ý rằng việc biết loại chi tiết triển khai này có lẽ không quan trọng trong bối cảnh đó (mặc dù trong một số tình huống cụ thể, nó có thể). Có điều là tôi không cố gắng tìm chuyên gia ac #. Tôi đang cố gắng tìm ai đó đủ thông minh và đủ động lực để trở nên thực sự giỏi về mã hóa trong c #. Nếu một người không quan tâm tìm hiểu / hiểu loại giá trị nào, tôi có xu hướng (có thể sai) nghĩ rằng anh ta bỏ lỡ một trong hai phẩm chất, ít nhất là
Brann

1

Tôi thường không đặt câu hỏi cụ thể về thuật ngữ hoặc định nghĩa trong các cuộc phỏng vấn. Như các câu trả lời khác đã lưu ý, mọi người có các thuật ngữ khác nhau cho các khái niệm khác nhau và trong khi họ có thể hiểu khái niệm về chủ đề này, họ có thể không thể truyền đạt điều đó cho bạn.

Với Junenson, tôi rất tập trung vào các dự án thực tập hoặc trường học của họ. Tôi đặt câu hỏi theo câu hỏi về họ, để họ nói rõ câu trả lời và sau đó tôi bắt đầu tìm hiểu sâu hơn về sự tham gia thực tế của họ vào dự án, những gì họ học được, những gì họ cảm nhận.

Nói chung, nếu người đó là trọng tài trong dự án thì họ thường không thể đưa ra câu trả lời thỏa mãn cho tôi, vì vậy thường rất dễ để nói. Chỉ cần cẩn thận để không nhầm lẫn lo lắng và hướng nội vì không quan tâm và không được giải quyết.

Có thể xác định ứng viên tốt, người nhút nhát và sống nội tâm hơi khó, nhưng văn hóa nơi tôi làm việc sẽ không tốt cho một nhà phát triển hướng nội và nhút nhát nên nếu họ không thể tổ chức một cuộc trò chuyện chi tiết hữu ích với tôi thì họ sẽ không phải là một phù hợp tốt.


1
 or chose his university very unwisely.

Điều đó rất không công bằng. Khi bạn là sinh viên, tất cả những gì bạn có thể làm là chọn trường đại học được xếp hạng cao nhất mà điểm số của bạn sẽ đưa bạn vào, hoặc có thể là trường quảng cáo cho phép bạn chơi với những chú chó robot chơi bóng đá. Chỉ có bấy nhiêu thôi. Bạn chỉ có thể đánh giá một khóa học đại học sau khi đã thực hiện nó, sau đó ra đi và làm việc trong ngành công nghiệp trong một vài năm và xây dựng một số dự án không tầm thường.

Ngay cả khi bạn bật lên một dấu hiệu neon khổng lồ trên mỗi khóa học như vậy nói rằng "CHÚNG TÔI KHÔNG DẠY THEO CUỘC GỌI", thì bạn đang mong đợi các sinh viên sẽ làm gì về nó? Dành nhiều tháng để nghiên cứu nó để họ thực sự có thể hiểu điều đó có nghĩa là gì và họ cần bao nhiêu để dạy nó? Đối với mỗi khóa học với mọi sự kết hợp của các dấu hiệu?

Mọi người không được chọn giáo dục của họ, thực tế.


0

Khi phỏng vấn sinh viên mới tốt nghiệp, tôi bám sát các chủ đề được liệt kê trong CV của họ. Nếu họ sử dụng Java, tôi sẽ hỏi họ về Java. Nếu họ sử dụng Blub, thì tôi dành nửa giờ để đọc về Blub và hỏi họ về điều đó. Nhưng tôi luôn yêu cầu sử dụng các từ khóa ngôn ngữ. Nếu đó là Java, thì tôi sẽ hỏi về "mở rộng" và "thực hiện" nhưng không phải là "lớp con" và "kế thừa". Tôi hy vọng sinh viên mới tốt nghiệp có thể nói về một số mã họ đã viết, để có thể giải quyết một vấn đề lập trình đơn giản và nắm bắt các cấu trúc dữ liệu cơ bản (bảng băm và cây).


0

Là một Giám đốc đã thiết kế quy trình phỏng vấn, tôi có thể cung cấp cho bạn về những gì công ty chúng tôi mong đợi từ các sinh viên mới: Tôi mong đợi những người có thể đọc tài liệu và áp dụng kiến ​​thức. Vì vậy, chúng tôi có một vài nhiệm vụ mà chúng tôi yêu cầu họ thực hiện. Đây là những nhiệm vụ mã hóa đơn giản, không khó hơn nhiều so với bài tập ở lớp đại học trung bình của bạn (các nhà phát triển "giỏi" có kinh nghiệm có thể loại bỏ nó trong khoảng 15 phút). Ứng viên được cấp một máy trạm có truy cập internet, trình biên dịch (trong trường hợp trực quan của chúng tôi) và các tệp trợ giúp.

Nếu họ không thể viết mã theo các điều kiện này, họ sẽ không được xem xét cho thuê. Đơn giản như vậy. Toàn bộ lý do "tôi không biết ngôn ngữ" không bao giờ thực sự ghen tị với tôi bởi vì mọi ứng viên đến phỏng vấn ở đây đều biết sẽ có một bài kiểm tra, họ biết các ngôn ngữ và công cụ chúng tôi sử dụng trước. Bạn có thể tải xuống visual studio express tại nhà và làm một số điều cơ bản trước khi đến và vượt qua bài kiểm tra cấp độ đầu vào, những người không bận tâm ... đó là những gì tôi gọi là cờ đỏ.


Đây là cách tốt nhất để tìm ai đó tuyên bố rằng anh ta biết một cái gì đó thực sự biết nó đủ tốt để sử dụng nó. Hỏi một thuật ngữ có nghĩa là gì, một cái gì đó bên ngoài lớp học, hầu như không bao giờ được sử dụng là vô nghĩa. Ý tôi là trong 18 tháng qua tôi chưa một lần thảo luận về các loại tham chiếu có thể đã phàn nàn về điều gì đó liên quan đến con trỏ.
Ramhound
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.