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

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

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

15
นักพัฒนายืนยันว่าคำสั่งไม่ควรมีเงื่อนไขที่ไม่สนใจและควรมีบล็อกอื่นอยู่เสมอ
ฉันมีความคุ้นเคยนักพัฒนาที่มีประสบการณ์มากกว่าฉัน เรากำลังพูดถึงวิธีปฏิบัติในการเขียนโปรแกรมและฉันถูกผงะโดยวิธีการของเขาในงบ 'ถ้า' เขายืนยันในการปฏิบัติบางอย่างเกี่ยวกับว่าข้อความที่ฉันพบค่อนข้างแปลก ประการแรกคำสั่ง if ควรจะตามด้วยคำสั่ง else ไม่ว่าจะมีบางสิ่งที่จะใส่เข้าไปหรือไม่ ซึ่งนำไปสู่รหัสที่มีลักษณะเช่นนี้: if(condition) { doStuff(); return whatever; } else { } ประการที่สองจะเป็นการดีกว่าที่จะทดสอบค่าจริงแทนที่จะเป็นเท็จ นั่นหมายความว่าเป็นการดีกว่าที่จะทดสอบตัวแปร 'doorClosed' แทนที่จะเป็นตัวแปร '! doorOpened' เหตุผลของเขาคือทำให้ชัดเจนว่ารหัสกำลังทำอะไร ซึ่งทำให้ฉันสับสนเล็กน้อยเนื่องจากการรวมกันของกฎทั้งสองสามารถนำเขาไปสู่การเขียนโค้ดชนิดนี้หากเขาต้องการทำอะไรบางอย่างเมื่อเงื่อนไขไม่ตรง if(condition) { } else { doStuff(); return whatever; } ความรู้สึกของฉันเกี่ยวกับเรื่องนี้ก็คือมันน่าเกลียดมากและ / หรือว่าการปรับปรุงคุณภาพถ้ามีมีเล็กน้อย แต่ในฐานะรุ่นน้องฉันมักจะสงสัยสัญชาตญาณของตัวเอง ดังนั้นคำถามของฉันคือ: มันเป็นการปฏิบัติที่ดี / ไม่ดี / "ไม่สำคัญ"? มันเป็นเรื่องธรรมดา

10
ทำไมรหัสสะอาดแนะนำให้หลีกเลี่ยงตัวแปรที่ป้องกัน?
รหัสที่ชัดเจนแนะนำให้หลีกเลี่ยงตัวแปรที่ได้รับการป้องกันในส่วน "ระยะทางแนวตั้ง" ของบท "การจัดรูปแบบ": แนวคิดที่เกี่ยวข้องอย่างใกล้ชิดควรเก็บไว้ในแนวตั้งซึ่งกันและกัน เห็นได้ชัดว่ากฎนี้ใช้ไม่ได้กับแนวคิดที่อยู่ในไฟล์แยกต่างหาก แต่แล้วแนวคิดที่เกี่ยวข้องอย่างใกล้ชิดไม่ควรแยกออกเป็นไฟล์ต่าง ๆ เว้นแต่คุณจะมีเหตุผลที่ดีมาก อันที่จริงนี่เป็นหนึ่งในเหตุผลที่มีการป้องกันตัวแปรควรหลีกเลี่ยง อะไรคือเหตุผล?

3
ความหมายของใบอนุญาต MIT
สมมติว่าฉันใช้ ActionScript API นี้เปิดตัวภายใต้ใบอนุญาต MIT เพื่อสร้างซอฟต์แวร์: http://www.cove.org/ape/docs/api/ ฉันสามารถขายซอฟต์แวร์นั้นได้หรือไม่ ฉันจำเป็นต้องให้รหัสแหล่งที่มาของซอฟต์แวร์ของฉันออกไปหรือไม่ มีใครที่ได้รับซอฟต์แวร์ของฉันอนุญาตให้จำหน่ายซอฟต์แวร์อีกครั้งหรือไม่

6
ความแตกต่างระหว่าง REST และ CRUD
ฉันเรียนรู้ REST และรู้สึกเหมือน CRUD (จากสิ่งที่ฉันอ่านเกี่ยวกับ CRUD) ฉันรู้ว่าพวกเขาแตกต่างกันและฉันสงสัยว่าการคิดว่าพวกเขาเหมือนกันหมายความว่าฉันไม่เข้าใจพวกเขา REST นั้นเป็น "superset" ของ CRUD หรือไม่? ทุกสิ่งที่ CRUD ทำและอื่น ๆ
168 rest  crud 

10
Mono ใช้บ่อยครั้งในการพูดว่า“ ใช่แล้ว. NET คือแพลตฟอร์มข้าม” การอ้างสิทธิ์นั้นถูกต้องแค่ไหน? [ปิด]
ในสิ่งที่คุณจะเลือกสำหรับโครงการของคุณระหว่าง. NET และ Java ณ จุดนี้ในเวลา? ฉันบอกว่าฉันจะพิจารณา "คุณจะใช้งานกับ Windows หรือไม่" การตัดสินใจทางเทคนิคที่สำคัญที่สุดเพียงครั้งเดียวในการสร้างโครงการเว็บใหม่และหากคำตอบคือ "ไม่" ฉันจะแนะนำ Java แทน. NET ข้อโต้แย้งทั่วไปที่พบบ่อยคือ "ถ้าเราต้องการรันบน Linux / OS X / อะไรก็ตามเราจะเรียกใช้ Mono" 1ซึ่งเป็นข้อโต้แย้งที่น่าสนใจมากบนพื้นผิว แต่ฉันไม่เห็นด้วยกับหลาย ๆ เหตุผล OpenJDK และผู้จัดจำหน่ายทั้งหมดที่จัดหาให้ JVM ได้ผ่าน Sun TCK อย่างเป็นทางการเพื่อให้แน่ใจว่าสิ่งต่าง ๆ ทำงานได้อย่างถูกต้อง ฉันไม่ทราบว่า Mono ผ่าน Microsoft TCK Mono นำเสนอ. NET ปัจจุบันระดับของ. NET รองรับอะไรบ้าง องค์ประกอบ …
168 java  .net  mono 

28
จะเป็นโปรแกรมเมอร์แบบ zero-bug ได้อย่างไร? [ปิด]
เจ้านายของฉันบอกฉันเสมอว่าโปรแกรมเมอร์ที่ดีควรสามารถมั่นใจได้ว่ารหัสที่เขาหรือเธอเปลี่ยนแปลงนั้นเชื่อถือได้ถูกต้องและตรวจสอบด้วยตนเองอย่างละเอียด ว่าคุณควรเข้าใจผลลัพธ์ทั้งหมดอย่างสมบูรณ์และส่งผลต่อการเปลี่ยนแปลงของคุณ ฉันพยายามทำให้ดีที่สุดในการเป็นโปรแกรมเมอร์ประเภทนี้ - โดยการทดสอบซ้ำแล้วซ้ำอีก - แต่ข้อบกพร่องยังคงอยู่ที่นั่น ฉันจะเป็นโปรแกรมเมอร์ zero-bug ได้อย่างไรและรู้ว่าตัวละครทุกตัวในรหัสของฉันจะเป็นสาเหตุและส่งผลกระทบอย่างไร
168 code-quality 

1
ฉันจะหาปริศนาและความท้าทายในการเขียนโปรแกรมได้ที่ไหน [ปิด]
ฉันกำลังพยายามค้นหาสถานที่ที่ฉันสามารถฝึกฝนยานของฉันนอกบริบทของโรงเรียนหรือที่ทำงาน มีสถานที่ออนไลน์หรือหนังสือที่ฉันสามารถเข้าถึงรายการปริศนาตัวเขียนโปรแกรมหรือความท้าทายได้หรือไม่
167 puzzles 

12
ระบบปฏิบัติการ…ทำงาน…โดยไม่ต้องมีระบบปฏิบัติการเพื่อทำงานได้อย่างไร?
ตอนนี้ฉันอยากรู้จริงๆ ฉันเป็นโปรแกรมเมอร์ Python และคำถามนี้ทำให้ฉันสับสนมาก: คุณเขียนระบบปฏิบัติการ คุณจะเรียกใช้มันได้อย่างไร มันจะต้องทำงานอย่างใดและวิธีการที่อยู่ในระบบปฏิบัติการอื่นได้หรือไม่ แอปพลิเคชันจะทำงานอย่างไรโดยไม่ต้องอยู่ในระบบปฏิบัติการ คุณจะบอกให้คอมพิวเตอร์รัน, พูด, C และดำเนินการคำสั่งเหล่านี้ไปยังหน้าจอได้อย่างไรถ้ามันไม่มี OS ให้ทำงาน? มันต้องทำอย่างไรกับเคอร์เนล UNIX? ถ้าใช่เคอร์เนล Unix หรือเคอร์เนลโดยทั่วไปคืออะไร? ฉันแน่ใจว่าระบบปฏิบัติการนั้นซับซ้อนกว่านั้น แต่มันทำงานอย่างไร

9
ฉันเปลี่ยนลายเซ็นวิธีหนึ่งและตอนนี้มีข้อผิดพลาดมากกว่า 25,000 ข้อ เกิดอะไรขึ้น
ฉันเพิ่งเริ่มงานใหม่เมื่อไม่นานมานี้ซึ่งฉันกำลังทำงานกับแอปพลิเคชันขนาดใหญ่มาก (15M loc) ในงานก่อนหน้าของฉันเรามีแอปพลิเคชั่นขนาดใหญ่คล้าย ๆ กัน แต่ (เพื่อให้ดีขึ้นหรือแย่ลง) เราใช้ OSGi ซึ่งหมายความว่าแอปพลิเคชันนั้นถูกแบ่งออกเป็นไมโครไซต์จำนวนมากที่สามารถเปลี่ยนแปลงรวบรวมและนำไปใช้ได้อย่างอิสระ แอปพลิเคชันใหม่เป็นเพียงฐานรหัสขนาดใหญ่เพียงฐานเดียว ดังนั้นฉันจึงต้องเปลี่ยนอินเทอร์เฟซของคลาสนี้เพราะนั่นคือสิ่งที่เจ้านายของฉันขอให้ฉันทำ ตอนแรกพวกเขาเขียนด้วยสมมติฐานบางอย่างที่ไม่ได้พูดคุยกันดีเกินไปและในขณะที่พวกเขาหลีกเลี่ยงปัญหาของการปรับโครงสร้างใหม่เพราะมันเชื่อมโยงอย่างแน่นหนา ฉันเปลี่ยนอินเทอร์เฟซและตอนนี้มีข้อผิดพลาดมากกว่า 25,000 ข้อ ข้อผิดพลาดบางอย่างอยู่ในคลาสที่มีชื่อการทำให้เกิดเสียงที่สำคัญเช่น "XYZPriceCalculator" ซึ่งได้รับการตรวจสอบใหม่ไม่ควรทำลาย แต่ฉันไม่สามารถเริ่มแอปพลิเคชันเพื่อตรวจสอบว่ามันทำงานได้หรือไม่จนกว่าข้อผิดพลาดทั้งหมดจะได้รับการแก้ไข และหน่วยทดสอบจำนวนมากทดสอบโดยตรงว่าอินเตอร์เฟสหรือเชื่อมต่อกับคลาสพื้นฐานซึ่งอ้างอิงอินเตอร์เฟสนั้นดังนั้นการแก้ไขสิ่งเหล่านั้นจึงเป็นงานที่ใหญ่มากในตัวมันเอง นอกจากนี้ฉันไม่ทราบว่าชิ้นส่วนเหล่านี้เข้ากันได้อย่างไรดังนั้นแม้ว่าฉันจะเริ่มต้นได้ฉันก็ไม่รู้จริงๆว่ามันจะเป็นอย่างไรถ้าสิ่งต่าง ๆ แตกหัก ฉันไม่เคยประสบปัญหาเช่นนี้ในงานสุดท้ายของฉัน ฉันจะทำอย่างไร

21
โปรแกรมเมอร์ที่รวดเร็วและสกปรกรู้ได้อย่างไรว่าพวกมันถูกต้อง?
ถ้าคุณถามโปรแกรมเมอร์ว่าทำไมพวกเขาถึงควรเขียนโค้ดสะอาดคำตอบที่คุณได้รับอันดับหนึ่งคือความสามารถในการบำรุงรักษา ในขณะที่อยู่ในรายการของฉันเหตุผลหลักของฉันคือทันทีและเห็นแก่ผู้อื่นน้อยกว่า: ฉันไม่สามารถบอกได้ว่ารหัสใหม่ของฉันถูกต้องถ้ามันสกปรกเกินไป ฉันพบว่าฉันได้มุ่งเน้นไปที่ฟังก์ชั่นของแต่ละบุคคลและบรรทัดของรหัสมากจนเมื่อฉันเสร็จร่างฉบับแรกของฉันและย้อนกลับไปดูภาพใหญ่อีกครั้งบางครั้งมันก็ไม่เข้ากันอย่างเรียบร้อยมาก การใช้เวลาหนึ่งชั่วโมงหรือสองครั้งในการทำความสะอาดเพื่อทำความสะอาดบ่อยครั้งจะทำให้เกิดข้อผิดพลาดในการคัดลอก / วางหรือเงื่อนไขขอบเขตที่ยากต่อการตรวจจับในแบบร่างคร่าวๆ อย่างไรก็ตามบางคนรู้สึกว่าบางครั้งมันก็โอเคที่จะตรวจสอบรหัสสกปรกในความสนใจของซอฟต์แวร์การจัดส่งโดยเจตนาโดยมีแผนที่จะ "ล้างข้อมูลในภายหลัง" มีเทคนิคบางอย่างที่ปฏิบัติได้ซึ่งทำให้พวกเขามั่นใจในความถูกต้องของรหัสของพวกเขาเมื่ออ่านง่ายกว่าอุดมคติหรือไม่? มันเป็นทักษะที่ควรค่าแก่การพยายามพัฒนาหรือไม่? หรือการขาดความเชื่อมั่นในรหัสบางสิ่งบางคนแค่หาง่ายกว่าที่จะยอมรับ?
166 design 

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

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

11
เกิดอะไรขึ้นกับ“ ทีมศัลยกรรม” จาก“ ตำนานคนเดือน”?
หลายปีก่อนเมื่อฉันอ่าน The Mythical Man-Month ฉันพบสิ่งต่าง ๆ มากมายที่ฉันรู้จักจากแหล่งอื่น ๆ อย่างไรก็ตามมีสิ่งใหม่ ๆ อยู่ในนั้นแม้จะเป็นหนังสือจากปี 1975 หนึ่งในนั้นคือ: ทีมผ่าตัด มิลส์เสนอว่าแต่ละส่วนของงานที่มีขนาดใหญ่จะได้รับการจัดการทีม แต่ทีมจะได้รับการจัดระเบียบเหมือนทีมผ่าตัดมากกว่าทีมงานหมู นั่นคือแทนที่จะเป็นสมาชิกแต่ละคนตัดปัญหาปัญหาคนหนึ่งตัดและคนอื่นให้การสนับสนุนทุกอย่างแก่เขาซึ่งจะเพิ่มประสิทธิภาพและประสิทธิผลของเขา นี่เป็นรูปแบบที่น่าสนใจมากสำหรับการจัดทีมพัฒนาซอฟต์แวร์ แต่ฉันไม่เคยพบมันมาอธิบายไว้ในหนังสือวิศวกรรมซอฟต์แวร์เล่มอื่น ๆ ทำไมถึงเป็นอย่างนั้น? "ทีมศัลยกรรม" เป็นเรื่องที่ผิดปกติหรือเปล่า หรือว่ามีการลองและล้มเหลว ถ้าเป็นเช่นนั้นมันล้มเหลวได้อย่างไร? ถ้าไม่ทำไมเราไม่เห็นรูปแบบนั้นถูกนำไปใช้ในโครงการซอฟต์แวร์ในปัจจุบัน

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

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