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

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

3
ที่อยู่ 0000000C เป็นที่อยู่พิเศษหรือไม่
เมื่อการเขียนโปรแกรมบางครั้งสิ่งที่แตก คุณทำผิดพลาดและโปรแกรมของคุณพยายามอ่านจากที่อยู่ผิด สิ่งหนึ่งที่โดดเด่นสำหรับฉันที่มักจะมีข้อยกเว้นเหล่านั้น: Access violation at address 012D37BC in module 'myprog.exe'. Read of address 0000000C. ตอนนี้ฉันเห็นบันทึกข้อผิดพลาดมากมายและสิ่งที่โดดเด่นสำหรับฉันคือ: 0000000C นี่เป็นที่อยู่ "พิเศษ" หรือไม่ ฉันเห็นการละเมิดการเข้าถึงอื่น ๆ ที่มีการอ่านที่ไม่ดี แต่ที่อยู่ดูเหมือนจะสุ่ม แต่ที่นี่กลับมาในสถานการณ์ที่แตกต่างกันโดยสิ้นเชิง

3
การมีซอร์สโค้ดสำหรับโครงการ Go นอก GOPATH เป็นความคิดที่ไม่ดี
ฉันกำลังทำงานในโครงการใหม่โดยใช้ Go และเราทุกคนยังใหม่กับ Go เรากำลังติดตามโครงสร้างไดเรคทอรี go มาตรฐานและมีโค้ดทั้งหมดอยู่ด้านล่าง $ GOPATH / src / github.com / CompanyName / projectname ซึ่งก็เป็นรากของพื้นที่เก็บข้อมูลคอมไพล์ รูปแบบเส้นทางที่แนะนำมาตรฐานดูเหมือนแปลกโดยเฉพาะอย่างยิ่งถ้าเรากำลังทำงานในโครงการหลายภาษาเช่นส่วนที่เหลือตาม Go / http backend และ html / javascript front-end ในกรณีนี้ฉันอาจต้องการให้โครงสร้างโครงการของฉันเป็นดังนี้: / doc/ src/ server/ main.go module1/ module.go client/ index.html Makefile แต่จริง ๆ แล้วจำเป็นต้องวางรหัสไว้ใน GOPATH หรือไม่ ในความพยายามฉันได้สร้างโปรแกรมขนาดเล็กที่ซอร์สโค้ดอยู่นอก GOPATH ฉันได้อย่างง่ายดายสามารถแยกโครงการออกเป็นแพคเกจเพื่อให้mainแพคเกจสามารถอ้างอิงfooแพคเกจในโฟลเดอร์โดยใช้foo/import "./foo" เท่าที่ฉันเห็นมีสองสิ่งที่ไม่เชื่อฟังฉัน: รหัสอื่นไม่สามารถนำเข้ารหัสนี้ได้ …
32 go 

6
เหตุใดโปรแกรมจึงใช้สแตกการโทรหากมีการเรียกใช้ฟังก์ชันซ้อนกัน?
ทำไมคอมไพเลอร์ถึงไม่มีโปรแกรมเช่นนี้: function a(b) { return b^2 }; function c(b) { return a(b) + 5 }; และแปลงเป็นโปรแกรมเช่นนี้: function c(b) { return b^2 + 5 }; ด้วยเหตุนี้จึงไม่จำเป็นต้องให้คอมพิวเตอร์จำที่อยู่ส่งคืนของ c (b) ฉันคิดว่าพื้นที่ฮาร์ดดิสก์ที่เพิ่มขึ้นและ RAM ที่จำเป็นในการจัดเก็บโปรแกรมและสนับสนุนการรวบรวม (ตามลำดับ) คือเหตุผลที่เราใช้ call stack ถูกต้องไหม

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

6
เหตุใดผู้คนจึงใช้ REST API แทน DBAL
ในอดีตที่ผ่านมาทั้งสอง บริษัท ฉันเคยอยู่ที่ REST API มีอยู่สำหรับการสืบค้นข้อมูลผ่านเว็บแอป กล่าวคือ แทนที่จะมีเว็บแอปทำ SQL โดยตรงจะเรียกใช้ REST API และนั่นคือ SQL และส่งคืนผลลัพธ์ คำถามของฉันคือ ... ทำไมจึงทำเช่นนี้? ถ้ามันจะถูกเปิดเผยต่อบุคคลที่สามฉันสามารถเข้าใจได้ ดีกว่าที่จะเปิดเผย REST API ที่ จำกัด กว่า DB แบบเต็ม แต่ในทั้งสอง บริษัท นี้ไม่ได้เป็นเช่นนั้น มีคนแนะนำฉันว่า REST API เหล่านี้ทำให้การสลับระหว่าง DBMS ง่ายขึ้น แต่นั่นไม่ใช่จุดของ abstraction layer ของฐานข้อมูล (DBAL) ใช่ไหม บางทีคุณอาจใช้ ORM เป็น DBAL ของคุณหรือคุณอาจเขียน SQL ดิบและให้ DBAL …

4
หลักการของความรู้น้อยที่สุด
ฉันเข้าใจแรงจูงใจที่อยู่เบื้องหลังหลักการของความรู้น้อยที่สุดแต่ฉันพบข้อเสียบางอย่างถ้าฉันพยายามนำไปใช้ในการออกแบบของฉัน หนึ่งในตัวอย่างของหลักการนี้ (จริง ๆ แล้วว่าจะไม่ใช้) ซึ่งฉันพบในหนังสือรูปแบบการออกแบบหัวแรกระบุว่ามันผิดที่จะเรียกวิธีการบนวัตถุที่ถูกส่งกลับจากการเรียกวิธีการอื่น ๆ ในแง่ของหลักการนี้ . แต่ดูเหมือนว่าบางครั้งจำเป็นต้องใช้ความสามารถนี้มาก ตัวอย่างเช่น: ฉันมีหลายคลาส: คลาสการจับภาพวิดีโอ, คลาสตัวเข้ารหัส, คลาสสตรีมและพวกเขาทั้งหมดใช้คลาสพื้นฐานอื่น ๆ , VideoFrame และเนื่องจากพวกเขามีปฏิสัมพันธ์กันพวกเขาสามารถทำสิ่งนี้ได้: streamer รหัสชั้นเรียน ... frame = encoder->WaitEncoderFrame() frame->DoOrGetSomething(); .... อย่างที่คุณเห็นหลักการนี้ไม่ได้ถูกนำไปใช้ที่นี่ สามารถนำหลักการนี้ไปใช้ที่นี่หรือว่าหลักการนี้ไม่สามารถนำไปใช้ในการออกแบบเช่นนี้ได้หรือไม่?

5
ทำไม code-base ในการพัฒนาระดับ n มีจำนวนเท่ากันถ้าไม่มากกว่านั้นโค้ด JavaScript ในตอนนี้?
ฉันทำโปรแกรมเว็บมานานแล้วและที่ไหนสักแห่งฉันก็ไม่รู้ว่าทำไมเราถึงทำสิ่งที่เราทำในวันนี้ (หรือเรามาทำสิ่งต่าง ๆ แบบนี้)? ฉันเริ่มต้นด้วยการพัฒนาเว็บ ASP ขั้นพื้นฐานและในช่วงแรกตรรกะการแสดงผลและตรรกะทางธุรกิจได้ปะปนกันบนหน้าเว็บ การพัฒนาฝั่งไคลเอ็นต์มีความแตกต่างกันอย่างมาก (VBScript, รสชาติที่แตกต่างกันของ JavaScript) และเรามีคำเตือนมากมายเกี่ยวกับการตรวจสอบความถูกต้องของฝั่งเซิร์ฟเวอร์ (ดังนั้นฉันจึงอยู่ห่างจากตรรกะฝั่งไคลเอ็นต์) จากนั้นฉันย้ายไปที่ ColdFusion ชั่วครู่หนึ่ง ColdFusion อาจเป็นกรอบการพัฒนาเว็บแรกที่แยกการแสดงผลและตรรกะทางธุรกิจโดยใช้แท็ก ดูเหมือนจะชัดเจนสำหรับฉัน แต่ verbose มากและ ColdFusion ไม่ได้เป็นที่ต้องการของตลาดสูงและดังนั้นฉันจึงเดินหน้าต่อไป จากนั้นฉันก็กระโดดขึ้นไปบนเกวียน ASP.NET และเริ่มใช้วิธี MVC ของพวกเขา ฉันก็รู้ว่า Java ดูเหมือนจะเป็นภาษาหอคอยงาช้างของระบบองค์กรและยังลองใช้วิธี MVC ของพวกเขา ต่อมา ASP.NET พัฒนารูปแบบการออกแบบ MVVM นี้และ Java (แม่นยำ J2EE หรือ JEE) ก็ดิ้นรนและออกมาด้วยวิธีการ MVC2 แต่วันนี้สิ่งที่ฉันได้ค้นพบคือการเขียนโปรแกรมแบ็คเอนด์ไม่ได้อยู่ที่ความตื่นเต้นและความก้าวหน้าอีกต่อไป นอกจากนี้แนวปฏิบัติ MVC บนฝั่งเซิร์ฟเวอร์ดูเหมือนจะล้าสมัยแล้ว …

3
การฉีดขึ้นรูปแบบพึ่งพาจะเพิ่มการมีเพศสัมพันธ์ได้อย่างไร
ในหน้า Wikipedia เกี่ยวกับการฉีดพึ่งพาส่วนข้อเสียบอกเรานี้: การฉีดพึ่งพาเพิ่มการมีเพศสัมพันธ์โดยกำหนดให้ผู้ใช้ระบบย่อยเพื่อให้ความต้องการของระบบย่อยที่ มีการเชื่อมโยงไปยังบทความกับฉีดพึ่งพา การพึ่งพาการฉีดทำให้คลาสใช้อินเทอร์เฟซแทนการใช้งานที่เป็นรูปธรรม นั่นน่าจะส่งผลให้ข้อต่อลดลงไม่ใช่เหรอ? ฉันพลาดอะไรไป การพึ่งพาการฉีดเพิ่มการมีเพศสัมพันธ์ระหว่างชั้นเรียนเป็นอย่างไร

11
มีข้อแตกต่างที่เป็นสาระสำคัญระหว่างข้อความค้นหาที่เข้าร่วมโดย WHERE ส่วนคำสั่งและแบบสอบถามโดยใช้ JOIN จริงหรือไม่
ในLearn SQL the Hard Way (แบบฝึกหัดที่หก)ผู้แต่งนำเสนอแบบสอบถามต่อไปนี้: SELECT pet.id, pet.name, pet.age, pet.dead FROM pet, person_pet, person WHERE pet.id = person_pet.pet_id AND person_pet.person_id = person.id AND person.first_name = "Zed"; แล้วพูดต่อไปว่า: จริงๆแล้วมีวิธีอื่น ๆ ในการรับข้อความค้นหาประเภทนี้เพื่อเรียกว่า "เข้าร่วม" ฉันกำลังหลีกเลี่ยงแนวคิดเหล่านี้ในตอนนี้เพราะพวกเขาสับสนอย่างบ้าคลั่ง เพียงแค่ใช้วิธีนี้ในการเข้าร่วมตารางในตอนนี้และไม่สนใจคนที่พยายามบอก [คุณ] ว่านี่ช้ากว่าหรือ "ชนชั้นต่ำ" มันเป็นเรื่องจริงเหรอ? ทำไมหรือทำไมไม่?
32 sql 

1
เหตุใดฉันจึงควรใช้ Bower [ปิด]
ฉันสามารถชื่นชมประโยชน์ของผู้จัดการแพ็คเกจอย่าง Python pip, Node npmหรือ Ruby Gems เนื่องจากพวกเขากำลังทำมากกว่าการเพิ่มไฟล์ในเส้นทางแอปพลิเคชันของคุณ บางทีฉันหายไปจุดหรือฉันเป็นป้าน แต่ที่นี่เป็นเชิงลบฉันสามารถดู: แยกขั้นตอนเมื่อสร้างโครงการ แยกการติดตั้งผ่านตัวจัดการแพ็คเกจอื่น (yo dawg) ความยุ่งเหยิงมากขึ้นในโครงการรากด้วยbower.jsonและ / หรือ.bowerrc เชื่อมั่นในรีจิสทรีที่ทันสมัยถูกต้องและพร้อมใช้งาน การนำเข้า / การอ้างอิงถึงสิ่งต่าง ๆ เช่นรูปภาพจะไม่ทำงาน ทับซ้อนขนาดใหญ่ที่มี npm และมักจะไม่ชัดเจนว่าจะใช้ทรัพยากรใดเมื่อใด บวกฉันสามารถเห็นเหล่านี้: ฉันไม่ต้องดาวน์โหลดการอ้างอิงด้วยตนเอง เลือกติดตั้งแพคเกจเป็นส่วนหนึ่งของนั่งร้านขึ้นอยู่กับผู้ใช้แจ้งหรือไม่ชอบ ฉันอยากรู้ถึงผลประโยชน์ใด ๆ ที่ฉันไม่รู้และฉันควรจะบอกว่าฉันไม่ได้พยายามยั่วยุฉันอยากรู้อย่างแท้จริง

9
เราควรหลีกเลี่ยงการใช้รูปแบบการออกแบบในโครงการที่เปลี่ยนแปลงตลอดเวลาหรือไม่?
เพื่อนของฉันกำลังทำงานให้กับ บริษัท เล็ก ๆ ในโครงการที่ผู้พัฒนาทุกคนจะเกลียด: เขาถูกกดดันให้ปล่อยตัวโดยเร็วที่สุดเขาเป็นคนเดียวที่ดูเหมือนจะสนใจหนี้ทางเทคนิคลูกค้าไม่มีพื้นฐานด้านเทคนิค ฯลฯ เขาเล่าเรื่องซึ่งทำให้ฉันคิดถึงความเหมาะสมของรูปแบบการออกแบบในโครงการเช่นนี้ นี่คือเรื่องราวของ เราต้องแสดงผลิตภัณฑ์ในที่ต่างๆบนเว็บไซต์ ตัวอย่างเช่นผู้จัดการเนื้อหาสามารถดูผลิตภัณฑ์ แต่ยังรวมถึงผู้ใช้หรือคู่ค้าผ่าน API บางครั้งข้อมูลหายไปจากผลิตภัณฑ์ตัวอย่างเช่นกลุ่มหนึ่งไม่มีราคาเมื่อสร้างผลิตภัณฑ์ แต่ยังไม่ได้ระบุราคา บางคนไม่มีคำอธิบาย (คำอธิบายเป็นวัตถุที่ซับซ้อนที่มีประวัติดัดแปลงเนื้อหาที่แปลเป็นภาษาท้องถิ่น ฯลฯ ) บางคนขาดข้อมูลการจัดส่ง แรงบันดาลใจจากการอ่านล่าสุดของฉันเกี่ยวกับรูปแบบการออกแบบผมคิดว่านี่คือโอกาสที่ดีที่จะใช้ที่มีมนต์ขลังรูปแบบวัตถุ Null ดังนั้นฉันจึงทำและทุกอย่างราบรื่นและสะอาด มีเพียงแค่โทรproduct.Price.ToString("c")เพื่อแสดงราคาหรือproduct.Description.Currentแสดงคำอธิบาย; ไม่จำเป็นต้องมีเงื่อนไข จนกระทั่งวันหนึ่งผู้มีส่วนได้เสียขอให้แสดงต่างกันใน API โดยมี a nullใน JSON และยังแตกต่างกันสำหรับผู้จัดการเนื้อหาด้วยการแสดง "ราคาไม่ระบุ [เปลี่ยน]" และฉันต้องฆ่ารูปแบบวัตถุ Null ที่รักของฉันเพราะมันไม่จำเป็นอีกต่อไป ในทำนองเดียวกันฉันต้องลบโรงงานนามธรรมไม่กี่แห่งและผู้สร้างไม่กี่คนฉันลงเอยด้วยการเปลี่ยนรูปแบบ Facade ที่สวยงามของฉันโดยการโทรโดยตรงและน่าเกลียดเพราะอินเทอร์เฟซพื้นฐานเปลี่ยนไปสองครั้งต่อวันเป็นเวลาสามเดือน เมื่อข้อกำหนดบอกว่าวัตถุที่เกี่ยวข้องจะต้องแตกต่างกันขึ้นอยู่กับบริบท มากกว่าสามสัปดาห์ของการทำงานประกอบด้วยการเพิ่มรูปแบบการออกแบบจากนั้นฉีกออกเป็นชิ้น ๆ ในอีกหนึ่งเดือนต่อมาและในที่สุดโค้ดของฉันก็กลายเป็นสปาเก็ตตี้มากพอที่จะเป็นไปไม่ได้ที่จะรักษาโดยใครก็ตาม จะเป็นการดีกว่าหรือที่จะไม่ใช้รูปแบบเหล่านั้นตั้งแต่แรก? อันที่จริงฉันต้องทำงานด้วยตัวเองในโครงการประเภทต่างๆที่ความต้องการมีการเปลี่ยนแปลงอยู่ตลอดเวลาและถูกกำหนดโดยบุคคลที่ไม่ได้อยู่ในใจของการทำงานร่วมกันหรือการเชื่อมโยงของผลิตภัณฑ์ ในบริบทนี้มันไม่สำคัญว่าคุณจะคล่องตัวแค่ไหนคุณจะมาพร้อมกับวิธีการแก้ปัญหาที่สง่างามและเมื่อคุณใช้มันในที่สุดคุณจะได้เรียนรู้ว่าความต้องการเปลี่ยนแปลงไปอย่างมากและโซลูชันที่สง่างามของคุณไม่เหมาะสม ได้อีกต่อไป. อะไรจะเป็นทางออกในกรณีนี้? ไม่ได้ใช้รูปแบบการออกแบบหยุดคิดและเขียนรหัสโดยตรงหรือไม่ …

7
เขียนใน C เพื่อประสิทธิภาพ? [ปิด]
ฉันรู้ว่าฉันเคยได้ยินบ่อยๆว่า C มักจะมีข้อได้เปรียบด้านประสิทธิภาพมากกว่า C ++ ฉันไม่ได้คิดอย่างอื่นจนกว่าฉันจะรู้ว่า MSVC ดูเหมือนจะไม่สนับสนุนมาตรฐานใหม่ล่าสุดของ C แต่รุ่นล่าสุดรองรับ C99 (เท่าที่ฉันรู้) ฉันวางแผนที่จะเขียนไลบรารีด้วยโค้ดบางอย่างเพื่อให้แสดงผลใน OpenGL เพื่อให้ฉันสามารถนำมาใช้ซ้ำได้ ฉันวางแผนที่จะเขียนไลบรารีใน C เนื่องจากการเพิ่มประสิทธิภาพใด ๆ ก็ยินดีต้อนรับเมื่อมันมาถึงกราฟิก แต่มันจะคุ้มหรือไม่ รหัสที่ใช้ไลบรารีน่าจะเขียนใน C ++ และฉันต้องการรหัสใน C ++ โดยทั่วไป อย่างไรก็ตามถ้ามันสร้างความแตกต่างเล็กน้อยในการแสดงฉันก็น่าจะไปกับ C อาจสังเกตได้ว่าห้องสมุดนี้จะเป็นสิ่งที่ฉันจะใช้ในการทำงานกับ Windows / OS X / Linux และฉันอาจรวบรวมทุกอย่างโดยพื้นฐาน (MSVC สำหรับ Windows, Clang หรือ GCC สำหรับ OS X และ GCC สำหรับ …

4
การเขียนโปรแกรมเชิงขั้นตอนคืออะไร? มันแตกต่างจาก OOP อย่างไร? มันเหมือนกับการเขียนโปรแกรมฟังก์ชั่น?
ฉันกำลังเขียนโปรแกรมในJavaในรูปแบบ object-oriented (OO) OOP มาถึงฉันอย่างสังหรณ์ใจ แต่ฉันมีความรู้น้อยมากเกี่ยวกับการเขียนโปรแกรมชนิดอื่น การเขียนโปรแกรมเชิงขั้นตอนคืออะไร? มันแตกต่างจาก OOP อย่างไร? มันเป็นสิ่งเดียวกับการเขียนโปรแกรมฟังก์ชั่น ? ฉันเคยคิดว่าการเขียนโปรแกรมทั้งหมดที่ไม่ใช่ OO นั้นเป็นขั้นตอน แต่ฉันเริ่มคิดว่ามันไม่เป็นความจริง

4
รัฐอะไรรัฐที่เปลี่ยนแปลงไม่ได้และรัฐที่ไม่เปลี่ยนรูป?
นี่เป็นคำถามสำหรับมือใหม่ แต่ฉันไม่พบคำตอบที่เพียงพอสำหรับมือใหม่ใน Google ผู้คนหมายถึงอะไรเมื่อพวกเขาพูดว่า 'state' - ในการเขียนโปรแกรมโดยทั่วไปและในการเขียนโปรแกรม OO โดยเฉพาะ? นอกจากนี้รัฐที่ไม่แน่นอนและไม่แน่นอนคืออะไร - อีกครั้งโดยทั่วไปในการเขียนโปรแกรมและยังเฉพาะใน OOP?
32 state 

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

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