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

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

9
ทำความเข้าใจกับการฉีดพึ่งพา
ฉันกำลังอ่านเกี่ยวกับการฉีดพึ่งพา (DI) สำหรับฉันมันเป็นสิ่งที่ซับซ้อนมากที่ต้องทำขณะที่ฉันอ่านมันคือการอ้างอิงการกลับตัวควบคุม (IoC) เช่นกันและฉันรู้สึกว่าฉันจะต้องเดินทาง นี่คือความเข้าใจของฉัน: แทนที่จะสร้างแบบจำลองในคลาสที่ใช้งานคุณส่ง (ฉีด) โมเดล (เต็มไปด้วยคุณสมบัติที่น่าสนใจ) ไปยังตำแหน่งที่ต้องการ (ไปยังคลาสใหม่ซึ่งอาจใช้เป็นพารามิเตอร์ใน ตัวสร้าง) สำหรับฉันนี่เป็นเพียงการโต้แย้ง ฉันต้องคิดถึงจุดที่เข้าใจ บางทีมันอาจจะชัดเจนมากขึ้นกับโครงการขนาดใหญ่? ความเข้าใจของฉันไม่ใช่ -Di (ใช้รหัสเทียม): public void Start() { MyClass class = new MyClass(); } ... public MyClass() { this.MyInterface = new MyInterface(); } และ DI ก็จะเป็น public void Start() { MyInterface myInterface = new MyInterface(); …

5
ทำไมฉันถึงชอบการแต่งมากกว่าการสืบทอด?
ฉันมักจะอ่านองค์ประกอบที่เป็นที่ต้องการมากกว่าการสืบทอด บล็อกโพสต์เมื่อวันที่แตกต่างจากชนิดตัวอย่างเช่นสนับสนุนการใช้องค์ประกอบมรดก แต่ฉันไม่สามารถดูวิธีการแตกต่างคือความสำเร็จ แต่ฉันมีความรู้สึกว่าเมื่อผู้คนพูดว่าชอบการแต่งเพลงพวกเขาหมายถึงการผสมผสานระหว่างการผสมผสานกับการใช้อินเตอร์เฟส คุณจะได้รับความหลากหลายโดยไม่มีการสืบทอดได้อย่างไร นี่คือตัวอย่างที่เป็นรูปธรรมที่ฉันใช้การสืบทอด สิ่งนี้จะถูกเปลี่ยนเป็นใช้การเรียงลำดับอย่างไร Class Shape { string name; public: void getName(); virtual void draw()=0; } Class Circle: public Shape { void draw(/*draw circle*/); }

20
ทำเงินกับ Open Source ในฐานะนักพัฒนาหรือไม่?
ปัจจุบันฉันเป็นนักเรียน (เทคโนโลยีสารสนเทศประยุกต์) และเราทำการเขียนโปรแกรมส่วนใหญ่ใน C # และ Java ฉันสงสัยว่าฉันจะเป็นนักพัฒนาสร้างรายได้ด้วยโอเพ่นซอร์สได้อย่างไร ฉันรู้ว่ามีเรื่องราวของการให้การสนับสนุนหรือให้บริการ แต่ฉันไม่ได้ดูแลระบบและฉันไม่ชอบงานดูแลระบบ ที่จริงแล้วฉันอยากจะลอง C และ C ++ ต่อไปในอนาคตและทำการพัฒนาในระดับต่ำ ดังนั้นคำถามที่แท้จริงของฉันคือมีเงินที่ต้องพัฒนาซอฟต์แวร์โอเพ่นซอร์สหรือไม่? แก้ไข: เพิ่งชี้ให้เห็นว่าการเริ่มต้นโครงการโอเพนซอร์สของตัวเองนั้นไม่ได้เป็นข้อกำหนด

1
ข้อดีและข้อเสียของการเซ็นสัญญาและแท็กใน Git คืออะไร
ดังนั้นมีคนดูงานของฉันและเขาก็บอกฉันว่าฉันควรเซ็นสัญญาและแท็กเข้ารหัส เมื่อถูกถามว่าทำไมเขาไม่รู้จะอธิบายให้ฉันฟังและพูดว่า "มันเป็นเรื่องดีที่ต้องทำ" พยายามหลีกเลี่ยงสถานการณ์ลิงชิมแปนซีที่เห็นได้ชัดทำไมฉันถึงต้องทำอย่างนั้นจริงๆ? มีข้อดีที่แตกต่างและไม่มีข้อเสียจริง ๆ มากมายจริง ๆ หรือไม่ อะไรคือเหตุผลเชิงปฏิบัติที่จะทำให้ฉันต้องการลงชื่อในทุกการกระทำและแท็กที่ฉันทำ
109 git  cryptography 

10
อย่าใช้“ คงที่” ใน C # หรือ
ฉันส่งใบสมัครที่ฉันเขียนถึงสถาปนิกคนอื่นเพื่อตรวจสอบรหัส หนึ่งในนั้นเกือบจะเขียนฉันทันทีและพูดว่า "อย่าใช้" คงที่ "คุณไม่สามารถเขียนการทดสอบอัตโนมัติด้วยคลาสและวิธีการคงที่" คงที่ "คือการหลีกเลี่ยง" ฉันตรวจสอบและ 1/4 ของชั้นเรียนของฉันถูกทำเครื่องหมายว่า "คงที่" ฉันใช้สแตติกเมื่อฉันจะไม่สร้างอินสแตนซ์ของคลาสเนื่องจากคลาสเป็นคลาสโกลบอลเดี่ยวที่ใช้ตลอดโค้ด เขาพูดถึงบางสิ่งที่เกี่ยวข้องกับการเยาะเย้ยเทคนิค IOC / DI ที่ไม่สามารถใช้กับรหัสคงที่ได้ เขาบอกว่ามันน่าเสียดายที่ห้องสมุดบุคคลที่สามเป็นแบบคงที่เนื่องจากไม่สามารถตรวจสอบได้ สถาปนิกรายนี้ถูกต้องหรือไม่? ปรับปรุง: นี่คือตัวอย่าง: APIManager - คลาสนี้เก็บพจนานุกรมของ API ของบุคคลที่สามที่ฉันกำลังโทรหาพร้อมกับเวลาที่อนุญาตต่อไป มันบังคับใช้ข้อ จำกัด การใช้ API ที่บุคคลที่ 3 จำนวนมากมีอยู่ในเงื่อนไขการให้บริการ ฉันใช้มันทุกที่ที่ฉันกำลังเรียกบริการของบุคคลที่สามโดยเรียก Thread.Sleep (APIManager.GetWait ("ProviderXYZ")); ก่อนโทรออก ทุกอย่างในที่นี้เป็นเธรดที่ปลอดภัยและใช้งานได้ดีกับ TPL ใน C #

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

13
ข้อยกเว้น vs ชุดผลลัพธ์ว่างเปล่าเมื่ออินพุตมีความถูกต้องทางเทคนิค แต่ไม่น่าพอใจ
ฉันกำลังพัฒนาห้องสมุดที่มีไว้สำหรับเผยแพร่สู่สาธารณะ มันมีวิธีการต่าง ๆ สำหรับการทำงานกับชุดของวัตถุ - การสร้างการตรวจสอบการแบ่งและการฉายชุดในรูปแบบใหม่ ในกรณีที่มีความเกี่ยวข้องมันเป็นไลบรารีคลาส C # ที่มีส่วนขยายของสไตล์ LINQ IEnumerableที่จะเปิดตัวเป็นแพ็คเกจ NuGet วิธีการบางอย่างในไลบรารีนี้สามารถให้พารามิเตอร์อินพุตที่ไม่น่าพอใจ ตัวอย่างเช่นในวิธี combinatoric มีวิธีการสร้างชุดnรายการทั้งหมดที่สามารถสร้างขึ้นจากชุดแหล่งที่มาของรายการm ตัวอย่างเช่นกำหนดชุด: 1, 2, 3, 4, 5 และขอให้รวมกัน 2 จะผลิต: 1, 2 1, 3 1, 4 ฯลฯ ... 5, 3 5, 4 เห็นได้ชัดว่าเป็นไปได้ที่จะขอสิ่งที่ไม่สามารถทำได้เช่นให้ชุด 3 รายการจากนั้นขอชุดค่าผสม 4 รายการพร้อมตั้งค่าตัวเลือกที่ระบุว่าสามารถใช้งานได้เพียงครั้งเดียว ในสถานการณ์สมมตินี้แต่ละพารามิเตอร์จะถูกต้องเป็นรายบุคคล : การรวบรวมแหล่งที่มาไม่เป็นโมฆะและมีรายการต่างๆ ขนาดที่ต้องการของชุดค่าผสมเป็นจำนวนเต็มบวกที่ไม่ใช่ศูนย์ โหมดที่ร้องขอ (ใช้แต่ละรายการเพียงครั้งเดียว) เป็นตัวเลือกที่ถูกต้อง …


11
การตรวจสอบรหัสในภาษาที่ฉันไม่รู้มีประสิทธิภาพหรือไม่
ฉันเป็นนักพัฒนาที่มีประสบการณ์ แต่ยังไม่ได้ทำการตรวจสอบโค้ดจำนวนมาก ฉันถูกขอให้ตรวจสอบรหัสที่เขียนใน Python แต่ฉันไม่รู้จัก Python การตรวจสอบรหัสในภาษาที่ฉันไม่รู้นั้นเป็นเรื่องเหมาะสมหรือไม่?
108 code-reviews 

8
ทำไมการสำรวจจึงยอมรับในการเขียนโปรแกรมเว็บ?
ขณะนี้ฉันกำลังทำงานกับโครงการRuby on Railsซึ่งแสดงรายการรูปภาพ สิ่งที่ต้องมีสำหรับโครงการนี้คือมันแสดงโพสต์ใหม่แบบเรียลไทม์โดยไม่จำเป็นต้องรีเฟรชหน้าเว็บ หลังจากค้นหาไประยะหนึ่งฉันได้พบกับโซลูชันและบริการ JavaScript บางอย่างเช่น PubNub; อย่างไรก็ตามไม่มีวิธีการแก้ปัญหาใด ๆ ที่ให้มา ในโซลูชัน JavaScript ( การทำโพล ) จะเกิดสิ่งต่อไปนี้: ผู้ใช้ 1 ดูรายการภาพถ่าย ในพื้นหลังรหัส JavaScript จะทำการสำรวจจุดสิ้นสุดทุกวินาทีเพื่อดูว่ามีการโพสต์ใหม่หรือไม่ ผู้ใช้ 2 เพิ่มรูปภาพใหม่ มีความล่าช้า 50 วินาทีก่อนที่จะมีการเรียกใช้รอบใหม่และดึงข้อมูลใหม่ เนื้อหาใหม่จะถูกโหลดในDOM ดูเหมือนแปลกเมื่อแปลเป็นตัวอย่างในโลกแห่งความจริง: ผู้ใช้ 1 ถือกองรูปภาพไว้บนโต๊ะของเขา / เธอ เขา / เธอเดินไปที่ช่างภาพทุกวินาทีและถามว่าเขามีใหม่หรือไม่ ช่างภาพสร้างภาพใหม่ วินาทีนี้เมื่อเขา / เธอเดินเข้ามาเธอสามารถถ่ายรูปและวางลงบนกอง ในความคิดของฉันทางออกควรเป็นดังนี้: ผู้ใช้ 1 ถือกองรูปภาพไว้บนโต๊ะของเขา / เธอ ช่างภาพจะถ่ายรูปใหม่ …
108 loops  logic  polling 

29
คุณจะจัดการฐานความรู้ของคุณได้อย่างไร [ปิด]
ในฐานะโปรแกรมเมอร์เรามีอินพุตมากมาย: ebooks ตัวอย่างโค้ด อีเมลที่น่าสนใจ เอกสาร บทความบนเว็บ โพสต์บล็อก คำถาม StackOverflow พอดคาสต์ ... เครื่องมือใดที่คุณใช้เพื่อจัดเก็บจัดระเบียบค้นหาและศึกษาข้อมูลทั้งหมดนี้ มีระบบ bullet bullet เพื่อจัดการกับข้อมูลจำนวนมหาศาลนี้หรือไม่?

20
การพิมพ์แบบคงที่คุ้มค่ากับการแลกเปลี่ยนหรือไม่?
ฉันเริ่มเขียนโปรแกรมด้วยภาษา Python เป็นหลักโดยที่ไม่มีความปลอดภัยประเภทจากนั้นย้ายไปที่ C # และ Java ที่มี ฉันพบว่าฉันสามารถทำงานได้เร็วขึ้นและปวดหัวน้อยลงใน Python แต่จากนั้นอีกครั้งแอป C # และ Java ของฉันมีระดับความซับซ้อนที่สูงขึ้นมากดังนั้นฉันจึงไม่เคยให้ Python เป็นการทดสอบความเครียดที่แท้จริง ค่าย Java และ C # ทำให้ดูเหมือนไม่มีความปลอดภัยในสถานที่ที่คนส่วนใหญ่จะทำงานในทุกประเภทของข้อผิดพลาดที่น่ากลัวทิ้งขวาและมันจะมีปัญหามากกว่ามูลค่าของมัน นี่ไม่ใช่การเปรียบเทียบภาษาดังนั้นโปรดอย่าแก้ไขปัญหาเช่นรวบรวมและตีความ ความปลอดภัยของประเภทคุ้มค่าต่อการพัฒนาและความยืดหยุ่นหรือไม่? ทำไม? สำหรับผู้ที่ต้องการตัวอย่างของความคิดเห็นที่การพิมพ์แบบไดนามิกเร็วกว่า: "ใช้ภาษาที่พิมพ์แบบไดนามิกในระหว่างการพัฒนาซึ่งจะช่วยให้คุณได้รับข้อเสนอแนะเวลาตอบสนองและความเร็วในการพัฒนาที่เร็วขึ้น" - http://blog.jayway.com/2010/04/14/static-typing-is-the-root-of-all-evil/

4
IPv4 เป็น IPv6 IPv5 อยู่ที่ไหน
อย่างที่เราทุกคนรู้ว่าหลังจาก IPv4 มาถึง IPv6 การเปลี่ยนแปลงนี้เกิดขึ้นได้อย่างไร? ฉันแค่อยากรู้ว่ามี IPv5 ใดด้วยหรือไม่ หรือมีเหตุผลอื่นใดบ้างในการตั้งชื่อ IP รุ่นนี้เป็น IPv6

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

8
ความแตกต่างระหว่างการดำเนินการ "พร้อมกัน" และ "ขนาน"?
อะไรคือข้อแตกต่างระหว่างคำที่เกิดขึ้นพร้อมกันและการดำเนินการแบบขนาน ? ฉันไม่เคยเข้าใจความแตกต่างเลยทีเดียว แท็กกำหนดภาวะพร้อมกันเป็นวิธีการรันสองกระบวนการพร้อมกัน แต่ฉันคิดว่าการขนานกันนั้นเป็นสิ่งเดียวกันนั่นคือ: เธรดที่แยกจากกันหรือกระบวนการที่อาจทำงานบนโปรเซสเซอร์ที่แยกต่างหาก นอกจากนี้หากเราพิจารณาอะไรบางอย่างเช่น I / O แบบอะซิงโครนัสเราจะจัดการกับการเกิดพร้อมกันหรือการขนานกันไหม

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