Làm thế nào để sửa một đàn em, nhưng khuyến khích anh ta tự suy nghĩ? [đóng cửa]


54

Tôi là trưởng nhóm nhỏ, nơi mọi người có ít hơn một năm kinh nghiệm phát triển phần mềm. Tôi sẽ không tự gọi mình là một chuyên gia phần mềm, nhưng tôi đã học được một vài điều trong vài năm mà tôi đã viết phần mềm.

Khi chúng tôi đánh giá mã, tôi thực hiện một chút công bằng trong việc giảng dạy và sửa chữa sai lầm. Tôi sẽ nói những điều như "Điều này quá phức tạp và phức tạp, và đây là lý do tại sao" hoặc "Bạn nghĩ gì về việc chuyển phương thức này vào một lớp riêng biệt?" Tôi đặc biệt cẩn thận để thông báo rằng nếu họ có thắc mắc hoặc không đồng ý, điều đó ổn và chúng ta cần thảo luận. Mỗi lần tôi sửa một ai đó, tôi lại hỏi "Bạn nghĩ gì?" hoặc một cái gì đó tương tự.

Tuy nhiên, họ hiếm khi không đồng ý hoặc hỏi tại sao. Và gần đây tôi đã nhận thấy những dấu hiệu trắng trợn hơn rằng họ đồng ý một cách mù quáng với những tuyên bố của tôi và không hình thành ý kiến ​​của riêng họ.

Tôi cần một đội ngũ có thể học cách làm mọi thứ một cách tự chủ, không chỉ làm theo hướng dẫn. Làm thế nào để sửa một nhà phát triển cơ sở, nhưng vẫn khuyến khích anh ta tự suy nghĩ?

Chỉnh sửa: Đây là một ví dụ về một trong những dấu hiệu rõ ràng rằng chúng không hình thành ý kiến ​​của riêng mình:

Tôi: Tôi thích ý tưởng của bạn về việc tạo một phương thức mở rộng, nhưng tôi không thích cách bạn truyền một lambda phức tạp lớn như một tham số. Lambda buộc những người khác biết quá nhiều về việc thực hiện phương pháp.

Junior (sau khi hiểu lầm tôi): Vâng, tôi hoàn toàn đồng ý. Chúng ta không nên sử dụng các phương thức mở rộng ở đây vì chúng buộc các nhà phát triển khác phải biết quá nhiều về việc triển khai.

Có một sự hiểu lầm, và điều đó đã được xử lý. Nhưng thậm chí không có một OUNCE logic trong tuyên bố của mình! Anh ta nghĩ rằng anh ta đang lấy lại logic của tôi cho tôi, nghĩ rằng nó sẽ có ý nghĩa khi thực sự anh ta không biết tại sao anh ta lại nói điều đó.



4
Tôi sẽ thử sử dụng en.wikipedia.org/wiki/Soc_method không chắc điều này chỉ liên quan đến lập trình
jk.

10
Về việc kết thúc câu hỏi này: trong khi đây có thể không chỉ là khía cạnh lập trình - tôi cảm thấy đây là điều mà nhiều người phải đối mặt. Đây là một câu hỏi thực sự. Tôi mạnh mẽ bỏ phiếu để giữ cho nó mở.
Dipan Mehta

3
Có lẽ một câu hỏi thích hợp hơn: "làm thế nào để bạn sửa lỗi cấp cao của bạn?"
William Pursell

2
@WilliamPursell Đẹp. Tôi sẽ thích nó nếu họ sửa chữa tôi.
Phil

Câu trả lời:


37

Câu trả lời ngắn:

Thu hút họ (đặt câu đố trong tâm trí họ), trao quyền cho họ (tin tưởng vào câu trả lời của họ).


Đó là câu hỏi thúc đẩy chúng tôi! - Ma trận.

Nói chung, theo quan sát của tôi, rằng đàn em có thế giới riêng - cái nhìn hạn chế của riêng chúng về cách chúng suy nghĩ và một phần nào đó là sự nhiệt tình / yêu thích / ý kiến ​​của chúng về mọi thứ.

Không có gì sai khi nói với họ rằng bạn sai - nhưng tốt nhất là bạn khiến họ phải suy nghĩ. Tại sao? Có cách nào khác không? Có cách nào tốt hơn để làm điều tương tự? Một trong những giai thoại tôi luôn sử dụng là - "Hãy cho tôi ba giải pháp (cho vấn đề này)!"

Đến khi họ nghĩ về những giải pháp này, họ bắt đầu nhận ra nhiều vấn đề. Nó đòi hỏi họ đầu tư thời gian - nhưng theo thời gian họ có xu hướng hình dung ra những hạn chế và thiếu sót trong suy nghĩ của họ. Họ bắt đầu thấy điều đó nhiều hơn là "Tôi không nghĩ về nó!" sẽ tốt hơn nhiều so với việc về nhà với cảm giác rằng "tôi đã sai!" hoặc thậm chí tệ hơn "Tôi đã nói / chứng minh là sai ngay cả khi tôi có quan điểm hợp lệ" .

Nhìn chung, trẻ nhỏ sẽ có xu hướng lão luyện hơn liên quan đến các vấn đề kỹ thuật (chẳng hạn như mẫu thiết kế nào hoạt động tốt hơn!) Về các vấn đề quy trình , nhưng theo thời gian khi bạn huấn luyện chúng, nó sẽ hoạt động.


Tuy nhiên, họ hiếm khi không đồng ý hoặc hỏi tại sao. Và gần đây tôi đã nhận thấy những dấu hiệu trắng trợn hơn rằng họ đồng ý một cách mù quáng với những tuyên bố của tôi và không hình thành ý kiến ​​của riêng họ.

Đây thường là một kết quả mà bạn thực hiện theo đề xuất của họ nhưng sau đó đã ghi đè lên chúng và chúng không thuyết phục như nhau về quan điểm của bạn; chỉ vì bạn là đàn anh mà họ đang tránh đánh nhau!

Điều tốt nhất tôi học được từ một trong những ông chủ trước đây của mình: Anh ấy sẽ yêu cầu các thành viên trong nhóm tranh luận trước (họ cảm thấy khá bình đẳng ở đây), và hy vọng sau khi tất cả các cuộc tranh luận đã hết, anh ấy sẽ vào phòng chỉ với một câu hỏi - " những điểm bất đồng? " - Vấn đề là, mọi người luôn thích tham gia vào các cuộc tranh luận và thảo luận, nhưng nếu các điểm (hợp lệ) của họ không được đưa ra để hành động vào lần tới thì họ cảm thấy không đáng để tham gia thảo luận.

Không chỉ trong phần mềm, mà ở khắp mọi nơi, cuối cùng chỉ có những đồng đội được trao quyền nhiều nhất mới dám trả lời chứ đừng nói đến hệ thống.


1
+1 - Tôi đặc biệt thích "Đây thường là kết quả mà bạn thực hiện theo đề xuất của họ nhưng sau đó đã ghi đè lên họ và họ không thuyết phục như nhau về quan điểm của bạn; chỉ vì bạn là cấp cao nên họ đang tránh đánh nhau!" vì đó là cách tôi cảm thấy hiện tại.
Jetti

1
Vâng, tôi đã ở đó. Mối quan tâm / vấn đề của bạn ngày càng bị bỏ qua, vì vậy bạn cuối cùng chỉ không bận tâm tham gia, và rồi cuối cùng bạn xem đồng hồ - chờ ngày kết thúc. Các ông chủ: Hãy thật cẩn thận để bạn khuyến khích và nhận ra thành công, và đừng chỉ ra những sai lầm!
Django Reinhardt

26

Nếu bạn muốn đàn em tự suy nghĩ, đừng sửa chúng: hãy để chúng tự sửa .

Thay vì nói với họ những gì bạn nghĩ là sai về giải pháp của họ, hãy hỏi họ những câu hỏi thích hợp về nó. Trong ví dụ của bạn, bạn có thể hỏi họ về những gì mà ai đó sử dụng phương thức mở rộng sẽ cần biết để tạo lambda. Tiếp tục đặt câu hỏi như vậy cho đến khi họ cho rằng đó là một vấn đề. Bằng cách đó, bạn biết rằng họ đã hiểu tại sao giải pháp của họ có thể là một vấn đề và hơn nữa có nhiều khả năng học hỏi từ nó - nếu bạn chỉ đơn giản nói với họ rằng giải pháp của họ là sai, đó là một phán đoán bên ngoài và dễ dàng bị bỏ qua. Nếu họ tự mình nhận ra (với một chút gợi ý), họ sẽ nhận ra nó có căn cứ tốt như thế nào và có nhiều khả năng học hỏi từ sai lầm của họ.

Ngoài ra, điều này mang đến cho đàn em của bạn cơ hội bảo vệ thiết kế của họ - có lẽ họ đã nghĩ đến vấn đề và có một lời biện minh tốt giải quyết mối quan tâm của bạn, có nghĩa là bạn không cần phải sửa chữa gì. Điều đó làm giảm bất kỳ nhận thức nào (tuy nhiên không chủ ý) mà bạn đang cai trị bởi fiat điều hành.


7

Vì bạn có nhiều nhà phát triển cơ sở thực hiện đánh giá mã theo nhóm chứ không phải 1 1 1.

Mở bằng cách hỏi nhóm "Làm thế nào khác có thể giải quyết vấn đề?", Và cho phép các nhà phát triển cơ sở khác đề xuất triển khai trước. Chỉ thêm phần triển khai của bạn sau khi các thành viên khác trong nhóm phát biểu và nếu không ai đề xuất điều gì tương tự với ý tưởng của bạn.

Sau đó, có một cuộc thảo luận bàn tròn về những lợi thế và bất lợi tương đối của các triển khai khác nhau với mục đích hướng dẫn các nhà phát triển cơ sở chọn cách thực hiện tốt nhất mà không được cho biết đó là gì.

Là một người xây dựng lòng tin cho các nhà phát triển cơ sở, bạn có thể bắt đầu với một số trường hợp họ chọn những gì bạn nghĩ là lựa chọn tốt nhất và biến người thay thế của bạn thành một người có lỗ hổng nửa rõ ràng và hướng cuộc thảo luận về lý do thực hiện ban đầu là tốt nhất.


3
Tôi không chắc đây là ý tưởng tốt nhất. Tốt hơn nhiều là để mọi người tìm thấy lỗi của mình thay vì công khai hỏi một nhóm tại sao mã của họ không tốt.
Sixty feetersdude

1
@sixtyfootersdude Tôi nghĩ rằng các đánh giá mã sẽ hiệu quả hơn khi được thực hiện theo nhóm vì nó thúc đẩy sự phổ biến kiến ​​thức rộng hơn trong toàn nhóm.
Dan Neely

5

Khi tôi mới bắt đầu làm việc trong một công việc lập trình, tôi đã làm chính xác những gì bạn mô tả: khi được nói về điều gì đó tôi có thể làm, tôi sẽ luôn đồng ý. Chủ yếu là vì tôi không có đủ kinh nghiệm để nói khác.

Điều cho tôi khả năng thực sự thảo luận về phương pháp và ý tưởng là học hỏi từ kinh nghiệm cũng như đọc về các phương pháp khác nhau và công nghệ mới. Để nhóm của bạn tự suy nghĩ, họ cần thực sự biết về những vấn đề có thể phát sinh từ những thứ như mã "quá phức tạp và phức tạp", và cách thực sự duy nhất họ sẽ tìm ra là thông qua kinh nghiệm.

Một cách tốt để tạo điều kiện cho suy nghĩ cá nhân là cho họ xem xét các trang web lập trình như Stack Overflow hoặc Lập trình viên SE. Tôi biết rằng những điều này đã giúp tôi tìm hiểu về các kỹ thuật khác nhau đã có và cho phép tôi thảo luận với các thành viên cao cấp của đội, thay vì mù quáng đồng ý với họ.

Vấn đề là không có kinh nghiệm, các đề xuất từ ​​các thành viên cấp cao sẽ luôn luôn đúng với họ.


Ý tưởng tuyệt vời! Tôi cũng có thể nói thêm rằng một trong những người cố vấn của tôi đã cho tôi một số bài đọc được chỉ định (trong khi tôi đang ở trong chuồng) thực sự giúp mở rộng tâm trí của tôi. Kể từ đó tôi đã đọc hầu hết các lập trình viên (cuốn sách) thực dụng và mọi bài viết trên trang web của Joel.
Sixty feetersdude

5

Sự tương tác từ bài đăng của bạn thể hiện một nguyên tắc quan trọng để dạy hầu hết mọi thứ: yêu cầu họ giải thích những gì họ nghĩ bạn nói và lắng nghe cẩn thận câu trả lời: nó sẽ cho bạn biết chính xác những gì cần được sửa chữa.

Tôi đã đánh cắp một cách đáng xấu hổ sao chép thủ thuật này từ gia sư toán học của tôi khoảng 25 năm trước, và nó đã không làm tôi thất bại kể từ đó. Tôi đã sử dụng nó trong lớp trong thời gian ngắn làm trợ giảng, tại nơi làm việc khi nói về thiết kế phần mềm và với tám tuổi của tôi khi nói về bài tập ở trường của cô ấy.

Tất nhiên bạn không thể luôn thẳng thắn về việc yêu cầu họ lặp lại những gì bạn vừa nói, vì vậy bạn cần điều chỉnh chiến lược của mình. Ví dụ, đây là cách tôi diễn đạt lại câu nói tiếp theo của bạn từ OP dưới dạng câu hỏi "thăm dò":

Tôi thích ý tưởng của bạn về việc tạo một phương thức mở rộng, nhưng tôi không thích cách bạn truyền một lambda phức tạp lớn làm tham số. Bạn có thấy làm thế nào lambda phức tạp này buộc người khác biết quá nhiều điều nhất định về việc thực hiện phương pháp không?

Câu hỏi này là không thể trả lời chính xác mà không hiểu vấn đề mà bạn đang cố gắng làm nổi bật. Tôi thấy rằng việc kết thúc những lời giải thích của mình bằng một câu hỏi đòi hỏi phải phân tích những gì tôi vừa nói sẽ đẩy nhanh quá trình học tập và cho tôi phản hồi rằng tôi cần phải sửa chữa.


5

Thông thường khi mọi người không nói những gì bạn muốn, điều đó có nghĩa là bạn cần phải lắng nghe. Lắng nghe có nghĩa là nghe lý do cho thiết kế của họ trước khi thông qua phán xét. Điều đó có nghĩa là không chỉ nói với họ là không đồng ý, nhưng chứng minh điều đó bằng cách trung thực xem xét những gì họ nói, và không chỉ sửa chúng. Tìm kiếm những điều tốt đẹp về giải pháp của họ và sửa đổi giải pháp của bạn để kết hợp những điều đó.

Bạn cũng cần phải dẫn dắt bằng ví dụ. Tôi không có ý bằng cách viết mã uber-awesome, ý tôi là bằng cách hỏi họ ý kiến ​​của họ về thiết kế của riêng bạn. Đừng chờ đợi đánh giá mã sau khi thực tế, nhưng làm việc cùng nhau trên đường đi. Nói những điều như: "Giao diện của tôi có vẻ quá phức tạp, nhưng tôi không chắc cách tốt nhất để đơn giản hóa nó." Và cho họ thời gian để trả lời mà không thiên vị họ với ý tưởng của riêng bạn trước.


4

Khi tôi phải đối phó với điều này, tôi đã nói (thành thật) những điều như:

Bạn biết đấy, đó là một giải pháp thực sự sáng tạo mà tôi sẽ không bao giờ nghĩ tới. Nó mở rộng như thế nào? / Bạn có nghĩ rằng có một cách tiếp cận đơn giản hơn về mặt khái niệm, để làm cho việc phát triển nhanh hơn hoặc bảo trì dễ dàng hơn không? / Thật không may, tôi không nghĩ rằng nó thực sự phù hợp với phần còn lại của kiến ​​trúc dự án. Cấu hình như thế nào?

Điều này thường là đủ để hướng mọi người theo một hướng mới.


2

Trách nhiệm là một điều có thể giúp họ.

Tôi đã từng dẫn dắt một hoặc hai đội trong quá khứ và một trong những điều khiến đàn em tỏa sáng là gánh nặng trách nhiệm cá nhân. Khi một người nhận ra rằng hành động của anh ta có thể ám chỉ anh ta tại một thời điểm, anh ta / cô ta thường cam kết một chút về bản thân mình trong những gì anh ta làm. Chưa kể rằng khi họ cảm thấy công việc của họ, kết quả tốt sẽ thỏa mãn hơn nhiều.


1

Tôi sẽ không lo lắng quá nhiều về việc họ mù quáng theo dõi bạn, đây là điều họ nên làm khi còn là đàn em. Vấn đề là họ có thể sẽ không hiểu lý do thực sự cho các mục mà bạn xử lý trong các bài đánh giá mã cho đến khi chúng biến mất và làm việc ở một nơi khác có các nhà phát triển phần mềm khủng khiếp, quản lý khủng khiếp và mã khủng khiếp.

Đến lúc đó, họ sẽ học được những thói quen tốt theo thói quen và sẽ phải sống nhờ những lỗi mã hóa và thiết kế mà người khác mắc phải và họ bị buộc phải làm cho giờ họ phải làm việc trên phần mềm được thiết kế và triển khai kém.

Đây sẽ là một tất yếu cuối cùng tại một số điểm trong sự nghiệp của họ. Bạn đang làm cho họ một dịch vụ tuyệt vời bằng cách làm cho họ quen với các tiêu chuẩn và thực hành mã hóa tốt. Thật không may, hầu hết chúng ta đã phải học một cách khó khăn.


1

Dựa trên ví dụ đã cho, tôi sẽ nói theo dõi các bình luận của bạn bằng các câu hỏi có lẽ sẽ là cách tốt nhất để đi. Nếu bạn đặt câu hỏi cùng với ý kiến ​​của bạn, điều đó không khiến họ chỉ đồng ý hoặc không đồng ý, ít nhất họ phải suy nghĩ về cách họ có thể thực hiện điều gì đó.

ví dụ: "Tôi thích ý tưởng của bạn về việc tạo một phương thức mở rộng, nhưng tôi không thích cách bạn truyền một lambda phức tạp lớn như một tham số. Lambda buộc người khác biết quá nhiều về việc triển khai phương thức. thực hiện phương pháp mở rộng này mà không tiết lộ nhiều thông tin? "

Điều này cho phép họ nhìn thấy những lỗi trong những gì họ đang phát triển đồng thời cho họ cơ hội giải quyết vấn đề mà họ đưa vào ứng 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.