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

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

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

6
ฉันจะบอกได้อย่างไรว่าภาษาโปรแกรมคอมไพล์เป็นภาษาอื่น?
ฉันจะพูดเป็นภาษาอังกฤษได้อย่างไรว่าภาษาโปรแกรมนั้นสามารถคอมไพล์เป็นภาษาโปรแกรมอื่นได้? ตัวอย่างสามารถHaxe บนเว็บไซต์ภาษาถูก decribed เป็น "Multiplatform": หลายแพลตฟอร์ม: Haxe สามารถรวบรวมไปยังแพลตฟอร์มการเขียนโปรแกรมยอดนิยมทั้งหมดได้ด้วยการรวบรวมอย่างรวดเร็ว - JavaScript, Flash, NekoVM, PHP, C ++, C # และ Java (เร็ว ๆ นี้) แต่หลายแพลตฟอร์มสามารถเข้าใจผิดเป็นฮาร์ดแวร์หรือแพลตฟอร์มซอฟต์แวร์ (win, mac, linux) ดังนั้นคำที่เหมาะสมที่สุดที่อธิบายความสามารถนี้คืออะไร?

8
ภาษาโปรแกรมเชิงปฏิบัติที่ไม่มีทฤษฏีไม่มีคำหลักที่สงวนไว้
ฉันค้นหาภาษาการเขียนโปรแกรมเชิงปฏิบัติที่ไม่มีคำหลักที่สงวนไว้ แต่ฉันไม่มีโชคในการค้นหา ฉันกำลังทำงานกับภาษาการเขียนโปรแกรมสำหรับการสั่งสอนและความบันเทิงของตัวเองและฉันไม่จำเป็นต้องใส่คำหลักใด ๆ นั่นคือสิ่งที่ทำให้ฉันค้นหาและคำถาม: ฉันไม่เห็นความสะดวกสบายกับผู้เขียนคอมไพเลอร์ว่ามีความสำคัญต่อผู้ใช้ภาษา คอมพิวเตอร์มีพลังมากพอที่วันนี้จะสามารถสรุปความหมายจากบริบท ไม่มากไปกว่านักเขียนที่จำเป็นต้องติดป้ายคำนามคำกริยาและเช่นเมื่อเขียนนวนิยายทำไมโปรแกรมเมอร์ควรจะต้องติดฉลากฟังก์ชั่นและตัวแปรที่มีfunction x() {}หรือset x = 1หรือvar x = 1ฯลฯ ; เมื่อฉันสามารถอนุมานจากบริบทของคำสั่งว่ามันคือการประกาศฟังก์ชั่นหรือการร้องขอหรือว่าฉลากเป็นการกำหนดค่าหรือการอ้างอิงถึงค่าป้ายที่? นี่คือตัวอย่างที่เป็นรูปธรรมของสิ่งที่ parser ปัจจุบันของฉันจะทำจำเป็นสำหรับคำหลักที่สงวนไว้เพื่อสนับสนุนสิ่งที่พบที่ปกติจะมีพวงของไม่มีเสียงเหมือนfuncหรือfunctionหรือdecหรือสิ่งที่ไม่ ประกาศฟังก์ชั่น sum3(a,b,c) -> a + b + c. ฟังก์ชั่นภาวนา x = sum3(1,2,3). ฟังก์ชันที่ไม่ระบุชื่อตั้งชื่อ x x = (a,b,c) -> a + b + c. y = x(1,2,3). ฉันต้องการทราบว่าทำไมคำหลักที่มีความสำคัญต่อภาษาการเขียนโปรแกรมที่ประสบความสำเร็จ
22 theory  languages 

1
ทำไม Haskell จึงไม่มีแลมบ์ดาระดับนามธรรม?
มีเหตุผลทางทฤษฎีบ้างไหม (เช่นว่าการตรวจสอบชนิดหรือการอนุมานประเภทจะไม่สามารถตัดสินใจได้) หรือเหตุผลเชิงปฏิบัติ (ยากเกินกว่าที่จะใช้อย่างถูกต้อง) ปัจจุบันเราสามารถห่อสิ่งต่างๆให้เป็นnewtypeเช่นนั้นได้ newtype Pair a = Pair (a, a) แล้วมี Pair :: * -> * λ(a:*). (a,a)แต่เราไม่สามารถทำสิ่งที่ชอบ (มีบางภาษาที่มีพวกเขาตัวอย่างเช่นScala ทำ )

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

5
เหตุใดบริการ Windows จึงไม่มี GUI
ฉันใช้คุณสมบัตินี้ใน Windows รุ่นก่อนหน้าเช่น XP และ NT ฉันสามารถเรียกใช้ GUI จากบริการ Windows ได้ แต่มันเป็นไปไม่ได้ในรุ่นที่ใหม่กว่า อะไรคือสาเหตุของการลบคุณสมบัตินี้? เหตุใดบริการ Windows จึงไม่มี GUI
22 .net  windows 

4
BDD สามารถปรับขนาดได้สำหรับโครงการขนาดกลางถึงใหญ่หรือไม่?
ในทุกเว็บไซต์ที่คุณอ่านเกี่ยวกับ BDD (การพัฒนาพฤติกรรมขับเคลื่อน) คุณจะพบตัวอย่างที่ง่ายมากที่แสดงให้คุณเห็นว่ามันง่ายและชัดเจนในการกำหนดความต้องการของคุณ แต่การพยายามใช้กระบวนการนี้ในผลิตภัณฑ์ขนาดใหญ่ (ไม่ใช่ตัวอย่างของเครื่องคิดเลข) แสดงให้ฉันเห็นว่าสิ่งต่าง ๆ สามารถได้รับ (หรือจะได้รับ) ค่อนข้างซับซ้อนและอ่านไม่ได้ โดยเฉพาะอย่างยิ่งการเปลี่ยนแปลงคำขอในภายหลังหมายถึงการทำงานจำนวนมากเพื่อแก้ไขการทดสอบการรวมสำหรับสิ่งนี้ ดังนั้นฉันสงสัยว่า BDD คุ้มค่าหรือไม่ มันแก้ปัญหาที่เทคนิคอื่นไม่ได้หรือไม่!

4
ฉันถูกบอกแล้วว่า HTML เป็นภาษามาร์กอัป C ++ เป็นภาษาการเขียนโปรแกรมอะไรที่ทำให้เกิดความแตกต่าง?
เพื่อนเขียนโปรแกรมของฉันมักจะบอกฉันเสมอว่า HTML เป็นภาษามาร์กอัปและ C ++ เป็นภาษาการเขียนโปรแกรม เมื่อฉันถามพวกเขาว่าอะไรคือความแตกต่างพวกเขาไม่เคยให้คำตอบที่สมเหตุสมผลเลย สิ่งใดที่ทำให้ C ++ มีภาษาโปรแกรมหนึ่งและ HTML ไม่ได้

3
ฉันต้องการสร้างเครื่องเสมือนมีการอ้างอิงที่ดีหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว ฉันกำลังมองหาการสร้างเครื่องเสมือนเป็นวิธีที่เป็นอิสระจากแพลตฟอร์มในการรันโค้ดเกมบางส่วน เสมือนเครื่องที่ฉันรู้ในการเล่นเกมจะค่อนข้างเก่า: Infocom ของZ-เครื่อง , LucasArts' SCUMM , id ซอฟต์แวร์ของ3 Quake ในฐานะนักพัฒนา. net ฉันคุ้นเคยกับCLRและดูคำแนะนำ CILเพื่อดูภาพรวมของสิ่งที่คุณใช้จริงในระดับ VM (เทียบกับระดับภาษา) ฉันได้ขลุกอยู่ที่6502 Assemblerในช่วงปีที่แล้ว สิ่งนี้คือตอนนี้ที่ฉันต้องการที่จะใช้หนึ่งฉันต้องขุดลึกลงไปอีกนิด ฉันรู้ว่ามี stack based และลงทะเบียน VMs แต่ฉันไม่รู้จริงๆว่าอันไหนดีกว่าในเรื่องอะไรและถ้ามีแนวทางแบบไฮบริดมากกว่านี้ ฉันต้องจัดการกับการจัดการหน่วยความจำตัดสินใจว่าประเภทระดับต่ำเป็นส่วนหนึ่งของ VM และต้องเข้าใจว่าทำไมสิ่งเช่นldstr จึงทำงานเหมือนที่เป็นอยู่ หนังสืออ้างอิงเดียวของฉัน (นอกเหนือจากสิ่งของ Z-Machine) คือมาตรฐานการทำหมายเหตุประกอบของ CLIแต่ฉันสงสัยว่ามีการบรรยายที่ดีกว่าทั่วไป / พื้นฐานสำหรับ VM หรือไม่ …

3
การออกจากระบบ CLA ช่วยป้องกันปัญหาทางกฎหมายในโครงการโอเพ่นซอร์สได้อย่างไร
ตัวอย่างเช่น: เสรีชน มันได้รับอนุญาตภายใต้ใบอนุญาต BSD รูปแบบ CLA (Contributor ข้อตกลงใบอนุญาต) ไม่เฉพาะโครงการและจะสามารถลงนามในระบบอิเล็กทรอนิกส์ การออกจากระบบข้อตกลงนี้มีปัญหาอย่างไรและอย่างไร ฉันมีส่วนร่วมไม่มากหรือน้อยแค่ไหน? เหตุใดบางโครงการต้องการ CLA ที่ลงนามเพื่อรับการแก้ไขในขณะที่บางโครงการไม่ทำ (เช่น. node.js กับทางรถไฟ)

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

2
การล็อกอินใน JSON Effect ต่อประสิทธิภาพ
ฉันเห็นบทความเกี่ยวกับการเข้าสู่ระบบ JSON มากขึ้น คุณสามารถค้นหาได้จากบล็อกของ NodeJS ทำไมทุกคนชอบมันมาก ฉันเห็นการดำเนินการเพิ่มเติมที่เกี่ยวข้องเท่านั้น: วัตถุใหม่สองสามชิ้นที่ถูกสร้างขึ้น วัตถุ Stringifying ซึ่งเกี่ยวข้องกับการคำนวณความยาวสตริงหรือการจัดสรรสตริงหลายรายการ GCing อึทั้งหมดที่ถูกสร้างขึ้น มีการทดสอบประสิทธิภาพเมื่อใช้การบันทึก JSON และการบันทึกสตริงปกติหรือไม่ ผู้คนใช้ JSON (เพื่อเข้าสู่ระบบ) ในโครงการขององค์กรหรือไม่
22 logging  json 

6
วัตถุควรรู้รหัสของตัวเองหรือไม่?
obj.idดูเหมือนว่าค่อนข้างธรรมดาและดูเหมือนว่าจะตกอยู่ในช่วงของสิ่งที่วัตถุสามารถรู้เกี่ยวกับตัวเอง ฉันพบว่าตัวเองถามว่าทำไมวัตถุของฉันควรรู้รหัสของตัวเอง? ดูเหมือนจะไม่มีเหตุผลที่จะมีหรือไม่ หนึ่งในเหตุผลหลักสำหรับมันที่มีอยู่คือการดึงมันและดังนั้นที่เก็บของฉันจำเป็นต้องรู้และใช้เพื่อการโต้ตอบของฐานข้อมูล ฉันเคยพบปัญหาที่ฉันต้องการทำให้วัตถุเป็นอนุกรมกับ JSON สำหรับ RESTful API ซึ่ง ID ดูเหมือนจะไม่พอดีกับเพย์โหลด แต่มีเพียง URI และรวมไว้ในวัตถุทำให้ยากขึ้น วัตถุควรรู้ว่าเป็น id ของตัวเองหรือไม่? ทำไมหรือทำไมไม่? อัปเดต : ข้อกำหนด id: แอตทริบิวต์ตัวระบุบนวัตถุ ในแง่ฐานข้อมูลคีย์ตัวแทนไม่ได้เป็นคีย์ธรรมชาติ วัตถุ: เอนทิตีหรือวัตถุที่ระบุตัวตนไม่ซ้ำกันภายในระบบ

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

5
จุดใดที่การอ่านแบบอะซิงโครนัสของดิสก์ I / O มีประสิทธิภาพมากกว่าแบบซิงโครนัส
สมมติว่ามีโค้ดบางส่วนที่อ่านไฟล์สำหรับผู้ใช้หลายคนและไฟล์มีขนาดใดก็ได้: ขนาดใดที่มีประสิทธิภาพมากขึ้นในการอ่านไฟล์แบบอะซิงโครนัส? หรือจะพูดอีกวิธีหนึ่งไฟล์ต้องมีขนาดเล็กแค่ไหนเพื่อให้อ่านได้เร็วขึ้น? ฉันสังเกตเห็น (และบางทีฉันไม่ถูกต้อง) ว่าเมื่ออ่านไฟล์ที่มีขนาดเล็กมากมันใช้เวลานานในการอ่านแบบอะซิงโครนัสมากกว่าแบบซิงโครนัส (โดยเฉพาะกับ. NET) ฉันสมมติว่าสิ่งนี้เกี่ยวข้องกับการตั้งค่าเวลาสำหรับสิ่งต่างๆเช่นพอร์ต I / O Completion Port, เธรดและอื่น ๆ มีกฎง่ายๆที่จะช่วยออกที่นี่? หรือมันขึ้นอยู่กับระบบและสิ่งแวดล้อม?
22 efficiency  async  io 

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