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

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

4
ฉันควรใช้ทั้ง AngularJS และ ASP.NET MVC หรือไม่
ฉันเริ่มเรียนรู้ AngularJS และ ASP.NET MVC แต่ไม่แน่ใจว่าทำไมต้องใช้ทั้งคู่เข้าด้วยกันในโครงการเดียวกัน พวกเขาไม่ใช่ทั้งกรอบ MVC หรือเปล่า? ฉันควรจะใช้ทั้งสองอย่างในแอพพลิเคชั่นเดียวกันหรือไม่? มันไม่ได้เป็นอย่างใดอย่างหนึ่ง?


7
คุณเข้ารหัสชนิดข้อมูลพีชคณิตในภาษา C # - หรือภาษา Java ได้อย่างไร
มีปัญหาบางอย่างที่แก้ไขได้อย่างง่ายดายโดย Algebraic Data Types เช่น List type สามารถแสดงออกได้อย่างชัดเจนว่า: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty)) consmap (+1) l ตัวอย่างเฉพาะนี้อยู่ใน Haskell แต่มันจะคล้ายกันในภาษาอื่นที่มีการสนับสนุนเนทิฟสำหรับประเภทข้อมูลพีชคณิต …

3
อะไรคือ DRY, KISS, SOLID และอื่น ๆ
รูปแบบการออกแบบวิธีการหรือสิ่งที่อยู่ระหว่างนั้นเป็นอย่างไร พวกเขาไม่ได้มีการใช้งานเฉพาะที่สามารถแสดงให้เห็นถึงความจำเป็น (แม้ว่าคุณจะสามารถแสดงให้เห็นถึงกรณีที่ไม่ได้ใช้สิ่งที่ต้องการเช่น KISS ... ดูWTF รายวันสำหรับตัวอย่างมากมาย) และพวกเขาอธิบายกระบวนการพัฒนาอย่างเต็มที่เช่นระเบียบวิธี โดยทั่วไปจะ สิ่งนี้จะทำให้ "กฎของหัวแม่มือ" ประเภทนี้อยู่ที่ไหน

3
นิรุกติศาสตร์ของ "String"
ดังนั้นจึงเห็นได้ชัดว่าสตริงของสิ่งต่าง ๆ เป็นลำดับของสิ่งต่าง ๆ และลำดับของอักขระ / ไบต์ / ฯลฯ อาจจะเรียกว่าสตริงเช่นกัน แต่ใครเป็นคนแรกที่เรียกพวกเขาว่าสตริง? และเมื่อ? และในบริบทใดที่มันติดอยู่ ฉันสงสัยเกี่ยวกับเรื่องนี้เสมอ

4
มีกรณีพิเศษที่เราสามารถรับรหัสซ้ำได้หรือไม่
ฉันกำลังทำงานในโครงการซอฟต์แวร์ที่เราต้องสร้าง API สามตัว หนึ่งสำหรับบ้านธนาคารช่องทางหนึ่งสำหรับหน่วยงานและช่องทางที่สามสำหรับโทรศัพท์มือถือช่อง API ของเอเจนซีนั้นสมบูรณ์ที่สุดเนื่องจากมีฟังก์ชั่นทั้งหมด .. จากนั้นเป็น Home API ที่เล็กกว่าและ API มือถือ สถาปนิกที่นี่สร้างเลเยอร์ทั่วไป (บริการ EJB ข้ามแชนเนลที่แชร์โดย API ทั้งหมด) แต่ API นั้นแตกต่างกัน ตอนนี้ไม่มีความแตกต่างใหญ่ระหว่าง API ทีมใหญ่เริ่มต้นด้วยแชแนลเอเจนซี่และเรากำลังปรับให้เข้ากับช่องทางบ้าน เราเป็นเพียงการเพิ่มคุณค่าของวัตถุให้กับแอพหลักของเรา มิฉะนั้นรหัสจะคล้ายกัน 95% ระหว่าง API API นั้นสร้างมาจากSpring MVCและมี (ตัวควบคุมรุ่นและยูทิลิตี้บางอย่าง) โดยพื้นฐานแล้วคอนโทรลเลอร์กำลังทำการแมป BO กับ ChannelObject (ดูเหมือนว่าฉันไม่ใช่สถานที่ที่เหมาะสมในการทำเช่นนั้น) และยูทิลิตี้และซีเรียลไลเซอร์บางส่วน ทั้งหมดซ้ำกันในตอนนี้ พวกเขาบอกว่าสาเหตุของการทำซ้ำคือพวกเขาต้องการให้ API แยกต่างหาก "ถ้าพรุ่งนี้เราต้องการพฤติกรรมที่แตกต่างสำหรับบ้านมากกว่าเอเจนซี่หรือมือถือเราจะไม่ดิ้นรน !!" มีกรณีที่เราควรยอมรับรหัสซ้ำหรือไม่
57 java  api  spring 

8
กิจกรรมใช้สำหรับการเขียนโปรแกรม GUI เท่านั้นหรือไม่
กิจกรรมใช้สำหรับการเขียนโปรแกรม GUI เท่านั้นหรือไม่ คุณจัดการกับการเขียนโปรแกรมแบ็กเอนด์ปกติอย่างไรเมื่อมีบางอย่างเกิดขึ้นกับสิ่งอื่นนี้

8
นักพัฒนาควรทำเลียนแบบ UI หากไม่มีผู้ออกแบบในโครงการหรือไม่
ฉันทำงานกับทีมเล็ก ๆ ที่สร้างเว็บแอปพลิเคชั่นที่เป็นกรรมสิทธิ์และ UX ไม่ได้ให้ความสำคัญมากนักเพราะคนของเราจะเป็นคนที่ทำงานอยู่ แต่เราพยายามทำให้งานของพวกเขาง่ายขึ้น ในฐานะนักพัฒนาฉันควรสร้างการจำลองแบบ UI ก่อนที่ฉันจะเริ่มสร้างหน้าจอใหม่หรือไม่ ไม่มีอะไรแฟนซีเกินไปส่วนใหญ่เป็นเค้าโครงทั่วไปเพื่อพูดคุยกับเพื่อนร่วมงานและมีแบบจำลองอ้างอิง ฉันเปรียบเทียบกับการสร้างไดอะแกรม UML ก่อนที่จะทำการเขียนโค้ดแบบสุ่มสี่สุ่มห้า เพื่อนร่วมงานคนหนึ่งของฉันบอกว่าสิ่งนี้น่ารังเกียจและไม่ใช่หน้าที่ของฉันที่จะทำเช่นนั้น

9
ความสามารถในการอ่านและการบำรุงรักษากรณีพิเศษของการเขียนการเรียกฟังก์ชันที่ซ้อนกัน
รูปแบบการเข้ารหัสของฉันสำหรับการเรียกใช้ฟังก์ชันที่ซ้อนกันมีดังต่อไปนี้: var result_h1 = H1(b1); var result_h2 = H2(b2); var result_g1 = G1(result_h1, result_h2); var result_g2 = G2(c1); var a = F(result_g1, result_g2); ฉันเพิ่งเปลี่ยนเป็นแผนกที่ใช้รูปแบบการเข้ารหัสต่อไปนี้เป็นอย่างมาก: var a = F(G1(H1(b1), H2(b2)), G2(c1)); ผลของวิธีการเข้ารหัสของฉันคือในกรณีที่ฟังก์ชั่นการขัดข้อง Visual Studio สามารถเปิดการถ่ายโอนข้อมูลที่สอดคล้องกันและระบุบรรทัดที่ปัญหาเกิดขึ้น (ฉันกังวลเป็นพิเศษเกี่ยวกับการละเมิดการเข้าถึง) ฉันกลัวว่าในกรณีที่เกิดความผิดพลาดเนื่องจากปัญหาเดียวกันที่ตั้งโปรแกรมไว้ในวิธีแรกฉันจะไม่สามารถรู้ได้ว่าฟังก์ชันใดที่ทำให้เกิดความผิดพลาด ในทางกลับกันยิ่งการประมวลผลที่คุณใส่ในบรรทัดมากขึ้นเท่าไรคุณก็ยิ่งได้รับตรรกะมากขึ้นในหน้าเดียวซึ่งจะช่วยเพิ่มความสามารถในการอ่าน ความกลัวของฉันถูกต้องหรือฉันขาดอะไรไปและโดยทั่วไปแล้วสิ่งใดที่เป็นที่นิยมในสภาพแวดล้อมเชิงพาณิชย์ อ่านหรือบำรุงรักษา? ฉันไม่รู้ว่ามันเกี่ยวข้องหรือไม่ แต่เรากำลังทำงานใน C ++ (STL) / C #

16
ฉันจะเก็บค่า“ ไม่รู้จัก” และ“ หายไป” ในตัวแปรได้อย่างไรในขณะที่ยังคงรักษาความแตกต่างระหว่าง“ ไม่ทราบ” และ“ หายไป”
พิจารณาคำถามนี้เป็น "วิชาการ" ฉันสงสัยเกี่ยวกับการหลีกเลี่ยง NULL เป็นครั้งคราวและนี่เป็นตัวอย่างที่ฉันไม่สามารถหาวิธีแก้ปัญหาที่น่าพอใจได้ สมมติว่าฉันเก็บค่าการวัดซึ่งบางครั้งการวัดนั้นเป็นไปไม่ได้ (หรือหายไป) ฉันต้องการเก็บค่า "ว่างเปล่า" ในตัวแปรในขณะที่หลีกเลี่ยงค่า NULL บางครั้งค่าอาจไม่เป็นที่รู้จัก ดังนั้นการมีการวัดสำหรับกรอบเวลาที่แน่นอนเคียวรีเกี่ยวกับการวัดภายในช่วงเวลานั้นอาจส่งคืนการตอบสนอง 3 ชนิด: การวัดจริงในเวลานั้น (เช่นค่าตัวเลขใด ๆ รวมถึง0) A "หายไป" / "ว่างเปล่า" ค่า (กล่าวคือเป็นวัดที่ได้กระทำและความคุ้มค่าเป็นที่รู้จักกันว่าเป็นที่ว่างเปล่าที่จุดนั้น) ค่าที่ไม่รู้จัก (เช่นไม่มีการวัดที่จุดนั้นอาจว่างเปล่า แต่อาจเป็นค่าอื่นก็ได้) ชี้แจงที่สำคัญ: สมมติว่าคุณมีฟังก์ชันที่get_measurement()ส่งคืนหนึ่งใน "ว่างเปล่า", "ไม่ทราบ" และค่าประเภท "จำนวนเต็ม" การมีค่าตัวเลขแสดงถึงการดำเนินการบางอย่างที่สามารถทำได้ในค่าส่งคืน (การคูณการหาร ... ) แต่การใช้การดำเนินการดังกล่าวกับ NULLs จะทำให้แอปพลิเคชันเสียหายหากไม่ถูกจับ ฉันต้องการที่จะสามารถเขียนรหัสหลีกเลี่ยงการตรวจสอบ NULL เช่น (pseudocode): >>> value = get_measurement() # …

4
เพราะเหตุใดประเภทจึงตามหลังชื่อตัวแปรในภาษาการเขียนโปรแกรมสมัยใหม่
ทำไมในภาษาการเขียนโปรแกรมสมัยใหม่เกือบทุกภาษา (Go, Rust, Kotlin, Swift, Scala, Nim หรือ Python เวอร์ชันล่าสุด) มักเกิดขึ้นหลังชื่อตัวแปรในการประกาศตัวแปรและไม่ใช่มาก่อน? ทำไมx: int = 42ไม่int x = 42? สิ่งหลังไม่สามารถอ่านได้มากกว่าในอดีตหรือไม่ มันเป็นเพียงเทรนด์หรือมีเหตุผลที่มีความหมายจริงๆที่อยู่เบื้องหลังโซลูชันนี้หรือไม่?

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

4
กระบวนการพัฒนาใช้สำหรับโค้ดในภารกิจของ Apollo 11 หรือไม่?
ภารกิจของ Apollo นั้นมีเทคโนโลยีไม่ซับซ้อนกว่าเครื่องคิดเลขพกพา จากลิงค์ที่นี่มีข้อมูลเกี่ยวกับ Apollo Guidance Computer (AGC) คอมพิวเตอร์แนะนำ Apollo บนบอร์ด (AGC) มีขนาดประมาณ 1 ลูกบาศก์ฟุตพร้อม RAM ขนาด 16 บิต 2K และ 36K ของหน่วยความจำแกนเชือกแบบมีสายแข็งที่มีสายทองแดงเป็นเกลียวหรือไม่มีเกลียวผ่านแกนแม่เหล็กขนาดเล็ก คำ 16- บิตโดยทั่วไปคือ 14 บิตของข้อมูล (หรือสอง op-codes), 1 sign bit และ 1 parity bit รอบเวลาคือ 11.7 ไมโครวินาที การเขียนโปรแกรมทำในภาษาแอสเซมบลีและในภาษาที่สื่อความหมายในโปแลนด์กลับ ดังนั้นฉันจึงสะดุดกับซอร์สโค้ดบางอย่างเมื่อฉันค้นคว้าสิ่งที่เกิดขึ้นที่นั่นและฉันสังเกตเห็นความคิดเห็นที่ดี (เช่นชั่วคราวฉันหวังว่าจะเป็นความหวัง) VRTSTART TS WCHVERT # Page 801 CAF …

7
ทำไมไม่มีการสร้าง 'สุดท้าย' ใน C ++
การจัดการข้อยกเว้นใน C ++ นั้น จำกัด ให้ลอง / โยน / จับ ไม่เหมือนกับ Object Pascal, Java, C # และ Python แม้ใน C ++ 11 finallyโครงสร้างจะไม่ถูกนำมาใช้ ฉันได้เห็นวรรณกรรม C ++ จำนวนมากที่พูดถึง "ข้อยกเว้นรหัสปลอดภัย" Lippman เขียนว่ารหัสความปลอดภัยยกเว้นเป็นหัวข้อที่มีความสำคัญ แต่ขั้นสูงและยากเกินกว่าขอบเขตของไพรเมอร์ของเขา - ซึ่งดูเหมือนว่าบอกเป็นนัยว่ารหัสความปลอดภัยไม่ได้เป็นพื้นฐานของ C ++ Herb Sutter อุทิศ 10 บทในหัวข้อในภาษา C ++ อันยอดเยี่ยมของเขา! สำหรับฉันแล้วดูเหมือนว่าปัญหาต่าง ๆ ที่เกิดขึ้นเมื่อพยายามเขียน "รหัสที่ปลอดภัยยกเว้น" สามารถแก้ไขได้ค่อนข้างดีหากมีการใช้finallyงานโครงสร้างซึ่งทำให้โปรแกรมเมอร์สามารถมั่นใจได้ว่าแม้ในกรณีที่มีข้อยกเว้นโปรแกรมสามารถคืนค่าได้ ไปยังสถานะที่ปลอดภัยมั่นคงปราศจากการรั่วไหลใกล้กับจุดจัดสรรทรัพยากรและรหัสที่อาจเป็นปัญหา ในฐานะที่เป็นโปรแกรมเมอร์ …
57 c++  exceptions 

17
ทางเลือกในการควบคุมเวอร์ชันมืออาชีพ [ปิด]
เรากำลังร่วมมือกับโปรแกรมเมอร์ (นักเขียน) ที่ไม่ใช่คนที่ต้องการมีส่วนร่วมในโครงการของเรา ตอนนี้พวกเขาไม่ชอบแนวคิดของการใช้ Git (หรืออะไรก็ตามสำหรับเรื่องนั้น) สำหรับเวอร์ชันที่ควบคุมการทำงานของพวกเขา ฉันคิดว่าเป็นเช่นนี้เพราะพวกเขาไม่คิดว่ามันจะคุ้มค่าที่จะห่อหุ้มแนวคิดที่บิดเบี้ยวของการควบคุมเวอร์ชัน (เมื่อฉันแนะนำพวกเขาให้รู้จักกับการแตกแขนงและรวมเข้าด้วยกัน - พวกเขาดูเหมือนว่าฉันจะทำให้พวกเขาขุ่นเคือง) ตอนนี้เราไม่อยู่ในฐานะที่จะให้การศึกษาแก่พวกเขาหรือโน้มน้าวให้พวกเขาใช้มัน เราแค่พยายามหาทางเลือกอื่นเพื่อให้เราได้งานทั้งหมด (ซึ่งเป็นสิ่งที่เราต้องการ) - และพวกเขาได้รับขั้นตอนการทำงานที่ง่ายและมีสมาธิกับสิ่งที่พวกเขาทำ ฉันได้ไอเดียมา ... บอกให้พวกเขาบันทึกงานของพวกเขาเป็นไฟล์แยกต่างหากทุกครั้งที่พวกเขาทำการเปลี่ยนแปลงที่ไม่สำคัญและจากนั้นใช้ diff ด้านข้างของเราเพื่อติดตามการเปลี่ยนแปลง เขียนโปรแกรม (ใน Python) ที่ใช้ "เหตุการณ์สำคัญ" ใน CSSEdit อย่างใด เกี่ยวกับโครงการ: เป็นระบบประมวลผลภาษาธรรมชาติ (เขียนด้วย C + Python) เราได้จ้างนักเขียนเพื่อเตรียมอินพุตสำหรับระบบในภาษาต่างๆ และเมื่อเราพัฒนาซอฟต์แวร์เราต้องการนักเขียนเหล่านั้นเพื่อทำการเปลี่ยนแปลงอินพุต (บทความ) บางครั้งการเปลี่ยนแปลงมีขนาดเล็กมาก (คำหนึ่งหรือสองคำ) และบางครั้งใหญ่ เหตุผลที่เราจำเป็นต้องควบคุมเวอร์ชันการเปลี่ยนแปลงเหล่านั้นก็เพราะว่าการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ / ใหญ่ในอินพุทนั้นมีศักยภาพที่จะเปลี่ยนเอาต์พุตของระบบได้อย่างมาก

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