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

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

1
เหตุใดโลกของ. Net จึงดูเหมือนว่าจะโอบกอดสายเวทมนตร์แทนที่จะเป็นทางเลือกที่ถูกพิมพ์อย่างคงที่?
ดังนั้นฉันทำงานใน. Net ฉันทำโครงการโอเพนซอร์สใน. Net หนึ่งในปัญหาที่ใหญ่ที่สุดของฉันกับมันไม่จำเป็นต้องมี. Net แต่กับชุมชนและกรอบรอบ ๆ มัน ดูเหมือนทุกที่แผนการตั้งชื่อและสตริงที่มีมนต์ขลังจะถือเป็นวิธีที่ดีที่สุดในการทำทุกอย่าง คำสั่งตัวหนา แต่ดูที่: ASP.Net MVC: สวัสดีเส้นทางโลก: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); สิ่งนี้หมายความว่า ASP.Net MVC จะค้นหาHomeControllerรหัสของคุณ สร้างอินสแตนซ์ใหม่ของมันแล้วเรียกใช้ฟังก์ชันIndex กับidพารามิเตอร์บางประเภท แล้วมีสิ่งอื่น ๆ เช่น: …

3
ประโยชน์ของการเขียนไปยังตำแหน่งชั่วคราวคืออะไรแล้วคัดลอกไปยังปลายทางที่ต้องการ
ฉันกำลังเขียนแอปพลิเคชันที่ทำงานกับภาพถ่ายดาวเทียมและเจ้านายของฉันขอให้ฉันดูแอปพลิเคชั่นเชิงพาณิชย์บางส่วนและดูว่ามันทำงานอย่างไร ฉันพบพฤติกรรมแปลก ๆ และเมื่อฉันมองฉันก็พบว่ามันอยู่ในแอปพลิเคชันมาตรฐานอื่น ๆ เช่นกัน โปรแกรมเหล่านี้ก่อนเขียนไปยังโฟลเดอร์ temp แล้วคัดลอกไปยังปลายทางที่ต้องการ ตัวอย่าง: 7zip แรกแยกไปยังโฟลเดอร์ temp แล้วคัดลอกข้อมูลที่แยกแล้วไปยังตำแหน่งที่คุณได้ขอให้แยกข้อมูลไป ฉันเห็นปัญหาหลายประการด้วยวิธีนี้: โฟลเดอร์ temp อาจมีพื้นที่ไม่เพียงพอในขณะที่ตำแหน่งที่ตั้งใจไว้อาจมีพื้นที่ว่างจำนวนมาก หากเป็นไฟล์ขนาดใหญ่อาจต้องใช้เวลาในการดำเนินการคัดลอก ฉันคิดเกี่ยวกับมันมาก แต่ฉันไม่เห็นจุดบวกเดียวที่จะทำสิ่งนี้ ฉันทำบางสิ่งหายไปหรือมีประโยชน์อย่างแท้จริงในการทำสิ่งนี้หรือไม่?

9
วิธีและเหตุผลในการตัดสินใจระหว่างวิธีการตั้งชื่อด้วยคำนำหน้า "รับ" และ "ค้นหา"
ฉันมักจะมีปัญหาในการหาว่าผมควรจะตั้งชื่อวิธีการบางอย่างที่เริ่มต้นด้วยเมื่อเทียบกับgetSomethingfindSomething ปัญหาอยู่ในการสร้างผู้ช่วยเหลือสำหรับ API ที่ออกแบบมาไม่ดี สิ่งนี้มักจะเกิดขึ้นเมื่อรับข้อมูลจากวัตถุซึ่งต้องการวัตถุเป็นพารามิเตอร์ นี่คือตัวอย่างง่ายๆ: public String getRevision(Item item) { service.load(item, "revision"); // there is usually more work to do before getting the data.. try { return item.get_revision(); } catch(NotLoadedException exception) { log.error("Property named 'property_name' was not loaded", exception); } return null; } วิธีการและเหตุผลในการตัดสินใจระหว่างการตั้งชื่อวิธีการนี้เป็นgetRevision()หรือfindRevision()?
47 naming  methods 

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

3
ตัวสร้างการฉีดคืออะไร?
ฉันได้ดูคำว่า constructor injection และการพึ่งพาในขณะที่อ่านบทความเกี่ยวกับรูปแบบการออกแบบ (Service locator) เมื่อฉันไปเกี่ยวกับการฉีดคอนสตรัคเตอร์ฉันได้ผลลัพธ์ที่ไม่ชัดเจนซึ่งทำให้ฉันเช็คอินที่นี่ ตัวสร้างการฉีดคืออะไร? นี่เป็นการฉีดแบบพึ่งพาหรือไม่? ตัวอย่างที่ยอมรับได้จะเป็นความช่วยเหลือที่ดี! แก้ไข กลับมาที่คำถามนี้อีกครั้งหลังจากผ่านไปหนึ่งสัปดาห์ฉันจะเห็นว่าฉันหลงทางได้อย่างไร ... ในกรณีที่มีใครปรากฏขึ้นที่นี่ฉันจะอัปเดตคำถามโดยมีการเรียนรู้เล็กน้อยของฉัน กรุณาอย่าลังเลที่จะแสดงความคิดเห็น / ถูกต้อง คอนสตรัคเตอร์การฉีดและการฉีดคุณสมบัติเป็นสองประเภทของการพึ่งพาการฉีด

5
มีข้อเสียหรือปัญหาเกี่ยวกับ Haskell หรือไม่?
ฉันกำลังดูการดำน้ำใน Haskell สำหรับโครงการส่วนตัวของฉันต่อไป เหตุผลที่ฉันจัดการกับ Haskell คือ: ทำให้หัวของฉันเป็นภาษาที่ใช้งานได้อย่างหมดจด ความเร็ว. ในขณะที่ฉันแน่ใจว่าสิ่งนี้สามารถโต้เถียงได้ทำโปรไฟล์ว่าฉันเห็นเล็บ Haskell ใกล้กับ C ++ (และดูเหมือนว่าจะเร็วกว่า Erlang เล็กน้อย) ความเร็ว. วิปริตเว็บเซิร์ฟเวอร์น่าจะเป็นไปอย่างรวดเร็วบ้าในการเปรียบเทียบกับแทบทุกอย่างอื่น สิ่งที่ฉันกำลังมองหาคือข้อเสียหรือปัญหาที่มาพร้อมกับ Haskell เว็บมีข้อมูลจำนวนมหาศาลเกี่ยวกับสาเหตุที่ Haskell เป็นสิ่งที่ดี แต่ฉันไม่ได้พบหัวข้อมากมายเกี่ยวกับด้านที่น่าเกลียดของมัน (นอกเหนือจากการเกี่ยวกับไวยากรณ์ที่ฉันไม่สนใจเลย) ตัวอย่างของสิ่งที่ฉันกำลังมองหาอาจเป็น PILON ของ GIL บางสิ่งที่ไม่ได้อยู่ในหัวจนฉันเริ่มมองเห็นการใช้งานพร้อมกันในสภาพแวดล้อม CPython
47 haskell 

4
กรณีของรหัส obfuscation?
อะไรคือเหตุผลอันดับต้น ๆ ในการเขียนรหัสที่ยุ่งเหยิงในแง่ของผลประโยชน์ที่แท้จริงให้กับผู้ที่พัฒนารหัสและธุรกิจที่ใช้งานรหัสนั้น (หากรหัสที่เป็นปัญหานั้นเป็นรหัส commericial จริง ๆ ) มีกรณีเอกสาร (มีให้บริการทางออนไลน์ในบางสถานที่) ซึ่งอธิบายเมื่อการทำให้งงงวยดีกว่าเลวหรือไม่? มีตัวอย่างที่รู้จักกันดีหรือไม่ตัวอย่างเช่นการทำให้งงงวยได้รับการพิสูจน์แล้วว่ามีความหมายในการหน่วงเวลาให้บุคคลที่สามประสงค์ร้ายไม่ให้รับโค้ด ดูเหมือนว่าเช่นเดียวกับการกลิ้งหน้าต่างรถของคุณจะไม่หยุดคนจากการทำลายพวกเขาและขโมยสเตอริโอของคุณ obfuscating รหัสของคุณเพียงแค่ทำให้คนซื่อสัตย์ซื่อสัตย์ ========= พื้นหลัง: นี่เป็นความพยายามที่จะท้าทายสมมติฐานของฉันในหัวข้อนี้ ฉันมักจะต่อต้านการใช้รหัสทำให้งงงวยโดยทั่วไป แต่ฉันอยากรู้ว่าถ้าฉันขาดอะไร ฉันเข้าใจว่าทำไมในกรณีเช่น JavaScript การย่อขนาดช่วยให้สิ่งต่าง ๆ โหลดเร็วขึ้นและทั้งหมด (มีประโยชน์ในการใช้งานจริงที่นั่น) แต่ฉันไม่สามารถคิดได้ด้วยเหตุผลเดียวว่าทำไมรหัส obfuscation เพื่อจุดประสงค์ในการเป็นอุปสรรค ในการค้นพบว่าส่วนของโค้ด / อัลกอริทึมนั้นมีประสิทธิภาพสำหรับวัตถุประสงค์ใด ๆ ก็ตาม ด้วยโอเพนซอร์สที่กำลังเป็นที่นิยมอย่างบ้าคลั่งคำถามดูเหมือนจะ "แชร์รหัสหรือทำให้เป็นกรรมสิทธิ์?" เมื่อพูดถึงรหัสเชิงพาณิชย์ฉันสามารถเข้าใจได้ว่าทำไมคุณไม่สามารถแบ่งปันทุกอย่างได้และคุณมีกฎหมายอยู่ข้างคุณเพื่อต่อสู้กับการโจรกรรม BTW ถ้ามีคนเหตุผลที่จะเขียนรหัส obfuscated คือ "รักษาความปลอดภัยงาน" แล้วฉันจะยิงโปรแกรมเมอร์ใดพบว่ามีอย่างต่อเนื่องและจงใจใช้ obfuscation กับวัตถุประสงค์ในการช่วยให้งานของพวกเขาจนกว่าพวกเขาพอจะแสดงให้เห็นว่ามันมีบางส่วน ผลประโยชน์ทางธุรกิจ มันเป็นทีมต่อต้านอย่างสมบูรณ์ที่ไร้สาระและชี้ไปที่ใครบางคนที่เกี่ยวข้องกับการทำให้งานของพวกเขาผ่านแนวปฏิบัติที่เข้าใจผิดมากขึ้นจากนั้นก็ทำการรักษาเพราะพวกเขาเขียนซอฟต์แวร์ที่ยอดเยี่ยม ฉันพูดถึงกรณีเฉพาะนี้เพราะในขณะที่ฉันตระหนักว่าผู้คนมักจะพูดเล่นฉันต้องการยับยั้งคำตอบใด ๆ ที่การกระตุกขั้นพื้นฐานคือการทำให้งงงวยเพื่อความมั่นคงในการทำงานเพียงอย่างเดียวเป็นความคิดที่ดี

3
การพัฒนา Android โดยใช้ C และ C ++ [ปิด]
ฉันเป็นนักพัฒนา C, C ++ ฉันสนใจในการพัฒนาอุปกรณ์พกพา ฉันอยากรู้ว่าฉันจะพัฒนาแอพ Android โดยใช้ C และ C ++ ได้อย่างไรฉันได้อ่านมาแล้วว่าพวกเขากำลังจัดหาชุดเครื่องมือสำหรับนักพัฒนา C, C ++ แต่มันไม่มีฟังก์ชั่นทั้งหมดเหมือนชุด Java ฉันควรจะไปหาชุดพัฒนา C / C ++ หรือดีกว่าที่จะเรียนรู้จาวาเพราะพวกเขาอาจไม่ได้มีฟังก์ชั่นทั้งหมดในอนาคต?
47 c++  c  android 

4
ทำไม #include <iostream.h> ไม่ดี
ฉันกำลังอ่านหัวข้ออื่นที่ชายคนหนึ่งถามเกี่ยวกับหนังสือ C ++ สำหรับผู้เริ่มต้นและหนึ่งในโปรแกรมเมอร์ที่ตอบรับเขียนสิ่งนี้: คำเตือนบางอย่าง: หลีกเลี่ยงหนังสือทุกเล่มที่มีคำว่า "สวัสดีโลก" ที่ระบุ #include &lt;iostream.h&gt; ฉันเปิดหนังสือ C ++ ของฉันและได้รวมส่วนหัว iostream อย่างที่แสดงไว้ด้านบน เหตุใดจึงไม่ดี คำแนะนำอื่น ๆ ที่ฉันควรทราบเมื่อเรียนรู้ C ++ คืออะไร พื้นหลัง: ฉันมีความเชี่ยวชาญใน C และฉันจะเริ่มเรียนรู้ C ++ ภาคการศึกษาถัดไปนี้

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

9
ทำไมมันเป็นไปไม่ได้ที่จะสร้างตัวเลขสุ่มอย่างแท้จริง?
ฉันพยายามแก้ปัญหางานอดิเรกที่ต้องสร้างตัวเลขสุ่มนับล้าน แต่ฉันก็รู้ได้อย่างรวดเร็วว่ามันยากที่จะทำให้มันไม่เหมือนใคร ฉันหยิบคู่มือการออกแบบอัลกอริทึมขึ้นมาเพื่ออ่านเกี่ยวกับการสร้างตัวเลขสุ่ม มีย่อหน้าต่อไปนี้ที่ฉันไม่สามารถเข้าใจได้อย่างเต็มที่ น่าเสียดายที่การสร้างตัวเลขสุ่มดูง่ายกว่าที่เป็นจริงมาก อันที่จริงแล้วมันเป็นไปไม่ได้ที่จะไม่สามารถสร้างตัวเลขสุ่มอย่างแท้จริงบนอุปกรณ์ที่กำหนดค่าได้ Von Neumann [Neu63] กล่าวอย่างดีที่สุด:“ ใครก็ตามที่คิดว่าวิธีการเกี่ยวกับเลขคณิตในการสร้างตัวเลขสุ่มนั้นแน่นอนว่าอยู่ในสภาพบาป” สิ่งที่ดีที่สุดที่เราหวังคือตัวเลขสุ่มหลอกลำธารที่ปรากฏเป็น ถ้าพวกเขาถูกสร้างแบบสุ่ม ทำไมจึงเป็นไปไม่ได้ที่จะสร้างตัวเลขสุ่มอย่างแท้จริงในอุปกรณ์กำหนดค่าใด ๆ ประโยคนี้หมายความว่าอย่างไร

17
การเรียกซ้ำโดยไม่มีแฟกทอเรียหมายเลขฟีโบนักชี ฯลฯ
เกือบทุกบทความที่ฉันสามารถหาได้เกี่ยวกับการเรียกซ้ำรวมถึงตัวอย่างของตัวเลขหรือตัวเลขฟีโบนักชีซึ่ง ได้แก่ : คณิตศาสตร์ ไร้ประโยชน์ในชีวิตจริง มีตัวอย่างโค้ดที่ไม่ใช่คณิตศาสตร์ที่น่าสนใจสำหรับสอนการเรียกซ้ำหรือไม่ ฉันคิดว่าอัลกอริทึมการหารและพิชิต แต่พวกเขามักจะเกี่ยวข้องกับโครงสร้างข้อมูลที่ซับซ้อน
47 recursion 

2
ควรจัดรหัสทดสอบหน่วย C ++ เพื่อประสิทธิภาพการทดสอบหน่วยสูงสุดอย่างไร
คำถามนี้ไม่เกี่ยวกับกรอบการทดสอบหน่วย คำถามนี้ไม่เกี่ยวกับการเขียนการทดสอบหน่วย คำถามนี้เกี่ยวกับสถานที่ที่จะวางโค้ด UT และวิธี / เวลา / สถานที่ในการรวบรวมและเรียกใช้ ในการทำงานอย่างมีประสิทธิภาพด้วยรหัสมรดก Michael Feathers ยืนยันว่า ทดสอบหน่วยที่ดี ... ทำงานเร็ว และนั่น การทดสอบหน่วยที่ใช้เวลา 1 / 10th ของวินาทีในการทำงานคือการทดสอบหน่วยช้า ฉันคิดว่าคำจำกัดความเหล่านี้สมเหตุสมผล ฉันยังคิดว่าพวกเขาบอกเป็นนัยว่าคุณต้องเก็บชุดการทดสอบหน่วยและชุดการทดสอบรหัสเหล่านั้นที่ใช้เวลานานกว่าแยกจากกัน แต่ฉันคิดว่านั่นคือราคาที่คุณจ่ายสำหรับการโทรหาการทดสอบหน่วยเท่านั้น . เห็นได้ชัดว่าปัญหาใน C ++ คือการ "เรียกใช้" การทดสอบหน่วยของคุณคุณต้อง: แก้ไขรหัสของคุณ (การผลิตหรือการทดสอบหน่วยขึ้นอยู่กับ "รอบ" ที่คุณอยู่) รวบรวม ลิงค์ เริ่มการทดสอบหน่วยปฏิบัติการ ( s ) แก้ไข(หลังจากลงคะแนนเสียงแปลก ๆ ) : ก่อนลงรายละเอียดฉันจะลองสรุปประเด็นที่นี่: รหัสการทดสอบหน่วย C ++ …

13
ทำไมโอเปอเรเตอร์ที่ได้รับมอบหมายจึงอยู่ทางซ้ายมือ
ฉันเริ่มสอนการเขียนโปรแกรมเพื่อนเมื่อเร็ว ๆ นี้ (เรากำลังใช้ Python) และเมื่อเราเริ่มพูดคุยเกี่ยวกับการสร้างตัวแปรและผู้ดำเนินการที่ได้รับมอบหมายเธอถามว่าทำไมค่าทางด้านขวาถูกกำหนดให้กับชื่อทางด้านซ้ายไม่ใช่ในทางกลับกัน . ก่อนหน้านี้ฉันไม่ได้คิดมากเพราะมันดูเป็นธรรมชาติสำหรับฉัน แต่เธอบอกว่าซ้าย - ขวาดูเหมือนจะดูเป็นธรรมชาติมากกว่าสำหรับเธอเพราะนั่นเป็นวิธีที่พวกเราส่วนใหญ่อ่านภาษาธรรมชาติ ฉันคิดเกี่ยวกับมันและสรุปว่ามันทำให้การอ่านรหัสง่ายขึ้นมากเนื่องจากชื่อที่กำหนดให้ (ซึ่งโปรแกรมเมอร์จะต้องนำมาใช้ใหม่) สามารถมองเห็นได้ง่ายจัดเรียงชิดซ้าย aligned = 2 on = 'foo' + 'bar' + 'foobar' the = 5.0 / 2 left = 2 + 5 ตรงข้ามกับ: 2 = aligned 'foo' + 'bar' + 'foobar' = on 5.0 / 2 = the …

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

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