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

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

9
จะจัดการโครงการ Linux / makefile ขนาดใหญ่ได้อย่างมีประสิทธิภาพได้อย่างไร
ฉันพัฒนาแอพพลิเคชั่น Windows ใน C ++ มานานกว่า 10 ปีแล้ว และเมื่อไม่นานมานี้ฉันเริ่มขุดลงไปในบางโครงการของ Linux และฉันก็ทนไม่ได้ว่าฉันเป็นคนที่ไม่ก่อผล ... ฉันเป็นผู้เรียนที่รวดเร็วและฉันใช้ Linux เป็นแพลตฟอร์มหลักมาระยะหนึ่งแล้ว และฉันรู้สึกสะดวกสบายกับเชลล์หลักการของระบบปฏิบัติการและ GUI แต่เมื่อพูดถึงพัฒนาการฉันรู้สึกเหมือนได้กลับไปโรงเรียน ทันทีที่ฉันเปิดโครงการขนาดใหญ่ขึ้นฉันติดอยู่ ส่วนใหญ่เป็นไฟล์ makefile ดังนั้นโดยพื้นฐานแล้วเมื่อฉันพยายามนำทางพวกเขาด้วย QT หรือ CodeBlocks อย่างดีที่สุดฉันสามารถใช้ระบบ Intellisense ในแต่ละไฟล์ และตัวแปรส่วนใหญ่เวลารั่วไหลจากขอบเขต จากนั้นมีสิ่งที่เป็นข้อกำหนดซึ่งดูเหมือนไม่มีอยู่ลองเข้าร่วมโครงการขนาดใหญ่จากแหล่งข้อมูลและคุณติดอยู่หลายวันเพราะการนำทางสู่คำจำกัดความยากมาก ... grep -r "this_def" . --include "*.cpp" --include "*.h"ดูเหมือนจะช้าและเงอะงะ และจากนั้นการดีบัก gdb ทำงานได้ แต่ไม่ว่าฉันจะทำอะไรดูเหมือนว่าจะเป็นปีหลัง WinDbg หรือ VisualStudio ดีบั๊ก และสิ่งเหล่านี้ทำให้ฉันหมดหวังฉันต้องการเขียนโค้ด แต่มันช้ามาก ... …
16 c++  linux 

4
Bill Gosper หมายความว่าอย่างไรโดยพูดว่าโครงสร้างข้อมูลเป็นเพียงภาษาโปรแกรมที่โง่? [ปิด]
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว มีใบเสนอราคาโดยRalph William Gosper, Jrที่พูดว่า: โครงสร้างข้อมูลเป็นเพียงภาษาการเขียนโปรแกรมที่โง่ สิ่งนี้หมายความว่าอย่างไร อนิจจาทั้งหมดที่ฉันสามารถพบได้ใน Google เกี่ยวกับมันคือการคัดลอก / วางอย่างไม่ลดละของราคาเสนอโดยไม่มีบริบทใด ๆ

8
ใช้ C ++ แต่ไม่ได้ใช้คุณสมบัติเฉพาะของภาษาควรเปลี่ยนเป็น C?
ฉันกำลังพัฒนาตัวจำลอง NES เป็นงานอดิเรกในเวลาว่าง ฉันใช้ C ++ เพราะเป็นภาษาที่ฉันใช้เป็นส่วนใหญ่รู้จักเป็นส่วนใหญ่และชอบมากที่สุด แต่ตอนนี้ฉันก้าวไปข้างหน้าในโครงการฉันรู้ว่าฉันไม่ได้ใช้คุณสมบัติเฉพาะของ C ++ และสามารถทำได้ใน C ธรรมดาและรับผลลัพธ์เดียวกัน ฉันไม่ได้ใช้เทมเพลตการใช้งานอุปกรณ์มากเกินไปความหลากหลายรูปแบบการสืบทอด แล้วคุณจะว่าอย่างไร ฉันควรอยู่ใน C ++ หรือเขียนใหม่ใน C? ฉันจะไม่ทำสิ่งนี้เพื่อเพิ่มประสิทธิภาพมันอาจมาเป็นผลข้างเคียง แต่ความคิดก็คือทำไมฉันต้องใช้ C ++ ถ้าฉันไม่ต้องการมัน? คุณลักษณะเฉพาะของ C ++ ที่ฉันใช้คือคลาสเพื่อห่อหุ้มข้อมูลและวิธีการ แต่ก็สามารถทำได้เช่นกันกับ structs และฟังก์ชั่นฉันใช้ใหม่และลบ แต่ก็สามารถใช้ malloc และฟรีและฉัน ใช้การสืบทอดสำหรับการเรียกกลับซึ่งสามารถทำได้ด้วยตัวชี้ไปยังฟังก์ชัน โปรดจำไว้ว่ามันเป็นโครงการงานอดิเรกฉันไม่มีกำหนดเวลาดังนั้นค่าใช้จ่ายและงานที่ต้องมีการเขียนใหม่ไม่ใช่ปัญหาอาจสนุกเช่นกัน ดังนั้นคำถามคือ C หรือ C ++
16 c++  c 

7
จำเป็นต้องอ่านทุก ๆ ไบต์เพื่อตรวจสอบว่าไฟล์ที่คัดลอกนั้นเหมือนต้นฉบับหรือไม่?
ฉันเพิ่งเรียนรู้เกี่ยวกับโปรแกรมที่เรียกว่า Total Commander เป็นการแทนที่ Windows Explorer และมีของตัวเองเพื่อคัดลอกไฟล์ ในการตรวจสอบว่าไฟล์เหมือนกันหรือไม่แทนที่จะคำนวณ CRC จะตรวจสอบทุกไบต์อย่างแท้จริงทีละตัวทั้งบนต้นฉบับและสำเนา คำถามของฉันคือ: จำเป็นหรือไม่ CRC หรือเทคนิคอื่นใดผิดพลาดหรือไม่ ในฐานะโปรแกรมเมอร์คุณควรลองใช้ระบบที่สมบูรณ์แบบ แต่ช้าหรือสุดยอดมากเกินไปหรือไม่?

7
จะ refactor code เป็นรหัสทั่วไปได้อย่างไร
พื้นหลัง ฉันกำลังทำงานในโครงการ C # ต่อเนื่อง ฉันไม่ใช่โปรแกรมเมอร์ C # ซึ่งส่วนใหญ่เป็นโปรแกรมเมอร์ C ++ ดังนั้นฉันจึงได้รับมอบหมายงานที่ง่ายและเป็นโครงสร้างใหม่ รหัสเป็นระเบียบ มันเป็นโครงการขนาดใหญ่ เนื่องจากลูกค้าของเราเรียกร้องให้มีการเปิดตัวคุณสมบัติใหม่ ๆ และการแก้ไขข้อผิดพลาดบ่อยครั้งนักพัฒนาอื่น ๆ ทั้งหมดจึงถูกบังคับให้ใช้วิธีการเดรัจฉานบังคับในขณะที่เข้ารหัส รหัสไม่สามารถรักษาได้สูงนักและผู้พัฒนารายอื่นก็เห็นด้วย ฉันไม่ได้มาที่นี่เพื่ออภิปรายว่าพวกเขาทำถูกหรือไม่ ขณะที่ฉันกำลังปรับโครงสร้างใหม่ฉันสงสัยว่าฉันกำลังทำอย่างถูกวิธีเพราะรหัสการปรับโครงสร้างใหม่ของฉันดูเหมือนจะซับซ้อน! นี่คืองานของฉันเป็นตัวอย่างง่ายๆ ปัญหา มีหกชั้นเรียน: A, B, C, D, และE ทุกชั้นเรียนมีฟังก์ชั่นF ExecJob()การใช้งานทั้งหกแบบนั้นคล้ายคลึงกันมาก โดยทั่วไปในตอนแรกA::ExecJob()เขียน จากนั้นรุ่นที่แตกต่างกันเล็กน้อยที่ถูกต้องซึ่งได้ดำเนินการในB::ExecJob()โดย A::ExecJob()copy-paste-การเปลี่ยนแปลงของ เมื่อจำเป็นต้องใช้เวอร์ชันอื่นที่แตกต่างกันเล็กน้อยC::ExecJob()เขียนขึ้นและต่อไป การใช้งานทั้งหกมีรหัสทั่วไปบางส่วนจากนั้นบางบรรทัดที่แตกต่างกันรหัสแล้วอีกบางรหัสทั่วไปและอื่น ๆ นี่เป็นตัวอย่างง่ายๆของการใช้งาน: A::ExecJob() { S1; S2; S3; S4; S5; } B::ExecJob() { S1; …

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

1
รหัสทั้งหมดสามารถแสดงเป็นชุดของการดำเนินการแผนที่ / ตัวกรอง / ลดได้หรือไม่?
ฉันเพิ่งได้รับ refactoring ชิ้นรหัสขนาดใหญ่และแทนที่ด้วยคำสั่ง Linq การลบอคติภาษา - Linq เป็นชุดของแผนที่ / ตัวกรองและลดการดำเนินการที่ทำงานตามลำดับของข้อมูล สิ่งนี้ทำให้ฉันคิดได้ว่าในทางทฤษฎีฉันจะสามารถทำสิ่งนี้ได้มากแค่ไหน ฉันจะสามารถเขียนรหัสพื้นฐานทั้งหมดลงในซีรีส์ใหม่ (หรือแม้แต่ชุดเดียว) ของแผนที่ / ตัวกรองและลดการทำงานได้ไหม น่าเสียดายที่ฉันได้รับเงินเพื่อทำสิ่งที่มีประโยชน์ดังนั้นฉันจึงไม่สามารถทดลองได้มากขึ้น แต่ฉันไม่สามารถนึกถึงโครงสร้างโค้ดใด ๆ ที่ไม่สามารถจัดโครงสร้างใหม่ได้ โค้ดที่ได้รับผลข้างเคียงสามารถแก้ไขได้ผ่านทาง monads แม้กระทั่งเอาต์พุตก็คือการแม็พแอดเดรสหน่วยความจำไปยังที่อยู่ของหน้าจอ มีอะไรที่ไม่สามารถเขียนใหม่ได้ (ในทางทฤษฎี) เป็นคำสั่ง Linq หรือไม่?

5
การหลีกเลี่ยงโอเปอเรเตอร์ใหม่ใน JavaScript - วิธีที่ดีกว่า
คำเตือน: นี่เป็นเรื่องยาว ขอให้มันง่าย ฉันต้องการหลีกเลี่ยงคำนำหน้าโอเปอเรเตอร์ใหม่ทุกครั้งที่ฉันเรียกนวกรรมิกใน JavaScript นี่เป็นเพราะฉันมักจะลืมมันและรหัสของฉันก็แย่มาก วิธีง่ายๆในการนี้คือ ... function Make(x) { if ( !(this instanceof arguments.callee) ) return new arguments.callee(x); // do your stuff... } แต่ฉันต้องการสิ่งนี้เพื่อยอมรับตัวแปร ของการโต้แย้งเช่นนี้ ... m1 = Make(); m2 = Make(1,2,3); m3 = Make('apple', 'banana'); ทางออกแรกทันทีน่าจะเป็นวิธี 'สมัคร' เช่นนี้ ... function Make() { if ( !(this instanceof arguments.callee) …
16 javascript 

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

2
MIT และลิขสิทธิ์
ฉันบริจาคให้กับห้องสมุดที่ได้รับอนุญาตภายใต้ใบอนุญาต MIT ในใบอนุญาตและในแต่ละไฟล์คลาสมันมีความคิดเห็นที่ด้านบนว่า: ลิขสิทธิ์ (c) 2011 Joe Bloggs <joe.bloggs@example.com> ฉันคิดว่าเขาเป็นเจ้าของลิขสิทธิ์ไฟล์และสามารถเปลี่ยนใบอนุญาตของไฟล์นั้นตามที่เห็นสมควร ถ้าฉันมีส่วนร่วมในห้องสมุดที่มีคลาสใหม่เขียนโดยฉันฉันสามารถเรียกร้องลิขสิทธิ์ของไฟล์นั้น และใส่: ลิขสิทธิ์ (c) 2011 Petah Piper <petah.piper@example.com> ที่ด้านบน?

5
ทำไมไวยากรณ์ C สำหรับอาร์เรย์พอยน์เตอร์และฟังก์ชั่นจึงถูกออกแบบด้วยวิธีนี้
หลังจากได้เห็น (และถาม!) คำถามมากมายคล้ายกับ อะไรint (*f)(int (*a)[5])หมายถึงใน C? และถึงแม้จะเห็นว่าพวกเขาสร้างโปรแกรมเพื่อช่วยให้ผู้คนเข้าใจไวยากรณ์ของ C ฉันก็อดไม่ได้ที่จะสงสัยว่า: ทำไมไวยากรณ์ของ C จึงถูกออกแบบด้วยวิธีนี้ ตัวอย่างเช่นถ้าฉันออกแบบพอยน์เตอร์ฉันจะแปล "ตัวชี้ไปยังอาเรย์ของพอยน์เตอร์ 10 องค์ประกอบ" เป็น int*[10]* p; และไม่ int* (*p)[10]; ซึ่งฉันรู้สึกว่าคนส่วนใหญ่จะเห็นด้วยน้อยกว่ามาก ดังนั้นฉันสงสัยว่าทำไมไวยากรณ์เอ่อไม่ได้ใช้งานง่าย? มีปัญหาเฉพาะหรือไม่ที่ไวยากรณ์แก้ปัญหา (อาจเป็นความกำกวม?) ที่ฉันไม่รู้?
16 c  syntax 

4
ทำไมสั้น, int และคิดค้นมานานใน C?
ฉันมีปัญหาในการทำความเข้าใจสิ่งที่เป็นวัตถุประสงค์ที่แน่นอนของการสร้างshort, intและlongชนิดข้อมูลใน C? เหตุผลที่ผมถามคือมันไม่ได้ดูเหมือนขนาดของพวกเขาจะกระโดด - พวกเขาอาจจะมีขนาดใดตราบใดที่shortมีขนาดเล็กกว่าintเช่น ในสถานการณ์ใดที่คุณควรใช้unsigned intหรือunsigned longตัวอย่างเช่น a แทนsize_tเมื่อคุณทำเช่นนั้นจะไม่มีความหวังของความเข้ากันได้ของไบนารี? (หากคุณไม่ทราบขนาดคุณจะรู้ได้อย่างไรว่าจะเลือกขนาดไหน)
16 c  data-types 

3
Async C # 5 จะสนับสนุนปัญหาการซิงโครไนซ์เธรด UI อย่างไร
ฉันได้ยินบางที่ Cync ที่รอคอย async จะยอดเยี่ยมมากจนคุณไม่ต้องกังวลเกี่ยวกับการทำเช่นนี้: if (InvokeRequired) { BeginInvoke(...); return; } // do your stuff here ดูเหมือนว่าการเรียกกลับของการดำเนินการที่รอจะเกิดขึ้นในเธรดต้นฉบับของผู้โทร มีการระบุไว้หลายครั้งโดย Eric Lippert และ Anders Hejlsberg ว่าคุณลักษณะนี้มีต้นกำเนิดมาจากความต้องการที่จะทำให้ UIs (โดยเฉพาะ UIs อุปกรณ์สัมผัส) ตอบสนองได้ดียิ่งขึ้น ฉันคิดว่าการใช้คุณสมบัติทั่วไปเช่นนี้จะเป็นดังนี้: public class Form1 : Form { // ... async void GetFurtherInfo() { var temperature = await GetCurrentTemperatureAsync(); label1.Text = temperature; …

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

3
คุณควรใช้ C # และ F # ด้วยกัน
ฉันรู้ว่าคุณสามารถใช้ C # และ F # ร่วมกันในโครงการเดียวกันได้ แต่ฉันไม่แน่ใจว่ามันเป็นความคิดที่ดีหรือไม่ สำหรับฉันแล้วการผสมสองรูปแบบการเข้ารหัสที่แตกต่างกันมาก (functional vs OOP) อาจทำให้เกิดการขาดการเชื่อมโยงในการออกแบบ ถูกต้องหรือไม่
16 design  f# 

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