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

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

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

7
หากฟังก์ชั่นต้องทำการตรวจสอบโมฆะก่อนที่จะทำการออกแบบที่ไม่ดี
ดังนั้นฉันไม่รู้ว่านี่เป็นการออกแบบรหัสที่ดีหรือไม่ดีดังนั้นฉันจึงคิดว่าฉันควรถาม ฉันมักจะสร้างวิธีการที่ทำการประมวลผลข้อมูลที่เกี่ยวข้องกับคลาสและฉันมักจะตรวจสอบวิธีการต่าง ๆ มากมายเพื่อให้แน่ใจว่าฉันจะไม่ได้รับการอ้างอิงเป็นโมฆะหรือข้อผิดพลาดอื่น ๆ ก่อนถึงมือ สำหรับตัวอย่างพื้นฐานมาก: // fields and properties private Entity _someEntity; public Entity SomeEntity => _someEntity; public void AssignEntity(Entity entity){ _someEntity = entity; } public void SetName(string name) { if (_someEntity == null) return; //check to avoid null ref _someEntity.Name = name; label.SetText(_someEntity.Name); } ดังนั้นคุณจะเห็นการตรวจสอบ im สำหรับ …
67 c#  design  validation 

16
วิธีหลีกเลี่ยงข้อผิดพลาดเชิงตรรกะในรหัสเมื่อ TDD ไม่ได้ช่วย?
เมื่อไม่นานมานี้ฉันกำลังเขียนโค้ดขนาดเล็กซึ่งจะบ่งบอกถึงวิธีการที่เป็นมิตรกับมนุษย์ว่าเหตุการณ์มีอายุเท่าไร ตัวอย่างเช่นอาจบ่งบอกว่าเหตุการณ์เกิดขึ้น“ สามสัปดาห์ที่ผ่านมา” หรือ“ เดือนที่แล้ว” หรือ“ เมื่อวานนี้” ความต้องการค่อนข้างชัดเจนและนี่เป็นกรณีที่สมบูรณ์แบบสำหรับการพัฒนาแบบทดสอบที่ขับเคลื่อน ฉันเขียนการทดสอบทีละตัวการใช้รหัสเพื่อผ่านการทดสอบแต่ละครั้งและทุกอย่างดูเหมือนจะทำงานได้อย่างสมบูรณ์ จนกว่าจะพบข้อบกพร่องในการผลิต นี่คือโค้ดที่เกี่ยวข้อง: now = datetime.datetime.utcnow() today = now.date() if event_date.date() == today: return "Today" yesterday = today - datetime.timedelta(1) if event_date.date() == yesterday: return "Yesterday" delta = (now - event_date).days if delta < 7: return _number_to_text(delta) + " days ago" if …

10
เฟรมเวิร์กเว็บแอ็พพลิเคชันสมัยใหม่มีวิธีการอย่างไรและทำไมจึงพัฒนาเพื่อแยกเส้นทาง URL จากระบบไฟล์
เมื่อเทียบกับเมื่อประมาณ 10 ปีที่แล้วฉันสังเกตเห็นการเปลี่ยนแปลงไปสู่เฟรมเวิร์กโดยใช้รูปแบบการกำหนดเส้นทางที่แยกเส้นทาง URL จากระบบไฟล์ โดยทั่วไปสามารถทำได้ด้วยความช่วยเหลือของรูปแบบตัวควบคุมด้านหน้า กล่าวคือเมื่อก่อนเส้นทาง URL ถูกแมปโดยตรงกับระบบไฟล์และดังนั้นจึงสะท้อนไฟล์และโฟลเดอร์ที่แน่นอนในดิสก์ปัจจุบันเส้นทาง URL ที่แท้จริงจะถูกตั้งโปรแกรมให้นำไปยังคลาสที่ระบุผ่านการกำหนดค่าและไม่สะท้อนไฟล์อีกต่อไป โฟลเดอร์ระบบและโครงสร้างไฟล์ คำถาม เรื่องนี้เกิดขึ้นได้อย่างไรและทำไมเป็นเรื่องธรรมดา? มันเป็นอย่างไรและทำไมจึงตัดสินใจว่ามัน "ดีกว่า" ถึงจุดที่การละทิ้งแนวทางตรงไปยังไฟล์ครั้งหนึ่งเคยเป็นเรื่องธรรมดา? คำตอบอื่น ๆ มีคำตอบที่คล้ายกันที่นี่ซึ่งเป็นแนวคิดเกี่ยวกับเส้นทางและข้อดีและข้อเสียบางประการ: ด้วยกรอบงาน PHP ทำไมแนวคิด "เส้นทาง" จึงถูกใช้? แต่มันไม่ได้กล่าวถึงประเด็นการเปลี่ยนแปลงทางประวัติศาสตร์หรืออย่างไรหรือทำไมการเปลี่ยนแปลงนี้เกิดขึ้นทีละน้อยซึ่งโครงการใหม่ ๆ ทุกวันนี้ค่อนข้างใช้รูปแบบการกำหนดเส้นทางใหม่และการกำหนดทิศทางโดยตรงไปยังไฟล์ล้าสมัยหรือถูกทอดทิ้ง นอกจากนี้ผลประโยชน์และข้อเสียดังกล่าวส่วนใหญ่ดูเหมือนจะไม่สำคัญพอที่จะรับประกันการเปลี่ยนแปลงระดับโลก ประโยชน์เพียงอย่างเดียวที่ฉันเห็นได้จากการเปลี่ยนแปลงนี้คือการซ่อนระบบไฟล์ / โฟลเดอร์จากผู้ใช้ปลายทางและขาด?param=value&param2=valueซึ่งทำให้ URL ดูสะอาดตา แต่นั่นเป็นเหตุผลเดียวที่ทำให้เกิดการเปลี่ยนแปลง? และถ้าใช่ทำไมเหตุผลเหล่านั้นถึงซ่อนอยู่? ตัวอย่าง: ฉันคุ้นเคยกับกรอบ PHP มากที่สุดและเฟรมเวิร์คสมัยใหม่ที่นิยมใช้วิธีกำหนดเส้นทางแบบแยกอิสระ เพื่อให้มันใช้งานได้คุณตั้งค่าการเขียน URL ใหม่ใน Apache หรือเว็บเซิร์ฟเวอร์ที่คล้ายกันซึ่งโดยทั่วไปแล้วการทำงานของแอปพลิเคชันเว็บจะไม่ถูกเรียกผ่านเส้นทาง URL โดยตรงไปยังไฟล์อีกต่อไป Zend Expressive https://docs.zendframework.com/zend-expressive/features/router/aura/ …

10
อะไรคือการใช้ downcasting ที่เหมาะสม?
Downcasting หมายถึงการคัดเลือกจากคลาสพื้นฐาน (หรืออินเทอร์เฟซ) ไปยังคลาสย่อยหรือคลาสลีฟ ตัวอย่างของการดาวน์สตรีมอาจเป็นหากคุณส่งจากSystem.Objectประเภทอื่น Downcasting นั้นเป็นที่นิยมอาจจะเป็นกลิ่นรหัส: หลักคำสอนเชิงวัตถุนั้นต้องการที่จะยกตัวอย่างเช่นการกำหนดและการเรียกวิธีเสมือนหรือนามธรรมแทนที่จะเป็นการลดทอน หากมีกรณีใดบ้างเป็นกรณีการใช้งานที่เหมาะสมและเหมาะสมสำหรับการลดความเร็ว? นั่นคือในสถานการณ์ใดมันเป็นสิ่งที่เหมาะสมในการเขียนรหัสที่ downcasts? หากคำตอบของคุณคือ "none" ดังนั้นทำไมระบบ downcasting จึงรองรับภาษานี้

9
ความหมายของกฎ 90/10 ของการเพิ่มประสิทธิภาพโปรแกรมคืออะไร
ตามวิกิพีเดียกฎ 90/10 ของการปรับโปรแกรมให้ดีที่สุดระบุว่า“ 90% ของเวลาดำเนินการโปรแกรมใช้ในการดำเนินการ 10% ของรหัส” (ดูย่อหน้าที่สองที่นี่ ) ฉันไม่เข้าใจสิ่งนี้จริงๆ สิ่งนี้หมายความว่าอย่างไร 90% ของเวลาในการดำเนินการสามารถใช้งานได้เพียง 10% ของรหัสเท่านั้น แล้วอีก 90% ของรหัสล่ะ? พวกเขาสามารถดำเนินการในเวลาเพียง 10% ได้อย่างไร

10
ทำไมภาษาต้องใช้วงเล็บในการแสดงออกเมื่อใช้กับ“ ถ้า” และ“ ในขณะที่”
ภาษาเช่น C, Java และ C ++ ทั้งหมดต้องวงเล็บรอบการแสดงออกทั้งเมื่อนำมาใช้ในการให้if, หรือwhileswitch if (true) { // Do something } ตรงข้ามกับ if true { // Do something } นี่ดูแปลกสำหรับฉันเพราะวงเล็บซ้ำซ้อน ในตัวอย่างtrueนี้เป็นการแสดงออกเพียงอย่างเดียวของมันเอง วงเล็บไม่เปลี่ยนความหมายในทางใดทางหนึ่งที่ฉันรู้ ทำไมไวยากรณ์แปลก ๆ นี้จึงมีอยู่และทำไมมันจึงเป็นเรื่องธรรมดา? มีประโยชน์ไหมที่ฉันไม่ทราบ?

7
คุณจะเปลี่ยนโปรแกรมจากการพัฒนาเป็นรีลีสได้อย่างไร
เมื่อถึงจุดหนึ่งโปรแกรมกำลังพัฒนา คุณสมบัติจะถูกเพิ่มหรือลบหรือเปลี่ยนแปลงตลอดเวลา ทุกรุ่นไม่มีอะไรนอกจากต้นแบบ ดังนั้นฉันจึงไม่ต้องเสียเวลาเขียนโค้ดที่สะอาดมากในตอนนั้นเพราะฉันไม่เคยรู้เลยว่าจะมีบางสิ่งอยู่นาน แน่นอนฉันพยายามรักษาคุณภาพของรหัสให้อยู่ในระดับมาตรฐาน แต่เวลาก็เป็นปัญหาเสมอ จากนั้นมาถึงจุดที่โปรแกรมสิ้นสุดและผู้มีอำนาจตัดสินใจพูดว่า "เสร็จแล้ว" ฉันมีต้นแบบการทำงาน ณ จุดนี้ แต่โค้ดด้านในค่อนข้างยุ่งเหยิงไปมาระหว่างการพัฒนา ฉันคาดว่าจะเริ่มการทดสอบ / การดีบักขั้นสุดท้าย แต่ไส้ในของฉันบอกว่าตอนนี้ฉันควรจะล้างข้อมูลหรือเขียนสิ่งใหม่เพื่อให้สถาปัตยกรรมที่เหมาะสมซึ่งทำให้การบำรุงรักษา ฯลฯ ง่ายขึ้น เมื่อเนื้อหาได้รับการทดสอบและอนุมัติแล้วก็ไม่มีเหตุผลที่จะเขียนใหม่ เป็นประจำฉันยืนอยู่ที่นั่นพร้อมกับต้นแบบ 'เสร็จสิ้น' ที่ทำงานและฉันได้รับข้อผิดพลาดในระหว่างการทดสอบและฉันเห็นว่ามันเป็นผลมาจากการเข้ารหัสที่ไม่ฉลาดซึ่งเป็นผลมาจากกระบวนการพัฒนาทั้งหมด ฉันอยู่ในระหว่างการทดสอบและการแก้ไขข้อผิดพลาดจะเป็นการเขียนซ้ำ ... มันเป็นระเบียบ! มีวิธีที่ดีกว่า / ตำราฉันแน่ใจ แต่ฉันต้องทำงานในสภาพแวดล้อมการทำงานจริงที่ไม่ใช่ทุกอย่างเป็นตำรา ดังนั้นฉันจะเปลี่ยนต้นแบบการทำงานของฉันไปเป็นรุ่นวางจำหน่ายที่มีฐานรหัสที่เสถียรได้อย่างไร บางทีฉันไม่ควรคิดว่าการพัฒนาจะเสร็จสิ้นเมื่อฉันทำและเห็นจริง ๆ ว่าเป็นขั้นตอนการทำความสะอาด ... ฉันไม่รู้ฉันต้องการความช่วยเหลือที่นี่ แก้ไข ฉันต้องการชี้แจงบางสิ่ง ฉัน 100% ในด้านของการทำก่อนและหลังรหัสสะอาดและอ่านได้ แต่ฉันก็ต้องทำสิ่งต่างๆให้สำเร็จและไม่สามารถฝันถึงความงามของรหัสได้ทั้งหมดที่สะอาดและเป็นประกาย ฉันต้องไปหาการประนีประนอม บ่อยครั้งที่คุณลักษณะใหม่เป็นเพียงสิ่งที่เราต้องการลองใช้และดูว่าเหมาะสมหรือไม่ที่จะใช้สิ่งนี้ (โดยเฉพาะในแอปมือถือเพื่อให้ได้รูปลักษณ์และความรู้สึกที่แท้จริงบนอุปกรณ์จริง) ดังนั้นมันจึงเป็นเรื่องเล็กน้อยที่ (imho) ไม่ได้พิสูจน์ว่างานมากเกินไปในการทำซ้ำครั้งแรก "ลองดู" อย่างไรก็ตามบางครั้งคำถามเกิดขึ้นเมื่อฉันต้องจ่าย tech.debt …

8
หากฉันต้องการใช้หน่วยความจำตลอดอายุการใช้งานของโปรแกรมฉันจำเป็นต้องเพิ่มจำนวนหน่วยความจำก่อนที่จะสิ้นสุดโปรแกรมหรือไม่?
ในหนังสือและแบบฝึกหัดหลายเล่มฉันเคยได้ยินการฝึกฝนการจัดการความจำและรู้สึกว่าสิ่งลึกลับและน่ากลัวบางอย่างจะเกิดขึ้นถ้าฉันไม่ได้ใช้หน่วยความจำฟรีหลังจากที่ฉันใช้งานเสร็จแล้ว ฉันไม่สามารถพูดสำหรับระบบอื่น ๆ (ถึงฉันมันก็สมเหตุสมผลที่จะสมมติว่าพวกเขาใช้แนวทางปฏิบัติที่คล้ายกัน) แต่อย่างน้อยใน Windows เคอร์เนลรับประกันโดยทั่วไปว่าจะล้างทรัพยากรส่วนใหญ่ (ยกเว้นข้อผิดพลาดเล็กน้อย) ที่ใช้โดย โปรแกรมหลังจากสิ้นสุดโปรแกรม ซึ่งรวมถึงหน่วยความจำฮีปท่ามกลางสิ่งอื่น ๆ อีกมากมาย ฉันเข้าใจว่าทำไมคุณต้องการปิดไฟล์หลังจากใช้งานเสร็จแล้วเพื่อให้ผู้ใช้สามารถใช้งานได้หรือทำไมคุณต้องการยกเลิกการเชื่อมต่อซ็อกเก็ตที่เชื่อมต่อกับเซิร์ฟเวอร์เพื่อประหยัดแบนด์วิดท์ แต่ดูเหมือนว่าโง่ ต้อง micromanage ทุกหน่วยความจำของคุณใช้โดยโปรแกรมของคุณ ตอนนี้ฉันยอมรับว่าคำถามนี้กว้างเนื่องจากวิธีที่คุณควรจัดการหน่วยความจำของคุณขึ้นอยู่กับจำนวนหน่วยความจำที่คุณต้องการและเมื่อคุณต้องการดังนั้นฉันจะ จำกัด ขอบเขตของคำถามนี้ให้แคบลง: หากฉันต้องการใช้ชิ้นส่วนของ หน่วยความจำตลอดอายุการใช้งานของโปรแกรมมันจำเป็นหรือไม่ที่จะปล่อยให้ถูกต้องก่อนสิ้นสุดโปรแกรม? แก้ไข: คำถามที่แนะนำว่าซ้ำซ้อนเป็นคำถามเฉพาะของตระกูล Unix ของระบบปฏิบัติการ คำตอบอันดับแรกของมันยังระบุเครื่องมือเฉพาะสำหรับ Linux (เช่น Valgrind) คำถามนี้มีขึ้นเพื่อครอบคลุมระบบปฏิบัติการที่ "ไม่ธรรมดา" ส่วนใหญ่และทำไมจึงเป็นหรือไม่ใช่แนวปฏิบัติที่ดีในการเพิ่มหน่วยความจำที่จำเป็นตลอดอายุการใช้งานของโปรแกรม

3
ทำไมเฟรมจึงเลิกใช้ใน HTML5 แต่ไม่ใช่ iFrames
ทำไมเฟรมจึงเลิกใช้ใน HTML5 แต่ไม่ใช่ iFrames ท้ายที่สุดแล้วแทบจะไม่มีความแตกต่างระหว่างสองสิ่งนี้ ในหลาย ๆ กรณีที่ใช้อย่างใดอย่างหนึ่งของพวกเขาจะให้ผลลัพธ์เดียวกัน (ให้อภัยฉันถ้าฉันผิด)?
67 html5 

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

9
ฉันสามารถพูดได้ว่า“ เรียนรู้” ณ จุดใด
ในช่วงไม่กี่ปีที่ฉันเขียนโปรแกรมฉันได้เล่นกับทุกอย่างตั้งแต่ Ruby ถึง C ++ ฉันทำทุกอย่างตั้งแต่การเรียนรู้ไวยากรณ์พื้นฐาน (Ruby) ไปจนถึงการทำโครงงานหลัก (สำหรับฉัน) หลายอย่างที่ทำให้ฉันมีความสามารถด้านภาษา ด้วยความหลากหลายนี้ (และความจริงที่ว่าการเรียนรู้ภาษาอย่างแท้จริงไม่เคยหยุดนิ่ง) เมื่อใดที่ฉันสามารถบอกได้ว่าฉันรู้ (หรือเรียนรู้) ภาษา?

16
โปรแกรมเมอร์ควรมีเสรีภาพเท่าไรในการเลือกภาษาและกรอบงาน?
ฉันเริ่มทำงานกับ บริษัท ที่เน้นภาษา C # เป็นหลัก เรามีบางคนที่ชอบ Java และ JRuby แต่โปรแกรมเมอร์ส่วนใหญ่ที่นี่เช่น C # ฉันถูกจ้างเพราะฉันมีประสบการณ์มากมายในการสร้างเว็บแอปพลิเคชันและเพราะฉันพึ่งพาเทคโนโลยีใหม่ ๆ เช่น JRuby บน Rails หรือ nodejs ฉันเพิ่งเริ่มต้นในโครงการสร้างเว็บแอปพลิเคชันโดยมุ่งเน้นที่การทำสิ่งต่าง ๆ มากมายในระยะเวลาอันสั้น ซอฟต์แวร์ที่เป็นผู้นำได้บอกว่าฉันใช้ mvc4 แทนราง อาจเป็นสิ่งที่ดียกเว้นฉันไม่รู้ mvc4 ฉันไม่รู้ C # และฉันเป็นคนเดียวที่รับผิดชอบในการสร้างเว็บแอปพลิเคชันเซิร์ฟเวอร์และ UI ส่วนหน้า มันจะไม่สมเหตุสมผลที่จะใช้เฟรมเวิร์กที่ฉันรู้จักดีมาก (Rails) แทนที่จะใช้ mvc4 หรือไม่? เหตุผลเบื้องหลังการตัดสินใจคือหัวหน้าฝ่ายเทคโนโลยีไม่ทราบว่า Jruby / ทางรถไฟและจะไม่มีทางนำรหัสนี้กลับมาใช้ใหม่ได้ อาร์กิวเมนต์ตัวนับ: เขาจะไม่ให้รหัสและตรงไปตรงมาไม่จำเป็นใน โครงการนี้ ดังนั้นมันไม่สำคัญว่าเขาจะรู้จัก JRuby / …

6
เหตุใดจึงเลือกก่อนหน้าจากในแบบสอบถาม SQL [ปิด]
นี่เป็นสิ่งที่รบกวนฉันมากที่โรงเรียน ห้าปีที่แล้วเมื่อฉันเรียนรู้ SQL ฉันมักจะสงสัยว่าทำไมเราระบุเขตข้อมูลที่เราต้องการและจากที่ที่เราต้องการ ตามความคิดของฉันเราควรเขียน: From Employee e Select e.Name เหตุใดจึงต้องพูดตามนี้ Select e.Name -- Eeeeek, what does e mean? From Employee e -- Ok, now I know what e is ฉันใช้เวลาหลายสัปดาห์เพื่อทำความเข้าใจกับ SQL และฉันรู้ว่าองค์ประกอบจำนวนมากถูกใช้ไปโดยลำดับที่ไม่ถูกต้อง มันเหมือนกับการเขียนใน C #: string name = employee.Name; var employee = this.GetEmployee(); ดังนั้นฉันคิดว่ามันมีเหตุผลทางประวัติศาสตร์ ทำไม?
67 sql  history  syntax 

8
ชุมชนภาษาบางภาษา (เช่น Ruby และ Python) สามารถป้องกันการแตกแฟรกเมนต์ได้อย่างไรขณะที่ชุมชนอื่น (เช่น Lisp หรือ ML) ไม่
คำว่า "เสียงกระเพื่อม" (หรือ "เสียงกระเพื่อมคล้าย") เป็นร่มสำหรับภาษาต่าง ๆ มากมายเช่น Common Lisp, Scheme และ Arc มีการแตกแฟรกเมนต์ที่คล้ายกันในชุมชนภาษาอื่นเช่นใน ML อย่างไรก็ตาม Ruby และ Python มีการจัดการเพื่อหลีกเลี่ยงชะตากรรมนี้ที่นวัตกรรมเกิดขึ้นมากขึ้นในการดำเนินการ (เช่น PyPy หรือ YARV) แทนการเปลี่ยนแปลงภาษาเอง ชุมชน Ruby และ Python ทำอะไรเป็นพิเศษเพื่อป้องกันการแตกหักของภาษาหรือไม่

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