Đồng nghiệp của tôi không hiểu những thứ anh ấy làm việc cùng. Phải làm sao [đóng cửa]


13

Tôi đã dành 3 ngày để gỡ lỗi một lỗi rất khó hiểu trong thư viện do đồng nghiệp của tôi tạo ra, lỗi này xảy ra rất không thường xuyên. Sau tất cả, tôi thấy rằng lỗi này xảy ra do truy cập đa luồng vào một đối tượng mà không có bất kỳ khóa nào. Trên thực tế đây không phải là một lỗi đầu tiên của loại này, đã có những lỗi tương tự trước đây. Anh ta chỉ chạy các bài kiểm tra đơn vị của mình, và nếu một cái gì đó thất bại đặt một nơi khóa. Và nếu không có gì thất bại, ughm, thì mã của anh ấy là hoàn hảo. Có vẻ như anh ta không có ý tưởng về an toàn luồng. Tôi chắc chắn 100% có nhiều lỗi tương tự chưa xuất hiện. Có vẻ như PM không hiểu nội dung luồng.
Vấn đề là, anh ấy làm việc nhiều thời gian trong công ty hơn tôi. Dù sao, tôi không thể chỉ nói "anh chàng này không đủ năng lực trong lĩnh vực này", bởi vì điều này luôn cho bạn thấy là một "người chơi nhóm xấu", v.v.


Đây là đất nước nào?

Đó là công ty quốc tế.
tika

2
Nếu đó thực sự là một vấn đề lớn và bạn chắc chắn 100% rằng đồng nghiệp của mình đang phạm sai lầm, điều đầu tiên là phải lịch sự chỉ ra điều đó theo cách mà anh ta không bị đe dọa. Điều thứ hai là, nếu đồng nghiệp của bạn không lắng nghe, chỉ là để chỉ ra những thiệt hại tiềm tàng bằng tiền mặt. Đó là những gì tất cả các nhà quản lý lắng nghe, và rất cẩn thận về điều đó. Có một vấn đề luồng như bạn mô tả có khả năng rất có hại và trừ khi bạn chắc chắn 100% trong các tuyên bố của mình, hãy tiếp tục với chúng.
NB

Có khả năng thuộc về trang web Quản lý dự án SE.
Bernard

1
Trang web SE Management Management không có thẻ "Đa luồng", câu hỏi này nên có.
RalphChapin

Câu trả lời:


13

Hãy thuyết phục PM rằng để tránh những lỗi như vậy, cần phải cải thiện bí quyết của nhóm về công cụ xâu chuỗi và nói với họ rằng bạn sẵn sàng tổ chức một cái gì đó như hội thảo hoặc thuyết trình về nó. Đừng biến nó thành chuyện cá nhân giữa bạn và đồng nghiệp.


Tôi sợ điều này sẽ không được chào đón bởi anh chàng đó, bởi vì ông nghĩ rằng ông chuyên nghiệp trong lĩnh vực này (và có thể dạy cho tất cả mọi người mình). Nhưng tôi có thể thử.
tika

À đúng, và một vấn đề lớn - tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi, tôi nói không tốt lắm.
tika

Nếu cả đồng nghiệp và PM của bạn có kiến ​​thức hạn chế về luồng và an toàn luồng, thì đào tạo chắc chắn là cách tiếp cận tốt nhất. Đó không phải là sự bất tài của một chàng trai - đó là vấn đề của đội.
boisvert

1
Một hội thảo là một cái gì đó mà tất cả các bạn có thể đưa vào kiến ​​thức của họ, và tất cả các bạn nên học một cái gì đó từ nó. Nếu đồng nghiệp của bạn nghĩ rằng anh ta biết điều gì đó về việc xâu chuỗi, có lẽ bạn cũng có thể học được một số điều từ anh ta.
Doc Brown

8

Viết một bài kiểm tra đơn vị cho thấy lỗi và yêu cầu anh ta sửa nó.


1
Ông đã nhận ra lỗi này. Anh ta không thể tìm thấy lý do.
tika

Bạn đã không tìm thấy lý do trong phiên gỡ lỗi ba ngày? Hay tôi đọc câu hỏi của bạn không chính xác?

1
@scarfridge Phụ thuộc vào nền tảng. Đối với Java, bạn có thể sử dụng công cụ mã byte hoặc lập trình hướng Aspect để chèn một sự chờ đợi chính xác nơi xảy ra sự cố, (hoặc sử dụng JVMTI để kiểm soát việc thực thi). Có thể làm được!

1
Đó không chỉ là vấn đề của trình tự. Nhiều yếu tố khác có liên quan - lõi nào thực thi mã, khi xảy ra GC và cách nó di chuyển các đối tượng, cách thay đổi được lan truyền từ bộ đệm của lõi này sang bộ đệm khác, v.v.
tika

1
Trên thực tế, đó chỉ là một tập hợp các phương thức gọi lặp đi lặp lại hàng tỷ lần. Nhưng điều này không quan trọng lắm. Lý do thực sự là truy cập vào một đối tượng từ điển từ 2 luồng không khóa (tức là không có rào cản bộ nhớ). Chủ đề A tạo ra nó, chủ đề B đọc nó.
tika

4
  • Đó là công việc của một nhà phát triển cao cấp để xem xét mã của anh ấy và đề xuất cải tiến.
  • Bạn không ở đó để kiểm tra sau khi anh ấy làm việc, cá nhân tôi sẽ ghét nếu ai đó kiểm tra lại tất cả các thay đổi của tôi để xem có gì bị hỏng không
  • Nếu anh ta không chấp nhận lời khuyên của bạn, thì đó là công việc của PM để khắc phục vấn đề giao tiếp.
  • Vấn đề luồng trong một bài kiểm tra đơn vị làm cho tôi tự hỏi liệu thử nghiệm này thực sự là một thử nghiệm đơn vị, chứ không phải là thử nghiệm tích hợp hoặc thành phần.

Tôi hiểu ý của bạn Chấp hành mệnh lệnh của bạn.
tika

2
Có vấn đề gì nếu một bài kiểm tra cho thấy một vấn đề được gọi là "kiểm tra đơn vị" hoặc "kiểm tra tích hợp"? Toàn bộ tình hình vẫn như cũ.
Doc Brown

1
Mối quan tâm của tôi là đồng nghiệp của anh ta có thể không biết sự khác biệt giữa bài kiểm tra đơn vị và thành phần, do đó có thể cần phải đào tạo thêm để giải quyết vấn đề này.
CodeART

@CodeRush - Tôi cho rằng bạn không tin vào đánh giá ngang hàng? Điều gì khiến bạn thực sự đánh giá cao việc ai đó đang kiểm tra lại mã của bạn (trái ngược với sự cố chỉ trong sản xuất)?

Tôi có ý tưởng, nhưng tôi chưa thấy nó hoạt động hiệu quả trong các công việc trước đây của tôi. Tôi nghĩ rằng đánh giá của một nhà phát triển cao cấp là một cơ chế phản hồi tốt hơn.
CodeART

-5

Tôi nghĩ rằng công ty của bạn không nên sử dụng đa luồng.

Sau khi thực hiện một dự án đa luồng, tôi thấy có hai kỹ thuật rất quan trọng để khiến mọi thứ hoạt động. Đầu tiên , mã phải được viết đúng. Mỗi trường phải được kiểm tra thủ công để đảm bảo nó được khai báo đúng và được đồng bộ hóa bất cứ nơi nào được tham chiếu. (Cảnh báo:. Tôi đơn giản hóa mọi thứ một chút ở đây để giữ cho trả lời ngắn gọn của tôi - hoặc tại bất kỳ tỷ lệ, ngắn hơn) Thứ hai , mã phải được kiểm tra bằng cách chạy nó ra bằng phẳng trên đơn đa lõi máy - nhiều phút sử dụng 100% của từng lõi. (Và nếu nó chỉ sử dụng 2% cho mỗi lõi, như nó thường làm với tôi, thì đó cũng là một lỗi.)

Bạn có thể quản lý việc này, nhưng tổ chức của bạn thì không thể. Ngay cả khi họ hiểu vấn đề mà họ không có, họ cũng không có chuyên môn.

Hầu hết các ngôn ngữ cung cấp cách để tránh điều này. Nếu bạn có một đầu đọc ổ cắm, thường có luồng riêng, hãy lấy thông tin đến luồng chính càng nhanh và đơn giản càng tốt. Tốt hơn nữa, hãy tìm các lớp / hàm hệ thống sẽ xử lý phần chủ đề của việc đọc cho bạn. Lần lượt sử dụng một hàng đợi chạy "sự kiện", giống như hầu hết các API GUI. (Sử dụng chính hàng đợi sự kiện của API GUI, cho vấn đề đó.) Nếu bạn cần xử lý song song, có thể bạn có thể tìm thấy một loại "luồng công nhân" nào đó sẽ cho phép bạn giữ dữ liệu / trường trong một luồng, xử lý tất cả các lần chuyển cho bạn.

Nhấn mạnh đến tất cả những nguy hiểm của đa luồng. (Câu chuyện đáng sợ: Lỗi yêu thích của tôi liên quan đến một vài dòng như : int i = 5; i = i * i;, dẫn đến icó giá trị 35. Một điều tôi thấy rất nhiều là: if (thing != null) thing.reset();ném ngoại lệ con trỏ null.) Tôi nghĩ hy vọng duy nhất của bạn là khiến họ hiểu họ bước vào một thế giới hoàn toàn mới, kỳ lạ và có lẽ họ nên lùi một bước lớn.

Tôi không chắc chắn nên xử lý đa luồng như thế nào . Nếu công việc có thể được trao cho một người, và mọi thứ họ làm sẽ bị vứt đi nếu họ thất bại, tốt thôi. Nhưng một nhóm sẽ chỉ mạnh bằng thành viên yếu nhất của mình và ngay cả một lập trình viên giỏi cũng sẽ gặp rắc rối với đa luồng toàn diện. Tôi hy vọng ngôn ngữ mọi người sẽ tìm ra cách để làm cho nó an toàn. Tôi đã thấy một số phần mềm hữu ích ngoài kia. Nhưng tôi nghĩ tốt nhất nên tránh đa luồng trừ khi thời gian thực hiện là rất quan trọng một lập trình viên giỏi hoặc một nhóm đã được chứng minh là có sẵn.


2
Bạn không biết công ty đó là gì, hoặc họ đang làm gì, vì vậy nhận xét "Bạn có thể quản lý việc này, nhưng tổ chức của bạn không thể" là một điều không có cơ sở - đối với tất cả những gì bạn biết, tika có thể làm việc tại Microsoft . Dù họ là ai, đa luồng cũng có thể là cách tốt nhất để giải quyết vấn đề của họ; có rất nhiều tình huống mà nó phù hợp. Và đặt tất cả những điều đó sang một bên, câu hỏi không phải là về đa luồng, mà là về việc xử lý một đồng nghiệp đang gây ra vấn đề do thiếu chuyên môn.
anaximander

@anaximander: Đa luồng tạo ra các lỗi rất khó sinh sản và rất khó theo dõi. Để sản xuất phần mềm MT có thể sử dụng, có thể sửa chữa, tối thiểu, bạn sẽ cần có các lập trình viên và quản lý nhận thức được các mối nguy hiểm. Tổ chức của Tika rõ ràng không thể xử lý việc này. Tôi đã thấy người kiểm tra / QA buộc các lập trình viên viết mã âm thanh bằng cách kiểm tra nhiều và yêu cầu sửa lỗi cho mọi lỗi. Điều đó không làm việc với MT. Nếu đồng nghiệp thiếu khả năng, sự quan tâm và động lực, hãy xử lý anh ta bằng cách giữ anh ta tránh xa MT.
RalphChapin

@anaximander: Bạn phải có trải nghiệm tốt hơn với Microsoft so với tôi đã có. Mặc dù công bằng, tôi chưa bao giờ thấy bất cứ thứ gì trông giống như một lỗi khác nhau từ họ. ....Và cám ơn các bình luận.
RalphChapin

1
Bất kể, khi câu hỏi là "làm thế nào để tôi xử lý một đồng nghiệp thiếu chuyên môn?", Tôi không nghĩ rằng "công ty của bạn đang xây dựng phần mềm sai" là một câu trả lời hợp lệ. Trong bất kỳ tổ chức nào, dù rộng lớn và hiểu biết đến đâu, sẽ luôn có những người có lỗ hổng kiến ​​thức. Không biết tổ chức là ai hoặc phần mềm đang làm gì, tôi không nghĩ bạn có thể đưa ra phán quyết rằng công ty không biết họ đang làm gì, hoặc vấn đề của họ có thể được giải quyết mà không cần đa luồng.
anaximander
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.