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

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

7
กองซ้อนเป็นวิธีเดียวที่สมเหตุสมผลในการจัดโครงสร้างโปรแกรมหรือไม่
สถาปัตยกรรมส่วนใหญ่ที่ฉันเคยเห็นต้องใช้ call stack เพื่อบันทึก / เรียกคืนบริบทก่อนการเรียกใช้ฟังก์ชัน มันเป็นกระบวนทัศน์ทั่วไปที่การดำเนินงานแบบพุชและป๊อปถูกติดตั้งไว้ในโปรเซสเซอร์ส่วนใหญ่ มีระบบที่ทำงานโดยไม่มี stack หรือไม่? ถ้าเป็นเช่นนั้นทำงานอย่างไรและใช้ทำอะไร

7
วิธีจัดการความซับซ้อนโดยไม่ตั้งใจในโครงการซอฟต์แวร์
เมื่อ Murray Gell-Mann ถูกถามว่า Richard Feynman จัดการเพื่อแก้ไขปัญหาที่ยากมากมายได้อย่างไร Gell-Mann ตอบว่า Feynman มีอัลกอริทึม: จดบันทึกปัญหา คิดหนักจริง เขียนวิธีการแก้ปัญหา Gell-Mann พยายามอธิบายว่า Feynman เป็นนักแก้ปัญหาที่แตกต่างกันและไม่มีความเข้าใจที่จะได้รับจากการศึกษาวิธีการของเขา ฉันรู้สึกแบบเดียวกันกับการจัดการความซับซ้อนในโครงการซอฟต์แวร์ขนาดกลาง / ใหญ่ ผู้คนที่ดีนั้นดีโดยกำเนิดและจัดการกับเลเยอร์และสแต็ค abstractions ต่าง ๆ เพื่อให้ทุกอย่างสามารถจัดการได้โดยไม่ต้องแนะนำ cruft ที่ไม่เกี่ยวข้องใด ๆ ดังนั้นอัลกอริทึมไฟน์แมนเป็นวิธีเดียวที่จะจัดการความซับซ้อนโดยไม่ตั้งใจหรือมีวิธีการที่วิศวกรซอฟต์แวร์สามารถนำไปใช้กับความซับซ้อนที่เกิดขึ้นโดยบังเอิญได้หรือไม่?

14
ผู้ประกาศชนิดข้อมูลเช่น "int" และ "char" ถูกเก็บไว้ใน RAM เมื่อโปรแกรม C ทำงานหรือไม่
เมื่อโปรแกรม C กำลังทำงานข้อมูลจะถูกเก็บไว้ในกองหรือกอง ค่าจะถูกเก็บไว้ในที่อยู่ RAM แต่สิ่งที่เกี่ยวกับตัวบ่งชี้ประเภท (เช่นintหรือchar) พวกเขายังเก็บไว้หรือไม่ พิจารณารหัสต่อไปนี้: char a = 'A'; int x = 4; ฉันอ่านว่า A และ 4 ถูกเก็บไว้ในที่อยู่ RAM ที่นี่ แต่สิ่งที่เกี่ยวaและx? ส่วนใหญ่สับสนวิธีการที่ไม่ดำเนินการที่รู้ว่าaเป็นถ่านและxเป็น int? ฉันหมายถึงเป็นintและcharพูดถึงบางแห่งใน RAM? สมมติว่าค่าถูกเก็บไว้ที่ใดที่หนึ่งใน RAM เช่น 10011001 ถ้าฉันเป็นโปรแกรมที่รันโค้ดฉันจะรู้ได้อย่างไรว่า 10011001 นี้เป็นcharหรือintไม่? สิ่งที่ผมไม่เข้าใจคือวิธีการใช้คอมพิวเตอร์รู้เมื่อมันอ่านค่าของตัวแปรจากที่อยู่เช่น 10001 ไม่ว่าจะเป็นหรือint ลองนึกภาพผมคลิกที่โปรแกรมที่เรียกว่าchar anyprog.exeรหัสทันทีเริ่มดำเนินการ ไฟล์ที่ปฏิบัติการได้นี้รวมถึงข้อมูลว่าตัวแปรที่เก็บไว้เป็นประเภทintหรือcharไม่?
74 c  data 

11
ทำไมเราต้องใช้เบรกสวิตช์?
ใครเป็นผู้ตัดสินใจ (และขึ้นอยู่กับแนวคิดใด) ที่การswitchก่อสร้าง (ในหลายภาษา) ต้องใช้breakในแต่ละข้อความ ทำไมเราต้องเขียนสิ่งนี้: switch(a) { case 1: result = 'one'; break; case 2: result = 'two'; break; default: result = 'not determined'; break; } (สังเกตสิ่งนี้ใน PHP และ JS อาจมีหลายภาษาที่ใช้สิ่งนี้) ถ้าswitchเป็นทางเลือกifทำไมเราไม่สามารถใช้สิ่งก่อสร้างเดียวกันนี้เพื่อif? เช่น: switch(a) { case 1: { result = 'one'; } case 2: { result = 'two'; } …
74 conditions 

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

6
`catch (…) {throw; } `การปฏิบัติที่ไม่ดี?
ในขณะที่ฉันเห็นด้วยว่าการจับ... โดยไม่ต้องทำใหม่เป็นสิ่งที่ผิด แต่ฉันเชื่อว่าการใช้โครงสร้างเช่นนี้ try { // Stuff } catch (...) { // Some cleanup throw; } เป็นที่ยอมรับในกรณีที่ RAII ไม่ได้บังคับ (โปรดอย่าถาม ... ทุกคนใน บริษัท ของฉันชอบการเขียนโปรแกรมเชิงวัตถุและ RAII มักถูกมองว่าเป็น "สิ่งที่ไร้ประโยชน์ต่อโรงเรียน" ... ) เพื่อนร่วมงานของฉันบอกว่าคุณควรรู้อยู่เสมอว่าจะมีข้อยกเว้นอะไรบ้างและคุณสามารถใช้โครงสร้างเช่น: try { // Stuff } catch (exception_type1&) { // Some cleanup throw; } catch (exception_type2&) { // Some cleanup throw; …
74 c++ 

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

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

10
Java แต่ละบรรทัดมีจำนวนบรรทัดเท่าใด [ปิด]
จากประสบการณ์ของคุณกฎของหัวแม่มือที่มีประโยชน์สำหรับจำนวนบรรทัดของโค้ดมีมากเกินไปสำหรับคลาสหนึ่งใน Java เพื่อความชัดเจนฉันรู้ว่าจำนวนบรรทัดไม่ได้ใกล้เคียงกับมาตรฐานจริงเพื่อใช้สำหรับสิ่งที่ควรอยู่ในชั้นเรียนเฉพาะและสิ่งที่ไม่ควร คลาสควรได้รับการออกแบบให้สอดคล้องกับปรัชญา OOP (การห่อหุ้ม ฯลฯ ) ที่เหมาะสม ที่กล่าวว่ากฎง่ายๆสามารถให้เป็นจุดเริ่มต้นที่มีประโยชน์สำหรับการพิจารณาการรีแฟคเจอริ่ง (เช่น "อืมชั้นนี้มีบรรทัดของรหัส> n มันอาจไม่สามารถอ่านได้และทำงานของการห่อหุ้มด้วยหมัด ถูก refactored ในบางจุด ") ในทางกลับกันคุณอาจพบตัวอย่างของคลาสที่มีขนาดใหญ่มากที่ยังคงเชื่อฟังการออกแบบ OOP ได้ดีและอ่านได้และบำรุงรักษาได้แม้จะมีความยาวอยู่หรือไม่ นี่คือที่เกี่ยวข้องที่ไม่ซ้ำกันคำถามเกี่ยวกับเส้นต่อฟังก์ชั่น

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

14
ณ จุดใดที่คุณ "รู้" เทคโนโลยีพอที่จะเขียนไว้ในประวัติย่อ [ปิด]
ฉันเพิ่งมีโปรแกรมเมอร์ในการสัมภาษณ์ซึ่งระบุว่า Python, PHP, Rails และ ASP เป็นทักษะบางส่วนของพวกเขา อย่างไรก็ตามในการสัมภาษณ์ผู้ให้สัมภาษณ์ยังไม่พอรู้ว่าโครงสร้างการควบคุมและตรรกะพื้นฐานคืออะไรพวกเขาเพียงแค่ทำตามบทเรียนการสาธิตไม่กี่ครั้ง ดังนั้นคำถามของฉันนี้คือจุดที่คุณสามารถเพิ่มเทคโนโลยีในการกลับมาของคุณได้อย่างถูกต้อง คือเมื่อคุณสามารถแสดงแนวคิดพื้นฐานทั้งหมดเขียนโปรแกรมที่มีประโยชน์หรือไม่ก็ใช้งานได้อย่างสะดวกสบายโดยไม่ต้องอ้างอิงเอกสารทุก ๆ 30 วินาที ฉันไม่เชื่อว่านี่เป็นเรื่องส่วนตัวเกินไปพื้นฐานควรได้รับการจัดตั้งขึ้นโดยง่ายตามความคิดเห็น
74 skills 

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

18
ในภาษาอังกฤษธรรมดาการเรียกซ้ำคืออะไร?
แนวคิดของการเรียกซ้ำไม่เป็นเรื่องธรรมดาในโลกแห่งความเป็นจริง ดังนั้นดูเหมือนว่าสับสนกับโปรแกรมเมอร์สามเณร แม้ว่าฉันคิดว่าพวกเขาคุ้นเคยกับแนวคิดทีละน้อย ดังนั้นอะไรคือคำอธิบายที่ดีสำหรับพวกเขาที่จะเข้าใจความคิดได้อย่างง่ายดาย
74 recursion 

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

10
เป็นการดีหรือไม่ที่จะแทนที่การหารด้วยการคูณเมื่อทำได้
เมื่อใดก็ตามที่ฉันต้องการการแบ่งตัวอย่างเช่นการตรวจสอบเงื่อนไขฉันต้องการ refactor การแสดงออกของการหารเป็นการคูณ: รุ่นเดิม: if(newValue / oldValue >= SOME_CONSTANT) เวอร์ชั่นใหม่: if(newValue >= oldValue * SOME_CONSTANT) เพราะฉันคิดว่ามันสามารถหลีกเลี่ยง: การหารด้วยศูนย์ ล้นเมื่อoldValueมีขนาดเล็กมาก นั่นถูกต้องใช่ไหม? มีปัญหาสำหรับนิสัยนี้หรือไม่?

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