Chúng ta có nên kiên trì với một nhân viên vẫn viết mã xấu sau nhiều năm? [đóng cửa]


13

Tôi đặt câu hỏi này cho các lập trình viên C ++ vì: a) Chỉ có lập trình viên C ++ mới có thể đánh giá giá trị kỹ thuật của các ví dụ; b) Chỉ có một lập trình viên sẽ có cảm giác về tính khí của một lập trình viên khác viết mã như thế này.

Nhân sự và các giám đốc nhận thức được rằng có một vấn đề đơn giản chỉ vì họ thấy bằng chứng trong lĩnh vực này. Đó là cuộc gọi của tôi cho dù chúng tôi cung cấp cho các lập trình viên trong câu hỏi nhiều thời gian hơn. Nhiều lỗi ở mức rất cơ bản - câu hỏi của tôi (với các lập trình viên) là liệu ai đó tự xưng là nhà phát triển C ++ cao cấp có nên được đưa ra một lợi ích của sự nghi ngờ dựa trên các mẫu mã hiện tại của họ hay không. Những người không lập trình - ngay cả những người ngoài lập trình C ++ - không thể đưa ra bất kỳ phán xét nào về việc này.

Đối với nền tảng, tôi đã được giao nhiệm vụ quản lý các nhà phát triển cho một công ty được thành lập tốt. Họ có một nhà phát triển duy nhất chuyên về tất cả mã hóa C ++ của họ (mãi mãi), nhưng chất lượng công việc thì rất tệ. Đánh giá và kiểm tra mã đã tiết lộ nhiều vấn đề, một trong những điều tồi tệ nhất là rò rỉ bộ nhớ. Nhà phát triển chưa bao giờ kiểm tra mã của mình để tìm rò rỉ và tôi phát hiện ra rằng các ứng dụng có thể rò rỉ nhiều MB chỉ với một phút sử dụng. Người dùng đã báo cáo sự chậm chạp lớn, và anh ta nói, "không liên quan gì đến tôi - nếu họ thoát ra và khởi động lại, tất cả sẽ tốt trở lại."

Tôi đã đưa cho anh ta các công cụ để phát hiện và theo dõi rò rỉ, và ngồi lại với anh ta trong nhiều giờ để chứng minh cách các công cụ được sử dụng, nơi xảy ra sự cố và phải làm gì để khắc phục chúng. Chúng tôi còn 6 tháng nữa và tôi đã chỉ định anh ấy viết một mô-đun mới. Tôi đã xem xét nó trước khi nó được tích hợp vào cơ sở mã lớn hơn của chúng tôi và đã mất tinh thần khi phát hiện ra mã hóa xấu như trước. Phần mà tôi thấy không thể hiểu được là một số mã hóa còn tệ hơn cả nghiệp dư. Ví dụ, anh ta muốn một lớp (Foo) có thể cư trú một đối tượng của một lớp khác (Bar). Anh ta quyết định rằng Foo sẽ giữ một tài liệu tham khảo cho Bar, vd:

class Foo {
public:
    Foo(Bar& bar) : m_bar(bar) {}
private:
    Bar& m_bar;
};

Nhưng (vì những lý do khác) anh ta cũng cần một người xây dựng mặc định cho Foo và, thay vì đặt câu hỏi về thiết kế ban đầu của anh ta, anh ta đã viết viên ngọc này:

Foo::Foo() : m_bar(*(new Bar)) {}

Vì vậy, mỗi khi hàm tạo mặc định được gọi, một Bar bị rò rỉ. Để làm cho vấn đề tồi tệ hơn, Foo phân bổ bộ nhớ từ heap cho 2 đối tượng khác, nhưng anh ta đã không viết hàm tạo hoặc hàm sao chép. Vì vậy, mỗi lần phân bổ Foo thực sự rò rỉ 3 đối tượng khác nhau và bạn có thể tưởng tượng điều gì đã xảy ra khi một Foo được sao chép. Và - nó chỉ trở nên tốt hơn - anh ta lặp lại mô hình tương tự trên ba lớp khác, vì vậy đó không phải là một lần trượt. Toàn bộ khái niệm là sai trên rất nhiều cấp độ.

Tôi sẽ cảm thấy hiểu hơn nếu điều này đến từ một người mới. Nhưng anh chàng này đã làm điều này trong nhiều năm và đã được đào tạo và tư vấn rất tập trung trong vài tháng qua. Tôi nhận ra rằng anh ấy đã làm việc mà không cần cố vấn hay đánh giá ngang hàng trong thời gian đó, nhưng tôi bắt đầu cảm thấy anh ấy không thể thay đổi. Vì vậy, câu hỏi của tôi là, bạn sẽ tiếp tục với một người đang viết mã rõ ràng như vậy?


14
Nếu bạn đã thấy rằng anh ta đang viết mã xấu, tại sao bạn lại để anh ta viết cứt trong suốt 6 tháng mà không giám sát anh ta?
Billy McNuggets

4
IMO, khi bạn thấy ai đó làm công việc tồi tệ trong một thời gian, bạn KHÔNG THỂ để anh ta làm việc một mình ngay cả khi chỉ gỡ lỗi / sửa chữa. Nếu đó là ý chí của bạn để giữ anh ta vào công ty của bạn, bạn phải giám sát anh ta và SAU xem bạn vẫn nhận được kết quả xấu từ anh ta. Để anh ta làm việc một mình trong suốt 6 tháng mà không nhìn anh ta là IMO một cách quản lý tồi.
Billy McNuggets

3
@ user94986 Sau đó, nếu bạn dành thời gian với anh ta, giải thích cho anh ta rằng thói quen của anh ta là xấu, bạn nên để mắt đến anh ta, và nếu không có gì thay đổi, đừng đợi 6 tháng để nói chuyện với anh ta.
Billy McNuggets

4
Nếu anh ta không nghĩ rằng rò rỉ bộ nhớ là một vấn đề, sẽ không có ý nghĩa gì để dạy anh ta cách tránh chúng và đưa ra các công cụ hỗ trợ việc này. Vấn đề chính có thể là anh ta hiểu sai mục tiêu và yêu cầu cho sản phẩm.
maxim1000

2
Câu hỏi này dường như không có chủ đề bởi vì đó là về những lời khuyên pháp lý nhân sự hiệu quả, vấn đề mà chúng tôi cung cấp là tốt nhất.
Kỹ sư thế giới

Câu trả lời:


22

Lời khuyên của tôi sẽ là đối mặt với anh ta về ví dụ cụ thể này và xem những gì anh ta nói. Nếu anh ta phủ nhận có bất cứ điều gì xấu với mã, thì tôi sợ rằng bạn có thể làm được rất ít. Nếu anh ta chấp nhận rằng anh ta đã phạm sai lầm (ngay cả khi anh ta phòng thủ về điều đó), thì ít nhất cũng có chỗ để cải thiện. Nếu bạn chấp nhận thời gian và nỗ lực để cải thiện anh ta, thì bạn hoặc một lập trình viên cao cấp sẽ cần phải ngồi xuống và viết mã cho đến khi tất cả các xu hướng này được làm phẳng (hãy chuẩn bị để dành cho người này ít nhất 1 tháng).

Một lập trình viên tồi, tôi thường có thể làm việc cùng, nhưng một lập trình viên không thể cải thiện, tôi không thể.


12
+1 cho "Một lập trình viên tồi, tôi thường có thể làm việc cùng, nhưng một lập trình viên không thể cải thiện, tôi không thể."

Vâng, tôi cũng sẽ cho anh chàng biết điều đó khá nghiêm trọng. Có vẻ như anh ta đã không được nói hoặc không thừa nhận rằng có vấn đề trong nhiều năm. Hãy đến với cuộc trò chuyện sẵn sàng để chỉ ra những ví dụ về những thứ anh ấy không nên làm và nó ảnh hưởng đến chất lượng của ứng dụng như thế nào. Nếu anh ta vẫn không sẵn sàng giải quyết vấn đề với mã của anh ta, có lẽ tôi sẽ để anh ta đi. Và tôi có lẽ sẽ không cho anh ấy nhiều thời gian để cùng nhau hành động nếu anh ấy làm thế. Bạn chắc chắn cần phải nhấn mạnh rằng tương lai của anh ấy ở công ty đang bị đe dọa và anh ấy đang thiếu một kỹ năng khá quan trọng cho một nhà phát triển C ++.
Erik Reppen

@ErikReppen Tôi đồng ý, nhưng tôi cũng nghĩ lập trình viên có thể là kiểu người cứng đầu nhất trên trái đất. Nếu bạn đẩy quá mạnh, anh ta có thể từ chối bất kỳ vấn đề nào với mã của mình chỉ đơn giản là do phòng thủ. Tôi nghĩ điều quan trọng là nhấn mạnh mức độ nghiêm trọng của tình huống, nhưng tôi vẫn sẽ cố gắng thông cảm với anh ấy "Tôi tình cờ nhận thấy lỗi nhỏ này. Bạn có tình cờ bắt được nó không? Bạn có cho rằng bạn cũng mắc lỗi tương tự ở những khu vực khác không chương trình của bạn? "
Neil

@Neil Cách duy nhất xuyên qua một bức tường cứng đầu là một cú đá vào mông. Và tôi nói từ kinh nghiệm là khía cạnh cứng đầu của phương trình đó. Điều đó nói rằng, nếu đó là lần đầu tiên anh ta nghe thấy có vấn đề với mã của mình, vâng, tôi sẽ nhẹ nhàng hơn một chút nhưng có vẻ như họ đã cố gắng truyền đạt một vấn đề ít nhất một lần trước đây
Erik Reppen

@ErikReppen Có thể, nhưng bạn có nguy cơ rằng anh ta định hình chỉ để đưa bạn ra khỏi đuôi. Với tốc độ đó, bạn cũng có thể nói "Hình thành hoặc bạn bị sa thải." Ít nhất phương pháp này phát hiện ra nếu anh ta có lương tâm về lỗi của mình.
Neil

17

Vì vậy, câu hỏi của tôi là, bạn sẽ tiếp tục với một người đang viết mã rõ ràng như vậy?

Không. Tôi sẽ sa thải bất kỳ nhà phát triển C ++ chuyên nghiệp nào thiếu hiểu biết cơ bản về quản lý bộ nhớ.

Nếu đó là một người nào đó đến từ Java hoặc C # hoặc một cái gì đó tôi sẽ cung cấp cho họ một số mạng, nhưng đây là sự bất tài hoàn toàn.


9
Tôi không thể hiểu làm thế nào câu trả lời này có thể được nâng cao. Bắn ai đó không phải là vấn đề nên xem nhẹ.
Florian Margaine

3
@FlorianMargaine - Chắc chắn, nhưng điều này có vẻ như là một trường hợp cắt rõ ràng. Nhân viên này đã khiến công ty mất bao nhiêu tiền trong việc bán hàng bị mất do rò rỉ bộ nhớ hoặc lỗ hổng bảo mật? Mất bao nhiêu thời gian để kiểm tra / sửa lỗi tào lao này? Bao nhiêu trong việc có OP giữ trẻ chúng? Bao nhiêu trong việc các lập trình viên khác phải chịu đựng sự hiện diện đơn thuần của anh ta ? Trừ khi nhân viên có lượng kiến ​​thức tên miền (hoặc tống tiền) vô lý, không có cách nào thay thế chúng tốn kém hơn.
Telastyn

1
@FlorianMargaine, Loại nhân viên này là người không bị sa thải đủ, nó làm tê liệt công ty trong việc khắc phục nợ kỹ thuật. Nó nói trong đèn đỏ lớn, "Họ không quan tâm, vậy tại sao chúng ta phải?". Biết những gì nhân viên bạn thực sự muốn nói? "... Nhưng tôi rất quan tâm, vì vậy tôi cần phải đến một nơi nào đó". Những người xấu đã không quan tâm, vì vậy họ vẫn ở văn phòng của bạn. Bạn PHẢI loại bỏ những người làm tổn thương năng suất, nhiều hơn những gì họ đóng góp. Đây không phải là một lựa chọn được xem nhẹ, tuy nhiên nó thực sự là một dòng rõ ràng, không hành động là một hành động rõ ràng.
JM Becker

13

Chúng tôi không thể trả lời phần rộng hơn của câu hỏi của bạn. Cụ thể, bạn nên giữ lại hoặc sa thải nhân viên đó. Việc sa thải một nhân viên là khó khăn, nhưng đó là một quyết định ngoài tầm nhìn của một cộng đồng như thế này.

Bạn đã cập nhật câu hỏi của mình để hạn chế câu trả lời cho các lập trình viên C ++. Đối với nền tảng / trình độ của tôi: Tôi đã cắt răng bằng C và tôi có thể viết mã bằng C ++, C # và Java. Và tôi thích theo đuổi các điều kiện chạy đua giữa các chủ đề bởi vì tôi nghĩ nó rất vui. Vâng, tôi "có được" một chút.

Câu trả lời và quyết định của bạn xoay quanh vấn đề này: Việc ai đó có thể thay đổi hay không phụ thuộc vào từng cá nhân và liệu họ có muốn thay đổi hay không.

Nhưng hãy bắt đầu với một số câu hỏi của bạn:

  1. Bạn đã hỏi anh ấy về mã và ví dụ bạn đề cập? Ấn tượng của ông về đánh giá là gì?
  2. Bạn đã cung cấp cho anh ấy thông tin cụ thể trong 6 tháng đó về việc hiểu thao tác bộ nhớ và đảm bảo mã của anh ấy không bị rò rỉ bộ nhớ?
  3. Bạn có cung cấp thông tin phản hồi hợp lý thường xuyên trong 6 tháng đó để cho biết liệu anh ấy có tiến bộ hay không.
  4. Bạn đã rõ ràng gọi ra rằng cách mã hóa cũ của anh ấy không còn được chấp nhận trong mã mới?

Bạn cần chắc chắn rằng bạn có thể nói có với tất cả những câu hỏi đó. Nếu không, vẫn còn một gánh nặng chứng minh từ phía bạn để liên lạc với anh ấy.

Phản hồi của anh ấy về đánh giá gần đây của bạn sẽ là phần đáng nói nhất.

Nếu anh ấy đang cố gắng, và cho thấy một số dấu hiệu tiến bộ thì có lẽ bạn cần xem lại quá trình cố vấn của mình. Nếu có bất cứ điều gì, có lẽ bạn cần xem xét việc ghép anh ta với một lập trình viên giàu kinh nghiệm hơn để anh ta có thể nhận được một số phản hồi ngay lập tức trong khi anh ta đưa ra quyết định thiết kế. Tôi không phải là một fan hâm mộ của lập trình cặp, nhưng nó có thể rất hữu ích trong trường hợp như thế này. Liên tục gửi anh ta đi để sửa đổi ngày càng nhiều mã cũ không phải là một lộ trình thực tế cho việc học.

Nếu anh ấy không cố gắng, thì bạn cần hiểu động lực của anh ấy tốt hơn. Có phải anh không hiểu rằng anh cần phải cố gắng hơn nữa? Có phải anh chỉ không quan tâm? Có những lĩnh vực khác trong đội nơi các kỹ năng của anh ấy sẽ phù hợp hơn và anh ấy quan tâm đến điều đó hơn? Nếu anh ấy không quan tâm để thử, thì bạn cần phải hiểu tại sao.

Từ đó, bạn sẽ biết liệu anh ấy có muốn thay đổi hay không và liệu anh ấy có thể thay đổi hay không. Không mong muốn thay đổi tương đương với việc không thể thay đổi. Nếu có mong muốn và một mức độ tiến bộ, thì hãy cân nhắc mạnh mẽ thay đổi cách bạn đang cố gắng phục hồi anh ấy.


1
+1 cho "Liên tục gửi anh ta đi để thực hiện nhiều sửa đổi hơn cho mã cũ không phải luôn luôn là một lộ trình thực tế cho việc học"
Bill

+1 cho các đoạn cuối. Tiến bộ đạt được bởi ai đó so với nỗ lực đầu tư vào việc hướng dẫn rằng cả hai người cần phải tham gia vào bất kỳ phán xét nào về hiệu suất.
Marjan Venema

10

Tôi sợ mã xấu của anh ấy không phải là vấn đề duy nhất trong nhóm của bạn.

  1. Ai xem lại mã của mình? Tại sao anh ta trượt đi mà không có một cảnh báo cho việc chấp nhận mã với lỗ hổng rò rỉ bộ nhớ?
  2. Tại sao các bài kiểm tra căng thẳng không tìm thấy vấn đề này? Bạn có sử dụng chúng? Nếu có, thì tại sao họ không làm việc?
  3. Anh ta bị bỏ mặc trong một thời gian dài. Tại sao?
  4. Anh ta không sử dụng các công cụ mà bạn đã cho anh ta. Làm thế nào bạn thúc đẩy anh ấy bắt đầu sử dụng các công cụ thích hợp?

Bạn nói rằng anh ấy đã ở trong công ty trong thời gian dài. Bắn một người như vậy hiếm khi là một ý tưởng tốt (trừ khi anh ta là một nhân viên kiểu Wally). Kiến thức của họ về nhu cầu của khách hàng, sản phẩm bạn sở hữu, v.v ... thường có giá trị hơn nhiều so với mã họ viết.

Các giải pháp:

  • chuyển anh ta đến QA để cho anh ta biết những điều cần tránh
  • ghép lập trình với người có thể chỉ ra lỗi của mình
  • nỗ lực mở rộng QA về mã của mình
  • làm cho anh ta viết các bài kiểm tra căng thẳng, nếu anh ta thấy máy dev của mình bị hỏng sau khi tạo và phá hủy 10k đồ vật, anh ta sẽ học
  • một vài / tất cả trong số họ ở trên :)

3

Đưa ra quyết định sa thải bất cứ ai là một quyết định khó khăn cho bất cứ ai đưa ra. Tình huống của bạn mặc dù được kết hợp bởi một số yếu tố:

  1. Có vẻ như nhà phát triển này đã ở trong công ty được vài năm
  2. Nhà phát triển viết tất cả các mã C ++ của công ty
  3. Có vẻ như trước đây bạn không ai từng thảo luận về mức độ mã kém với nhà phát triển
  4. Là người quản lý mới, bạn không biết ai / nhà phát triển biết gì về / về công ty và sự phân nhánh chính trị của việc sa thải nhà phát triển là gì

Điều đó nói rằng bạn đã dành 6 tháng qua cho nhà phát triển biết lỗi của anh ta và mã mới của anh ta vẫn chưa được cải thiện.

Ở giai đoạn này, bạn thực sự cần bắt đầu một số quản lý chủ động để trong vòng 3 tháng bạn có

  • Một lập trình viên C ++ đàng hoàng, người biết mình đang làm gì

hoặc là

  • Chấm dứt nhà phát triển.

Để làm điều này mặc dù bạn cần phải ngồi lại với nhà phát triển, giải thích những gì sai trong văn bản / email, giải thích cách nhà phát triển có thể cải thiện và nói rất rõ rằng nếu cải thiện dự kiến ​​không thành hiện thực thì anh ta sẽ bị chấm dứt trong 3 tháng.

Bạn cũng cần phải rất rõ ràng rằng sự cải thiện được mong đợi từ thời điểm này đối với phần còn lại của công việc của anh ấy với công ty và không chỉ trong giai đoạn 3 phút!

Bạn cũng nên thông báo cho người quản lý của riêng bạn và Phòng nhân sự (nếu có).

Trong quá trình này, bạn sẽ phải chủ động quản lý nhà phát triển và xem xét các nhiệm vụ / mã mỗi 1-2 ngày và đảm bảo chúng không bị trầy xước, nêu chi tiết những điều không phải và giải thích những gì có thể được thực hiện để cải thiện chúng.


1

Hoặc là bạn chưa rõ về mức độ nghiêm túc của bạn đối với tay nghề kém của anh ấy (nghĩa là anh ấy có thể thấy thời gian bạn dành cho anh ấy như một lựa chọn nếu anh ấy muốn cải thiện hơn là một điều cần thiết tuyệt đối), hoặc anh ấy có một điều cực kỳ tồi tệ thái độ đó không bền vững. Nếu nhà phát triển này chưa rõ ràng về vấn đề của mình đối với vấn đề này, thì nó cần phải được giải thích (giả sử lãnh đạo của bạn đồng ý với quyền hạn của bạn chấm dứt). Cú sốc hy vọng sẽ mang lại sự thay đổi.

Quyết định việc làm có ý nghĩa rộng hơn nhiều so với chỉ anh chàng này, bạn cần xem xét tác động lên nhóm. Nếu thái độ của anh ta được cho phép thịnh vượng, nó có thể mang lại sự phẫn nộ từ người khác hoặc khiến người khác cảm thấy rằng điều này cũng ổn. Tuy nhiên, từ góc độ của đội, phải hoàn toàn rõ ràng rằng nếu anh ấy ra đi, đó là lý do đúng đắn và anh ấy có nhiều cơ hội để cải thiện.

Một viên ngọc tôi nhặt được trong một khóa học trở lại là thực tế là những người có kiến ​​thức kỹ thuật mà người khác không có có thể khiến ban lãnh đạo cho họ chùng bước. Thật tệ cho đội. Bạn có thể sợ mất nhà phát triển c ++ duy nhất, nhưng chúng có thể được thay thế. Rõ ràng có những rủi ro cố hữu nếu anh ta biết rõ các sản phẩm được phát hành, nhưng thường thì tôi đã thấy những người có kiến ​​thức về sản phẩm / kỹ thuật dường như không thể thay thế dễ dàng thay thế hơn dự đoán. Các nhóm và tổ chức thường có thể lấp đầy những khoảng trống ban đầu có vẻ khó lấp đầy. Tất nhiên, nếu anh ta không có kỹ năng c ++ hoặc kiến ​​thức cụ thể về tổ chức mà bạn nghĩ sẽ khó thay thế, thì sẽ có ít vấn đề hơn!


1
Tôi nghi ngờ anh chàng này sẽ hoàn toàn lúng túng khi biết rằng người quản lý của anh ta đang nghĩ đến việc sa thải anh ta. Một số người bạn chỉ cần đánh vào đầu bằng một tấm ván và thẳng thừng nói với họ rằng họ phải cải thiện nếu không họ sẽ bị sa thải.
HLGEM

0

Tất nhiên bạn không nên. Hãy nhớ rằng, đây không phải là một tổ chức từ thiện, bạn đang đổi tiền cho công việc. Nếu anh ta không giữ được thỏa thuận của mình thì giống như bất kỳ giao dịch nào tôi sẽ ngừng thanh toán.


-1

Nếu bạn muốn cho anh ta cơ hội, hãy phát triển một bài kiểm tra tiêu chuẩn để thu thập các số liệu về rò rỉ bộ nhớ. Theo dõi tiến trình của anh ấy hàng tuần, khăng khăng muốn xem mã mà anh ấy đã thay đổi và tìm kiếm sự cải thiện. Nếu anh ta không thể xoay xở được vào thời điểm đó, hãy sa thải người vô dụng.

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.