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

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

4
ความแตกต่างระหว่าง Dependency Injection (DI) และ Inversion of Control (IOC)
ฉันได้เห็นการอ้างอิงจำนวนมากของ Dependency Injection (DI) & Inversion Of Control (IOC) แต่ฉันไม่รู้จริง ๆ ว่ามีความแตกต่างระหว่างพวกเขาหรือไม่ ฉันต้องการเริ่มใช้หนึ่งหรือทั้งสองอย่าง แต่ฉันสับสนเล็กน้อยว่ามันแตกต่างกันอย่างไร

15
LISP ยังมีประโยชน์ในโลกปัจจุบันหรือไม่? เวอร์ชันใดที่ใช้มากที่สุด
ฉันพยายามสอนภาษาโปรแกรมใหม่ในช่วงเวลาปกติ เมื่อเร็ว ๆ นี้ฉันได้อ่าน Lisp และภาษาถิ่นของมันอยู่ตรงข้ามกับสเปกตรัมจากภาษาอย่าง C / C ++ ซึ่งทำให้ฉันอยากรู้มากขึ้นเกี่ยวกับเรื่องนี้ อย่างไรก็ตามมีสองสิ่งที่ไม่ชัดเจนสำหรับฉันและฉันกำลังมองหาแนวทางสำหรับพวกเขา: LISP ยังคงฝึกฝน / ใช้ในโลกปัจจุบันหรือว่าเป็นภาษาดั้งเดิมเช่น FORTRAN / COBOL ฉันหมายถึงนอกเหนือจากการบำรุงรักษาโค้ดที่มีอยู่แล้วมันใช้กับโครงการใหม่หรือไม่? ภาษาที่ใช้กันมากที่สุดคืออะไร? ฉันได้พบกับ Scheme และ Common LISP ในฐานะภาษากลางที่แพร่หลายมากที่สุดสองภาษาและต้องการความคิดเห็นของคุณว่าสิ่งใดเป็นสิ่งที่เป็นที่นิยม / มีประโยชน์มากที่สุดในการเรียนรู้และจะทำให้คุณพอใจมากหากคุณสามารถแนะนำทรัพยากร ในขณะที่กระตือรือร้นที่จะเรียนรู้ภาษาที่แตกต่างจากภาษาขั้นตอนที่ฉันคุ้นเคย แต่ฉันไม่ต้องการที่จะลงทุนในความพยายามที่ไม่เหมาะสมในบางสิ่งถ้ามันล้าสมัยไปหมด - ฉันยังคงเรียนรู้ว่ามันเป็น "มืออาชีพ" แต่มีมุมมองทางวิชาการเท่านั้น

8
เหตุใดการติดตามช่องว่างจึงเป็นเรื่องใหญ่ [ปิด]
Trailing whitespace มีปัญหาเพียงพอสำหรับโปรแกรมเมอร์ที่บรรณาธิการอย่าง Emacs มีฟังก์ชั่นพิเศษที่เน้นหรือกำจัดมันโดยอัตโนมัติและมาตรฐานการเข้ารหัสจำนวนมากต้องการให้คุณกำจัดทุกกรณีของมัน ฉันไม่แน่ใจว่าทำไม ฉันสามารถคิดถึงเหตุผลเชิงปฏิบัติอย่างหนึ่งในการหลีกเลี่ยงช่องว่างที่ไม่จำเป็นและก็คือถ้าผู้คนไม่ระวังเกี่ยวกับการหลีกเลี่ยงมันพวกเขาอาจเปลี่ยนมันในระหว่างการผูกมัดและจากนั้นเราได้รับมลภาวะ เพิ่มช่องว่าง นี่ดูเหมือนจะเป็นเหตุผลที่ดีที่จะหลีกเลี่ยง แต่ฉันต้องการดูว่ามีมากกว่านั้นหรือไม่ เหตุใดการตามช่องว่างที่ตามมาจึงเป็นเรื่องใหญ่

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

6
"ตรรกะทางธุรกิจ" คืออะไร?
ฉันทำงานกับการพัฒนาเว็บไซต์ตั้งแต่ปี 2009 เมื่อฉันเริ่มต้นกับ PHP เมื่อฉันย้ายไปที่ ASP.NET ฉันได้ยินมากเกี่ยวกับ DDD และ OOAD ที่ให้ความสำคัญกับ "ตรรกะทางธุรกิจ" และ "กฎทางธุรกิจ" นี้ ประเด็นก็คือแอพทั้งหมดที่ฉันพัฒนาขึ้นจนถึงตอนนี้ล้วนเกี่ยวกับการทำงานของ CRUD และฉันไม่เคยเห็นสิ่งเหล่านี้มาใช้ในทางปฏิบัติ ฉันไม่สามารถจินตนาการได้ว่าสิ่งเหล่านั้นสามารถนำไปปฏิบัติได้จริง ๆ ดังนั้นตรรกะทางธุรกิจนี้คืออะไรและมันเข้ากับแอพได้อย่างไร ฉันรู้ว่าสิ่งเหล่านี้ถูกนำมาใช้เป็นวิธีการในแบบจำลองโดเมน แต่วิธีการเหล่านั้นอาจเป็นไปได้และในแอปพลิเคชันที่พวกเขาสามารถใช้งานได้

5
Swift จะเร็วกว่า Objective-C มากในการเปรียบเทียบเหล่านี้อย่างไร
แอปเปิ้ลเปิดตัวภาษาโปรแกรมใหม่ของสวิฟท์ที่WWDC14 ในการนำเสนอพวกเขาทำการเปรียบเทียบประสิทธิภาพระหว่าง Objective-C และ Python ต่อไปนี้เป็นรูปภาพของหนึ่งในสไลด์ของการเปรียบเทียบภาษาทั้งสามที่ดำเนินการเรียงลำดับวัตถุที่ซับซ้อน มีกราฟที่น่าทึ่งยิ่งขึ้นเกี่ยวกับการเปรียบเทียบประสิทธิภาพโดยใช้อัลกอริทึมการเข้ารหัสRC4 เห็นได้ชัดว่านี่คือการพูดคุยด้านการตลาดและพวกเขาไม่ได้ลงรายละเอียดเกี่ยวกับวิธีการนำไปใช้ในแต่ละครั้ง ฉันทิ้งฉันสงสัยว่า: ภาษาการเขียนโปรแกรมใหม่จะเร็วขึ้นได้อย่างไร? ผลลัพธ์ Objective-C เกิดจากคอมไพเลอร์ที่ไม่ดีหรือมีบางสิ่งที่มีประสิทธิภาพน้อยกว่าใน Objective-C กว่า Swift หรือไม่? คุณจะอธิบายประสิทธิภาพที่เพิ่มขึ้น 40% ได้อย่างไร ฉันเข้าใจว่าการรวบรวมขยะ / การควบคุมการอ้างอิงอัตโนมัติอาจทำให้เกิดโอเวอร์เฮดเพิ่มเติม

2
จะตรวจจับการเข้ารหัสไฟล์ได้อย่างไร?
ในระบบไฟล์ของฉัน (Windows 7) ฉันมีไฟล์ข้อความบางไฟล์ (นี่คือไฟล์สคริปต์ SQL หากมีความสำคัญ) เมื่อเปิดด้วยNotepad ++ในเมนู "การเข้ารหัส" บางรายการถูกรายงานว่ามีการเข้ารหัส "UCS-2 Little Endian" และ "UTF-8 ที่ไม่มี BOM" บางส่วน ความแตกต่างที่นี่คืออะไร? พวกเขาทั้งหมดดูเหมือนจะเป็นสคริปต์ที่สมบูรณ์แบบ ฉันจะบอกได้อย่างไรว่าการเข้ารหัสไฟล์นั้นไม่มีแผ่นจดบันทึก ++

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

20
วลี“ ไม่เคยพลิกโฉมใหม่ของวงล้อ” เหมาะสำหรับนักเรียนหรือไม่
ฉันพบว่าตัวเองกำลังวิ่งเข้าสู่นิพจน์นี้อย่างต่อเนื่อง "อย่าพลิกโฉมพวงมาลัย" หรือ "ไม่ต้องพลิกโฉมพวงมาลัย" เมื่อฉันถามคำถามเกี่ยวกับ SO พวกเขาบอกให้คุณใช้เฟรมเวิร์กหรือแพ็คเกจที่มีอยู่ ฉันรู้ว่าทัศนคตินี้มาจากไหนเพราะมันไม่ฉลาดที่จะเสียเวลากับสิ่งที่คนอื่นแก้ไขไปแล้ว หรือว่าอย่างนั้น? ในฐานะนักเรียนฉันพบโดยใช้โค้ดที่ผู้อื่นเขียนเพื่อแก้ปัญหาของฉันฉันไม่สามารถเรียนรู้ได้มากเท่าที่ฉันต้องการและฉันได้รับข้อมูลเชิงลึกน้อยลง และบางครั้งฉันคิดว่าวลีนี้ส่วนใหญ่สำหรับโปรแกรมเมอร์ที่ทำงานต้องเผชิญกับกำหนดเวลาและไม่ใช่สำหรับนักเรียนอย่างฉัน มันไม่ดีที่จะ "บูรณาการล้อ"? บางทีฉันคิดว่ามันผิด อาจมีวิธีที่ฉันสามารถหลีกเลี่ยงการสร้างวงล้อใหม่และในเวลาเดียวกันก็เรียนรู้อะไรมากมาย?

14
ทำไม 0 จึงเป็นเท็จ
คำถามนี้อาจฟังดูเป็นใบ้ แต่ทำไม0ประเมินfalseและค่าอื่น ๆ [จำนวนเต็ม] trueเป็นภาษาโปรแกรมส่วนใหญ่ การเปรียบเทียบสตริง เนื่องจากคำถามดูเหมือนจะง่ายเกินไปฉันจะอธิบายตัวเองมากกว่านี้ก่อนอื่นอาจเห็นได้ชัดจากโปรแกรมเมอร์ทุกคน แต่ทำไมไม่มีภาษาการเขียนโปรแกรม - อาจมี แต่ไม่มี ฉันใช้ - ซึ่งเป็น0ค่าที่ประเมินtrueและ [จำนวนเต็ม] อื่น ๆ เพื่อfalseที่ไหน คำพูดหนึ่งอาจดูสุ่ม แต่ฉันมีตัวอย่างเล็ก ๆ น้อย ๆ ที่มันอาจเป็นความคิดที่ดี ก่อนอื่นเราลองมาดูตัวอย่างของการเปรียบเทียบสามสายผมจะเอา C มาstrcmpเป็นตัวอย่าง: โปรแกรมเมอร์ที่ลอง C เป็นภาษาแรกของเขาอาจถูกล่อลวงให้เขียนโค้ดต่อไปนี้: if (strcmp(str1, str2)) { // Do something... } เนื่องจากstrcmpส่งคืน0ซึ่งประเมินว่าfalseเมื่อใดที่สตริงมีค่าเท่ากันสิ่งที่โปรแกรมเมอร์เริ่มต้นพยายามทำล้มเหลวอย่างน่าสังเวชและโดยทั่วไปเขาไม่เข้าใจว่าทำไมในตอนแรก มีการ0ประเมินผลtrueแทนฟังก์ชันนี้สามารถใช้ในการแสดงออกที่ง่ายที่สุด - อย่างใดอย่างหนึ่งข้างต้น - เมื่อเปรียบเทียบกับความเสมอภาคและการตรวจสอบที่เหมาะสมสำหรับ-1และ1จะทำได้เมื่อจำเป็นเท่านั้น เราจะพิจารณาประเภทการคืนเป็นbool(ในความคิดของเราฉันหมายถึง) ส่วนใหญ่เวลา นอกจากนี้ขอแนะนำชนิดใหม่signที่ใช้เวลาเพียงค่า-1, และ0 1ที่สามารถมีประโยชน์สวย ลองนึกภาพว่ามีโอเปอเรเตอร์ยานอวกาศใน …

8
โปรแกรมเมอร์จำนวนมากย้ายรหัสของพวกเขาไปที่ GitHub?
ในช่วง 6 เดือนที่ผ่านมาฉันได้เห็นรหัสหลายโฮสต์ที่ sourceforge.net เช่นเดียวกับไซต์โฮสต์อื่น ๆ "ย้ายไปที่ GitHub" การค้นหาโดย Google ที่มีวลี "ย้ายไปที่ Github" จะส่งคืนผลลัพธ์หลายรายการที่มีข้อความถูกย้ายไปยัง GitHub นี่เป็นสิ่งที่ทำให้ฉันสับสนและฉันสงสัยว่าทำไมผู้คนถึงเคลื่อนไหวอย่างแน่นอน หมายความว่า GitHub นั้นดีกว่าหรือมีข้อได้เปรียบพิเศษที่ฉันไม่เห็นหรือไม่

12
เหตุใดภาษาการเขียนโปรแกรมหลายภาษาจึงถูกนำมาใช้ในการพัฒนาผลิตภัณฑ์หรือซอฟต์แวร์หนึ่งชิ้น
ฉันเป็นนักเรียนที่จบการศึกษาเมื่อเร็ว ๆ นี้มีวัตถุประสงค์เพื่อเริ่มต้นปริญญาโทของฉันในสาขาวิทยาศาสตร์คอมพิวเตอร์ ฉันเจอโครงการโอเพ่นซอร์สหลายโครงการที่น่าสนใจและสนับสนุนให้ฉันสนับสนุนพวกเขา (CloudStack, OpenStack, moby และ Kubernetes เพื่อบอกชื่อไม่กี่) สิ่งหนึ่งที่ฉันพบว่าส่วนใหญ่มีเหมือนกันคือการใช้ภาษาโปรแกรมหลายภาษา (เช่น Java + Python + Go หรือ Python + C ++ + Ruby) ฉันได้ดูคำถามอื่น ๆ นี้แล้วซึ่งเกี่ยวข้องกับวิธีการใช้ภาษาโปรแกรมหลายภาษาในการสื่อสารซึ่งกันและกัน: จะมีสองโปรแกรมที่แตกต่างกันด้วยสองภาษาที่ต่างกันได้อย่างไร? ฉันต้องการเข้าใจข้อกำหนดที่แจ้งให้องค์กรใช้ภาษาการเขียนโปรแกรมหลายภาษา ข้อกำหนดหรือประเภทของข้อกำหนดใดที่ทำให้สถาปนิกซอฟต์แวร์หรือหัวหน้าโครงการพูดว่า "ฉันเสนอให้เราใช้ภาษา X สำหรับงาน 1 และภาษา Y สำหรับงาน 2" ฉันดูเหมือนจะไม่เข้าใจเหตุผลที่ใช้ภาษาการเขียนโปรแกรมหลายภาษาในผลิตภัณฑ์หรือซอฟต์แวร์เดียวกัน

11
มีแนวทางว่าควรยอมรับฟังก์ชั่นพารามิเตอร์จำนวนเท่าใด?
ฉันสังเกตเห็นบางฟังก์ชั่นที่ฉันทำงานด้วยมีพารามิเตอร์ 6 พารามิเตอร์ขึ้นไปในห้องสมุดส่วนใหญ่ฉันใช้มันหายากที่จะหาฟังก์ชั่นที่ใช้เวลามากกว่า 3 ตัว บ่อยครั้งที่พารามิเตอร์พิเศษเหล่านี้จำนวนมากเป็นตัวเลือกไบนารีเพื่อปรับเปลี่ยนการทำงานของฟังก์ชัน ฉันคิดว่าฟังก์ชันที่กำหนดพารามิเตอร์จำนวนมากเหล่านี้น่าจะได้รับการปรับเปลี่ยนใหม่ มีแนวทางสำหรับจำนวนที่มากเกินไปหรือไม่?

16
ฉันควรเพิ่มรหัสที่ซ้ำซ้อนตอนนี้ในกรณีที่อาจจำเป็นในอนาคตหรือไม่
ถูกหรือผิดฉันกำลังเชื่อว่าฉันควรพยายามทำให้รหัสของฉันแข็งแกร่งที่สุดเท่าที่จะเป็นไปได้แม้ว่าจะหมายถึงการเพิ่มรหัส / เช็คซ้ำซ้อนที่ฉันรู้ว่าตอนนี้ฉันจะไม่ใช้ประโยชน์ แต่อย่างใด อาจเป็นจำนวนปี x ลงบรรทัด ตัวอย่างเช่นฉันกำลังทำงานกับแอปพลิเคชันมือถือที่มีรหัสนี้: public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - …

18
การจัดการกับวิศวกรที่ออกจากงานบ่อย ๆ [ปิด]
เพื่อนของฉันเป็นผู้จัดการโครงการสำหรับ บริษัท ซอฟต์แวร์ สิ่งที่น่าผิดหวังมากที่สุดสำหรับเขาคือการที่เขาวิศวกรบ่อยออกจากงานของพวกเขา บริษัท ทำงานอย่างหนักในการสรรหาวิศวกรใหม่โอนโครงการและรักษาคุณภาพของผลิตภัณฑ์ เมื่อผู้คนออกไปมันทำให้เพื่อนของฉันคลั่งไคล้ วิศวกรเหล่านี้ยังเด็กและมีความทะเยอทะยานและพวกเขาต้องการเงินเดือนที่สูงขึ้นและตำแหน่งที่ดีขึ้น เจ้านายใหญ่คิดถึง แต่เรื่องทางการเงินและทฤษฎีของเขาก็คือ“ สามมือใหม่เก่งกว่าทหารผ่านศึกคนเดียวเสมอ ” (ซึ่งในฐานะวิศวกรที่มีประสบการณ์ฉันรู้ว่ามันผิด) เพื่อนของฉันเกลียดทฤษฎีนั้น มีคำแนะนำสำหรับเขาไหม?

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