เพื่อนร่วมงานของฉันไม่เข้าใจสิ่งที่เขาทำงานด้วย จะทำอย่างไร? [ปิด]


13

ฉันใช้เวลา 3 วันในการดีบักข้อบกพร่องที่คลุมเครือมากในห้องสมุดที่ทำโดยเพื่อนร่วมงานของฉันข้อผิดพลาดนี้เกิดขึ้นไม่บ่อยนัก หลังจากทั้งหมดฉันพบว่าข้อผิดพลาดนี้เกิดขึ้นเนื่องจากการเข้าถึงข้ามด้ายไปยังวัตถุโดยไม่ต้องล็อคใด ๆ อันที่จริงนี่ไม่ใช่ข้อผิดพลาดแรกของประเภทนี้มีข้อบกพร่องที่คล้ายกันมาก่อน เขาเพียงแค่ทำการทดสอบหน่วยของเขาและถ้ามีอะไรบางอย่างล้มเหลวก็ทำให้ล็อค และถ้าไม่มีอะไรผิดพลาดอืมรหัสของเขาก็สมบูรณ์แบบ ดูเหมือนว่าเขาไม่มีความคิดเกี่ยวกับความปลอดภัยในการทำเกลียว ฉันแน่ใจว่า 100% มีข้อบกพร่องที่คล้ายกันมากมายที่เพิ่งยังไม่โผล่ขึ้นมา ดูเหมือนว่า PM จะไม่เข้าใจสิ่งที่ทำเกลียวด้วย
ปัญหาคือเขาทำงานใน บริษัท มากกว่าที่ฉันทำ อย่างไรก็ตามฉันไม่สามารถพูดได้ว่า "ผู้ชายคนนี้ไร้ความสามารถในพื้นที่นี้" เพราะสิ่งนี้จะแสดงให้คุณเห็นว่าเป็น "ผู้เล่นทีมที่แย่" ฯลฯ


ประเทศนี้คืออะไร

เป็น บริษัท ระหว่างประเทศ
tika

2
หากเป็นปัญหาใหญ่จริง ๆ และคุณมั่นใจ 100% ว่าเพื่อนร่วมงานของคุณทำผิดสิ่งแรกคือการชี้ให้เห็นอย่างสุภาพในแบบที่เขาไม่ถูกคุกคาม สิ่งที่สองคือถ้าเพื่อนร่วมงานของคุณไม่ฟังเป็นเพียงเพื่อชี้ให้เห็นความเสียหายที่อาจเกิดขึ้นในรูปของเงินสด นั่นคือสิ่งที่ผู้จัดการทุกคนฟังและอย่างระมัดระวังมาก มีปัญหาเกลียวเช่นคุณอธิบายอาจเป็นอันตรายมากและถ้าคุณไม่แน่ใจ 100% ในงบของคุณไปข้างหน้ากับพวกเขา
NB

มีแนวโน้มเป็นของไซต์Project Management SE
เบอร์นาร์ด

1
ไซต์ Project Management SE ไม่มีแท็ก "Multithreading" ซึ่งคำถามนี้ควรมี
RalphChapin

คำตอบ:


13

โน้มน้าวให้ PM ทราบว่าเพื่อหลีกเลี่ยงข้อผิดพลาดดังกล่าวความรู้ของทีมเกี่ยวกับการทำเกลียวควรได้รับการปรับปรุงและบอกพวกเขาว่าคุณยินดีจัดระเบียบบางอย่างเช่นการประชุมเชิงปฏิบัติการหรือการนำเสนอเกี่ยวกับเรื่องนี้ อย่าทำให้เป็นเรื่องส่วนตัวระหว่างคุณกับเพื่อนร่วมงาน


ฉันกลัวว่าผู้ชายคนนี้จะไม่ได้รับการต้อนรับเพราะเขาคิดว่าเขาเป็นมืออาชีพในด้านนี้ (และสามารถสอนทุกคนได้) แต่ฉันสามารถลอง
tika

อ่าใช่และปัญหาใหญ่อย่างหนึ่ง - ภาษาอังกฤษไม่ใช่ภาษาแม่ของฉันฉันพูดไม่ค่อยเก่ง
tika

หากทั้งเพื่อนร่วมงานและ PM ของคุณมีข้อ จำกัด ในการทำเกลียวและความปลอดภัยของเกลียวการฝึกอบรมเป็นวิธีที่ดีที่สุด ไม่ใช่ความสามารถของผู้ชายคนหนึ่ง - เป็นความสามารถของทีมที่เป็นปัญหา
boisvert

1
การประชุมเชิงปฏิบัติการเป็นสิ่งที่ทุกคนสามารถเรียนรู้ได้และทุกคนควรเรียนรู้จากมัน หากเพื่อนร่วมงานของคุณคิดว่าเขารู้อะไรบางอย่างเกี่ยวกับการทำเกลียวคุณอาจเรียนรู้บางอย่างจากเขาได้เช่นกัน
Doc Brown

8

เขียนการทดสอบหน่วยที่แสดงข้อผิดพลาดและขอให้เขาแก้ไข


1
เขาได้ตระหนักถึงข้อผิดพลาดนี้แล้ว เขาไม่สามารถหาเหตุผลได้
tika

คุณไม่พบเหตุผลในช่วงดีบักสามวันหรือไม่ หรือฉันจะอ่านคำถามของคุณไม่ถูกต้อง?

1
@scarfridge ขึ้นอยู่กับแพลตฟอร์ม สำหรับ Java คุณสามารถใช้เครื่องมือโค้ดไบต์หรือการเขียนโปรแกรมเชิง Aspect เพื่อแทรกการรอว่าปัญหาอยู่ตรงไหน (หรือใช้ JVMTI เพื่อควบคุมการประมวลผล) เป็นไปได้ที่จะทำ!

1
มันไม่ใช่แค่เรื่องของลำดับเท่านั้น ปัจจัยอื่น ๆ อีกมากมายเกี่ยวข้อง - ซึ่งแกนประมวลผลโค้ดเมื่อ GC เกิดขึ้นและวิธีการเคลื่อนย้ายวัตถุการเปลี่ยนแปลงจะถูกถ่ายทอดจากแคชแกนหนึ่งไปยังอีกแกนหนึ่งอย่างไร
tika

1
จริงๆแล้วมันเป็นเพียงชุดของวิธีการโทรซ้ำหลายพันล้านครั้ง แต่มันก็ไม่สำคัญเท่าไหร่ เหตุผลที่แท้จริงคือการเข้าถึงวัตถุพจนานุกรมจาก 2 เธรดโดยไม่ล็อค (เช่นไม่มีอุปสรรคหน่วยความจำ) เธรด A สร้างมัน, เธรด B อ่านมัน
tika

4
  • เป็นหน้าที่ของนักพัฒนาอาวุโสในการตรวจสอบรหัสของเขาและแนะนำการปรับปรุง
  • คุณไม่ได้ไปที่นั่นเพื่อตรวจสอบหลังจากทำงานของเขาฉันจะเกลียดใครถ้ามีคนตรวจสอบการเปลี่ยนแปลงทั้งหมดของฉันอีกครั้งเพื่อดูว่ามีอะไรหักหรือเปล่า
  • หากเขาไม่ยอมรับคำแนะนำของคุณแสดงว่าเป็นหน้าที่ของ PM ในการแก้ไขปัญหาการสื่อสาร
  • ปัญหาเธรดในการทดสอบหน่วยทำให้ฉันสงสัยว่าการทดสอบนี้เป็นการทดสอบหน่วยจริง ๆ แล้วไม่ใช่การรวมหรือการทดสอบส่วนประกอบ

ฉันได้รับความคิดของคุณ เชื่อฟังคำสั่งของคุณ
tika

2
จะเป็นอย่างไรถ้าการทดสอบที่แสดงปัญหาเรียกว่า "การทดสอบหน่วย" หรือ "การทดสอบการรวม" สถานการณ์ทั้งหมดยังคงเหมือนเดิม
Doc Brown

1
ความกังวลของฉันคือเพื่อนร่วมงานของเขาอาจไม่ทราบความแตกต่างระหว่างการทดสอบหน่วยและส่วนประกอบดังนั้นจึงจำเป็นต้องมีการฝึกอบรมเพิ่มเติมเพื่อแก้ไขปัญหานี้
CodeART

@CodeRush - ฉันเอาคุณไม่เชื่อในการตรวจสอบเพื่อน? สิ่งใดที่คุณจะต้องชื่นชมจริง ๆ ว่ามีคนอื่นกำลังตรวจสอบรหัสของคุณอีกครั้ง (ซึ่งต่างจากการทำผิดพลาดในการผลิต)

ฉันได้รับความคิด แต่ฉันไม่ได้เห็นมันทำงานได้อย่างมีประสิทธิภาพในงานก่อนหน้าของฉัน ฉันคิดว่าความคิดเห็นจากนักพัฒนาอาวุโสเป็นกลไกข้อเสนอแนะที่ดีกว่า
CodeART

-5

ฉันคิดว่า บริษัท ของคุณไม่ควรใช้มัลติเธรด

หลังจากทำโครงงานแบบมัลติเธรดจำนวนมากฉันพบว่าสองเทคนิคมีความสำคัญต่อการทำให้สิ่งต่าง ๆ ทำงานได้ ก่อนอื่นต้องเขียนรหัสให้ถูกต้อง ทุกฟิลด์จะต้องตรวจสอบด้วยตนเองเพื่อให้แน่ใจว่ามีการประกาศอย่างถูกต้องและซิงโครไนซ์อย่างเหมาะสมทุกที่ที่อ้างอิง (คำเตือน: ฉันกำลังทำให้สิ่งต่าง ๆ ง่ายขึ้นเล็กน้อยที่นี่เพื่อให้คำตอบของฉันสั้น - หรือในอัตราใดก็ตามสั้นกว่า) ประการที่สองรหัสจะต้องถูกทดสอบโดยการรันมันแบนในเครื่องเดียวและมัลติคอร์ - หลายนาทีโดยใช้ 100% ของแต่ละคอร์ (และถ้าใช้เพียง 2% ของแต่ละคอร์เหมือนที่ทำกับฉันบ่อยนั่นเป็นข้อผิดพลาดด้วย)

คุณอาจจัดการสิ่งนี้ได้ แต่องค์กรของคุณทำไม่ได้ แม้ว่าพวกเขาจะเข้าใจปัญหาที่พวกเขาไม่มีพวกเขาก็ไม่มีความเชี่ยวชาญ

ภาษาส่วนใหญ่มีวิธีการหลีกเลี่ยงปัญหานี้ หากคุณมีเครื่องอ่านซ็อกเก็ตซึ่งมักจะมีเธรดของตัวเองให้รับข้อมูลไปยังเธรดหลักอย่างรวดเร็วและง่ายดายที่สุด ดีกว่ามองหาคลาสระบบ / ฟังก์ชั่นที่จะจัดการเธรดส่วนของการอ่านให้คุณ ใช้คิวที่เรียกใช้ "เหตุการณ์" ที่อยู่ติดกันเหมือนกับ GUI API ส่วนใหญ่ (ใช้คิวเหตุการณ์ของ GUI API เองสำหรับเรื่องนั้น) หากคุณต้องการการประมวลผลแบบขนานคุณอาจพบ "thread ผู้ทำงาน" บางประเภทที่จะช่วยให้คุณเก็บข้อมูล / เขตข้อมูลไว้ในเธรดเดียวจัดการการถ่ายโอนทั้งหมดให้คุณ

เน้นถึงอันตรายทั้งหมดของการทำมัลติเธรด (เรื่องราวที่น่ากลัว: ข้อผิดพลาดที่ชื่นชอบเกี่ยวข้องกับสองบรรทัดเช่น: int i = 5; i = i * i;ซึ่งทำให้iมีค่าเท่ากับ 35. หนึ่งที่ฉันเห็นมากคือ: if (thing != null) thing.reset();การขว้างข้อยกเว้นตัวชี้โมฆะ) ฉันคิดว่าความหวังเดียวของคุณคือทำให้พวกเขาเข้าใจว่าพวกเขาเข้าใจ ก้าวเข้าสู่โลกใหม่ที่แปลกใหม่และบางทีพวกเขาควรก้าวถอยหลังครั้งใหญ่

ฉันไม่แน่ใจว่าจริง multithreading ควรได้รับการจัดการ หากงานสามารถมอบให้กับคนคนหนึ่งและทุกอย่างที่พวกเขาทำไปถ้าพวกเขาล้มเหลวก็ดี แต่ทีมจะต้องแข็งแกร่งพอ ๆ กับสมาชิกที่อ่อนแอที่สุดและแม้แต่โปรแกรมเมอร์ที่ดีก็จะมีปัญหากับการใช้มัลติเธรดที่เต็มเปี่ยม ฉันหวังว่าคนภาษาจะหาวิธีที่จะทำให้มันปลอดภัย ฉันเห็นซอฟต์แวร์ที่เป็นประโยชน์ออกมาแล้ว แต่ฉันคิดว่ามันเป็นการดีที่สุดที่จะหลีกเลี่ยงการทำงานแบบมัลติเธรดเว้นแต่ว่าเวลาดำเนินการเป็นเรื่องสำคัญและมีโปรแกรมเมอร์หรือทีมที่ได้รับการพิสูจน์แล้ว


2
คุณไม่มีความคิดว่า บริษัท คืออะไรหรือกำลังทำอะไรอยู่ดังนั้นความคิดเห็น"คุณอาจสามารถจัดการสิ่งนี้ แต่องค์กรของคุณไม่สามารถทำได้"นั้นไม่มีมูลความจริงเลย - สำหรับทุกสิ่งที่คุณรู้ tika สามารถทำงานได้ที่ Microsoft . ไม่ว่าพวกเขาจะเป็นใครการมัลติเธรดอาจเป็นวิธีที่ดีที่สุดในการแก้ปัญหาของพวกเขา มีสถานการณ์มากมายที่เหมาะสม คำถามก็ไม่ได้เกี่ยวกับการมัลติเธรด แต่เป็นการจัดการเพื่อนร่วมงานที่ก่อให้เกิดปัญหาเนื่องจากขาดความเชี่ยวชาญ
Anaximander

@anaximander: Multithreading สร้างข้อบกพร่องที่ยากมากในการทำซ้ำและยากมากที่จะติดตาม ในการผลิตซอฟต์แวร์ MT ที่ใช้งานได้และสามารถแก้ไขได้คุณจะต้องมีโปรแกรมเมอร์และการจัดการที่ตระหนักถึงอันตรายอย่างน้อยที่สุด องค์กรของ Tika ไม่สามารถจัดการสิ่งนี้ได้อย่างชัดเจน ฉันเคยเห็นคนทดสอบ / QA บังคับให้โปรแกรมเมอร์เขียนรหัสเสียงโดยการทดสอบอย่างหนักและเรียกร้องการแก้ไขสำหรับข้อผิดพลาดทุกข้อ ไม่ทำงานกับ MT หากเพื่อนร่วมงานขาดความสามารถความสนใจและแรงจูงใจให้จัดการกับเขาโดยทำให้เขาอยู่ห่างจากมอนแทนา
RalphChapin

@anaximander: คุณต้องมีประสบการณ์ที่ดีกับ Microsoft มากกว่าที่เคยมี แม้ว่าจะยุติธรรม แต่ฉันไม่เคยเห็นอะไรที่ดูเหมือนบั๊ก mutlithreading จากพวกเขา .... และขอบคุณสำหรับความคิดเห็น
RalphChapin

1
เมื่อใดก็ตามที่คำถามคือ "ฉันจะจัดการเพื่อนร่วมงานที่ไม่มีความเชี่ยวชาญได้อย่างไร" ฉันไม่คิดว่า "บริษัท ของคุณกำลังสร้างซอฟต์แวร์ผิด" เป็นคำตอบที่ถูกต้อง ในองค์กรใด ๆ ไม่ว่ากว้างใหญ่และมีความรู้จะมีคนที่มีช่องว่างในความรู้ โดยไม่ทราบว่าองค์กรเป็นใครหรือซอฟต์แวร์กำลังทำอะไรฉันไม่คิดว่าคุณจะสามารถตัดสินได้อย่างน่าเชื่อถือว่า บริษัท ไม่ทราบว่าพวกเขากำลังทำอะไรหรือว่าปัญหาของพวกเขาสามารถแก้ไขได้โดยไม่ต้องใช้มัลติเธรด
Anaximander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.