คำถามติดแท็ก programming-practices

Programming Practices เป็นวิธีที่ใช้กันทั่วไปหรือไม่ใช้กันทั่วไปในการพัฒนาซอฟต์แวร์ สิ่งเหล่านี้อาจรวมถึงสิ่งต่าง ๆ เช่นการพัฒนาแบบ Agile, Kanban, ทางลัดการเข้ารหัส ฯลฯ

8
Linq มีผลต่อจิตใจที่ทำให้มึนงงโปรแกรมเมอร์ NET หรือไม่?
จำนวนมากเราเริ่มเห็นปรากฏการณ์นี้กับ jQuery เกี่ยวกับปีที่ผ่านมาเมื่อผู้คนเริ่มถามถึงวิธีการทำสิ่งที่บ้าอย่างเช่นดึงสตริงแบบสอบถามกับ jQuery ความแตกต่างระหว่างไลบรารี (jQuery) และภาษา (JavaScript) นั้นหายไปกับโปรแกรมเมอร์จำนวนมากและทำให้โค้ดที่ไม่เหมาะสมและซับซ้อนถูกเขียนขึ้นโดยที่ไม่จำเป็น บางทีมันอาจจะเป็นแค่จินตนาการของฉัน แต่ฉันสาบานฉันเริ่มที่จะเห็น uptick ในจำนวนของคำถามที่คนถามจะทำสิ่งที่บ้าในทำนองเดียวกันกับ Linq เช่นช่วงที่พบในอาร์เรย์เรียง ฉันไม่สามารถเข้าใจได้ว่าส่วนขยายของ Linq ไม่เหมาะสมสำหรับการแก้ไขปัญหานั้นอย่างไร แต่ที่สำคัญกว่านั้นความจริงที่ว่าผู้เขียนคิดว่าทางออกที่ดีที่สุดจะเกี่ยวข้องกับ Linqโดยไม่ต้องคิดอะไรเกี่ยวกับเรื่องนี้ ดูเหมือนว่าเรากำลังทำซ้ำประวัติศาสตร์ผสมโปรแกรมเมอร์รุ่นใหม่ของ. NET ที่ไม่สามารถบอกความแตกต่างระหว่างภาษา (C # / VB.NET) และไลบรารี่ (Linq) อะไรคือสาเหตุของปรากฏการณ์นี้? มันเป็นเพียงแค่โฆษณา แนวโน้มนกกางเขน? Linq ยกชื่อเสียงขึ้นมาในรูปแบบของเวทมนต์แทนที่จะเขียนโค้ดจริง ๆ แล้วคุณแค่ต้องใช้คาถาที่ถูกต้อง? ฉันไม่ค่อยพอใจกับคำอธิบายเหล่านั้น แต่ฉันไม่สามารถคิดถึงสิ่งอื่นได้ ที่สำคัญกว่านั้นคือปัญหาจริงๆและถ้าเป็นเช่นนั้นวิธีที่ดีที่สุดในการช่วยเหลือผู้คนเหล่านี้คืออะไร?

8
การกำหนดในส่วนของเงื่อนไขเป็นเงื่อนไขที่ไม่ดีหรือไม่?
สมมติว่าฉันต้องการเขียนฟังก์ชันที่เชื่อมสองสายเข้าด้วยกันใน C วิธีที่ฉันจะเขียนคือ: void concat(char s[], char t[]){ int i = 0; int j = 0; while (s[i] != '\0'){ i++; } while (t[j] != '\0'){ s[i] = t[j]; i++; j++; } s[i] = '\0'; } อย่างไรก็ตามK&Rในหนังสือของพวกเขามีการใช้งานที่แตกต่างกันโดยเฉพาะอย่างยิ่งรวมถึงสภาพของลูปในขณะที่มากที่สุด: void concat(char s[], char t[]){ int i, j; i = j = 0; …

5
เมื่อใดที่ฉันควรขยายคลาส Java Swing
ความเข้าใจในปัจจุบันของฉันเกี่ยวกับการใช้งานมรดกคือควรขยายชั้นเรียนเฉพาะเมื่อมีความสัมพันธ์แบบ IS-A หากคลาสพาเรนต์สามารถมีประเภทลูกที่เฉพาะเจาะจงเพิ่มเติมด้วยฟังก์ชันการทำงานที่แตกต่างกัน แต่จะแบ่งปันองค์ประกอบทั่วไปที่มีนามธรรมในผู้ปกครอง ฉันกำลังถามความเข้าใจนั้นเพราะสิ่งที่อาจารย์ Java ของฉันแนะนำให้เราทำ เขาแนะนำว่าสำหรับJSwingแอปพลิเคชันที่เรากำลังสร้างในชั้นเรียน หนึ่งควรขยายทุกJSwingชั้นเรียน ( JFrame, JButton, JTextBoxฯลฯ ) ในชั้นเรียนที่กำหนดเองแยกต่างหากและระบุ GUI การปรับแต่งที่เกี่ยวข้องในพวกเขา (เช่นขนาดส่วนประกอบฉลากส่วนประกอบ ฯลฯ ) จนถึงตอนนี้ดีมาก แต่เขาก็ยังแนะนำต่อไปว่า JButton ทุกคนควรมีคลาสแบบขยายที่กำหนดเองของตนเองแม้ว่าปัจจัยที่แตกต่างเท่านั้นคือฉลากของพวกเขา สำหรับเช่นหาก GUI มีสองปุ่มโอเคและยกเลิก เขาแนะนำให้ขยายเวลาดังต่อไปนี้: class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ …

7
ข้อโต้แย้งต่อต้านการปราบปรามข้อผิดพลาด
ฉันพบโค้ดบางส่วนในโครงการของเรา: SomeClass QueryServer(string args) { try { return SomeClass.Parse(_server.Query(args)); } catch (Exception) { return null; } } เท่าที่ฉันเข้าใจการระงับข้อผิดพลาดเช่นนี้เป็นการปฏิบัติที่ไม่ดีเนื่องจากเป็นการทำลายข้อมูลที่เป็นประโยชน์จากข้อยกเว้นของเซิร์ฟเวอร์ดั้งเดิมและทำให้รหัสดำเนินการต่อเมื่อควรยุติ เมื่อใดที่เหมาะสมที่จะระงับข้อผิดพลาดทั้งหมดเช่นนี้

5
เป็นวิธีปฏิบัติที่ดีในการสร้าง ClassCollection ของคลาสอื่นหรือไม่?
ให้บอกว่าฉันมีCarคลาส: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } ให้บอกว่าเรากำลังสร้างระบบเกี่ยวกับที่จอดรถฉันจะใช้Carคลาสจำนวนมากดังนั้นเราจึงสร้างCarCollectionคลาสมันอาจมีวิธีการโฆษณาสองสามอย่างเช่นFindCarByModel: public class CarCollection { public List<Car> Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

16
เหตุใดจึงต้องใช้หมายเลขฐานอื่น ๆ เมื่อตั้งโปรแกรม
เพื่อนร่วมงานของฉันและฉันกำลังคิดในใจของเราที่จะหาสาเหตุที่ทุกคนจะออกไปทางหมายเลขโปรแกรมในฐานอื่นที่ไม่ใช่ฐาน 10 ฉันแนะนำว่าบางทีคุณสามารถเพิ่มประสิทธิภาพสมการอีกต่อไปโดยการใส่ตัวแปรในฐานที่ถูกต้องที่คุณกำลังทำงานด้วย (ตัวอย่างเช่นถ้าคุณมีเพียงชุด 5 ของสิ่งที่ไม่มีเศษคุณสามารถใช้ฐาน 5) แต่ฉันไม่แน่ใจ ถ้ามันเป็นเรื่องจริง ความคิดใด ๆ

7
วิธีการแปลงโปรแกรมเมอร์คัดลอก / วาง / สปาเก็ตตี้เพื่อดูแสง?
คำถามนี้ได้รับแรงบันดาลใจจากคนนี้ ในขณะที่คำถามอื่น ๆ ถูกแปลเป็นภาษาท้องถิ่นฉันเชื่อว่าปัญหาพื้นฐานเป็นสิ่งที่พบได้ทั่วไปในอุตสาหกรรมของเรา ฉันรู้ว่ามีนักพัฒนาบางคนที่จะอ่านและคิดว่าฉันทำสิ่งนี้ขึ้นแล้วพวกเขาอาจตอบว่าทุกคนใส่ใจงานของพวกเขาและต้องการเรียนรู้ แต่เพียงแค่ดูโพสต์โปรแกรมเมอร์ SE อื่น ๆ ( ตรงประเด็น ) ฉันรู้ว่านั่นไม่ใช่ความจริงในระดับสากล ดังนั้นสมมติว่าคุณมีใครบางคนในทีมของคุณ (หรืออาจเป็นคนส่วนใหญ่) ซึ่งเป็นขั้นตอนการปฏิบัติงานมาตรฐานคือการคัดลอก / วางและผู้ที่เชื่อว่าทุกอย่างสามารถแก้ไขได้ถ้าเพียงคุณเพิ่มการเรียกฟังก์ชันและตัวแปร บุคคลนี้ไม่เคยได้ยินเรื่อง TDD, DRY หรือ SOLID และนอกเวลาทำงาน 40 ชั่วโมงเมื่อพวกเขาไม่ว่างที่ทำงานพวกเขาไม่เคยอ่านวิธีการ / การปฏิบัติ / การออกแบบหนังสือเล่มเดียว ในอดีตฉัน (และคนอื่น ๆ ) ได้ถามคุณจะสอน OODได้อย่างไร แต่ตอนนี้ฉันคิดว่านั่นไม่ใช่คำถามที่ถูกต้อง คำถามที่แท้จริงคือคุณจะเข้าหาบุคคล / ทีมเช่นนั้นได้อย่างไรและทำให้พวกเขาอยากรู้อยากเห็นเกี่ยวกับวิธีที่ดีกว่าในการทำสิ่งต่าง ๆ ? คุณสร้างแรงบันดาลใจให้พวกเขาเรียนรู้ได้อย่างไร หากปราศจากสิ่งนั้นดูเหมือนว่าการสอนการประชุมการบรรยายและการอภิปรายทั้งหมดจะไร้ประโยชน์หากพวกเขามีความสุขอย่างสมบูรณ์แบบที่จะกลับไปที่โต๊ะทำงานของพวกเขาและทำสิ่งที่พวกเขาทำมาตลอด ฉันทำงานกับกลุ่มคนแบบนี้ จริงๆแล้วพวกเขาเป็นคนที่ค่อนข้างสดใส แต่ฉันเกลียดเมื่อฉันได้ยินว่า "ฉันเขียนโค้ดเสร็จแล้วเพียงแค่ต้องการปรับโครงสร้างและแบ่งออกเป็นหลายคลาสเพื่อให้ DXM มีความสุข" …

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

5
มีทางเลือกอื่นที่สำคัญใน Waterfall and Agile หรือไม่? [ปิด]
ฉันอยากรู้อยากเห็นถ้าใครรู้วิธีการที่แตกต่างกันอย่างมีนัยสำคัญ (ไม่ใช่การรวมตัวกันอีกครั้ง) และฉันจะขอบคุณโดยเฉพาะอย่างยิ่งทุกคนที่นำประสบการณ์กับทางเลือกอื่น ๆ

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

1
raw, weak_ptr, unique_ptr, shared_ptr ฯลฯ ... วิธีการเลือกอย่างชาญฉลาด?
มีพอยน์เตอร์จำนวนมากใน C ++ แต่จะซื่อสัตย์ใน 5 ปีหรือมากกว่านั้นในการเขียนโปรแกรม C ++ (โดยเฉพาะกับ Qt Framework) ฉันใช้พอยน์เตอร์พอยต์แบบเก่าเท่านั้น: SomeKindOfObject *someKindOfObject = new SomeKindOfObject(); ฉันรู้ว่ามีคำแนะนำ "ฉลาด" อื่น ๆ อีกมากมาย: // shared pointer: shared_ptr<SomeKindofObject> Object; // unique pointer: unique_ptr<SomeKindofObject> Object; // weak pointer: weak_ptr<SomeKindofObject> Object; แต่ฉันไม่มีความคิดเพียงเล็กน้อยเกี่ยวกับสิ่งที่พวกเขาทำและสิ่งที่พวกเขาสามารถเสนอให้ฉันได้เปรียบเทียบตัวชี้แบบดิบ ตัวอย่างเช่นฉันมีส่วนหัวของชั้นนี้: #ifndef LIBRARY #define LIBRARY class LIBRARY { public: // Permanent list …

8
การขว้างข้อยกเว้นเป็นการต่อต้านแบบที่นี่หรือไม่?
ฉันเพิ่งพูดคุยเกี่ยวกับตัวเลือกการออกแบบหลังจากการตรวจสอบโค้ด ฉันสงสัยว่าความคิดเห็นของคุณคืออะไร มีPreferencesคลาสนี้ซึ่งเป็นที่เก็บข้อมูลสำหรับคู่คีย์ - ค่า ค่า Null นั้นถูกกฎหมาย (สำคัญมาก) เราคาดหวังว่าค่าบางอย่างอาจยังไม่ถูกบันทึกและเราต้องการจัดการกับกรณีเหล่านี้โดยอัตโนมัติโดยเริ่มต้นด้วยค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าเมื่อมีการร้องขอ วิธีแก้ปัญหาที่กล่าวถึงใช้รูปแบบต่อไปนี้ (หมายเหตุ: นี่ไม่ใช่รหัสจริงแน่นอน - มันง่ายสำหรับจุดประสงค์ในการอธิบาย): public class Preferences { // null values are legal private Map<String, String> valuesFromDatabase; private static Map<String, String> defaultValues; class KeyNotFoundException extends Exception { } public String getByKey(String key) { try { return getValueByKey(key); } catch …

1
ฉันรู้ว่า JavaScript ดีจริงๆ แต่ฉันวางระเบิดการสัมภาษณ์ [ปิด]
ดังนั้นฉันกำลังตามล่าหาตำแหน่งใหม่ในฐานะนักพัฒนา Front-End ฉันรู้ว่าจาวาสคริปต์เป็นอย่างดีและสามารถแว็กซ์เกี่ยวกับการปิด, Currying, การสืบทอดต้นแบบ, รูปแบบการออกแบบ, ประสิทธิภาพของแอพและสถาปัตยกรรม Front-End โดยรวม แต่ถึงกระนั้นฉันยังคงจบลงด้วยการสัมภาษณ์งานวางระเบิด (FYI งานส่วนใหญ่ที่ฉันสัมภาษณ์อยู่สำหรับการสร้าง SPA ด้วยกรอบ MVC บางประเภท) โดยปกติแล้วการทดสอบการเข้ารหัสเป็นตัวอย่างโค้ดขนาดเล็กของสิ่งที่ฉันไม่เคยเจออย่างมืออาชีพ เช่นเขียนฟังก์ชั่นเพื่อแก้ปัญหาคณิตศาสตร์บางอย่าง นอกเหนือจากความเชื่องช้าในการรับรหัสขณะถือโทรศัพท์ด้วยมือเดียวและมีคนแปลกหน้าดูหน้าจอของคุณและดูตัวละครทุกตัวที่คุณพิมพ์ฉันมักจะไม่เห็นสิ่งนี้ในโลกแห่งความเป็นจริง นี่เป็นทักษะที่ร้ายแรงที่ฉันขาดหรือเป็นผู้สัมภาษณ์ถามคำถามที่ไม่เกี่ยวข้องหรือไม่ ฉันเดาว่าฉันควรทำงานกับการเขียนโปรแกรมฟังก์ชั่นและอัลกอริทึมของฉัน แต่ฉันไม่ได้พบแหล่งข้อมูลที่ดีมากมายบนเว็บ (หรือในการพิมพ์) ข้อเสนอแนะใด ๆ ?

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

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

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