วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

5
คุณจะแบ่งเงินบริจาคระหว่างสมาชิกโอเพ่นซอร์สของคุณโดยพื้นฐานอย่างไร [ปิด]
ฉันเป็นผู้พัฒนาโครงการโอเพนซอร์ซซึ่งโฮสต์ใน SourceForge มันเริ่มต้นจากแอพเล็ก ๆ น้อย ๆ หลังจากที่มีการวางจำหน่ายบางอย่างมันก็ได้รับความนิยมเพิ่มมากขึ้นและมันเริ่มใช้เวลาและความรับผิดชอบมากขึ้นจากฉัน ดังนั้นฉันได้เปิดใช้งานตัวเลือกการบริจาคใน SourceForge ฉันมีความกระตือรือร้นที่จะพัฒนามันต่อไปฟรี แต่ถ้ามีเงินเข้ามาฉันจะแบ่งมันกับทีมของฉันได้อย่างไร ฉันควรแบ่งจำนวนเท่า ๆ กันระหว่างจำนวนสมาชิกในทีมหรือไม่ (50-50 เนื่องจากเป็นทีมที่สองสมาชิกแล้ว) จำนวนคลาสกระทำหรือการส่งอื่น ๆ ที่มีค่าโดยสมาชิกในทีม? ความคิดอื่น ๆ ? คุณจะทำอย่างไรในสถานการณ์เช่นนี้? กรุณาให้ความคิดเห็นของคุณ ฉันหวังว่าคำถามนี้จะเป็นประโยชน์สำหรับผู้อื่น

4
ทำไมหลังจากรีสตาร์ทแต่ละครั้งไซต์. NET ภายในเครื่องของฉันต้องใช้เวลาโหลดเป็นครั้งแรก [ปิด]
ฉันกำลังพัฒนาเว็บไซต์โดยใช้แพลตฟอร์ม. NET ฉันมักจะปรับใช้เว็บไซต์เหล่านี้ใน IIS ท้องถิ่นของฉันเพื่อให้ฉันสามารถทดสอบพวกเขาและดูการทำงานของพวกเขาก่อนที่จะมีชีวิตอยู่ อย่างไรก็ตามทุกครั้งที่ฉันรีสตาร์ท windows ดูเหมือนว่าเว็บไซต์ใช้เวลานานในการรันครั้งแรก ฉันรู้เกี่ยวกับ JIT และฉันก็ตระหนักถึงคำถามนี้แต่ก็ไม่ตอบคำถามของฉัน JIT เกิดขึ้นทุกครั้งที่คุณรีสตาร์ท windows หรือไม่ มันเกี่ยวข้องกับการสร้างกระบวนการ w3wp.exe หรือไม่? ทำไมเว็บไซต์จึงช้าสำหรับคำขอแรกหลังจากรีสตาร์ทแต่ละครั้ง
27 .net  asp.net  performance  iis  jit 

3
คลาสสแตติกที่มีเมธอดสแตติกพิจารณาว่าเป็น SOLID หรือไม่
SOLIDรวมถึงการแทนที่ Liskov ซึ่งมีความเห็นว่า "วัตถุในโปรแกรมควรเปลี่ยนได้ด้วยอินสแตนซ์ของชนิดย่อยโดยไม่เปลี่ยนแปลงความถูกต้องของโปรแกรมนั้น" เนื่องจากคลาสแบบสแตติกที่มีเมธอดแบบสแตติก (บิตเช่นMathคลาส) ไม่มีอินสแตนซ์เลยระบบของฉันจะถือว่าเป็นแบบ SOLID หรือไม่ถ้าฉันมีคลาสแบบสแตติกที่มีวิธีแบบสแตติก

9
เหตุใดผู้คนจึงต่อต้านแท็ก #region ในวิธีการอย่างมาก
ฉันได้ยินมามากมายเกี่ยวกับการทำให้วิธีการสั้นและฉันได้ยินโปรแกรมเมอร์จำนวนมากพูดว่าการใช้ #region tags ในวิธีนั้นเป็นสัญญาณที่แน่ใจว่ามันยาวเกินไปและควรได้รับการแบ่งเป็นหลาย ๆ วิธี อย่างไรก็ตามสำหรับฉันแล้วดูเหมือนว่ามีหลายกรณีที่การแยกรหัสด้วยแท็ก #region ภายในเมธอดนั้นเป็นวิธีที่เหนือกว่าในการรีแฟคเตอร์เป็นหลายวิธี สมมติว่าเรามีวิธีการคำนวณที่สามารถแยกออกเป็นสามขั้นตอนค่อนข้างชัดเจน นอกจากนี้แต่ละขั้นตอนเหล่านี้มีความเกี่ยวข้องกับการคำนวณสำหรับวิธีการนี้เท่านั้นดังนั้นการแตกออกเป็นวิธีการใหม่ทำให้เราไม่ต้องใช้รหัสซ้ำ อะไรคือประโยชน์ของการแยกแต่ละขั้นตอนเป็นวิธีของตัวเอง? เท่าที่ฉันสามารถบอกได้สิ่งที่เราได้รับก็คือความสามารถในการอ่านและขอบเขตตัวแปรที่แยกต่างหากสำหรับแต่ละเฟส (ซึ่งจะช่วยป้องกันการแก้ไขเฟสเฉพาะจากการทำลายระยะอื่นโดยไม่ตั้งใจ) อย่างไรก็ตามสิ่งเหล่านี้สามารถทำได้โดยไม่ต้องแยกแต่ละขั้นตอนเป็นวิธีของตนเอง แท็กภูมิภาคช่วยให้เราสามารถยุบรหัสลงในแบบฟอร์มซึ่งสามารถอ่านได้ (ด้วยสิทธิประโยชน์เพิ่มเติมที่เราไม่ต้องออกจากที่ของเราในไฟล์นี้อีกต่อไปหากเราตัดสินใจขยายและตรวจสอบรหัส) และเพียงห่อแต่ละเฟสใน{}สร้างขอบเขตของตนเองเพื่อทำงานกับ ประโยชน์ในการทำเช่นนี้คือเราไม่ได้ทำให้ขอบเขตระดับชั้นเรียนสกปรกด้วยวิธีการสามวิธีที่จริงแล้วเกี่ยวข้องกับการทำงานภายในของวิธีที่สี่เท่านั้น ทันทีที่เปลี่ยนโฉมหน้าวิธีการยาวเป็นชุดของวิธีการสั้น ๆ ดูเหมือนว่าฉันจะใช้รหัสเทียบเท่ากับการเพิ่มประสิทธิภาพก่อนวัยอันควร; คุณกำลังแนะนำความซับซ้อนเพิ่มเติมเพื่อแก้ไขปัญหาซึ่งในหลายกรณีไม่เคยเกิดขึ้น คุณสามารถแยกเฟสใดช่วงหนึ่งเป็นวิธีของตัวเองได้ในภายหลังหากมีโอกาสในการใช้รหัสซ้ำ คิด?
27 c#  coding-style 

11
ทำไมจึงมีการออกแบบระบบไฟล์ของคู่แข่งมากมาย? [ปิด]
แค่คำถามสั้น ๆ แต่ทำไมระบบไฟล์จำนวนมากถึงยังคงแข่งขันกันและใช้งานอยู่ในปัจจุบัน? (ntfs, fat32, ext3 (ffs), ฯลฯ ) ดูเหมือนว่าผู้ออกแบบระบบไฟล์สามารถเห็นด้วยกับแง่มุมที่ดีที่สุดของระบบแต่ละประเภทและใช้ระบบไฟล์ "ดีที่สุด" ไม่ใช่หรือ? เพียงความคิดเนื่องจากระบบไฟล์เหล่านี้มีมาระยะหนึ่งแล้วและอย่างน้อยก็ควรจะเห็นได้ชัดว่ามีคุณสมบัติที่ดีกว่าระบบอื่น ๆ และเราสามารถรวมสิ่งที่ดีในแต่ละระบบเข้าด้วยกันและสร้างระบบที่ดีที่สุด

10
คุณจะหลีกเลี่ยงการทำงานผิดสาขาได้อย่างไร
ความระมัดระวังมักเพียงพอที่จะป้องกันปัญหา แต่บางครั้งฉันต้องตรวจสอบสาขาที่ฉันกำลังทำงานอยู่ ( เช่น "อืม ... ฉันอยู่ในdevสาขาใช่มั้ย") โดยการตรวจสอบเส้นทางการควบคุมของแหล่งสุ่ม ไฟล์. ในการมองหาวิธีที่ง่ายขึ้นฉันคิดว่าตั้งชื่อไฟล์โซลูชันตามนั้น ( เช่น MySolution_Dev.sln ) แต่ด้วยชื่อไฟล์ที่แตกต่างกันในแต่ละสาขาฉันไม่สามารถรวมไฟล์โซลูชันได้ มันไม่ได้เป็นเรื่องใหญ่ แต่มีวิธีการหรือ "เคล็ดลับเล็ก ๆ " ที่คุณใช้เพื่อให้แน่ใจว่าคุณอยู่ในสาขาที่ถูกต้องหรือไม่? ฉันใช้ Visual Studio 2010 กับ TFS 2008


8
เกณฑ์ใดบ้างที่ควรใช้ในการกำหนดเงินเดือนของโปรแกรมเมอร์ [ปิด]
เมื่อเร็ว ๆ นี้ฉันเป็นส่วนหนึ่งของการอภิปรายเกี่ยวกับเกณฑ์ที่ควรใช้เมื่อพิจารณาเงินเดือนสำหรับโปรแกรมเมอร์: ข้อโต้แย้งแตกต่างจาก "มันเป็นเรื่องของการเลือกนายจ้าง" กับข้อโต้แย้งอื่น ๆ ที่พิจารณาการศึกษาประสบการณ์ความเข้าใจเกี่ยวกับเทคโนโลยี เป็นต้นเมื่อไม่นานมานี้ฉันอ่านโพสต์ที่ยอดเยี่ยมในบล็อก Stack Exchangeในหัวข้อและฉันไม่เห็นด้วยกับมันมากนัก แต่มีนายจ้างไม่มากที่ปฏิบัติตามตรรกะที่อธิบายไว้ ในประสบการณ์ของคุณองค์ประกอบใดเป็นองค์ประกอบที่สำคัญที่สุดในการกำหนดเงินเดือนสำหรับโปรแกรมเมอร์ เกณฑ์ใดที่ใช้บ่อยที่สุดในสถานการณ์เหล่านั้น เกณฑ์ใดที่ควรใช้บ่อยที่สุด และในที่สุดการศึกษาอย่างเป็นทางการ (วิทยาลัยมหาวิทยาลัย) มีความสำคัญต่อการกำหนดอัตราเงินเดือนอย่างไร?

11
ข้อดีของการแสดงหมายเลขบรรทัดในโปรแกรมแก้ไขข้อความคืออะไร?
ฉันรู้สึกแปลก ๆ เมื่อฉันแก้ไขโค้ดใน IDE ที่ไม่มีหมายเลขบรรทัดในเท็กซ์เอดิเตอร์ คำถามที่ฉันมีคือ: จำนวนบรรทัดมากเกินไปหรือไม่โดยเฉพาะเมื่อฟังก์ชั่น find by line มีอยู่ใน IDE ที่คุณเลือก? การแสดงหมายเลขบรรทัดมีประโยชน์อย่างไร
27 ide 

4
มรดกต้นแบบแตกต่างจากมรดกดั้งเดิมอย่างไร
การสืบทอดความหลากหลายและการห่อหุ้มเป็นคุณลักษณะที่สำคัญที่สุดสามประการของ OOP และจากนั้นการสืบทอดมีสถิติการใช้งานที่สูงในทุกวันนี้ ฉันกำลังเรียนรู้จาวาสคริปต์และที่นี่พวกเขาทุกคนบอกว่ามันมีมรดกต้นแบบและผู้คนทุกที่บอกว่ามันเป็นสิ่งที่แตกต่างจากมรดกคลาสสิก อย่างไรก็ตามฉันไม่เข้าใจว่าอะไรคือความแตกต่างจากจุดใช้งานจริง กล่าวอีกนัยหนึ่งเมื่อคุณกำหนดคลาสพื้นฐาน (ต้นแบบ) แล้วสืบทอดคลาสย่อยบางคลาสจากนั้นคุณทั้งคู่สามารถเข้าถึงฟังก์ชันการทำงานของคลาสพื้นฐานของคุณและคุณสามารถเพิ่มฟังก์ชันในคลาสที่ได้รับ หากเราพิจารณาสิ่งที่ฉันบอกว่าเป็นผลลัพธ์ที่เกิดจากการถ่ายทอดทางพันธุกรรมแล้วทำไมเราควรสนใจถ้าเราใช้รุ่นต้นแบบหรือคลาสสิก เพื่อล้างตัวเองให้มากขึ้นฉันไม่เห็นความแตกต่างในประโยชน์และรูปแบบการใช้งานของการสืบทอดต้นแบบและคลาสสิก ส่งผลให้ฉันไม่มีความสนใจที่จะเรียนรู้ว่าทำไมพวกเขาถึงแตกต่างกันเพราะทั้งคู่ส่งผลในสิ่งเดียวกัน OOAD มรดกต้นแบบ (ในทางทฤษฎี) แตกต่างจากมรดกดั้งเดิมอย่างไร

8
การคิดค่าเสื่อมราคาถือว่าเป็นอันตรายหรือไม่? [ปิด]
ฉันเพิ่งรวบรวมรหัสของตัวเองบางอย่างกับ-std=c++0xธงใน GCC เนื่องจากฉันต้องการติดตามสิ่งที่คนหนุ่มสาวกำลังทำอยู่อย่างคลุมเครือ เกี่ยวกับauto_ptrการคัดค้าน แน่นอนฉันรู้ว่าauto_ptrเลิกใช้แล้วใน C ++ 0x แต่ ... การเลิกใช้งานเป็นการเสียเวลาและความพยายามใช่ไหม สาเหตุของการไม่คิดค่าเสื่อมราคา (ด้วย auto_ptr เป็นตัวอย่าง): มีมหาสมุทรที่เต็มไปด้วยรหัสซึ่งยังต้องได้รับการสนับสนุนการสร้างคำเตือนนับล้านจะดึงดูดผู้คนให้ปิดคำเตือนเท่านั้น auto_ptr มันเป็นเรื่องเล็กน้อย แต่จริงๆแล้วมันทำในสิ่งที่มันพูดบนกระป๋อง printf()ถ้าเราอยากจะเลิกใช้สิ่งที่ผมเสนอชื่อ แต่ลองจินตนาการถึงเสียงซัดทอดที่จะตามมา auto_ptrไม่มีเพื่อนมากเกินไป แต่อย่างน้อยในรหัส C ++ ของฉันมันถูกใช้มากกว่าprintfซึ่งไม่ได้ใช้เลย คณะกรรมการมีประวัติไม่ดีในการได้รับสิทธินี้ - พวกเขาคัดค้านสแตติกที่ขอบเขตเนมสเปซและตอนนี้ดูเหมือนว่าจะไม่ได้รับการแก้ไข - ฉันจะไม่แปลกใจถ้าauto_ptrทำแบบเดียวกันกลับมา สุดท้ายสิ่งที่คณะกรรมการกล่าวว่าผู้ดำเนินการคอมไพเลอร์ไม่สนใจพวกเขา - พวกเขาไม่สามารถเสี่ยงต่อการทำลายรหัสลูกค้าของพวกเขาสิ่งที่พวกเขาสามารถทำได้ก็คือการออกคำเตือนที่น่ารำคาญ ดังนั้นคำถามของฉัน - คุณพิจารณาการคัดค้าน (ของอะไรไม่ใช่แค่ auto_ptrs และไม่ใช่แค่ใน C ++) เป็นความคิดที่ดีและถ้าเป็นเช่นนั้นทำไม

8
คุณจะเขียนบล็อกทางเทคนิคได้อย่างไร [ปิด]
ฉันมักจะอ่านมากเกี่ยวกับการเขียนโปรแกรมสิ่งที่เกี่ยวข้อง เมื่อหัวข้อที่ฉันอ่านไม่เกี่ยวข้องกับงานของฉันโดยตรง (พูดอ่านเกี่ยวกับอัลกอริทึมบางอย่างที่ฉันไม่ได้ใช้ในการทำงานประจำวัน) ฉันลืมพวกเขา วิธีหนึ่งในการเสริมสิ่งที่ได้เรียนรู้คือการเขียนบล็อก ฉันเป็นผู้เริ่มต้นในการเขียนบล็อก เมื่อฉันเริ่มเขียนฉันคิดว่ามันยากมาก แม้แต่การทำซ้ำเนื้อหาจะใช้เวลาประมาณสองชั่วโมง การเขียนความคิดที่ดีเกี่ยวกับบล็อกมักจะใช้เวลาทั้งวันหรือบางวันหยุดสุดสัปดาห์ เป็นเรื่องปกติหรือไม่ เคล็ดลับใด ๆ ในการเขียนบทแนะนำทางเทคนิค / บล็อกทางเทคนิค
27 writing 

5
การเป็นเจ้าของรหัสนั้นเป็นกลิ่นรหัสหรือไม่
นี่คือสิ่งที่ฉันคิดเกี่ยวกับนับตั้งแต่ฉันอ่านคำตอบนี้ในหัวข้อความคิดเห็นการเขียนโปรแกรมขัดแย้ง : งานของคุณคือการออกจากงาน เมื่อคุณเขียนซอฟต์แวร์สำหรับนายจ้างของคุณซอฟต์แวร์ใด ๆ ที่คุณสร้างขึ้นจะต้องเขียนในลักษณะที่นักพัฒนาซอฟต์แวร์สามารถหยิบขึ้นมาและเข้าใจด้วยความพยายามเพียงเล็กน้อย มันถูกออกแบบมาอย่างดีเขียนอย่างชัดเจนและต่อเนื่องจัดรูปแบบเรียบร้อยเอกสารที่จะต้องสร้างทุกวันตามที่คาดไว้ตรวจสอบลงในพื้นที่เก็บข้อมูลและรุ่นที่เหมาะสม หากคุณถูกรถบัสโดนไล่ออกไล่ออกหรือเดินออกจากงานนายจ้างของคุณควรจะสามารถแทนที่คุณได้ในเวลาหนึ่งและผู้ชายคนต่อไปก็สามารถเข้ามารับบทบาทของคุณหยิบรหัสและขึ้น ทำงานภายในหนึ่งสัปดาห์ หากเขาหรือเธอไม่สามารถทำเช่นนั้นได้คุณก็ล้มเหลวอย่างน่าสังเวช น่าสนใจฉันพบว่าการมีเป้าหมายนั้นทำให้ฉันมีค่ามากขึ้นสำหรับนายจ้างของฉัน ยิ่งฉันพยายามทิ้งมากเท่าไหร่ฉันก็ยิ่งมีค่ามากขึ้นเท่านั้น และได้มีการพูดคุยกันในคำถามอื่น ๆ เช่นคำถามนี้แต่ฉันต้องการนำมันขึ้นมาอีกครั้งเพื่อพูดคุยจากจุดที่ว่างเปล่ามากกว่า " มันเป็นกลิ่นรหัส !! " มุมมอง - ซึ่งยังไม่ได้ครอบคลุม ในเชิงลึก ฉันเป็นนักพัฒนามืออาชีพมาสิบปีแล้ว ฉันมีงานหนึ่งที่เขียนรหัสได้ดีพอที่จะรับได้อย่างรวดเร็วโดยนักพัฒนาใหม่ที่ดี แต่ในกรณีส่วนใหญ่ในอุตสาหกรรมดูเหมือนว่าการเป็นเจ้าของระดับสูงมาก (ทั้งรายบุคคลและทีม) เป็น บรรทัดฐาน ฐานรหัสส่วนใหญ่ดูเหมือนจะไม่มีเอกสารกระบวนการและ "การเปิดกว้าง" ที่จะช่วยให้ผู้พัฒนารายใหม่สามารถรับและทำงานกับพวกเขาได้อย่างรวดเร็ว ดูเหมือนจะมีกลอุบายและแฮ็กเล็ก ๆ น้อย ๆ ที่ไม่ได้เขียนไว้เสมอซึ่งมีเพียงคนที่รู้รหัสฐานได้ดีมาก ("เป็นเจ้าของ") จะรู้ได้ แน่นอนปัญหาที่เห็นได้ชัดคือ: จะเกิดอะไรขึ้นถ้าบุคคลนั้นหยุดทำงานหรือ "ถูกรถบัสชน"? หรือในระดับทีม: ถ้าทั้งทีมได้รับอาหารเป็นพิษเมื่อออกไปทานอาหารกลางวันที่ทีมและพวกเขาทั้งหมดตาย คุณจะสามารถแทนที่ทีมด้วยชุดนักพัฒนาแบบสุ่มใหม่ ๆ ที่ค่อนข้างเจ็บปวดได้หรือไม่? - ในหลายงานที่ผ่านมาของฉันฉันไม่สามารถจินตนาการได้ว่าจะเกิดอะไรขึ้น ระบบเต็มไปด้วยลูกเล่นและแฮ็คที่คุณ …

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

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.