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

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

12
ประโยชน์ของการเขียนโปรแกรมเชิงวัตถุบนการเขียนโปรแกรมตามขั้นตอนคืออะไร
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างภาษาเชิงปฏิบัติเช่น C และภาษาเชิงวัตถุเช่น C ++ ฉันไม่เคยใช้ C ++ แต่ฉันได้คุยกับเพื่อน ๆ เกี่ยวกับวิธีแยกแยะทั้งสอง ฉันได้รับการบอกว่า C ++ มีแนวคิดเชิงวัตถุเช่นเดียวกับโหมดสาธารณะและส่วนตัวสำหรับการกำหนดตัวแปร: สิ่งที่ C ไม่มี ฉันไม่เคยใช้สิ่งเหล่านี้ในขณะที่กำลังพัฒนาโปรแกรมใน Visual Basic.NET: ประโยชน์ของสิ่งเหล่านี้คืออะไร? ฉันได้รับแจ้งด้วยว่าหากตัวแปรเป็นแบบสาธารณะมันสามารถเข้าถึงได้ทุกที่ แต่ไม่ชัดเจนว่ามันแตกต่างจากตัวแปรทั่วโลกในภาษาเช่น C หรือไม่และยังไม่ชัดเจนว่าตัวแปรส่วนตัวแตกต่างจากตัวแปรท้องถิ่นอย่างไร อีกสิ่งหนึ่งที่ฉันได้ยินคือเพื่อเหตุผลด้านความปลอดภัยหากจำเป็นต้องเข้าถึงฟังก์ชั่นควรได้รับการสืบทอดก่อน กรณีใช้งานคือผู้ดูแลระบบควรมีสิทธิ์มากเท่าที่ต้องการและไม่ใช่ทุกอย่าง แต่ดูเหมือนว่าเงื่อนไขจะทำงานได้ดี: if ( login == "admin") { // invoke the function } ทำไมสิ่งนี้จึงไม่เหมาะ เนื่องจากดูเหมือนว่าจะมีวิธีการในการทำทุกอย่างที่เกี่ยวกับวัตถุทำไมฉันจึงควรใส่ใจเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ

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

19
Perl เป็นภาษาที่มีประโยชน์และใช้งานได้จริงหรือไม่? [ปิด]
ฉันรู้ว่ามันอาจถูกถามมาก่อน แต่ที่นี่ไม่มีอะไรเลย Perl ยังคงเป็นสิ่งที่จะถือว่ามีประโยชน์หรือไม่ หากมีคนเป็นโปรแกรมเมอร์ใหม่ (ทั้งใหม่กับการเขียนโปรแกรมหรือเพียงไม่กี่เดือน / ประสบการณ์) Perl จะเป็นสิ่งที่ถือว่าคุ้มค่าที่จะเรียนรู้? Perl ยังคงใช้กับความถี่หรือไม่ มันยังคงเป็นที่นิยม? หรือ Perl กำลังจะตายเมื่อเทียบกับภาษาเช่น Python, Ruby, PHP, ASP.NET และอื่น ๆ ? โดยพื้นฐานแล้วมันจะลดลงถึงสิ่งนี้: มันยังใช้อยู่ / ยังใช้บ่อยอยู่หรือไม่? ถ้าใช่มันกำลังจะตายใช่ไหม ถ้าไม่มันจะกลับมาไหม มันเป็นสิ่งที่ควรค่าแก่การเรียนรู้หรือไม่? มันเปรียบเทียบความต้องการกับภาษาเช่น Python ทั้งในความนิยมและการใช้งาน / ความมีชีวิตได้อย่างไร? ภาษาอย่าง Python หรือ Ruby อาจถูกพิจารณาว่าเป็นสิ่งทดแทนสำหรับ Perl หรือไม่? นอกจากนี้ Perl รุ่นใหม่กว่านี้จะนำการพัฒนามาสู่ชุมชน Perl อย่างแท้จริงและอาจนำ Perl กลับไปที่ศูนย์แรงดันไฟฟ้าเมื่อเทียบกับภาษาอื่นหรือไม่ แก้ไข: …
77 perl 

30
มาตรฐานการเข้ารหัสที่แย่ที่สุดที่คุณเคยทำตาม? [ปิด]
คุณเคยทำงานกับมาตรฐานการเข้ารหัสที่: ลดประสิทธิภาพการทำงานลงอย่างมากใช่ไหม ตอนแรกมีการรวมไว้ด้วยเหตุผลที่ดี แต่ถูกเก็บรักษาไว้นานหลังจากความกังวลดั้งเดิมกลายเป็นสิ่งที่ไม่เกี่ยวข้องหรือไม่? อยู่ในรายการนานมากจนเป็นไปไม่ได้ที่จะจดจำพวกเขาทั้งหมดหรือไม่? ทำให้คุณคิดว่าผู้แต่งพยายามที่จะทิ้งเครื่องหมายไว้แทนที่จะให้กำลังใจการเขียนโปรแกรมที่ดี? คุณไม่รู้ว่าทำไมรวมอยู่ด้วย? ถ้าเป็นเช่นนั้นกฎข้อใดข้อหนึ่งที่คุณชอบน้อยที่สุดและทำไม? ตัวอย่างบางส่วนที่นี่

13
เหตุใด Java จึงไม่ใช้กันอย่างแพร่หลายในการพัฒนาเกม [ปิด]
ฉันไม่ได้เป็นผู้พัฒนาเกมหรืออะไร แต่ฉันรู้ว่า Java ไม่ได้ใช้กันอย่างแพร่หลายในการพัฒนาเกม Java ควรเร็วพอสำหรับเกมส่วนใหญ่แล้วเกมไหนที่จับได้? ฉันสามารถคิดด้วยเหตุผลบางอย่าง: ไม่มีผู้พัฒนาเกมที่มีความเชี่ยวชาญใน Java ขาดกรอบการพัฒนาเกมที่ดี โปรแกรมเมอร์ไม่ต้องการยอมรับ Java เป็นภาษาการเขียนโปรแกรมเกม ส่วนใหญ่ยอมรับเฉพาะ C ++ เท่านั้น ไม่รองรับเกมคอนโซล (แม้ว่าตลาดพีซียังคงมีอยู่) แน่นอนมันอาจเป็นอย่างอื่น คนที่รู้จักธุรกิจดีกว่าฉันอธิบายได้หรือไม่ว่าทำไม Java ถึงไม่ได้รับแรงเมื่อพัฒนาเกม

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

9
ฉันจะโทรด้วยบูลีนที่ชัดเจนขึ้นได้อย่างไร? กับดักบูลีน
ตามที่ระบุไว้โดยในความคิดเห็นโดย @ benjamin-gruenbaum สิ่งนี้เรียกว่ากับดักบูลีน: สมมติว่าฉันมีฟังก์ชั่นเช่นนี้ UpdateRow(var item, bool externalCall); และในคอนโทรลเลอร์ของฉันค่าexternalCallนั้นจะเป็นจริงเสมอ วิธีที่ดีที่สุดในการเรียกใช้ฟังก์ชันนี้คืออะไร ฉันมักจะเขียน UpdateRow(item, true); แต่ฉันถามตัวเองฉันควรจะประกาศบูลีนเพียงเพื่อระบุว่า 'ความจริง' มีคุณค่าอย่างไร? คุณสามารถรู้ได้โดยดูการประกาศของฟังก์ชั่น แต่จะเร็วและชัดเจนขึ้นถ้าคุณเห็นอะไรบางอย่าง bool externalCall = true; UpdateRow(item, externalCall); PD: ไม่แน่ใจว่าคำถามนี้ตรงกับที่นี่จริงหรือไม่ถ้าไม่ฉันจะขอข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้จากที่ไหน PD2: ฉันไม่ได้ติดแท็กภาษาใด ๆ 'เพราะฉันคิดว่ามันเป็นปัญหาทั่วไปมาก อย่างไรก็ตามฉันทำงานกับ c # และคำตอบที่ยอมรับนั้นใช้ได้กับ c #
76 boolean  const 

11
เหตุใดจึงเป็นพื้นฐานสำหรับวัตถุทั้งหมดท้อแท้ใน C ++
Stroustrup กล่าวว่า "อย่าคิดค้นฐานเฉพาะสำหรับคลาสทั้งหมดของคุณ (คลาส Object) โดยทันทีคุณสามารถทำได้ดีกว่านี้หากไม่มีคลาสที่มากที่สุด / ส่วนใหญ่" (ภาษา C ++ ภาษาที่สี่รุ่น Sec 1.3.4) ทำไมพื้นฐานสำหรับทุกสิ่งโดยทั่วไปเป็นความคิดที่ไม่ดีและเมื่อใดที่เหมาะสมที่จะสร้าง

16
เราควรออกแบบโปรแกรมเพื่อฆ่าตัวตายแบบสุ่มหรือไม่? [ปิด]
โดยสรุปเราควรออกแบบความตายในโปรแกรมกระบวนการและเธรดของเราในระดับต่ำเพื่อประโยชน์ของระบบโดยรวมหรือไม่ ความล้มเหลวเกิดขึ้น กระบวนการตาย เราวางแผนสำหรับภัยพิบัติและกู้คืนจากบางครั้ง แต่เราไม่ค่อยออกแบบและใช้งานโปรแกรมที่คาดเดาไม่ได้ เราหวังว่าบริการของเราจะมีความยาวตราบใดที่เราใส่ใจที่จะให้บริการเหล่านั้นทำงานต่อไป ตัวอย่างมาโครของแนวคิดนี้คือChaos Monkeyของ Netflix ซึ่งสุ่มอินสแตนซ์ของ AWS ในบางสถานการณ์ พวกเขาอ้างว่าสิ่งนี้ช่วยให้พวกเขาค้นพบปัญหาและสร้างระบบซ้ำซ้อนมากขึ้น สิ่งที่ฉันกำลังพูดถึงอยู่ในระดับที่ต่ำกว่า แนวคิดนี้มีไว้สำหรับกระบวนการที่ใช้เวลานานในการออกจากการสุ่ม สิ่งนี้ควรบังคับให้มีความซ้ำซ้อนในการออกแบบและผลิตระบบที่ยืดหยุ่นได้ในที่สุด แนวคิดนี้มีชื่ออยู่แล้วหรือไม่? มันถูกใช้ไปแล้วในอุตสาหกรรมหรือไม่? แก้ไข จากความคิดเห็นและคำตอบฉันเกรงว่าจะไม่ชัดเจนในคำถามของฉัน เพื่อความชัดเจน: ใช่ฉันหมายถึงการสุ่ม ใช่ฉันหมายถึงในการผลิตและ ไม่ไม่ใช่แค่การทดสอบ เพื่ออธิบายฉันต้องการวาดสิ่งเปรียบเทียบกับสิ่งมีชีวิตหลายเซลล์ ในธรรมชาติสิ่งมีชีวิตประกอบด้วยเซลล์จำนวนมาก เซลล์จะแยกตัวเพื่อสร้างความซ้ำซ้อนและในที่สุดก็จะตาย แต่ควรมีเซลล์ประเภทที่เหมาะสมอย่างเพียงพอเสมอเพื่อให้สิ่งมีชีวิตทำงานได้ ระบบที่มีความซ้ำซ้อนสูงนี้ยังช่วยในการรักษาเมื่อบาดเจ็บ เซลล์ตายดังนั้นสิ่งมีชีวิต การรวมความตายแบบสุ่มเข้าไว้ในโปรแกรมจะเป็นการบังคับให้ระบบยิ่งใหญ่ขึ้นในการนำกลยุทธ์ความซ้ำซ้อนมาใช้ได้ กลยุทธ์เดียวกันนี้จะช่วยให้ระบบยังคงมีเสถียรภาพเมื่อเผชิญกับความล้มเหลวที่ไม่อาจคาดเดาได้ชนิดอื่นหรือไม่? และถ้าใครได้ลองสิ่งนี้มันจะเรียกว่าอะไร ฉันต้องการอ่านเพิ่มเติมเกี่ยวกับมันหากมีอยู่แล้ว
76 design 

15
นักพัฒนาควรใส่บั๊กในระบบติดตามบั๊กหรือไม่
ขณะที่กำลังพัฒนา (ทั้งคุณสมบัติหรือการแก้ไขข้อบกพร่อง) บางครั้งฉันก็พบข้อบกพร่องที่ไม่เกี่ยวข้องโดยตรงกับสิ่งที่ฉันกำลังทำงานอยู่ ฉันควรทำอย่างไรในสถานการณ์เช่นนี้ เพิ่งแก้ไขหรือไม่ พยายามจำเพื่อแก้ไขในภายหลังหรือไม่ เขียนมันไว้ที่ไหนสักแห่ง? หรือใส่ลงในระบบติดตามบั๊ก ฉันมักจะใส่ลงในระบบติดตามข้อผิดพลาดและปล่อยให้กระบวนการเล่นเอง (เช่น triaging, การกำหนด ฯลฯ ) อย่างไรก็ตามฉันแทบจะไม่เคยเห็นนักพัฒนารายอื่นป้อนบั๊ก (ทำไมถึงเป็นอย่างนั้น?)

8
การใช้ประโยชน์จากคำหลัก "ผลตอบแทน" ใน C # [ปิด]
หลังจากประสบการณ์เกือบ 4 ปีฉันไม่ได้เห็นรหัสที่ใช้คำหลักผลตอบแทน ใครสามารถแสดงให้ฉันเห็นการใช้งานจริง (ตามคำอธิบาย) ของคำหลักนี้และถ้าเป็นเช่นนั้นจะไม่มีวิธีอื่น ๆ ที่จะเติมเต็มสิ่งที่มันสามารถทำได้หรือไม่?
76 c#  syntax 

14
สิ่งที่ควรทำก่อนหน้า: YAGNI หรือ Good Design
YAGNIควรใช้จุดไหนในการต่อต้านการเขียนโค้ดที่ดีและในทางกลับกัน ฉันกำลังทำงานในโครงการในที่ทำงานและต้องการแนะนำมาตรฐานรหัสที่ดีให้กับเพื่อนร่วมงานของฉันอย่างช้าๆ (ปัจจุบันไม่มีและทุกอย่างก็แค่แฮ็คเข้าด้วยกันโดยไม่มีสัมผัสหรือเหตุผล) แต่หลังจากสร้างชุดของคลาส (เรา อย่าทำ TDD หรือน่าเสียดายที่การทดสอบหน่วยใด ๆ เลย) ฉันถอยหลังไปหนึ่งก้าวและคิดว่ามันเป็นการละเมิด YAGNI เพราะฉันรู้ด้วยความมั่นใจว่าเราไม่ต้องการขยายชั้นเรียนเหล่านี้ นี่คือตัวอย่างที่เป็นรูปธรรมของสิ่งที่ฉันหมายถึง: ฉันมีชั้นการเข้าถึงข้อมูลห่อชุดของขั้นตอนการจัดเก็บซึ่งใช้รูปแบบ Repository สไตล์พื้นฐานกับฟังก์ชั่น CRUD ขั้นพื้นฐาน IRepositoryเนื่องจากมีกำมือของวิธีการที่ทุกชั้นเรียนที่เก็บของฉันต้องฉันสร้างอินเตอร์เฟซทั่วไปสำหรับเก็บของฉันเรียกว่า อย่างไรก็ตามฉันได้สร้างอินเทอร์เฟซ "ตัวทำเครื่องหมาย" (เช่นอินเทอร์เฟซที่ไม่เพิ่มฟังก์ชันการทำงานใหม่) สำหรับที่เก็บแต่ละประเภท (เช่นICustomerRepository) และคลาสคอนกรีตนำไปใช้ ฉันได้ทำสิ่งเดียวกันกับการใช้ Factory เพื่อสร้างออบเจ็กต์ทางธุรกิจจาก DataReaders / DataSets ที่ส่งคืนโดย Stored Procedure ลายเซ็นของคลาสที่เก็บของฉันมีแนวโน้มที่จะมีลักษณะเช่นนี้: public class CustomerRepository : ICustomerRepository { ICustomerFactory factory = null; public CustomerRepository() : this(new …

5
Python ตีความหรือเรียบเรียงหรือไม่?
นี่เป็นเพียงความสงสัยในขณะที่ฉันอ่านเกี่ยวกับภาษาที่แปลและเรียบเรียง Rubyไม่ต้องสงสัยเลยว่าเป็นภาษาที่ตีความเนื่องจากซอร์สโค้ดถูกประมวลผลโดยล่าม ณ จุดดำเนินการ ในทางตรงกันข้ามCเป็นภาษาที่รวบรวมเป็นหนึ่งจะต้องรวบรวมซอร์สโค้ดแรกตามเครื่องแล้วดำเนินการ ผลลัพธ์นี้เป็นการดำเนินการที่รวดเร็วยิ่งขึ้น ตอนนี้มาที่Python : รหัสหลาม ( somefile.py ) เมื่อนำเข้าสร้างไฟล์ ( somefile.pyc ) ในไดเรกทอรีเดียวกัน ให้เราบอกว่าการนำเข้าจะทำในเปลือกหลามหรือโมดูล django หลังจากนำเข้าฉันเปลี่ยนรหัสเล็กน้อยและดำเนินการฟังก์ชั่นที่นำเข้าอีกครั้งเพื่อค้นหาว่ามันยังคงใช้รหัสเดิมอยู่ สิ่งนี้ชี้ให้เห็นว่าไฟล์ * .pyc เป็นไฟล์ไพ ธ อนที่คอมไพล์เหมือนกับไฟล์ที่สร้างขึ้นหลังจากการคอมไพล์ไฟล์ C ถึงแม้ว่าฉันจะไม่สามารถเรียกใช้ไฟล์ * .pyc ได้โดยตรง เมื่อดำเนินการไฟล์ python (somefile.py) โดยตรง (./somefile.py หรือ python somefile.py) จะไม่มีการสร้างไฟล์. pyc และรหัสจะถูกดำเนินการตามที่ระบุถึงพฤติกรรมที่ตีความ สิ่งเหล่านี้แนะนำให้รวบรวมรหัสไพ ธ อนทุกครั้งที่มีการนำเข้าในกระบวนการใหม่เพื่อสร้าง. pyc ในขณะที่มันถูกตีความเมื่อดำเนินการโดยตรง ดังนั้นฉันควรใช้ภาษาประเภทใด ตีความหรือรวบรวม? และประสิทธิภาพของมันเปรียบเทียบกับภาษาที่แปลและเรียบเรียงได้อย่างไร …

17
ซอฟต์แวร์จะได้รับการปกป้องจากการละเมิดลิขสิทธิ์ได้อย่างไร
ทำไมการละเมิดลิขสิทธิ์ในวันนี้จึงเป็นเรื่องง่าย ดูเหมือนยากที่จะเชื่อว่าด้วยความก้าวหน้าทางเทคโนโลยีของเราและการใช้จ่ายด้านวิศวกรรมเป็นซอฟต์แวร์ที่ไม่น่าเชื่อและน่าเหลือเชื่อที่สุดเราใช้วิธีการป้องกันการละเมิดลิขสิทธิ์มากกว่า "หมายเลขซีเรียล / รหัสเปิดใช้งาน" " ฉันแน่ใจว่าเงินเป็นล้านหรืออาจเป็นพันล้านสร้างเป็น Windows 7 หรือ Office และแม้แต่ Snow Leopard แต่ฉันสามารถรับได้ฟรีในเวลาไม่ถึง 20 นาที เหมือนกันกับผลิตภัณฑ์ทั้งหมดของ Adobe ซึ่งอาจจะง่ายที่สุด มีวิธีป้องกันคนโง่และป้องกันการแฮ็กในการป้องกันซอฟต์แวร์ของคุณจากการละเมิดลิขสิทธิ์หรือไม่? หากไม่เป็นจริงเป็นไปได้ในทางทฤษฎีวิธีการเกี่ยวกับ? หรือไม่ว่ากลไกใดที่ บริษัท เหล่านี้ปรับใช้แฮกเกอร์สามารถหาวิธีแก้ไขได้เสมอ
76 security 

19
ฉันจะพัฒนาทักษะการเขียนโปรแกรมได้อย่างไร [ปิด]
นี่คือข้อมูลเล็กน้อยเกี่ยวกับฉันก่อนที่จะเริ่มด้วยคำถาม ฉันเป็นวิทยาการคอมพิวเตอร์ระดับปริญญาตรี Java เป็นภาษาการเข้ารหัสหลักของฉัน ปัญหาพื้นฐานในมหาวิทยาลัยของฉันคือมาตรฐานการสอน ไม่มีใครกังวลเกี่ยวกับการสอนความรู้การเขียนโค้ดให้นักเรียนมากกว่าแค่ความรู้เชิงทฤษฎี ผลที่ได้คือเพื่อนร่วมวิทยาลัยส่วนใหญ่ของฉันไม่เข้าใจการเขียนโปรแกรมเลย แม้ว่าฉันจะไม่สามารถออกมาจากสภาพแวดล้อมการเขียนโปรแกรมแบบดั้งเดิมซึ่ง จำกัด การเขียนโค้ดของฉันในระดับหนึ่ง มีวิธีใดบ้างที่เป็นไปได้ที่ฉันสามารถพัฒนาและขยายทักษะการเขียนโปรแกรม / การเข้ารหัสของฉัน นอกจากนี้คุณสามารถแนะนำแหล่งข้อมูลเดียวกันได้หรือไม่ แก้ไข : แหล่งข้อมูลแนะนำการพัฒนาทักษะการเขียนโปรแกรม
76 coding 

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