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

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

12
เหตุใดโปรแกรมจึงต้องใช้จำนวนแกนประมวลผลขั้นต่ำที่เฉพาะเจาะจง
เป็นไปได้ไหมที่จะเขียนโค้ด (หรือซอฟต์แวร์ที่สมบูรณ์แทนที่จะเป็นส่วนหนึ่งของรหัส) ที่ทำงานไม่ถูกต้องเมื่อทำงานบน CPU ที่มีจำนวนคอร์น้อยกว่า N? โดยไม่ตรวจสอบอย่างชัดเจนและล้มเหลวตามวัตถุประสงค์: หาก (noOfCores <4) จากนั้นทำงานไม่ถูกต้องตามวัตถุประสงค์ ฉันกำลังดูข้อกำหนดขั้นต่ำของเกม ( Dragon Age: Inquisition ) ขั้นต่ำของเกมและระบุขั้นต่ำของซีพียูสี่คอร์ ผู้เล่นหลายคนบอกว่ามันไม่ได้ทำงานบนซีพียูสองคอร์และ EVEN บนIntel Core i3s ที่มีฟิสิคัลคอร์สองตัวและคอร์ตรรกะสองคอร์ และมันก็ไม่ได้เป็นปัญหาของพลังการคำนวณ จากความเข้าใจของฉันเธรดจะถูกแยกออกจาก CPU อย่างสมบูรณ์โดยระบบปฏิบัติการเนื่องจากไม่สามารถทำได้ เพียงเพื่อล้างสิ่งออก: ฉันไม่ได้ถามว่า "ฉันสามารถค้นหาจำนวนแกนประมวลผลของ CPU จากโค้ดและไม่สามารถทำได้ตามวัตถุประสงค์หรือไม่" ... รหัสดังกล่าวจะไม่ได้ตั้งใจ (บังคับให้คุณซื้อ CPU ที่มีราคาแพงกว่าเพื่อรันโปรแกรม - โดยไม่จำเป็นต้องใช้พลังงานในการคำนวณ) ฉันถามว่ารหัสของคุณพูด, มีสี่กระทู้และล้มเหลวเมื่อสองหัวข้อที่มีการทำงานบนแกนเดียวกันทางกายภาพ(ไม่ชัดเจนตรวจสอบข้อมูลของระบบและจงใจล้มเหลว) ในระยะสั้นจะมีซอฟต์แวร์ที่ต้องใช้หลายคอร์โดยไม่จำเป็นต้องใช้พลังการประมวลผลเพิ่มเติมที่มาจากหลายคอร์หรือไม่? มันจะต้องมีแกนร่างกายแยก N

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

6
การวนรอบเหตุการณ์เป็นเพียงการวนรอบ / ขณะที่การหยั่งสัญญาณที่ปรับปรุงแล้ว
ฉันพยายามเข้าใจว่าวงเหตุการณ์คืออะไร บ่อยครั้งที่คำอธิบายคือในเหตุการณ์วนรอบคุณทำบางสิ่งบางอย่างจนกว่าคุณจะได้รับแจ้งว่ามีเหตุการณ์เกิดขึ้น จากนั้นคุณจัดการกับกิจกรรมและทำสิ่งที่คุณเคยทำมาก่อน เพื่อแมปคำจำกัดความข้างต้นด้วยตัวอย่าง ฉันมีเซิร์ฟเวอร์ที่ 'คอยฟัง' ในเหตุการณ์ลูปและเมื่อตรวจพบการเชื่อมต่อซ็อกเก็ตข้อมูลจากมันจะถูกอ่านและแสดงหลังจากนั้นเซิร์ฟเวอร์จะกลับมาทำงาน / เริ่มฟังเหมือนเดิม อย่างไรก็ตามเหตุการณ์นี้เกิดขึ้นและพวกเราได้รับแจ้งว่า 'แบบนั้น' นั้นเป็นเรื่องที่ฉันต้องรับมือ คุณสามารถพูดได้ว่า: "ไม่ใช่" แบบนั้น "คุณต้องลงทะเบียนผู้ฟังเหตุการณ์" แต่สิ่งที่ฟังเหตุการณ์ แต่ฟังก์ชั่นที่ด้วยเหตุผลบางอย่างจะไม่กลับมา มันอยู่ในวงของตัวเองกำลังรอการแจ้งเตือนเมื่อมีเหตุการณ์เกิดขึ้น? ผู้ฟังเหตุการณ์ควรลงทะเบียนผู้ฟังเหตุการณ์ด้วยหรือไม่ มันจะจบที่ไหน? เหตุการณ์เป็นสิ่งที่เป็นนามธรรมที่ดีในการทำงานด้วย แต่เป็นเพียงสิ่งที่เป็นนามธรรม ฉันเชื่อว่าในท้ายที่สุดการเลือกตั้งไม่สามารถหลีกเลี่ยงได้ บางทีเราไม่ได้ทำมันในรหัสของเรา แต่ระดับที่ต่ำกว่า (การใช้ภาษาการเขียนโปรแกรมหรือระบบปฏิบัติการ) กำลังทำเพื่อเรา โดยทั่วไปแล้วจะมากับรหัสเทียมต่อไปนี้ซึ่งทำงานอยู่ในระดับต่ำพอจึงไม่ทำให้เกิดการรอคอย: while(True): do stuff check if event has happened (poll) do other stuff นี่คือความเข้าใจของฉันของความคิดทั้งหมดและฉันต้องการที่จะได้ยินว่ามันถูกต้อง ฉันเปิดกว้างในการยอมรับว่าความคิดทั้งหมดนั้นผิดอย่างสิ้นเชิงซึ่งในกรณีนี้ฉันต้องการคำอธิบายที่ถูกต้อง

11
เขียนแนวทางแก้ไขปัญหาของฉันลงบนกระดาษ? [ปิด]
ฉันเป็นนักศึกษาวิทยาศาสตร์คอมพิวเตอร์คนแรกและเราเพิ่งเริ่มทำโครงการจริงใน Python ฉันพบว่าฉันมีประสิทธิภาพมากเมื่อฉันใช้วิธีปากกาและกระดาษที่อาจารย์แนะนำในชั้นเรียน แต่เมื่อฉันไม่สามารถเขียนปัญหาของฉันลงและใช้อัลกอริทึมของฉันบนกระดาษฉันช้าจริงๆ ระหว่างห้องแล็บฉันมักจะต้องนำกลับบ้านของฉัน เมื่อฉันไปถึงที่นั่นและเขียนมันออกมาฉันก็แก้ปัญหาที่ทำให้ชั้นเรียนทั้งหมดใช้เวลาประมาณ 5 นาที อาจเป็นเพราะฉันรู้สึกเครียดเมื่อเห็นคนกำลังแก้ไขห้องทดลองอยู่ก่อนหน้าฉัน หรืออาจเป็นวิธีการใช้ปากกาและกระดาษ ฉันเรียกดูฟอรัมและมีคนเขียนว่าหากคุณต้องเขียนโปรแกรมของคุณลงบนกระดาษคุณไม่ควรเป็นโปรแกรมเมอร์ ฉันกังวลจริงๆเพราะฉันดีขึ้นมากเมื่อฉันเห็นสิ่งที่โปรแกรมกำลังทำอยู่และติดตามวิธีการของฉันผ่านมันก่อนที่จะพิมพ์รหัสจริง ฉันกำลังทำอะไรผิดหรือเปล่า? แก้ไข: ขออภัยที่ไม่ชัดเจน แต่เมื่อฉันพูดว่าเขียนบนกระดาษฉันหมายถึงวิธีการแก้ปัญหาของฉัน (เช่นการเขียนตัวอย่างการสร้างตารางที่มีค่า ฯลฯ ) ไม่ใช่รหัสจริงของฉัน ฉันแค่ใช้กระดาษเพื่อทำให้ความคิดของฉันออกมา

10
“ ผู้ใช้ไม่ควรตัดสินใจว่าเป็นผู้ดูแลหรือไม่ ควรมีสิทธิ์หรือระบบรักษาความปลอดภัย”
ตัวอย่างที่ใช้ในคำถามผ่านข้อมูลขั้นต่ำเปลือยไปยังฟังก์ชั่นสัมผัสกับวิธีที่ดีที่สุดเพื่อตรวจสอบว่าผู้ใช้เป็นผู้ดูแลหรือไม่ หนึ่งคำตอบทั่วไปคือ: user.isAdmin() สิ่งนี้กระตุ้นให้เกิดความคิดเห็นซึ่งซ้ำหลายครั้งและได้รับการโหวตหลายครั้ง: ผู้ใช้ไม่ควรตัดสินใจว่าเป็นผู้ดูแลระบบหรือไม่ สิทธิพิเศษหรือระบบความปลอดภัยควร สิ่งที่อยู่คู่กับชั้นเรียนแน่นไม่ได้หมายความว่าเป็นความคิดที่ดีที่จะทำให้มันเป็นส่วนหนึ่งของชั้นเรียนนั้น ฉันตอบ ผู้ใช้ไม่ได้ตัดสินใจอะไร วัตถุผู้ใช้ / ตารางเก็บข้อมูลเกี่ยวกับผู้ใช้แต่ละคน ผู้ใช้จริงไม่ได้เปลี่ยนทุกอย่างเกี่ยวกับตัวเอง แต่นี่ไม่ได้ผล เห็นได้ชัดว่ามีความแตกต่างพื้นฐานของมุมมองซึ่งทำให้การสื่อสารเป็นเรื่องยาก มีคนอธิบายให้ฉันฟังได้ไหมว่าทำไม user.isAdmin () ไม่ดีและวาดภาพร่างสั้น ๆ ของสิ่งที่ดูเหมือน "ถูกต้อง" จริงๆฉันไม่เห็นข้อดีของการแยกการรักษาความปลอดภัยจากระบบที่ปกป้อง ข้อความความปลอดภัยใด ๆ จะกล่าวว่าความปลอดภัยต้องได้รับการออกแบบเข้าสู่ระบบตั้งแต่เริ่มต้นและพิจารณาในทุกขั้นตอนของการพัฒนาการปรับใช้การบำรุงรักษาและแม้กระทั่งจุดสิ้นสุดของชีวิต ไม่ใช่สิ่งที่สามารถยึดติดกับด้านข้างได้ แต่ 17 คะแนนขึ้นไปจนถึงความคิดเห็นนี้บอกว่าฉันไม่มีอะไรสำคัญ

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

12
คืนดีกฎลูกเสือและการปรับโครงสร้างใหม่โดยมีการตรวจทานโค้ด
ฉันเป็นผู้ศรัทธาที่ยิ่งใหญ่ในกฎลูกเสือ : ตรวจสอบโมดูลที่สะอาดกว่าทุกครั้งที่คุณตรวจสอบ "ไม่ว่าใครจะเป็นคนเขียนต้นฉบับจะทำอย่างไรถ้าเราใช้ความพยายามไม่ว่าจะเล็กแค่ไหนในการปรับปรุงโมดูล ทั้งหมดตามกฎง่ายๆนั้นเราจะเห็นจุดจบของการเสื่อมของระบบซอฟต์แวร์ของเราอย่างไม่หยุดยั้งแทนระบบของเราจะค่อยๆดีขึ้นและดีขึ้นตามที่วิวัฒนาการเรายังเห็นทีมที่ดูแลระบบโดยรวมค่อนข้าง มากกว่าเพียงแค่บุคคลที่ดูแลส่วนเล็ก ๆ ของตัวเอง ฉันยังเป็นผู้เชื่อที่ยอดเยี่ยมในแนวคิดที่เกี่ยวข้องกับการปรับโครงสร้างแบบฉวยโอกาส : แม้ว่าจะมีสถานที่สำหรับความพยายาม refactoring ที่กำหนดไว้บางอย่างฉันต้องการส่งเสริมให้ refactoring เป็นกิจกรรมที่มีโอกาสทำทุกครั้งและทุกที่ที่รหัสจำเป็นต้องทำความสะอาด - โดยใครก็ตาม สิ่งนี้หมายความว่าเมื่อใดก็ตามที่มีคนเห็นรหัสบางอย่างที่ไม่ชัดเจนอย่างที่ควรจะเป็นพวกเขาควรมีโอกาสแก้ไขมันที่นั่นแล้ว - หรืออย่างน้อยก็ภายในไม่กี่นาที ข้อความที่ตัดตอนมาต่อไปนี้โดยเฉพาะอย่างยิ่งจากบทความ refactoring: ฉันระวังวิธีการพัฒนาใด ๆ ที่ทำให้เกิดแรงเสียดทานสำหรับการปรับโครงสร้างแบบฉวยโอกาส ... ความรู้สึกของฉันคือทีมส่วนใหญ่ไม่ได้ทำการปรับโครงสร้างใหม่ให้เพียงพอดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องใส่ใจกับทุกสิ่งที่ทำให้คนไม่สนใจ เพื่อช่วยในการชะล้างสิ่งนี้ให้ระวังเมื่อใดก็ตามที่คุณรู้สึกท้อแท้ที่จะทำการปรับโครงสร้างเล็ก ๆ ซึ่งคุณมั่นใจว่าจะใช้เวลาเพียงหนึ่งหรือสองนาทีเท่านั้น สิ่งกีดขวางใด ๆ นั้นเป็นกลิ่นที่น่าจะกระตุ้นการสนทนา ดังนั้นจดบันทึกความท้อแท้และนำมันขึ้นมาพร้อมกับทีม อย่างน้อยที่สุดมันก็ควรจะพูดคุยในช่วงหลังของคุณย้อนหลัง ที่ที่ฉันทำงานมีการพัฒนาวิธีปฏิบัติหนึ่งที่ทำให้เกิดการเสียดทานอย่างหนัก - Code Review (CR) เมื่อใดก็ตามที่ฉันเปลี่ยนแปลงสิ่งใดก็ตามที่ไม่อยู่ในขอบเขตของ "การมอบหมาย" ของฉันฉันกำลังถูกตำหนิโดยผู้ตรวจสอบของฉันว่าฉันกำลังทำการเปลี่ยนแปลงให้ยากขึ้น นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเมื่อมีการ refactoring เนื่องจากทำให้การเปรียบเทียบแบบ "ต่อบรรทัด" เป็นเรื่องยาก วิธีการนี้เป็นมาตรฐานที่นี่ซึ่งหมายถึงการปรับโครงสร้างแบบฉวยโอกาสเกิดขึ้นได้ยากและต้องมีการปรับโครงสร้างใหม่ "ตามแผน" …

8
ทำไมคนเราถึงต้องมาร์กอย่างถูกต้องและมีความหมาย?
โปรดทราบว่าฉัน (ลอง) เพื่อทำเครื่องหมายในความหมายที่เป็นไปได้เพราะฉันชอบพวกเขาในแบบที่มันดูและรู้สึก แต่ไม่ใช่เพราะฉันรู้ถึงข้อดีที่น่าทึ่งอื่น ๆ ประเด็นคำถามของฉันคือการให้ความรู้แก่ผู้อื่น ฉันเคยเห็นบทความและแบบฝึกหัดมากมายซึ่งมักระบุว่า "ลองทำเครื่องหมายด้วยวิธีที่เป็นไปได้ทางความหมายมากที่สุด" แต่ความคิดแปลก ๆ มาหาฉันทำไม ทำไมต้องมี (หรือต้องการ) รบกวนองค์ประกอบเฉพาะที่ถ่ายทอดความหมายที่ถูกต้อง? โดยเฉพาะผมหมายถึงองค์ประกอบ HTML5 ใหม่เช่น<time>, หรือ<output> <address>โดยเฉพาะอย่างยิ่งหากหน้า "ใช้งานได้" (จะแสดงผลได้ดีในทุกเบราว์เซอร์) เหตุใดฉันจึงต้องการใช้องค์ประกอบเช่น<time>หรือ<address>ในกรณีที่ไม่มีสิ่งใด (หรือในกรณีที่เลวร้ายที่สุดทั่วไป<span>) ใช้งานได้ดีเหมือนกัน? ฉันถามสิ่งนี้เพราะฉันเห็นเว็บไซต์ (ยอดนิยม) มากมาย (อันนี้รวมอยู่) ซึ่งไม่ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดที่เรียกว่าเหล่านี้
55 html  html5  semantics  markup 

6
Bug เปิดใหม่และใหม่
ข้อผิดพลาดถูกเปิดแก้ไขตรวจสอบและปิด หนึ่งเดือนต่อมามันปรากฏตัวอีกครั้งในเวอร์ชันถัดมาหลังจากการทำซ้ำหลายครั้งโดยไม่มีการถดถอย หากระบุคุณสมบัติของบั๊กเหมือนกันคุณจะเปิด ID บั๊กที่มีอยู่อีกครั้งหรือเปิดขึ้นใหม่พร้อมลิงก์ไปยังบั๊กที่ถูกปิดหรือไม่?

3
ความแตกต่างระหว่างการเรียกซ้ำและการสำรวจคืออะไร
ความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร? recursion Corecursion บนวิกิพีเดียมีข้อมูลเพียงเล็กน้อยและไม่มีรหัสที่ชัดเจนที่อธิบายถึงข้อกำหนดเหล่านี้ อะไรคือตัวอย่างง่ายๆที่อธิบายคำศัพท์เหล่านี้ การกลับเป็นสองเท่าของการเรียกซ้ำเป็นอย่างไร? มีอัลกอริธึมการยืนยันคลาสสิกหรือไม่?

5
หนังสือเสียงสำหรับโปรแกรมเมอร์? [ปิด]
ฉันเป็นโปรแกรมเมอร์ที่ต้องเดินทางไปกลับสองชั่วโมงเพื่อไปทำงานในแต่ละวัน ฉันต้องการเติมหนังสือเสียงเกี่ยวกับการพัฒนาซอฟต์แวร์ หนังสือเสียงใด ๆ ที่จะช่วยให้ฉันเป็นโปรแกรมเมอร์ที่ดีขึ้นจะได้รับการชื่นชม ฉันคิดว่าหนังสือเกี่ยวกับรูปแบบการออกแบบและสารคดีเกี่ยวกับประวัติคอมพิวเตอร์อาจดีที่นี่ แต่ฉันเปิดรับทุกสิ่ง โปรดทราบว่าฉันจะฟังสิ่งนี้ในรถหนังสือเสียงที่ดีที่สุดที่ฉันสามารถฟังคืออะไร แก้ไข: หลายคนยังแนะนำพอดคาสต์ สิ่งนี้ได้รับการชื่นชม แต่เนื่องจากพอดแคสต์มาถึงสตรีมข้อมูลที่มาถึงอย่างต่อเนื่องมากกว่าที่จะเป็นข้อมูลที่มีจำนวน จำกัด วิธีการที่จะจัดการสตรีมเนื้อหาที่แตกต่างเหล่านี้ทั้งหมดก็จะได้รับการชื่นชมเช่นกัน เพื่อให้เฉพาะเจาะจงมากขึ้นกับสถานการณ์ของฉันรถที่ใช้เดินทางมีเครื่องเล่นซีดี MP3 อินพุต USB สำหรับไฟล์ MP3 และอินพุต AUX ฉันเป็นเจ้าของอุปกรณ์ Android และ webOS ที่สามารถเสียบเข้ากับช่องต่อ AUX ได้
55 books 

7
การฉีดแบบพึ่งพานั้นเป็นสิ่งจำเป็นสำหรับการทดสอบหน่วยหรือไม่?
การใช้การฉีดพึ่งพา (DI) จำเป็นสำหรับการทดสอบหน่วยหรือไม่ ฉันไม่สามารถคิดวิธีอื่นในการแยกรหัสเพื่อให้สามารถทดสอบได้ นอกจากนี้ตัวอย่างทั้งหมดที่ฉันเคยเห็นใช้รูปแบบนี้ นั่นเป็นเพราะมันเป็นทางเลือกเดียวที่ทำงานได้หรือมีทางเลือกอื่น ๆ ?

2
เมื่อไม่ใช้ Google Web Toolkit [ปิด]
ฉันกำลังพิจารณาใช้ GWT ในโครงการพัฒนาเว็บแอพหลัก ๆ ของ บริษัท นั่นคือข้อได้เปรียบที่สำคัญในสายตาของฉันคือการคอมไพล์ข้ามไปยัง Javascript ซึ่ง (อย่างน้อยในทางทฤษฎี) จะช่วยทีมของฉันลดขนาดของสแต็คเทคโนโลยี . อย่างไรก็ตามก่อนที่จะถูกไฟไหม้ (เหมือน devs ส่วนใหญ่) ฉันต้องการได้ยินจากโปรแกรมเมอร์ที่ใช้งานจริงกับปัญหาใด ๆ กับ GWT ซึ่งจะขัดขวางหรือ จำกัด มันใช้ภายในโดเมนปัญหาบางอย่าง อะไรคือข้อโต้แย้งในการใช้ GWT และเพราะอะไร
55 java  javascript  ajax  gwt 


17
แฮ็คคืออะไร? [ปิด]
ฉันมักจะได้ยินเพื่อนร่วมงานพูดกันว่า "นั่นเป็นการแฮ็คที่น่ากลัวและน่ากลัว" สิ่งที่ฉันสามารถนำออกไปได้ก็คือมันไม่ดี เมื่อฉันถามพวกเขาว่ามันใช้งานได้หรือเปล่าพวกเขาพูดว่า "ใช่ แต่มันไม่ดี" นั่นหมายความว่าไม่ใช่ทางออกที่ดีใช่ไหม วิธีแก้ปัญหาจะไม่ดีถ้ามันทำงานอย่างไร มันเป็นเพราะการปฏิบัติที่ดี? หรือไม่บำรุงรักษา? มันใช้ผลข้างเคียงของรหัสเป็นส่วนหนึ่งของโซลูชันของคุณหรือไม่? มันน่าสนใจสำหรับฉันเมื่อมีบางสิ่งจัดเป็นแฮ็ค คุณจะระบุได้อย่างไร

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