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

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

5
ความไม่สามารถเปลี่ยนรูปแบบได้ทั้งหมดไม่จำเป็นต้องล็อคในการเขียนโปรแกรมแบบหลายโปรเซสเซอร์หรือไม่?
ส่วนที่ 1 ชัดเจนไม่สามารถตัดทอนความต้องการล็อคในการเขียนโปรแกรมแบบมัลติโปรเซสเซอร์ลดความต้องการนั้นหรือมีกรณีที่ความไม่สามารถเปลี่ยนได้เพียงอย่างเดียวไม่เพียงพอหรือไม่? สำหรับฉันดูเหมือนว่าคุณสามารถเลื่อนการประมวลผลและรัฐแค็ปซูลได้นานก่อนที่โปรแกรมส่วนใหญ่จะต้องทำอะไรบางอย่างจริง (อัปเดตแหล่งข้อมูลสร้างรายงานยกเว้นข้อยกเว้น ฯลฯ ) การกระทำดังกล่าวสามารถทำได้โดยไม่ล็อคหรือไม่? การกระทำเพียงแค่โยนวัตถุแต่ละชิ้นออกไปและสร้างใหม่แทนที่จะเปลี่ยนแบบเดิม (มุมมองที่หยาบคายของการเปลี่ยนแปลงไม่ได้) ให้การป้องกันที่สมบูรณ์จากการโต้แย้งระหว่างกระบวนการหรือมีมุมที่ยังต้องล็อค? ฉันรู้ว่าโปรแกรมเมอร์และนักคณิตศาสตร์ที่ใช้งานได้จำนวนมากชอบพูดถึง "ไม่มีผลข้างเคียง" แต่ใน "โลกแห่งความจริง" ทุกอย่างมีผลข้างเคียงแม้ว่าจะถึงเวลาที่ต้องใช้คำสั่งเครื่อง ฉันสนใจทั้งคำตอบเชิงทฤษฎี / วิชาการและคำตอบเชิงปฏิบัติ / โลกแห่งความจริง หากความไม่สามารถเปลี่ยนแปลงได้ปลอดภัยตามขอบเขตหรือสมมติฐานบางอย่างฉันต้องการทราบว่าขอบเขตของ "เขตปลอดภัย" คืออะไรกันแน่ ตัวอย่างของขอบเขตที่เป็นไปได้: I / O ยกเว้น / ข้อผิดพลาด การโต้ตอบกับโปรแกรมที่เขียนเป็นภาษาอื่น การโต้ตอบกับเครื่องอื่น ๆ (ทางกายภาพเสมือนหรือตามทฤษฎี) ขอขอบคุณเป็นพิเศษสำหรับ @JimmaHoffa สำหรับความคิดเห็นของเขาซึ่งเริ่มต้นคำถามนี้! ส่วนที่ 2 การเขียนโปรแกรมหลายตัวประมวลผลมักจะใช้เป็นเทคนิคการเพิ่มประสิทธิภาพ - เพื่อให้โค้ดทำงานได้เร็วขึ้น เมื่อไหร่ที่จะใช้การล็อคกับวัตถุที่ไม่เปลี่ยนรูปได้เร็วขึ้น? เมื่อพิจารณาถึงขีด จำกัด ที่กำหนดไว้ในกฎหมายของ Amdahlคุณสามารถบรรลุประสิทธิภาพที่เหนือกว่าทุกประการ (ไม่ว่าจะมีหรือไม่มีตัวเก็บขยะที่พิจารณา) กับวัตถุที่ไม่เปลี่ยนรูปหรือการล็อควัตถุที่ไม่แน่นอน …

14
Python ใช้อย่างไรในโลกแห่งความเป็นจริง? [ปิด]
ฉันกำลังมองหางานเป็นโปรแกรมเมอร์ Python ฉันรู้ว่าพื้นฐานของภาษาและได้สร้างไม่กี่เกมกับมันโดยใช้pygame ฉันเริ่มทดลองกับDjangoด้วย อย่างไรก็ตามการดูที่ตลาดงานดูเหมือนว่างาน Python จะไม่เกี่ยวข้องกับเว็บมากนัก ในด้านสก์ท็อปของสิ่งที่มันไม่ได้ดูเหมือนหลาย บริษัท มากใช้ห้องสมุด GUI ที่นิยมเช่นPyQtหรือwxPython บริษัท ต่างๆใช้ Python อย่างไร พื้นที่ใดที่เราควรมุ่งเน้นไปที่การจ้างงานในฐานะโปรแกรมเมอร์ Python?
39 python 

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

6
ต้องการสมาชิกชั้นเรียนหรือผ่านการขัดแย้งระหว่างวิธีการภายใน?
สมมติว่าในส่วนส่วนตัวของคลาสมีค่าที่ใช้โดยวิธีส่วนตัวหลายวิธี คนชอบมีการกำหนดนี้เป็นตัวแปรสมาชิกสำหรับชั้นเรียนหรือผ่านมันเป็นอาร์กิวเมนต์สำหรับแต่ละวิธี - และทำไม ในอีกด้านหนึ่งฉันสามารถเห็นการโต้เถียงที่จะทำให้การลดสถานะ (เช่นตัวแปรสมาชิก) ในชั้นเรียนโดยทั่วไปเป็นสิ่งที่ดีแม้ว่าค่าเดียวกันจะถูกใช้ซ้ำหลายครั้งตลอดทั้งวิธีการเรียนดูเหมือนว่าจะเหมาะ ผู้สมัครเพื่อเป็นตัวแทนของรัฐในชั้นเรียนเพื่อให้รหัสชัดเจนขึ้นถ้าไม่มีอะไรอื่น แก้ไข: เพื่ออธิบายความเห็น / คำถามบางอย่างที่ยกขึ้นฉันไม่ได้พูดถึงค่าคงที่และนี่ไม่ได้เกี่ยวข้องกับกรณีเฉพาะ แต่เป็นเพียงสมมติฐานที่ฉันได้พูดคุยกับคนอื่น ๆ ไม่สนใจมุม OOP สักครู่กรณีการใช้งานเฉพาะที่ฉันมีในใจคือต่อไปนี้ (สมมติว่าผ่านโดยการอ้างอิงเพียงเพื่อให้ตัวทำความสะอาดรหัสเทียม) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) ดังนั้นสิ่งที่ฉันหมายถึงคือมีตัวแปรบางอย่างที่เป็นเรื่องธรรมดาระหว่างฟังก์ชั่นหลายอย่าง - ในกรณีที่ฉันจำได้ว่ามันเป็นเพราะการผูกมัดของฟังก์ชั่นขนาดเล็ก ในระบบ OOP หากวิธีการเหล่านี้เป็นวิธีการเรียน (พูดเนื่องจากการปรับโครงสร้างด้วยวิธีการแยกจากวิธีการขนาดใหญ่) ตัวแปรนั้นสามารถส่งผ่านไปรอบ ๆ พวกเขาทั้งหมดหรืออาจเป็นสมาชิกชั้นเรียน

11
รหัสถูกสร้างขึ้นจาก UML หรือไม่? [ปิด]
ดังนั้นเมื่อฉันอยู่ที่มหาวิทยาลัยฉันได้รับการศึกษาเกี่ยวกับประโยชน์ของ UML และอนาคตของการพัฒนาโค้ด แต่จากประสบการณ์ในอุตสาหกรรมของฉันฉันพบว่าในขณะที่เราใช้ไดอะแกรมตั้งแต่ไดอะแกรม ER ไดอะแกรมคลาสไดอะแกรมสถานะแผนภาพการทำงานของเวิร์กโฟลว์ทั้งหมดนี้มีวัตถุประสงค์เพื่อการสื่อสาร นั่นคือฉันไม่เคยสร้างรหัสโดยอัตโนมัติจากไดอะแกรมและจากมุมมองการสื่อสารโดยทั่วไปฉันพยายามทำให้ไดอะแกรมของฉันง่ายและเข้าใจง่ายที่สุดเท่าที่จะทำได้ แต่เมื่อฉันดู Visio และ Enterprise Architect ดูเหมือนว่าพวกเขาจะมีกราฟ, รูปร่าง, วัตถุคุณสมบัติหลายประเภทซึ่งส่วนใหญ่ฉันไม่ได้ใช้ ผู้คนใช้ UML เพื่อทำสิ่งที่ซับซ้อนยิ่งขึ้นเช่นการสร้างรหัสหรือการสร้างฐานข้อมูลหรือไม่?
39 uml  diagrams  visio 

8
ใน C ++ เวลาโปรแกรมเมอร์ที่ใช้ในการจัดการหน่วยความจำ
คนที่เคยชินกับภาษาที่รวบรวมขยะมักจะกลัวการจัดการหน่วยความจำของ C ++ มีเครื่องมือเช่นauto_ptrและshared_ptrที่จะจัดการงานการจัดการหน่วยความจำมากมายสำหรับคุณ ไลบรารี C ++ จำนวนมากลงวันที่ก่อนวันจริงเครื่องมือเหล่านี้และมีวิธีของตัวเองในการจัดการงานการจัดการหน่วยความจำ คุณใช้เวลากับงานการจัดการหน่วยความจำนานเท่าใด ฉันสงสัยว่ามันขึ้นอยู่กับชุดของห้องสมุดที่คุณใช้อย่างมากดังนั้นโปรดบอกว่าคำตอบที่คุณใช้กับคนใดและถ้าพวกเขาทำให้ดีขึ้นหรือแย่ลง
39 c++  memory 

7
อะไรทำให้ชิ้นส่วนของซอฟต์แวร์เป็น Engine [ปิด]
ตัวอธิบาย 'Engine' ถูกโยนทิ้งไปมากมาย: เอ็นจิ้นกราฟิก, เครื่องยนต์ RegEx, AI engine ฯลฯ แต่จริงๆแล้วอะไรที่ทำให้ชิ้นส่วนของซอฟต์แวร์เป็น Engine? ออกแบบอินพุต / เอาต์พุตวัตถุประสงค์ขนาด?

20
มีอัลกอริธึมในโลกแห่งความเป็นจริงที่มีประสิทธิภาพสูงกว่าในชั้นเรียนด้านล่างหรือไม่? [ปิด]
เมื่อคืนฉันพูดคุยกับโปรแกรมเมอร์คนอื่นว่าถึงแม้บางอย่างอาจเป็น O (1) การดำเนินการที่เป็น O (n) อาจเหนือกว่าถ้ามีค่าคงที่ขนาดใหญ่ในอัลกอริทึม O (1) เขาไม่เห็นด้วยดังนั้นฉันจึงนำมันมาที่นี่ มีตัวอย่างของอัลกอริทึมที่มีประสิทธิภาพสูงกว่าในคลาสด้านล่างหรือไม่? ตัวอย่างเช่น O (n) เร็วกว่า O (1) หรือ O (n 2 ) เร็วกว่า O (n) ศาสตร์นี้สามารถแสดงให้เห็นถึงฟังก์ชั่นที่มีขอบเขตบนซีมโทติคเมื่อคุณมองข้ามปัจจัยคงที่ แต่อัลกอริทึมดังกล่าวมีอยู่ในป่าหรือไม่? และฉันจะหาตัวอย่างของพวกเขาได้ที่ไหน พวกเขาใช้สถานการณ์ประเภทใด
39 algorithms  big-o 

13
ฉันควรรวมวิธีการทำลายตนเองลงในแอปพลิเคชันของฉันหรือไม่?
เมื่อเร็ว ๆ นี้ฉันมีประสบการณ์ด้านลบที่ลูกค้าประกันตัวจากการเรียกเก็บเงิน แต่คนกลางของฉันอัปโหลดซอฟต์แวร์และการออกแบบของเราไปยังเซิร์ฟเวอร์ลูกค้าแล้ว ลูกค้ากลายเป็นอาชญากรที่รู้จักและแน่นอนว่าเขาเปลี่ยนรหัสผ่านที่เป็นไปได้ทั้งหมดของเซิร์ฟเวอร์ อย่างไรก็ตามฉันยังคงสามารถเข้าถึงแผงควบคุมของ CMS ได้ น่าเศร้าที่ซอฟต์แวร์ของฉันปลอดภัยมาก .. พยายามฉีด SQL, ปลอมภาพอัปโหลด ฯลฯ ฯลฯ อย่างไรก็ตามฉันไม่สามารถแฮ็กซอฟต์แวร์ของตัวเองได้อย่างไรก็ตามฉันเตรียมที่จะฟ้องบุคคลนี้ดังนั้นจึงไม่ใช่ ปัญหา .. ฉันแค่คิดในตอนนี้ว่าอาจจะมีวิธีการทำลายโครงสร้างตัวหลัง ดังนั้นหากกรณีที่คล้ายกันเกิดขึ้นฉันมีตัวเลือกในการฆ่าซอฟต์แวร์ ความคิดของฉันคือการซ่อนฟังก์ชั่นบางอย่างในไฟล์หลัก เข้ารหัสด้วย base64 ดังนั้นจึงไม่ชัดเจน ดังนั้นสิ่งนี้: eval(base64_decode('ZWNobyAnSGVsbG8gd29ybGQhJzs=')); // echo 'Hello world!'; และโดยทั่วไปก็สร้างสคริปต์เล็ก ๆ ที่จะนำไฟล์ทั้งหมดของซอฟต์แวร์ไปตรวจสอบให้แน่ใจแล้วลบออก รุ่นใหม่ของฉันของ CMS ทั้งหมดมี filemanagers ที่ฉันสามารถใช้สำหรับง่ายแฮ็ค แต่จะเกิดอะไรขึ้นถ้าการเข้าถึงแผงควบคุมมี จำกัด เพื่อความชัดเจนนี่เป็นเพียงความหมายของซอฟต์แวร์ขั้นตอนการพัฒนาในเซิร์ฟเวอร์ส่วนตัวของฉันหรือไคลเอนต์เซิร์ฟเวอร์ (ส่วนสุดท้ายเป็นปัญหาด้านจริยธรรม) ดังนั้นหากลูกค้าของฉันควรขโมยซอฟต์แวร์ของฉัน .. จะไม่รวมอยู่ในโฆษณา -ซอฟต์แวร์. และเพื่อให้ชัดเจนยิ่งขึ้นเรากำลังพูดถึงงานอิสระที่หายากเหล่านั้น ฉันคิดว่ามันค่อนข้างสมเหตุสมผลเหตุผลที่สัญญาจ้างงานไม่ต้องการวิธีดังกล่าว ดังนั้นเราจึงพูดถึง jumprisk-client …

10
ความแตกต่างระหว่างสำนวนและรูปแบบการออกแบบ?
อะไรคือความแตกต่างระหว่างสำนวนและรูปแบบการออกแบบ? ดูเหมือนว่าคำศัพท์เหล่านี้ทับซ้อนกันที่ไหนสักแห่ง; ที่ไหนฉันไม่รู้ พวกเขาใช้แทนกันได้หรือไม่ ฉันควรใช้อะไรเมื่อไหร่ นี่คือรายการของ C ++ Idioms ฉันสามารถเรียกพวกเขาว่าลวดลายการออกแบบได้หรือไม่? วิกิพีเดียกำหนด การเขียนโปรแกรมสำนวนเป็นรูปแบบการออกแบบในระดับต่ำ มันหมายความว่าอะไร? อะไร"ระดับต่ำ"หมายถึงที่นี่? คำถามนี้ได้รับแรงบันดาลใจจากคำถามอื่น: https://stackoverflow.com/questions/7343531/are-the-some-design-patterns-language-donian

9
ทำงานเป็นนักพัฒนาเพียงผู้เดียว: รับโค้ดดู
ฉันไม่มีทางเลือกนอกจากต้องทำงานด้วยตัวเองและไม่สามารถหาวิธีแก้ปัญหาที่เพียงพอสำหรับการตรวจสอบงานของฉันตรวจสอบความมีสติมีคนที่จะระดมความคิดด้วยการพูดคุยเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดและอื่น ๆ ฉันคิดว่าฉันจะได้รับคำตอบผ่านบทความของ Jeff Atwood: ในการเขียนโปรแกรม One Is The Loneliest Numberที่ดีที่สุดที่ฉันสามารถหาได้ในเรื่องนี้ แต่มันกลับกลายเป็นเพียงแค่ย้ำคำถามของฉัน ฉันรู้ว่าเว็บไซต์ Stack Exchange เช่นนี้และการตรวจสอบโค้ดเป็นคำตอบที่เป็นไปได้ชัดเจน แต่หลาย ๆ คนคงชื่นชมมันไกลจากอุดมคติ: ในขณะที่ฉันไม่สามารถเขียนรายการข้อผิดพลาดทั้งหมดบ่อยครั้งการตั้งคำถามและต่อยเป็นปัญหาที่เกิดขึ้นในตัวเองมักจะใช้เวลาทำงานมากจนเมื่อถึงเวลาที่คุณเตรียมไว้อย่างเพียงพอคุณก็ตอบคำถามของคุณเองได้มากขึ้น เวลากว่าที่คิดไว้เป็นอย่างอื่น นอกจากนี้การซ่อนรายละเอียดเพื่อถามคำถามที่กำหนดไว้อย่างดีช่วยลดความเป็นไปได้ที่จะมีคนเจอปัญหาที่คุณไม่ได้คิด นอกจากนี้ในขณะที่ฉันไม่สามารถจับมันได้ แต่การตอบสนองของการสนทนาฟรีไม่สามารถจับคู่ได้โดยการสนทนาทางอินเทอร์เน็ตในรูปแบบใด ๆ ที่ฉันนึกออก ท้ายสุด แต่ไม่ท้ายสุดฉันไม่ต้องการโพสต์โปรเจคทั้งหมดเพื่อให้โลกมองไปที่นิรันดร์ที่เหลือด้วยเหตุผลที่ชัดเจน มีคำตอบอื่นนอกเหนือจากการจ่ายที่ปรึกษาเพื่อดูรหัสของฉัน

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

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

10
ข้อเสียของ RoR คืออะไร? [ปิด]
ฉันกำลังพยายามตัดสินใจว่าจะใช้ภาษาฝั่งเซิร์ฟเวอร์เพื่อเรียนรู้และใช้สำหรับการพัฒนาเว็บและในขณะที่มันค่อนข้างง่ายที่จะได้รับข้อมูลว่าทำไม x, y หรือ z เป็นสิ่งที่ดีมันยากที่จะเข้าใจข้อเสียของแต่ละข้อ ของพวกเขา. โดยเฉพาะอย่างยิ่งฉันอยากรู้ว่าข้อบกพร่องอะไรในการเรียนรู้และ / หรือการใช้ Ruby on Rails เมื่อเทียบกับภาษา / กรอบงานอื่น ๆ

4
ไปได้เร็วแค่ไหน?
Go เป็นหนึ่งในไม่กี่ภาษาที่ควรจะเรียกใช้ 'ใกล้กับโลหะ' นั่นคือมันถูกรวบรวมพิมพ์แบบคงที่และเรียกใช้งานโค้ดโดยไม่ต้องใช้ VM สิ่งนี้ควรให้ความได้เปรียบด้านความเร็วเหนือ Java, C # และอื่น ๆ อย่างไรก็ตามดูเหมือนว่าอยู่หลัง Java (ดูProgramming Language Shootout ) ฉันสมมติว่าคอมไพเลอร์ที่มีวุฒิภาวะน้อยกว่ามีความรับผิดชอบอย่างมากในเรื่องนี้ แต่มีเหตุผลอื่นอีกไหม? มีอะไรในการออกแบบของ Go ที่จะป้องกันไม่ให้รันเร็วกว่าพูด Java หรือไม่? ฉันมีมุมมองที่ไม่ซับซ้อนมากของแบบจำลองรันไทม์ แต่ดูเหมือนว่าอย่างน้อยในหลักการแล้วมันควรจะสามารถทำงานได้เร็วกว่าจาวาเพราะต้องมีการประมวลผลโค้ดเนทีฟ

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