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

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

10
การทำต้นแบบกับ Clean Code ในระยะแรก
ฉันวางแผนที่จะทำงาน / เริ่มโครงการส่วนบุคคลบางอย่างที่อาจจบลงด้วยการทำงานประจำวันของฉัน มันทำให้ฉันคิดว่าฉันควรเริ่มทางไหนดี? แค่ต้นแบบ - เขียนแค่การทำงานโค้ดพื้นฐานที่อาจทำให้ฉันเสียเวลาในการปรับให้เหมาะสมและปรับโครงสร้างใหม่เพื่อการขยายที่ง่าย เขียนโค้ดที่สะอาดเหมาะสมและได้รับการบันทึกไว้ตั้งแต่ต้นโดยจำไว้ว่าหากหลังจากผ่านไประยะหนึ่งแล้วจะไม่คุ้มค่า ปรับปรุง:การรวม YAGNI กับคำตอบ sunpech และ M.Sameer ทำให้ฉันสมบูรณ์แบบ :) ขอขอบคุณทุกคนสำหรับความช่วยเหลือ

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

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

7
หลักการที่เป็นของแข็งเทียบกับ YAGNI
หลักการ SOLID กลายเป็น YAGNI เมื่อใด ในฐานะโปรแกรมเมอร์เราทำการแลกเปลี่ยนตลอดเวลาระหว่างความซับซ้อนการบำรุงรักษาเวลาในการสร้างและอื่น ๆ ในบรรดาคนอื่น ๆ แนวทางที่ฉลาดที่สุดสองข้อในการเลือกอยู่ในใจของฉันคือหลักการของ SOLID และ YAGNI หากคุณไม่ต้องการมัน อย่าสร้างมันและรักษาความสะอาด ยกตัวอย่างเช่นตอนที่ฉันดูซีรีส์ dimecast บน SOLIDฉันเห็นว่ามันเริ่มจากโปรแกรมที่ค่อนข้างง่ายและกลายเป็นคอมเพล็กซ์ที่ค่อนข้างซับซ้อน (ตอนจบใช่ความซับซ้อนยังอยู่ในสายตาของคนดู) แต่ก็ยังทำให้ ฉันสงสัยว่า: เมื่อใดที่หลักการของ SOLID เปลี่ยนเป็นสิ่งที่คุณไม่ต้องการ หลักการที่มั่นคงทั้งหมดเป็นวิธีการทำงานที่เปิดใช้งานการเปลี่ยนแปลงในภายหลัง แต่ถ้าหากปัญหาในการแก้ไขเป็นเรื่องที่ค่อนข้างง่าย หรือหลักการของ SOLID เป็นสิ่งที่ใช้อยู่เสมอ ตามที่ถามในความคิดเห็น: หลักการที่เป็นของแข็ง YAGNI

10
มีเหตุผลใดที่จะใช้คลาส "ข้อมูลเก่าแบบธรรมดา" หรือไม่?
ในรหัสดั้งเดิมบางครั้งฉันเห็นชั้นเรียนที่ไม่มีอะไรนอกจากห่อหุ้มข้อมูล สิ่งที่ต้องการ: class Bottle { int height; int diameter; Cap capType; getters/setters, maybe a constructor } ความเข้าใจของฉันเกี่ยวกับ OO คือคลาสเป็นโครงสร้างของข้อมูลและวิธีการทำงานกับข้อมูล ดูเหมือนว่าจะแยกประเภทของวัตถุนี้ สำหรับฉันพวกเขาไม่มีอะไรมากไปกว่าstructsและชนิดของความพ่ายแพ้วัตถุประสงค์ของ OO ฉันไม่คิดว่ามันจะเป็นสิ่งชั่วร้ายแม้ว่ามันอาจจะเป็นกลิ่นรหัส มีกรณีที่วัตถุดังกล่าวจะมีความจำเป็นหรือไม่? หากมีการใช้งานบ่อยมันจะทำให้ผู้ต้องสงสัยในการออกแบบหรือไม่

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

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

10
การใช้งาน LINQ และ Lambda Expressions นำไปสู่รหัสที่อ่านได้น้อยลงหรือไม่ [ปิด]
ฉันกำลังพูดคุยกับเพื่อนร่วมงานใน Linq ฉันจะคัดลอกที่นี่: ผู้ร่วมงาน: ขอซื่อสัตย์ที่นี่ ไวยากรณ์ Linq แย่มาก มันสับสนและไม่ง่าย ฉัน: โอ้มาเลยสับสนมากกว่า T-SQL เหรอ? เพื่อนร่วมงาน: เอ่อใช่ ฉัน: มันมีส่วนพื้นฐานเดียวกันเลือกสถานที่และจาก ผู้ร่วมงาน: Linq สำหรับฉันคือการกำจัดไอเท็มเชิงสัมพันธ์ + OO ผู้ร่วมงาน: อย่าเข้าใจฉันผิด - มันมีประสิทธิภาพอย่างไม่น่าเชื่อ แต่พวกเขาเรียกคืน SQL เพื่อใช้การเก็บรวบรวมวัตถุ agains ฉันเห็นว่าการใช้ Linq + Lamda นั้นทรงพลังมาก (เขาเห็นด้วย) และทำให้อ่านรหัสได้ง่ายขึ้น (เขาไม่เห็นด้วยกับจุดนั้น): pickFiles = from f in pickFolder.GetFiles("*.txt") where ValidAuditFileName.IsMatch(f.Name) select f; หรือ var …

8
สิทธิ์ใช้งานซอฟต์แวร์ที่เลือกปฏิบัติในเรื่อง 'จริยธรรม'
ฉันใช้เวลาอ่านใบขับขี่ทั่วไปและใบอนุญาตซอฟต์แวร์ที่อนุญาต มีใบอนุญาตที่อนุญาตให้ผู้สร้างแอปพลิเคชันหรืออัลกอริทึมระบุผู้ที่อาจใช้ / แจกจ่ายผลิตภัณฑ์โดยยึดตามอคติส่วนบุคคลของตนเองหรือไม่ ฉันเข้าใจว่าผู้คนใช้ใบอนุญาตสองใบเพื่อบังคับให้หน่วยงานเชิงพาณิชย์จ่ายค่าใบอนุญาตหรือถูกบังคับให้แจกจ่ายรหัส sourse สำหรับโครงการของพวกเขา แต่ฉันกำลังคิดบางอย่างมากขึ้นตามแนวของตัวอย่างเช่น "รหัสนี้สามารถใช้ได้อย่างอิสระ แก้ไขและเผยแพร่โดยองค์กรใด ๆ ที่ไม่เกี่ยวข้องกับอุตสาหกรรม x [ซึ่งฉันถือว่าไม่คู่ควรกับการใช้ซอฟต์แวร์ฟรีของฉัน] " ฉันไม่สามารถหาใบอนุญาตหรือแม่แบบใบอนุญาตใด ๆ ได้และฉันคิดว่าอย่างน้อยโปรแกรมเมอร์บางคนอาจกังวลเกี่ยวกับผลกระทบทางจริยธรรมของผลิตภัณฑ์ของตน เป็นไปได้หรือไม่ที่จะสร้างอัลกอริธึมการทำ Pathfinding AI และทำให้แน่ใจว่าจะไม่ทำเสียงพึมพำกับอาวุธหรือ Arctic ice floe model และทำให้แน่ใจว่าจะไม่ถูกใช้สำหรับการขุดเจาะน้ำมันนอกชายฝั่งในขณะที่ยังคงใช้ใบอนุญาตแบบอนุญาต

7
สิ่งใดที่คุณเรียกใช้ฟังก์ชันที่อินพุตเดียวกันจะส่งคืนเอาต์พุตเดียวกันเสมอ แต่ก็มีผลข้างเคียงเช่นกัน
สมมติว่าเรามีฟังก์ชั่นบริสุทธิ์ปกติเช่น function add(a, b) { return a + b } จากนั้นเราก็ดัดแปลงมันโดยที่มันมีผลข้างเคียง function add(a, b) { writeToDatabase(Math.random()) return a + b; } มันไม่ถือว่าเป็นฟังก์ชั่นที่บริสุทธิ์เท่าที่ฉันรู้เพราะฉันมักจะได้ยินคนเรียกฟังก์ชั่นที่บริสุทธิ์ว่า "ฟังก์ชั่นที่ไม่มีผลข้างเคียง" อย่างไรก็ตามมันจะทำตัวเหมือนฟังก์ชั่นแท้ๆเท่าที่ความจริงที่ว่ามันจะคืนค่าเอาต์พุตเดียวกันสำหรับอินพุตเดียวกัน มีชื่อที่แตกต่างกันสำหรับฟังก์ชั่นประเภทนี้มันไม่มีชื่อหรือมันยังบริสุทธิ์อยู่และฉันเข้าใจผิดเกี่ยวกับคำนิยามของความบริสุทธิ์หรือไม่?

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

7
การเขียนโปรแกรมที่ไม่เปลี่ยนรูปแบบและ Object Oriented
ในภาษา OOP ส่วนใหญ่โดยทั่วไปวัตถุจะเปลี่ยนแปลงไม่ได้ด้วยชุดข้อยกเว้นที่ จำกัด (เช่น tuples และสตริงใน python) ในภาษาที่ใช้งานได้ส่วนใหญ่ข้อมูลจะไม่เปลี่ยนรูป วัตถุที่เปลี่ยนแปลงไม่ได้และไม่เปลี่ยนรูปแบบนำรายชื่อทั้งข้อดีและข้อเสียมาเอง มีภาษาที่พยายามจะแต่งงานกับแนวคิดทั้งสองอย่างเช่นสกาล่าที่คุณมีข้อมูลที่ไม่แน่นอนและไม่เปลี่ยนรูปแบบ (ประกาศอย่างชัดเจน) (โปรดแก้ไขให้ฉันถ้าฉันผิดฉันมีความรู้เรื่องสกาล่ามากกว่า จำกัด ) คำถามของฉันคือไม่สมบูรณ์ (! sic) เปลี่ยนไม่ -ie วัตถุที่ไม่สามารถกลายพันธุ์เมื่อมันได้รับ created- ทำให้รู้สึกใด ๆ ในบริบท OOP แล้ว? มีการออกแบบหรือการนำโมเดลดังกล่าวไปใช้หรือไม่? โดยพื้นฐานแล้วความไม่สามารถเปลี่ยนแปลงได้ (สมบูรณ์) และ OOP ตรงกันข้ามหรือมุมฉากหรือไม่? แรงจูงใจ: ใน OOP ปกติแล้วคุณจะดำเนินการกับข้อมูลการเปลี่ยนแปลง (การกลายพันธุ์) ข้อมูลพื้นฐานทำให้การอ้างอิงระหว่างวัตถุเหล่านั้น เช่นวัตถุของคลาสที่Personมีสมาชิกfatherอ้างอิงPersonวัตถุอื่น หากคุณเปลี่ยนชื่อพ่อสิ่งนี้จะปรากฏแก่วัตถุลูกทันทีโดยไม่จำเป็นต้องอัปเดต การไม่เปลี่ยนรูปคุณจะต้องสร้างวัตถุใหม่สำหรับทั้งพ่อและลูก แต่คุณจะมีข้อผิดพลาด kerfuffle น้อยลงมากเมื่อใช้วัตถุที่แชร์หลายเธรด GIL และอื่น ๆ

3
บูลีนการตั้งชื่อวิธียืนยันและเชิงลบ
วิธีการบูลีนควรใช้รูปแบบการยืนยันเสมอแม้ว่าจะใช้ในรูปแบบเชิงลบหรือไม่? สมมติว่าฉันต้องการตรวจสอบว่ามีเอนทิตีอยู่ก่อนสร้างหนึ่งหรือไม่อาร์กิวเมนต์ของฉันคือว่ารูปแบบแรกด้านล่างดีกว่ารูปแบบที่สองไม่ว่าจะใช้วิธีการนี้ในรูปแบบที่ยืนยันหรือไม่ โดยสรุปผมหาอ่านได้ง่ายขึ้นกว่าif(!affirmative) if(negative)ฉันมีเพื่อนร่วมงานที่ไม่เห็นด้วยความคิดเหรอ? แบบฟอร์มแรก: int entity_id = 42; if(!entity_exists(entity_id)) create_entity(entity_id); แบบฟอร์มที่สอง: int entity_id = 42; if(entity_not_exist(entity_id)) create_entity(entity_id);
43 naming  functions 

4
ตรวจสอบโค้ดด้วย git-flow และ gitub
ด้วย git และ gitub ปกติฉันสามารถทำการตรวจสอบโค้ดได้โดยเพียงแค่สร้างคำขอดึงของสาขาฟีเจอร์ที่ฉันกำลังทำงานกับสาขาหลัก ฉันจะตรวจสอบโค้ดด้วย git-flow ได้อย่างไร ด้วยเวิร์กโฟลว์เช่น "ฟีเจอร์การไหลของคอมไพล์เสร็จสิ้น" ฉันสับสนว่าการตรวจสอบโค้ดเกิดขึ้นจริงได้อย่างไรและการไหลเวียนของคอมไพล์หรือคอมไพล์สามารถช่วยในการตรวจสอบได้อย่างไร

3
หลักการเขียนโปรแกรม SOLID
เมื่อเวลาผ่านไปฉันสามารถเข้าใจสองส่วนของSOLID - "S" และ "O" “ O” - ฉันเรียนรู้หลักการแบบเปิดด้วยความช่วยเหลือของรูปแบบการสืบทอดและกลยุทธ์ “ S” - ฉันเรียนรู้หลักการความรับผิดชอบเดี่ยวขณะเรียนรู้ ORM (ตรรกะการคงอยู่ถูกพรากไปจากวัตถุโดเมน) ในทำนองเดียวกันภูมิภาค / ภารกิจที่ดีที่สุดในการเรียนรู้ส่วนอื่น ๆ ของ SOLID (“ L”,“ I” และ“ D”) คืออะไร? อ้างอิง msdn - อันตรายจากการละเมิดหลักการ SOLID ใน C # channel9 - การนำหลักการ SOLID ไปใช้ใน. NET / C # หลักการของ OOPS (หลักการที่เป็นของแข็ง)

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