Làm thế nào tôi có thể nhanh chóng loại bỏ các lập trình viên sao chép và dán vào các bản sao? [đóng cửa]


15

Tôi cần một cách để lọc sơ yếu lý lịch của những người chỉ cần sao chép và dán mã sau đó hy vọng nó hoạt động và kiểm tra xem nó có hoạt động không. Tất cả điều này xảy ra mà không có sự hiểu biết (hoặc quan tâm) để hiểu phần còn lại của mã trong hệ thống.

Chắc chắn tôi biết rằng sao chép và dán mã là một phần của việc học một đối tượng mới, kiểm soát, v.v ... nhưng làm thế nào người ta có thể biết nếu điều đó chiếm 70% (hoặc hơn) trong sự nghiệp phát triển của họ?

Tôi đã bắt gặp một số người cấp cao có lẽ có kỹ năng quá lỗi thời hoặc không liên quan đến dự án, tất cả những gì họ làm là google, sao chép-sau đó dán một số mã mà không nghĩ về giải pháp nói chung. Kết quả là chúng ta có một sự không phù hợp của JSON, AJAX, các cuộc gọi lại, ASMX, WCF và các postback trong cùng một dự án. Rõ ràng là không có sự thống nhất hoặc logic đằng sau nơi mỗi công nghệ đang được sử dụng.

Trong trường hợp xấu nhất, loại nhà phát triển này tạo ra các vấn đề bảo mật và vectơ để tấn công.

Câu hỏi

Làm thế nào bạn muốn giới thiệu tôi lọc ra những người có nền tảng lập trình kém? Tôi có thể làm điều đó ở cấp độ tiếp tục? Nếu không, làm thế nào để tôi làm điều này trong cuộc phỏng vấn.


Âm thanh như bạn cần một kiến ​​trúc sư công nghệ cho dự án của bạn. Ai đó phải đưa ra luật WRT theo các tiêu chuẩn được sử dụng, các công nghệ được sử dụng và đưa nó ra khỏi ý tưởng thú cưng trong tuần.
quick_now

Câu trả lời:


47

Tôi đã bắt gặp một số người cấp cao có lẽ có kỹ năng quá lỗi thời hoặc không liên quan đến dự án, tất cả những gì họ làm là google, sao chép-sau đó dán một số mã mà không nghĩ về giải pháp nói chung. Kết quả là chúng ta có một sự không phù hợp của JSON, AJAX, các cuộc gọi lại, ASMX, WCF và các postback trong cùng một dự án. Rõ ràng là không có sự thống nhất hoặc logic đằng sau nơi mỗi công nghệ đang được sử dụng.

Tôi không nghĩ rằng các kỹ năng của các nhà phát triển của bạn là vấn đề. Vấn đề của bạn nằm ở chỗ khác, có lẽ là trưởng nhóm hoặc kiến ​​trúc sư không tự tin "khuyến khích" các ngành mã hóa tốt hơn hoặc nhóm quản lý không hiểu tầm quan trọng của việc quản lý nợ kỹ thuật và không cung cấp cho họ nhà phát triển thời gian và nguồn lực để làm như vậy. Công ty của bạn có tổ chức đánh giá mã?

Lãnh đạo có thể là vấn đề, không phải là nhà phát triển sao chép-dán.


16
+1 Leadership may be the problem, not copy-paste developers. Đó chính xác là cách giải thích của tôi.
George Marian

Nghiêm túc. Một cái gì đó là AWOL nghiêm trọng trong bộ phận truyền thông.
MIA

+1: Ditto về ý kiến ​​của George Marian. Nói rất hay, Robert.
Jim G.

đó là một trong những tốt. Hy vọng nó đạt đến nhiều như người phỏng vấn, quản lý tuyển dụng.
Saar

Dường như có rất nhiều sự đồng thuận về câu trả lời này, nhưng những người không ở cấp độ "cao cấp" không ra lệnh cho chức năng và sau đó việc triển khai được để lại cho các lập trình viên, phải không? Ý tôi là anh chàng cấp cao có thể nói "Này, đừng sử dụng vô số công nghệ, chỉ cần sử dụng <hai cái này>", nhưng các nhà phát triển dán sao chép sẽ thực hiện sao chép dán! Tôi có lầm không ?
Chani

13

Cách để loại bỏ các lập trình viên không thể lập trình là đặt cho họ một bài tập lập trình thực tế như là một phần của giai đoạn sàng lọc hoặc giai đoạn phỏng vấn. (Cái sau có lẽ tốt hơn vì bạn có thể kiểm soát môi trường để ngăn chặn gian lận.)

Nhưng tôi không nghĩ rằng điều đó thực sự sẽ giải quyết vấn đề của bạn.

... Chúng tôi có sự không phù hợp của JSON, AJAX, cuộc gọi lại, ASMX, WCF và postback trong cùng một dự án. Rõ ràng là không có sự thống nhất hoặc logic đằng sau nơi mỗi công nghệ đang được sử dụng.

IMO, vấn đề thực sự ở đây là nhóm của bạn không thực hiện đủ đánh giá mã nội bộ và không phát triển một "cuốn sách chơi" các giải pháp ưa thích cho các vấn đề đã biết. Đây một phần là vấn đề văn hóa, một phần là vấn đề truyền thông và (có lẽ) một phần là vấn đề với thời hạn dự án.

Một vấn đề khác là dự án thường có tuổi thọ dài và trong suốt tuổi thọ đó, các công nghệ / kỹ thuật mới sẽ xuất hiện và những công nghệ cũ có thể sẽ không còn được ưa chuộng. Nếu bạn muốn tránh sử dụng công nghệ / kỹ thuật "ăn sáng cho chó", bạn cần phải:

  • thiết lập và thực thi một danh sách các công nghệ / kỹ thuật có thể được sử dụng cho mỗi dự án hoặc
  • đầu tư nỗ lực làm mới các công nghệ được sử dụng bởi một dự án.

1
Nếu bạn không làm bài kiểm tra viết trong buổi phỏng vấn, bạn có thể tự bắn vào chân mình. Tôi đã có chúng ở bốn nhà tuyển dụng cuối cùng của tôi và thường ngạc nhiên về một số câu hỏi đơn giản như thế nào. Ở một nơi, tôi được thông báo rằng một thí sinh khác đã rời đi mà không hoàn thành bài kiểm tra, khóc.
Adrian J. Moreno

1
Tôi hoàn toàn đồng ý rằng một bài kiểm tra viết trong cuộc phỏng vấn là cách duy nhất để chắc chắn rằng các tân binh của bạn thực sự có kỹ năng lập trình tốt. Nhưng lực đẩy chính của câu trả lời của tôi là chỉ riêng các kỹ năng của nhà phát triển là không đủ để giải quyết vấn đề của SO.
Stephen C

Đã bị bắt bởi bộ đếm thời gian chỉnh sửa. Tôi hoàn toàn đồng ý rằng các tiêu chuẩn và đánh giá là cần thiết. Gần đây chúng tôi đã xuất bản một tài liệu tiêu chuẩn mã hóa mới và kết hợp với một số quy trình xem xét mã mới mà chúng tôi đã có ít lỗi hơn đối với QA. Một nếu mục tiêu tiếp theo của tôi là bắt đầu một nhóm đào tạo nội bộ.
Adrian J. Moreno

10

Thuê người trong 3 tháng thử việc. Bắn chúng nếu chúng hút.

Nếu bạn KHÔNG KIỂM TRA, bạn không thể KIẾM ĐƯỢC. Mã đánh giá, công cụ kiểm toán. Một máy chủ CI có thể chạy chúng tự động.

Đặt câu hỏi thực sự trong các cuộc phỏng vấn của bạn, như trong các câu hỏi từ mã thực.

Yêu cầu họ viết mã trên bảng trắng.

Nếu bạn là người quản lý phi kỹ thuật, bạn không đủ điều kiện để đánh giá điều này.

Nếu bạn không đủ tiêu chuẩn, hãy nhờ một chuyên gia tư vấn chuyên nghiệp có uy tín để làm xét nghiệm. Hỏi những người hiện tại của bạn và các đối thủ cạnh tranh kinh doanh nếu họ biết một người làm việc hiệu quả 100 lần. Trả tiền cho họ để thực hiện các cuộc phỏng vấn.

Nếu bạn muốn điều hành một bệnh viện mà không cần đầu phẫu thuật, hãy đi thẳng về phía trước.


bạn đang nói về một người có kinh nghiệm? Tại sao một người nên rời bỏ công việc của mình và tham gia một nơi mà họ cần 3 tháng để cho họ anh ta / cô ta hút hay không :) Tại sao lại có nguồn nhân lực?
Saar

Tôi đang nói về những người có kinh nghiệm, có năng lực. Chúng rẻ hơn về lâu dài. (Các) nguồn nhân lực ngăn bạn bị kiện vì vi phạm luật lao động. Ban đầu ở đó để làm công cụ cảm động cho các nhà quản lý số của Henry Ford. Câu chuyện có thật, nhìn lên. Nếu bạn đã biết người sẽ làm việc tốt, thì bạn cũng giỏi việc này hơn tôi. Người đó sẽ thay đổi công việc vì bạn rất tuyệt vời để làm việc, có một môi trường làm việc tuyệt vời và sau khi thử việc họ nhận được một phần thưởng béo. Nếu chúng được dự phòng dưới dạng vĩnh viễn, công ty của bạn sẽ trả thêm ba tháng. Một cái gì đó như thế
Tim Williscroft

9

Tôi đã dành vài năm qua để phỏng vấn mọi người và thấy rằng 90% ứng viên đơn giản là không thể lập trình. Kỹ thuật phỏng vấn của tôi để xác định lập trình là cung cấp cho ứng viên một bản tóm tắt quá đơn giản và để ứng viên giải quyết nó bằng cách sử dụng bút đánh dấu và bảng trắng.

Các chế độ thất bại bao gồm:

đến với một thiết kế và sau đó thực hiện một cái gì đó khác nhau. Những ứng cử viên này bị từ chối vì họ nguy hiểm trong một đội. không theo thông số kỹ thuật, viết lỗi vv ...

Không thể phát minh ra một thiết kế. Một số lượng đáng ngạc nhiên các ứng viên "có kinh nghiệm" cần một thông số kỹ thuật để bao gồm thiết kế triển khai.

không biết ngôn ngữ lập trình, mặc dù CV yêu cầu kinh nghiệm.

Không đặt câu hỏi bổ sung để trích xuất thông số kỹ thuật đầy đủ hơn.

Không thể giải thích các quyết định thiết kế. Đây là một chính. Nếu ai đó không thể giải thích tại sao, thì mỗi lần họ sẽ làm điều đó khác đi, và tính nhất quán bị mất.

Kết quả cuối cùng là tôi đã dành rất nhiều thời gian để phỏng vấn, và không thường xuyên tuyển dụng. tuy nhiên, nhóm phát triển rất tốt và có sự tôn trọng hoàn toàn của toàn bộ công ty và nó đã được giao!


Trải nghiệm của bạn nghe khá bình thường.
quick_now

5

Tôi muốn đề xuất FizzBuzz mà Jeff Atwood đề cập đến trong bài đăng tại http: //www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Viết chương trình in các số từ 1 đến 100. Nhưng đối với bội số của ba lần in "Fizz" thay vì số và cho bội số của năm lần in "Buzz". Đối với các số là bội số của cả ba và năm bản in "FizzBuzz".


9
-1. FizzBuzz phát hiện tổng số kẻ ngốc. Để sao chép và dán mã hóa, bạn không thể là một thằng ngốc hoàn toàn.
back2dos

@ back2dos - Bạn nên loại bỏ "toàn bộ những kẻ ngốc" vào thời điểm bạn gặp trực tiếp cuộc phỏng vấn. FizzBuzz khiến ai đó suy nghĩ về vấn đề và cách giải quyết tốt nhất. Điều đó không khó vì vậy nó sẽ làm lộ ra những người sao chép và dán, vì những người sao chép và dán không học được "lý do" đằng sau mọi thứ.
Jetti

3
+1. FizzBuzz phát hiện nhiều hơn những kẻ ngốc đó. Nó cũng phát hiện những người bù đắp sự thiếu hụt các kỹ năng kỹ thuật bằng các kỹ năng xã hội trên. Những người đó có cơ hội tốt để vượt qua bài kiểm tra sàng lọc đầu tiên. Ví dụ, họ rất có thể giữ bằng cấp hợp pháp.
MSalters

1
Vâng, bạn hỏi tôi fizzbuzz và tôi bỏ đi ngay lập tức. :) IMO trong danh mục cơ sở không thực sự hữu ích, vì dù sao bạn cũng sẽ đào tạo các anh chàng, và trong hạng mục cao cấp, nó vô dụng + gây khó chịu. bằng cách khác, bạn có thể cao thông minh + làm cho mọi người hoàn thành công việc. Viết mã cho các câu hỏi giống như tại chỗ là dấu hiệu IME của các công ty trang trại chồn. Nếu tôi thực sự quan tâm đến kỹ năng mã hóa của ai đó, tôi sẽ đưa ra câu hỏi ôn tập mã . Và nhận được tất cả các câu trả lời có liên quan mà không thất vọng.
Balog Pal

@BalogPal: Tôi đã cười và bắt đầu gõ như điên trong hai phút, và rồi tôi thấy xấu hổ về bản thân mình nếu nó không được biên dịch, chạy và làm việc lần đầu tiên.
gnasher729

2

Tôi hỏi ba câu hỏi phỏng vấn

  1. Viết một danh sách được liên kết có khả năng lưu trữ một số loại số trong java mà không cần nhập bất cứ thứ gì từ khung bộ sưu tập
  2. Viết mã cho thấy cách bạn có thể thêm / xóa các nút khỏi danh sách đó
  3. Viết mã cho biết làm thế nào bạn có thể nhận được tối đa / phút từ danh sách đó

Tôi đã thấy mọi người hoàn thành việc này trong 5 phút và thấy mọi người đấu tranh trong 30 phút trước khi bỏ cuộc.


Yêu cầu đầu tiên phải cụ thể hơn. java.util.LinkedList l = new java.util.LinkedList()không nhập bất cứ thứ gì, nhưng chắc chắn sử dụng các bộ sưu tập tích hợp.
Barry Brown

Đây là một câu hỏi công bằng đặc biệt là đối với sinh viên tốt nghiệp gần đây. Nếu bạn chú ý hoặc dành bất kỳ thời gian nào để lập trình thì điều này gần như không đáng kể. Tôi cho rằng nó không cần phải chính xác, nhưng đủ gần.
Bryan Harrington

3
@Bryan, chưa có ai thử điều đó. Và tôi thực sự không quan tâm nếu câu trả lời là chính xác 100%. Chỉ có điều họ hiểu vấn đề và có thể tiếp cận nó một cách có thẩm quyền. Vấn đề phổ biến nhất là một trong đó add / remove sẽ không hoạt động ở phần đầu hoặc phần đuôi của danh sách. Tôi đã đề nghị mọi người được thuê dựa trên phản ứng của họ để tôi chỉ ra điều này.
sal

2

Bạn không thể làm điều này ở cấp độ tiếp tục vì về cơ bản họ có thời gian vô hạn để viết nó lên, nhưng bạn có thể thực hiện nó trong một cuộc phỏng vấn qua điện thoại nếu bạn hỏi một vài câu hỏi đòi hỏi sự hiểu biết kỹ thuật về những gì họ làm. Điều này cung cấp cho bạn cả câu trả lời (tốt hay xấu) và mất bao lâu để họ đến đó.

Khi tại một cuộc phỏng vấn, làm cho họ viết mã. Đó là cách duy nhất bạn có thể biết nếu họ có thể lập trình thực sự. Làm cho vấn đề trở nên đơn giản, cung cấp cho họ một máy tính có kết nối internet và IDE bạn sử dụng đã cài đặt, để họ hỏi bất kỳ câu hỏi nào (ngoại trừ gimme-hte-codez) và xem cách họ làm việc.


EDIT: Để phân tích sau khi chết, PMD có một trình phát hiện sao chép / dán để tìm thấy nó: http://pmd.sourceforge.net/cpd.html


Tôi đã đồng ý với bạn cho đến khi "... và IDE bạn sử dụng." Các lập trình viên đặc biệt về môi trường làm việc của chúng tôi và không có khả năng quen thuộc với $ Random-IDE. Tôi đã viết mã được hơn 20 năm và tôi đã lãng phí 10 phút đầu tiên để cố gắng tìm ra cách làm việc với IDE nếu bạn ném nó vào tôi. Tôi sử dụng một trình soạn thảo (bluefish khi làm webby, emacs cho mọi thứ khác) và các công cụ dòng lệnh cho mọi thứ khác (kiểm soát sửa đổi, biên dịch khi cần, v.v.). Tôi không sử dụng trình gỡ lỗi nào cả. Tôi được dạy rằng nếu bạn cần một trình gỡ lỗi thì bạn đã làm sai: đó là mã gỡ lỗi dành cho!
HedgeMage

@HedgeMage, tôi không nói họ phải sử dụng nó ... Xem cách một người xử lý tình huống đó rất hay nói. Notepad + javac đủ? Anh ta có tải xuống và cài đặt NetBeans không? Anh ta sẽ hỏi làm thế nào để làm X trong IDE của bạn, hack một chút và yêu cầu Y và Z?

@HedgeMage, mã gỡ lỗi là tuyệt vời nếu bạn có thể xác định trước tất cả những điều có thể bạn cần biết. Trình gỡ lỗi rất hay trong trường hợp bạn cần xem câu trả lời cho các câu hỏi để xác định câu hỏi tiếp theo, với mã gỡ lỗi yêu cầu nhị phân mới và khởi động lại và đi đến vị trí đó.

1
@ Thorbjørn: Được cấp, các hóa đơn của tôi đã được trả bằng công việc bằng các ngôn ngữ được dịch trong vài năm qua, nhưng ngay cả trong những ngày mã hóa C của tôi, tôi đã loại bỏ trình gỡ lỗi để ủng hộ mã gỡ lỗi tốt. Có lẽ đó chỉ là một định kiến ​​về phía tôi: Tôi đã đi học đại học với rất nhiều người chưa bao giờ học cách viết mã - họ chỉ tát một cái gì đó với nhau sau đó sửa bất cứ điều gì trình gỡ lỗi hét lên cho đến khi nó "hoạt động". Tôi không thể chịu được kiểu mã hóa trượt. Tôi không có ý ám chỉ rằng các trình sửa lỗi là xấu xa, chỉ là chúng và các tính năng IDE khác không thuộc về tất cả các quy trình công việc.
HedgeMage

@HedgeMage, tôi đồng ý với cách tiếp cận "đánh bại nó cho đến khi nó hoạt động" để gỡ lỗi là không tốt, nhưng kết luận rằng trình gỡ lỗi là xấu có lẽ là một sự loại trừ quá rộng.

1

Đơn giản

  • (1) Khóa chúng trong phòng + Oxy miễn phí.
  • (2) Cung cấp cho họ một PC có kết nối Internet + IDE tùy chọn + quyền truy cập vào Thực phẩm.
  • (3) Có wireshark hoặc phương pháp tương tự để ghi nhật ký tất cả lưu lượng truy cập trong và ngoài nước.
  • (4) Giao cho anh ta một nhiệm vụ trung bình.
  • (5) Kiểm tra tất cả lưu lượng HTTP, hoàn thành bài tập.
  • (6) Nếu chủ đề đã sao chép các đoạn mã nguồn lớn, hãy chấm dứt Chủ đề .....

Biên tập:

Như Makerofthings7 như đã chỉ ra, trong điều kiện thực tế, người ta có thể thực hiện quay video (chụp màn hình).


Tiểu thuyết, nhưng cuối cùng không thực tế.
Robert Harvey

... Hoặc chỉ thực hiện quay video, xem tiến trình logic. Xem vẻ đẹp (hoặc hỗn loạn) mở ra.
goodguys_activate

1
chấm dứt môn học? Bằng cách rút oxy miễn phí? Lộn xộn!

@ Thorbjørn: Không lộn xộn như họ tự bắn vào chân mình, sau khi sao chép các đoạn mã nguồn lớn.
Joe D

1
Những người không sử dụng internet để lợi thế của họ bị khóa trong chế độ của ngày hôm qua. Tôi LUÔN cho rằng chúng là một số ví dụ điển hình để tôi xem xét cho dù câu hỏi có tầm thường đến đâu. Tôi không sao chép và dán, tôi nhìn vào các ví dụ tốt và áp dụng kỹ thuật tốt nhất. Tôi là một lập trình viên đầy đủ, có nghĩa là tôi là một người tổng quát, không phải là một chuyên gia và dựa vào phần còn lại của thế giới. Rõ là tội lỗi!
Junky

1

Nếu bạn muốn "loại bỏ" các lập trình viên kém, bạn có thể thử ví dụ Ma trận năng lực lập trình viên (hữu ích nhưng nó không áp dụng cho tất cả các lĩnh vực có thể - tất nhiên bạn có thể tự làm) hoặc codility.com (các nhiệm vụ rất tốt và nó tiết kiệm rất nhiều thời gian).

Nói chung, việc thuê các lập trình viên giỏi là khó và thường đòi hỏi nhiều năm thực hành. Bạn có thể bắt đầu cơ sở dữ liệu của riêng mình về các câu hỏi phỏng vấn, không chỉ hỏi về công cụ mã hóa mà còn với toán học, logic, không đề cập đến các câu hỏi về động lực.


0

Tôi sẽ nói rằng vấn đề với các ứng viên của bạn không phải là họ không thể lập trình được, mà là họ không có cảm giác sử dụng công cụ phù hợp cho công việc. Đề nghị của tôi là một câu hỏi tiểu luận, nơi họ sẽ được cung cấp các yêu cầu cấp cao cho một hệ thống mới và được yêu cầu cung cấp một kiến ​​trúc và chứng minh các lựa chọn thành phần của họ. Nhưng hãy giữ FizzBuzz cho những ứng viên không thể viết mã mà không có trình duyệt.

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.