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

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

7
นี่เป็นภาษาแอสเซมบลีหรือไม่
ในวัยเด็กของฉันฉันเคยเขียนโปรแกรมเกี่ยวกับเครื่องคิดเลขโซเวียตMK-61 มีทะเบียนปฏิบัติการสี่ตัว (X, Y, Z, T) และที่เก็บข้อมูล 15 รายการ โปรแกรมอาจมี 105 ขั้นตอน ในขณะที่ฉันจำได้มันมีคำสั่งเช่น: สลับการลงทะเบียน X และ Y Shift register (Z ถึง T, Y ถึง Z, X ถึง Y) คัดลอกจากที่เก็บข้อมูลทะเบียน (1..15) ถึง X คัดลอกจาก X ไปยังที่เก็บข้อมูลการลงทะเบียน (1..15) ถ้า X <0 ให้ไปที่ขั้นตอนของโปรแกรม ## ดำเนินการ (+, -, *, /) โดยใช้ค่า X และ Y …

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

7
การทดสอบ Joel ที่เทียบเท่าสำหรับการวัดโปรแกรมเมอร์ [ปิด]
ฉันเข้าใจว่าในการวัดโครงการหรือรหัสเราสามารถใช้The Joel Testได้ แต่มีแบบทดสอบมาตรฐานง่ายๆ (เช่น The Joel Test) ที่สามารถวัดและกรองโปรแกรมเมอร์ได้ดีแค่ไหน? แผนของฉันคือให้ทดสอบนี้เป็นตัวกรองด่วนก่อนที่จะไปทดสอบรายละเอียดเพิ่มเติม
70 interview 

13
เป็นการดีที่จะตรวจสอบข้อยกเว้นที่ตรวจสอบแล้วโยน RuntimeException หรือไม่?
ฉันอ่านรหัสของเพื่อนร่วมงานและพบว่าเขามักจะจับข้อยกเว้นต่าง ๆ และจากนั้นก็โยน 'RuntimeException' แทน ฉันมักจะคิดว่านี่เป็นวิธีปฏิบัติที่ไม่ดีมาก ฉันผิดหรือเปล่า?

9
คอมไพเลอร์ตัวแรกทำยังไง?
ฉันมักจะสงสัยในสิ่งนี้และบางทีฉันต้องการบทเรียนประวัติศาสตร์ที่ดีเกี่ยวกับภาษาการเขียนโปรแกรม แต่เนื่องจากคอมไพเลอร์ส่วนใหญ่ในปัจจุบันทำใน C คอมไพเลอร์ตัวแรกที่สร้างขึ้น (AKA ก่อนหน้า C) หรือแปลภาษาทั้งหมดแค่ไหน? เมื่อพูดถึงเรื่องนี้ฉันยังไม่เข้าใจว่าภาษาแอสเซมบลีตัวแรกได้ทำอะไรฉันเข้าใจว่าภาษาแอสเซมบลีนั้นคืออะไร แต่ฉันไม่เห็นว่าพวกเขาใช้ภาษาแอสเซมบลีครั้งแรกได้อย่างไร คำสั่ง (เช่นmov R21) หรือ w / e ตั้งค่าให้เทียบเท่าไบนารี?

16
/ มีวิธีการที่ถูกต้องในการบอกผู้บริหารว่ารหัสของเราแย่แค่ไหน?
รหัสของเราไม่ดี มันอาจจะไม่ได้รับการพิจารณาที่ไม่ดีเสมอไป แต่มันก็ไม่ดีและจะตกต่ำเท่านั้น ฉันเริ่มต้นใหม่จากวิทยาลัยน้อยกว่าหนึ่งปีที่ผ่านมาและสิ่งต่าง ๆ ในปริศนารหัสของเราฉันเกินความเชื่อ ตอนแรกฉันคิดว่าเป็นคนใหม่ฉันควรปิดปากจนกว่าฉันจะได้เรียนรู้เพิ่มเติมเล็กน้อยเกี่ยวกับรหัสฐานของเรา แต่ฉันเห็นมากมายที่จะรู้ว่ามันไม่ดี ไฮไลท์บางส่วน: เรายังคงใช้เฟรม (ลองนำบางสิ่งออกจากการสืบค้นซึ่งเป็นไปไม่ได้เกือบ) VBScript แหล่งที่มาที่ปลอดภัย เรา 'ใช้'. NET - โดยที่ฉันหมายถึงเรามี. wrappers สุทธิที่เรียก COM DLLs ทำให้แทบเป็นไปไม่ได้ที่จะตรวจแก้จุดบกพร่องได้อย่างง่ายดาย ทุกอย่างนั้นเป็นฟังก์ชั่นใหญ่อย่างหนึ่ง รหัสไม่สามารถบำรุงรักษาได้ แต่ละหน้ามีหลายไฟล์ที่สร้างขึ้นทุกครั้งที่มีการสร้างหน้าใหม่ หน้าหลักโดยทั่วไปจะไม่ Response.Write () หลายครั้งเพื่อแสดง HTML (runat = "server"? no way) หลังจากนั้นอาจมีตรรกะจำนวนมากในฝั่งไคลเอ็นต์ (VBScript) และในที่สุดหน้าก็จะส่งไปยังตัวเอง (มักจะเก็บสิ่งต่าง ๆ ในเขตข้อมูลที่ซ่อนอยู่) ซึ่งมันจะโพสต์ไปยังหน้าการประมวลผลซึ่งสามารถทำสิ่งต่าง ๆ เช่นบันทึก data ไปยังฐานข้อมูล ข้อมูลจำเพาะที่เราได้รับนั้นน่าหัวเราะ บ่อยครั้งที่พวกเขาเรียกหาสิ่งต่าง ๆ …

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

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

7
เมื่อใดจึงควรใช้คลาสนามธรรมแทนอินเทอร์เฟซที่มีวิธีการขยายใน C #
"คลาสนามธรรม" และ "อินเทอร์เฟซ" เป็นแนวคิดที่คล้ายกันโดยอินเทอร์เฟซเป็นนามธรรมของทั้งสอง ปัจจัยที่แตกต่างอย่างหนึ่งคือคลาสนามธรรมจะจัดเตรียมวิธีการใช้งานสำหรับคลาสที่ได้รับเมื่อต้องการ อย่างไรก็ตามใน C # ปัจจัยที่มีความแตกต่างนี้ได้รับการลดลงโดยการแนะนำวิธีการขยายล่าสุดซึ่งช่วยให้การใช้งานมีไว้สำหรับวิธีการอินเทอร์เฟซ ปัจจัยที่มีความแตกต่างอีกอย่างหนึ่งคือคลาสสามารถสืบทอดคลาสนามธรรมเพียงคลาสเดียวเท่านั้น (กล่าวคือไม่มีการสืบทอดหลายคลาส) แต่สามารถใช้หลายอินเตอร์เฟสได้ ทำให้ส่วนต่อประสานที่ จำกัด น้อยลงและมีความยืดหยุ่นมากขึ้น ดังนั้นใน C # เราควรใช้คลาสนามธรรมแทนอินเทอร์เฟซกับวิธีการส่วนขยายหรือไม่ ตัวอย่างที่น่าสังเกตของโมเดลวิธีส่วนต่อประสาน + ส่วนต่อขยายคือ LINQ โดยที่ฟังก์ชันการสืบค้นมีให้สำหรับประเภทใดก็ตามที่ใช้IEnumerableวิธีการขยายจำนวนมาก

22
ข้อกำหนดการตั้งชื่อ: camelCase กับ underscore_case หรือไม่ คุณคิดอย่างไรเกี่ยวกับเรื่องนี้? [ปิด]
ฉันใช้ underscore_case ประมาณ 2 ปีและฉันเพิ่งเปลี่ยนมาใช้ camelCase เนื่องจากงานใหม่ (ใช้งานในภายหลังประมาณ 2 เดือนและฉันยังคิดว่า underscore_case เหมาะกว่าสำหรับโครงการขนาดใหญ่ที่มีโปรแกรมเมอร์จำนวนมากเข้าร่วม ส่วนใหญ่เป็นเพราะรหัสอ่านง่ายกว่า) ตอนนี้ทุกคนในที่ทำงานใช้ camelCase เพราะ (ดังนั้นพวกเขาบอกว่า) โค้ดดูสง่างามกว่า คุณคิดอย่างไรเกี่ยวกับ camelCase หรือ underscore_case ป.ล. โปรดแก้ตัวภาษาอังกฤษไม่ดีของฉัน แก้ไข อัปเดตก่อน: แพลตฟอร์มที่ใช้คือ PHP (แต่ฉันไม่ได้คาดหวังคำตอบที่เกี่ยวข้องกับแพลตฟอร์ม PHP อย่างเข้มงวดใคร ๆ ก็สามารถแบ่งปันความคิดของพวกเขาได้ว่าอะไรจะดีที่สุดในการใช้นั่นคือสาเหตุที่ฉันมาที่นี่ตั้งแต่แรก) ฉันใช้ camelCase เช่นเดียวกับ everibody ในทีม (เหมือนกับที่พวกคุณส่วนใหญ่แนะนำ) เราใช้ Zend Framework ซึ่งแนะนำ camelCase ด้วย ตัวอย่างบางส่วน (เกี่ยวข้องกับ PHP): กรอบงาน Codeigniter …
70 naming 

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

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

10
ฉันถูกบังคับให้เขียนรหัสไม่ดี ฉันจะบันทึกใบหน้าของฉันได้อย่างไร [ปิด]
ฉันเป็นแค่นักพัฒนารุ่นเยาว์ แต่งานของฉันบังคับให้ฉันต้องทำงานกับโค้ด PHP ที่แย่มาก ๆ (ลองนึกถึงโค้ด PHP ที่แย่ที่สุดที่คุณเคยเห็นจากนั้นคิดโค้ดสองครั้งแย่) ฉันมักจะพยายามแก้ไขข้อบกพร่องและต่อสู้กับ codebase เพื่อเพิ่มคุณสมบัติใหม่ บางครั้งฉันได้รับคำสั่งให้ทำงานโดยเร็วซึ่งบ่อยครั้งไม่เกี่ยวข้องกับแฮ็กที่สกปรก ผลิตภัณฑ์นี้เคยเป็นโอเพ่นซอร์สมาก่อนและฉันกังวลว่ามันจะเป็นโอเพ่นซอร์สในอนาคต ฉันจะละอายใจถ้ามีคน (โดยเฉพาะผู้ที่มีโอกาสเป็นนายจ้าง) สามารถหาชื่อของฉันต่อจากการเปลี่ยนแปลงบางอย่างได้ ฉันจะทำอย่างไรเพื่อปกป้องชื่อที่ดีของฉัน ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องหรือไม่ แต่ฉันจะเพิ่มว่าทั้งเจ้านายของฉันและเพื่อนร่วมงานของฉันต้องการยอมรับว่ารหัสนั้นไม่ดี แต่ฉันไม่แน่ใจว่าฉันสามารถตำหนิพวกเขาได้ - สำหรับพวกเขาหลายคนนี่เป็นของพวกเขา งานแรก

8
ทำไมคุณถึงต้องเก็บ Enum ไว้ใน DB
ฉันเคยเห็นคำถามมากมายเช่นนี้เพื่อขอคำแนะนำเกี่ยวกับวิธีการจัดเก็บ enums ในฐานข้อมูล แต่ฉันสงสัยว่าทำไมคุณถึงทำอย่างนั้น สมมุติว่าฉันมีเอนทิตีที่Personมีgenderเขตข้อมูลและGenderenum จากนั้นตารางบุคคลของฉันมีเพศคอลัมน์ นอกจากเหตุผลที่ชัดเจนของการบังคับใช้ความถูกต้องแล้วฉันไม่เห็นว่าทำไมฉันจึงสร้างตารางพิเศษgenderเพื่อทำแผนที่สิ่งที่ฉันมีอยู่ในแอปพลิเคชันของฉัน และฉันไม่ชอบการทำซ้ำที่จริง
69 database  enum 

12
“ ทุกอย่างคือแผนที่” ฉันทำถูกไหม?
ฉันดูคำพูดของสจ็วตเซียร์เซียร์ " คิดในข้อมูล " และนำหนึ่งในแนวคิดจากนั้นเป็นหลักการออกแบบในเกมนี้ที่ฉันทำ ความแตกต่างคือเขาทำงานใน Clojure และฉันทำงานใน JavaScript ฉันเห็นความแตกต่างที่สำคัญระหว่างภาษาของเราในเรื่องนั้น: Clojure เป็นการเขียนโปรแกรมที่ใช้งานง่าย รัฐส่วนใหญ่ไม่เปลี่ยนรูป ฉันใช้ความคิดจากสไลด์ "ทุกอย่างคือแผนที่" (จาก 11 นาที, 6 วินาทีถึง> 29 นาที) บางสิ่งที่เขาพูดคือ: เมื่อใดก็ตามที่คุณเห็นฟังก์ชั่นที่ใช้อาร์กิวเมนต์ 2-3 ข้อคุณสามารถทำให้เป็นกรณีสำหรับเปลี่ยนเป็นแผนที่และเพิ่งผ่านแผนที่มามีข้อดีมากมายดังนี้: คุณไม่ต้องกังวลกับคำสั่งโต้แย้ง คุณไม่ต้องกังวลกับข้อมูลเพิ่มเติมใด ๆ หากมีกุญแจพิเศษนั่นไม่ใช่ความกังวลของเรา พวกเขาไหลผ่านพวกเขาไม่ได้ยุ่ง คุณไม่จำเป็นต้องกำหนดสคีมา ตรงข้ามกับการส่งผ่านวัตถุไม่มีการซ่อนข้อมูล แต่เขาทำให้กรณีที่การซ่อนข้อมูลสามารถทำให้เกิดปัญหาและ overrated: ประสิทธิภาพ ใช้งานง่าย ทันทีที่คุณสื่อสารผ่านเครือข่ายหรือข้ามกระบวนการคุณจะต้องให้ทั้งสองฝ่ายเห็นพ้องกับการแสดงข้อมูลต่อไป นั่นเป็นงานพิเศษที่คุณสามารถข้ามได้ถ้าคุณแค่ทำงานกับข้อมูล ส่วนใหญ่เกี่ยวข้องกับคำถามของฉัน นี่คือ 29 นาทีใน: "ทำให้ฟังก์ชั่นของคุณประกอบได้" นี่คือตัวอย่างโค้ดที่เขาใช้อธิบายแนวคิด: ;; Bad (defn complex-process [] …

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