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

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

9
มีสารานุกรมของอัลกอริทึมหรือไม่? [ปิด]
มีสารานุกรมของอัลกอริทึมคล้ายกับคู่มือคณิตศาสตร์หรือไม่? ดูเหมือนว่ามีประโยชน์ที่จะมีจำนวนมากในที่เดียว ฉันรู้ว่าศิลปะการเขียนโปรแกรมคอมพิวเตอร์ถือเป็นแหล่งข้อมูลที่ดี แต่ดูเหมือนว่าไม่มีสารานุกรมเท่าที่ให้คำแนะนำ ผู้ดำเนินรายการหมายเหตุ เรากำลังมองหาคำตอบยาว ๆ ที่ให้คำอธิบายและบริบท อย่าเพิ่งทำรายการหนังสือ: โปรดอธิบายว่าทำไมคุณจึงแนะนำหนังสือหรือแหล่งข้อมูล คำตอบที่ไม่อธิบายอะไรจะถูกลบ ดูอัตนัยที่ดีอัตนัยไม่ดีสำหรับข้อมูลเพิ่มเติม
34 algorithms 

6
เหตุใดการใช้ 'ขั้นสุดท้าย' ในชั้นเรียนจึงไม่ดีจริงๆ
ฉันกำลังสร้างเว็บไซต์เดิมของ PHP OOP ฉันถูกล่อลวงให้เริ่มใช้ 'ขั้นสุดท้าย' ในชั้นเรียนถึง " make it explicit that the class is currently not extended by anything" สิ่งนี้อาจช่วยประหยัดเวลาได้มากถ้าฉันมาเรียนและฉันสงสัยว่าฉันสามารถเปลี่ยนชื่อ / ลบ / แก้ไขprotectedคุณสมบัติหรือวิธีการได้หรือไม่ ถ้าฉันจริงๆต้องการที่จะขยายชั้นเรียนฉันก็สามารถลบคำหลักสุดท้ายที่จะปลดล็อคสำหรับการขยาย คือถ้าฉันมาในชั้นเรียนที่ไม่มีชั้นเรียนเด็กฉันสามารถบันทึกความรู้นั้นโดยการทำเครื่องหมายชั้นเรียนเป็นที่สิ้นสุด ครั้งต่อไปที่ฉันเข้ามาฉันจะไม่ต้องค้นหา codebase อีกครั้งเพื่อดูว่ามีลูกหรือไม่ จึงช่วยประหยัดเวลาในระหว่างการรีแฟคเตอร์ ทุกอย่างดูเหมือนจะเป็นแนวคิดที่ช่วยประหยัดเวลาได้ แต่ .... ฉันมักจะอ่านว่าคลาสควรจะทำ 'ขั้นสุดท้าย' ในโอกาสที่หายาก / พิเศษเท่านั้น บางทีมันอาจทำให้เกิดการสร้างวัตถุจำลองหรือมีผลข้างเคียงอื่น ๆ ที่ฉันไม่ได้คิด ฉันพลาดอะไรไป

15
รหัสไม่มีจุดหมายในที่มาของคุณ
ฉันเคยได้ยินเรื่องนี้จากผู้เขียนโค้ดอาวุโสและฉันได้เห็นมันด้วยตัวเอง ดูเหมือนว่ามีโปรแกรมเมอร์มากกว่าสองสามตัวอย่างที่เขียนโค้ดที่ไม่มีจุดหมาย ฉันจะเห็นสิ่งต่าง ๆ เช่น: การเรียกใช้เมธอดหรือฟังก์ชันที่ไม่ทำสิ่งใดมีค่า การตรวจสอบซ้ำซ้อนทำในไฟล์คลาสวัตถุหรือวิธีการแยกต่างหาก if ข้อความที่ประเมินว่าเป็นจริงเสมอ เธรดที่หมุนและไม่ทำอะไรเลย เพียงเพื่อชื่อไม่กี่ ฉันได้รับการบอกว่าเป็นเพราะโปรแกรมเมอร์ต้องการทำให้โค้ดสับสนเพื่อเพิ่มมูลค่าให้กับองค์กรหรือทำให้มั่นใจในการทำธุรกิจซ้ำในกรณีที่มีงานตามสัญญาหรืองานเอาต์ซอร์ซ คำถามของฉันคือ มีคนอื่นเห็นรหัสเช่นนี้หรือไม่ ข้อสรุปของคุณคืออะไรทำไมรหัสนั้นอยู่ที่นั่น หากใครมีรหัสที่เขียนเช่นนี้คุณสามารถแบ่งปันทำไม

14
มีประโยชน์อะไรบ้างที่ทำให้มัวเมากับการสร้างโค้ด“ ดูสวย”
บางครั้งฉันใช้เวลา (ชั่วโมง) ที่ไร้สาระในการสร้างโค้ด "ดูน่ารัก" ฉันหมายถึงการทำให้สิ่งต่าง ๆ ดูสมมาตร จริง ๆ แล้วฉันจะเลื่อนดูทั้งชั้นอย่างรวดเร็วเพื่อดูว่ามีสิ่งใดที่กระโดดออกมาโดยไม่มองว่า "สวย" หรือ "สะอาด" ฉันจะเสียเวลาหรือเปล่า? พฤติกรรมแบบนี้มีคุณค่าหรือไม่? บางครั้งฟังก์ชั่นหรือการออกแบบของรหัสจะไม่เปลี่ยนแปลงฉันจะเพียงแค่ปรับโครงสร้างใหม่เพื่อให้ดูดีขึ้น ฉันแค่เป็นโรค OCD โดยสิ้นเชิงหรือมีประโยชน์ซ่อนอยู่ในนี้บ้างไหม
34 clean-code 

8
Default vs Impl เมื่อใช้งานอินเตอร์เฟสใน Java
หลังจากอ่านชื่อแพคเกจควรเป็นเอกพจน์หรือพหูพจน์หรือไม่? มันเกิดขึ้นกับฉันว่าฉันไม่เคยเห็นการอภิปรายที่เหมาะสมซึ่งครอบคลุมหนึ่งในสัตว์เลี้ยงของฉัน: การตั้งชื่อการใช้งานอินเทอร์เฟซ สมมติว่าคุณมีอินเทอร์เฟซOrderที่ตั้งใจจะนำไปใช้ในหลากหลายวิธี แต่มีเพียงการเริ่มต้นเมื่อโครงการถูกสร้างขึ้นครั้งแรก คุณไปเพื่อDefaultOrderหรือOrderImplหรือตัวแปรอื่น ๆ เพื่อหลีกเลี่ยงการแยกขั้วเท็จ? และคุณจะทำอย่างไรเมื่อมีการใช้งานเพิ่มขึ้นมา? และที่สำคัญที่สุด ... ทำไม

10
วิธีการโน้มน้าวใจผู้จัดการเพื่อให้สแต็คล้น
ที่ บริษัท ของฉันเรามีข้อ จำกัด ที่เข้มงวดในการใช้อินเทอร์เน็ต ฉันมักจะต้องใช้อินเทอร์เฟซมือถือที่ไม่ดีสำหรับ Stack Overflow เท่านั้น อย่างไรก็ตามไซต์มีประโยชน์มากสำหรับการทำงาน ฉันจะโน้มน้าวให้ผู้จัดการยกเลิกการบล็อก Stack Overflow ได้อย่างไร มีข้อสรุปของสิทธิประโยชน์ทางออนไลน์สำหรับผู้จัดการเพื่อดูหรือไม่?

4
แนวคิดการใช้งาน Model-View-Presenter
ฉันพยายามเข้าใจวิธีนำ decoupling ที่ดีระหว่าง UI และโมเดลมาใช้ แต่ฉันมีปัญหาในการหาตำแหน่งที่จะแบ่งเส้นตรง ฉันได้ดู Model-View-Presenter แล้ว แต่ฉันไม่แน่ใจว่าจะนำไปใช้อย่างไร ตัวอย่างเช่นมุมมองของฉันมีหลายกล่องโต้ตอบ .. ควรมีคลาส View พร้อมอินสแตนซ์ของแต่ละกล่องโต้ตอบหรือไม่? จากนั้นในกรณีนั้นกล่องโต้ตอบควรโต้ตอบกับผู้นำเสนออย่างไร กล่าวคือ ถ้าไดอะล็อกแต่ละรายการต้องการขอข้อมูลจาก Model ผ่าน Presenter กล่องโต้ตอบนั้นควรได้รับการอ้างอิงไปยัง Presenter อย่างไร ผ่านการอ้างอิงไปยังมุมมองที่ให้ไว้ในระหว่างการก่อสร้าง? ฉันคิดว่าบางทีมุมมองที่ควรจะเป็นระดับคงที่? จากนั้นกล่องโต้ตอบ GetView และรับผู้นำเสนอจากที่นั่น ... ฉันกำลังคิดเกี่ยวกับการตั้งค่าผู้นำเสนอด้วยความเป็นเจ้าของมุมมองและรูปแบบ (ตรงข้ามกับมุมมองที่มีผู้นำเสนอและผู้นำเสนอมีรูปแบบ) และผู้นำเสนอลงทะเบียนการเรียกกลับสำหรับกิจกรรมในมุมมอง แต่นั่นทำให้ดูเหมือนมาก คู่เพิ่มเติม (หรือภาษาขึ้นอยู่กับอย่างน้อย) ฉันพยายามที่จะ: ทำให้เป็น decoupled มากที่สุด ทำให้เป็นไปได้ที่จะจับคู่ Presenter / Model กับมุมมองของภาษาอื่น ๆ (ฉันไม่ได้ทำเรื่องระหว่างภาษา แต่ฉันรู้ว่ามันเป็นไปได้โดยเฉพาะยิ่งvoid(void)ฉันสามารถติดแอพ C # …

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

12
มีนักพัฒนากี่คนก่อนที่จะรวมอย่างต่อเนื่องเพื่อให้เกิดประสิทธิภาพ
มีค่าใช้จ่ายที่เกี่ยวข้องกับการบูรณาการอย่างต่อเนื่องเช่นการตั้งค่าการฝึกอบรมใหม่กิจกรรมการรับรู้การหยุดเพื่อแก้ไข "ข้อบกพร่อง" ที่กลายเป็นปัญหาข้อมูลการบังคับใช้รูปแบบการเขียนโปรแกรมที่เกี่ยวข้องเป็นต้น การรวมระบบอย่างต่อเนื่องเป็นสิ่งที่จุดสำหรับตัวเอง? แก้ไข: นี่คือการค้นพบของฉัน การตั้งค่าคือ CruiseControl.Net กับ Nant อ่านจาก VSS หรือ TFS นี่คือสาเหตุบางประการของความล้มเหลวซึ่งไม่มีส่วนเกี่ยวข้องกับการตั้งค่า: ค่าใช้จ่ายในการตรวจสอบ : เวลาที่ใช้ในการตรวจสอบว่าแสงสีแดงเกิดจากความไม่สอดคล้องของตรรกะในรหัสคุณภาพของข้อมูลหรือแหล่งอื่นเช่นปัญหาโครงสร้างพื้นฐาน (เช่นปัญหาเครือข่ายการหมดเวลาอ่านจากการควบคุมแหล่งที่มา ลง ฯลฯ ฯลฯ ) ค่าใช้จ่ายทางการเมืองบนโครงสร้างพื้นฐาน : ฉันถือว่าการตรวจสอบ "โครงสร้างพื้นฐาน" สำหรับแต่ละวิธีในการทดสอบการทำงาน ฉันไม่มีวิธีแก้ไขปัญหาการหมดเวลายกเว้นเพื่อแทนที่การสร้างเซิร์ฟเวอร์ เทปสีแดงเข้ามาขวางทางและไม่มีการแทนที่เซิร์ฟเวอร์ ค่าใช้จ่ายในการแก้ไขการทดสอบหน่วย : ไฟสีแดงเนื่องจากปัญหาคุณภาพข้อมูลอาจเป็นตัวบ่งชี้การทดสอบหน่วยที่เขียนไม่ดี ดังนั้นการทดสอบหน่วยขึ้นอยู่กับข้อมูลจึงถูกเขียนขึ้นใหม่เพื่อลดโอกาสที่แสงสีแดงจะเกิดขึ้นเนื่องจากข้อมูลที่ไม่ดี ในหลายกรณีข้อมูลที่จำเป็นถูกแทรกเข้าไปในสภาพแวดล้อมการทดสอบเพื่อให้สามารถทำการทดสอบหน่วยได้อย่างถูกต้อง มันสมเหตุสมผลที่จะบอกว่าการทำให้ข้อมูลมีความแข็งแกร่งมากขึ้นแล้วการทดสอบจะมีประสิทธิภาพมากขึ้นถ้ามันขึ้นอยู่กับข้อมูลนี้ แน่นอนมันใช้งานได้ดี! ค่าใช้จ่ายของความครอบคลุมเช่นการเขียนการทดสอบหน่วยสำหรับรหัสที่มีอยู่แล้ว : มีปัญหาของการครอบคลุมการทดสอบหน่วย มีวิธีการนับพันที่ไม่มีการทดสอบหน่วย ดังนั้นจำเป็นต้องมีจำนวนวันคนจำนวนมากเพื่อสร้างสิ่งเหล่านั้น เนื่องจากมันจะยากเกินไปที่จะสร้างกรณีธุรกิจจึงมีการตัดสินใจว่าการทดสอบหน่วยจะใช้สำหรับวิธีการสาธารณะใหม่ ๆ ผู้ที่ไม่มีการทดสอบหน่วยถูกเรียกว่า 'อาจเป็นสีแดง' จุดที่น่าสนใจที่นี่คือวิธีการแบบคงที่เป็นจุดที่สงสัยในวิธีที่จะเป็นไปได้ที่จะกำหนดว่าวิธีการแบบคงที่ที่เฉพาะเจาะจงล้มเหลวได้อย่างไร ค่าใช้จ่ายในการเผยแพร่ bespoke : …

9
สามารถใช้ C ++ เป็นภาษาพัฒนาเว็บฝั่งเซิร์ฟเวอร์ได้หรือไม่ [ปิด]
ฉันต้องการพัฒนาเว็บไซต์โดยใช้ C ++ เป็น "ภาษาสคริปต์" บนฝั่งเซิร์ฟเวอร์ โครงสร้างพื้นฐานเซิร์ฟเวอร์ของฉันใช้เป็น * nix ดังนั้นการทำการพัฒนาเว็บไซต์ใน C ++ บน Azure จึงไม่สามารถทำได้และ C ++ / CLI ASP.NET ก็ใช้ไม่ได้เช่นกัน แยกจากแอปพลิเคชั่น CGI รุ่นเก่าสามารถพัฒนาเว็บไซต์ด้วย C ++ ได้หรือไม่?

8
Ruby แต่ไม่ใช่ Rails ในประวัติการทำงานของฉัน [ปิด]
ฉันแสดง Ruby เป็นทักษะในเรซูเม่ของฉันเพราะฉันได้เขียนโปรแกรมใน Ruby เป็นเวลา 5 ปีในขณะที่ฉันทำงานกับปริญญาเอกของฉัน วิทยานิพนธ์. ฉันส่วนใหญ่ใช้มันเพื่อใช้อัลกอริทึมการประมวลผลภาษาธรรมชาติ ฉันเริ่มมองหางานและโพสต์ประวัติย่อของฉันไปยังเว็บไซต์ไม่กี่แห่ง (เป็นโบนัสพิเศษเมื่อสมัครงานตามเป้าหมายที่กำหนด) ตอนนี้ฉันได้รับนายหน้าเรียกให้ฉันเสนองาน Ruby on Rails ให้ฉัน ปัญหาคือฉันไม่เคยเรียนรู้ Rails ไม่เคยเกี่ยวข้องกับสิ่งที่ฉันทำเพื่อปริญญาเอกของฉัน คุณจะแนะนำให้จัดการกับสถานการณ์นี้อย่างไรเพื่อหลีกเลี่ยงการเสียเวลาและสถานการณ์ของฉัน? (และการเรียนรู้ Rails อาจไม่ใช่ทางเลือกจนกว่าฉันจะทำวิทยานิพนธ์ของฉันเสร็จ) ประวัติส่วนตัวของฉันจะถูกปรับให้ชัดเจนขึ้นได้หรือไม่? มันควรจะปรับ? ฉันควรจะบอกพวกเขาอย่างสุภาพในโทรศัพท์ว่าฉันไม่รู้จัก Rails หรือไม่? ยังไงก็ตามส่วนที่เกี่ยวข้องในเรซูเม่ของฉันก็บอกว่า: ทักษะ: ภาษาโปรแกรม: C, C ++, Java, Scala, Ruby, LaTeX ฐานข้อมูล: MySQL, XML, XPath และแสดงพื้นที่ทักษะอื่น ๆ ที่ไม่อาจสับสนกับผู้พัฒนา Rails

1
Apache HTTP Server และ Apache Tomcat เกี่ยวข้องกันอย่างไร (ถ้าทั้งหมด)
ขณะนี้ฉันมีApache httpdทำงานบนเซิร์ฟเวอร์ Ubuntu VPS ที่ใช้งานจริง ฉันเขียนสคริปต์ PHP ฉันสนใจที่จะเรียนรู้ Java และฉันสงสัยว่าฉันจะเขียน Java ฝั่งเซิร์ฟเวอร์เพื่อทำงานกับการตั้งค่าปัจจุบันของฉันได้อย่างไร วิธีApache TomcatและApache HTTP Serverที่เกี่ยวข้องกับแต่ละอื่น ๆ ? Tomcat สามารถเป็นโมดูลของ httpd ได้หรือไม่? หรือพวกเขาเป็นเพียงแค่สองโครงการที่แตกต่างกันมากที่เกิดขึ้นโดยองค์กรเดียวกัน (Apache Software Foundation)

9
การตรวจสอบพารามิเตอร์ Constructor ใน C # - แนวปฏิบัติที่ดีที่สุด
แนวปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบความถูกต้องของพารามิเตอร์คอนสตรัคเตอร์คืออะไร? สมมติว่า C # เป็นเรื่องง่าย: public class MyClass { public MyClass(string text) { if (String.IsNullOrEmpty(text)) throw new ArgumentException("Text cannot be empty"); // continue with normal construction } } มันจะเป็นที่ยอมรับที่จะโยนข้อยกเว้น? ทางเลือกที่ฉันพบคือการตรวจสอบความถูกต้องก่อนที่จะสร้างอินสแตนซ์: public class CallingClass { public MyClass MakeMyClass(string text) { if (String.IsNullOrEmpty(text)) { MessageBox.Show("Text cannot be empty"); return null; } else …

11
Java vs. C # - เปอร์สเปคทีฟการทำงาน [ปิด]
หากคุณมีประสบการณ์หลายปีในการทำงานกับ Java และประสบการณ์หลายปีในการทำงานกับ C # และ. NET ฉันจะให้ความคิดเห็นของคุณเกี่ยวกับความแตกต่างของประสิทธิภาพการพัฒนาซอฟต์แวร์ระหว่างสองสภาพแวดล้อมนี้ ลูกค้าคนหนึ่งของเรากำลังพิจารณาที่จะเปลี่ยนโซลูชันซอฟต์แวร์ที่มีอยู่ ในฐานะที่เป็นทดแทนจะต้องมีประมาณ 10 - 15 ปีคนทำงานตัวเลือกสำหรับ Java หรือ. NET บนพื้นฐานของความแตกต่างของการผลิตระหว่างพวกเขาอาจมีอิทธิพลต่อการลงทุนที่จำเป็นและเวลาในการตลาดอย่างมีนัยสำคัญ คุณจะสามารถให้เราเป็นตัวบ่งชี้ถึงความแตกต่างของประสิทธิภาพการพัฒนาซอฟต์แวร์ระหว่าง Java และ C # /. NET หรือไม่ ฉันต้องการรับคำตอบดังนี้: ประสบการณ์ของฉันขึ้นอยู่กับประสบการณ์ X ปีที่ทำงานกับ Java และประสบการณ์ X ปีที่ทำงานกับ C # /. NET Java มีประสิทธิภาพเพิ่มขึ้น X% แล้ว C # .NET หรือ C # /. NET …

14
การจัดการกับความหยาบคายในซอร์สโค้ด [ปิด]
ผู้คนจัดการกับคำหยาบคายในซอร์สโค้ดและข้อคิดเห็น VCS อย่างไร เก็บหรือลบ? สิ่งที่เกี่ยวกับ soft-expletives เช่น WTF หรือ Arrgggh ไม่เป็นมืออาชีพเป็นที่น่ารังเกียจหรือบางสิ่งบางอย่างที่จะยักไหล่ออก?

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