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

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

9
std :: shared_ptr เป็นทางเลือกสุดท้าย?
ผมก็แค่ดู "Going พื้นเมือง 2012" std::shared_ptrลำธารและผมสังเกตเห็นการอภิปรายเกี่ยวกับ ฉันรู้สึกประหลาดใจเล็กน้อยที่ได้ยินมุมมองเชิงลบของ Bjarne std::shared_ptrและความคิดเห็นของเขาว่าควรใช้เป็น "ทางเลือกสุดท้าย" เมื่ออายุการใช้งานของวัตถุไม่แน่นอน (ซึ่งฉันเชื่อตามที่เขาพูด ใครบ้างที่จะอธิบายสิ่งนี้ในเชิงลึกมากขึ้นอีกหน่อย? เราจะตั้งโปรแกรมโดยไม่ใช้std::shared_ptrและยังจัดการเวลาวัตถุได้อย่างปลอดภัยหรือไม่?

24
ฉันจะอธิบายความแตกต่างระหว่าง NULL และศูนย์ได้อย่างไร
การทำงานกับปัญหาที่ใช้สูตรการเปลี่ยนแปลงเปอร์เซ็นต์: percent change = 100 * [(new value - old value) / old value] ฉันจะอธิบายความแตกต่างได้อย่างไรnew value or old value = NULLแทนที่จะเป็น0กับคนที่อาจไม่ใช่โปรแกรมเมอร์ เจ้านายของฉันสงสัยว่าทำไมมีสตริงว่างในกล่องข้อความมากกว่าค่าเพราะเรามีค่าเก่า แต่ไม่ใช่ค่าใหม่
59 null  tsql 

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

15
มัลติเธรดสำคัญอย่างไรในอุตสาหกรรมซอฟต์แวร์ปัจจุบัน [ปิด]
ฉันมีประสบการณ์เกือบ 3 ปีในการเขียนเว็บแอปพลิเคชันใน Java โดยใช้เฟรมเวิร์ก MVC (เช่น struts) ฉันไม่เคยเขียนรหัสหลายเธรดจนกว่าจะถึงตอนนี้ฉันได้เขียนรหัสสำหรับเครือข่ายค้าปลีกรายใหญ่ ฉันได้รับคำถามสองสามข้อเกี่ยวกับมัลติเธรดระหว่างการสัมภาษณ์และฉันมักตอบคำถามเหล่านี้ (ส่วนใหญ่เป็นคำถามง่าย ๆ ) ทำให้ฉันสงสัยว่า Multithreading มีความสำคัญอย่างไรในสถานการณ์ปัจจุบันของอุตสาหกรรม

11
เมื่อใดที่จะส่งมอบรหัส?
เมื่อทำงานในโครงการรหัสอาจได้รับการพัฒนาอย่างรวดเร็วพอสมควรในหนึ่งวันหรือทีละนิดเป็นระยะเวลานานไม่กี่สัปดาห์ / เดือน / ปี เนื่องจากการคอมมิตของโค้ดกำลังถูกพิจารณาว่าเป็นตัวชี้วัดของการพัฒนาโครงการมันไม่ได้หมายความว่ามันจะมีการเขียนโค้ดมากกว่าโปรเจ็กต์ที่มีความมุ่งมั่นน้อยกว่า ดังนั้นคำถามคือเมื่อใดให้คอมมิชชันกับที่เก็บจริงเพื่อให้คอมมิชชันมีความสมเหตุสมผล? ในฐานะที่เป็นส่วนเสริม: เป็นวิธีปฏิบัติที่ถูกต้องหรือไม่ในการวัดการพัฒนาโครงการตามความมุ่งมั่น?

13
ปรัชญาที่อยู่เบื้องหลังพฤติกรรมที่ไม่ได้กำหนด
ข้อมูลจำเพาะ C \ C ++ ทำให้พฤติกรรมไม่เปิดจำนวนมากสำหรับคอมไพเลอร์เพื่อนำไปใช้ในทางของตัวเอง มีคำถามจำนวนมากที่มักถูกถามอยู่เสมอเกี่ยวกับสิ่งเดียวกันและเรามีโพสต์ที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้: https://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviour-that-ac-programmer-should-know-abo https://stackoverflow.com/questions/4105120/what-is-undefined-behavior https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points คำถามของฉันไม่ได้เกี่ยวกับพฤติกรรมที่ไม่ได้กำหนดหรือมันแย่จริงๆ ฉันรู้ถึงอันตรายและการอ้างอิงพฤติกรรมที่ไม่ได้กำหนดที่เกี่ยวข้องส่วนใหญ่จากมาตรฐานดังนั้นโปรดงดเว้นการโพสต์คำตอบเกี่ยวกับความเลวร้ายของมัน คำถามนี้เกี่ยวกับปรัชญาเบื้องหลังการละทิ้งพฤติกรรมที่เปิดกว้างสำหรับการใช้งานคอมไพเลอร์ ฉันอ่านโพสต์บล็อกที่ยอดเยี่ยมที่ระบุว่าประสิทธิภาพเป็นเหตุผลหลัก ฉันสงสัยว่าการทำงานเป็นเพียงเกณฑ์ในการอนุญาตหรือมีปัจจัยอื่น ๆ ที่มีอิทธิพลต่อการตัดสินใจที่จะเปิดโอกาสให้คอมไพเลอร์ใช้งานได้หรือไม่? หากคุณมีตัวอย่างใด ๆ ที่จะกล่าวถึงพฤติกรรมที่ไม่ได้กำหนดไว้อย่างใดอย่างหนึ่งให้พื้นที่เพียงพอสำหรับคอมไพเลอร์เพื่อเพิ่มประสิทธิภาพโปรดแสดงรายการเหล่านั้น หากคุณทราบถึงปัจจัยอื่น ๆ นอกเหนือจากประสิทธิภาพโปรดกลับคำตอบของคุณพร้อมรายละเอียดที่เพียงพอ หากคุณไม่เข้าใจคำถามหรือไม่มีหลักฐาน / แหล่งข้อมูลเพียงพอที่จะตอบคำถามของคุณโปรดอย่าโพสต์คำตอบที่คาดเดาอย่างกว้าง ๆ

12
คอมพิวเตอร์ทำงานอย่างไร [ปิด]
นี่เป็นคำถามที่น่าอายเกือบ ... ฉันมีปริญญาด้านวิทยาศาสตร์คอมพิวเตอร์ (และกำลังอยู่ในขั้นที่สอง) ฉันทำงานเป็นนักพัฒนา. NET แบบเต็มเวลาเกือบห้าปี ฉันมักจะดูเหมือนมีอำนาจในสิ่งที่ฉันทำ แต่ฉันไม่รู้ว่าคอมพิวเตอร์ทำงานอย่างไร! ได้โปรดเปลือยกับฉันสักครู่ Google อย่างรวดเร็วของ 'วิธีการทำงานของคอมพิวเตอร์' จะให้ผลลัพธ์มากมายและมาก แต่ฉันพยายามหาที่ตอบสิ่งที่ฉันกำลังมองหา ฉันรู้ว่านี่เป็นคำถามที่ยิ่งใหญ่มากดังนั้นจริงๆถ้าคุณสามารถให้คำหลักหรือทิศทางได้ ฉันรู้ว่ามีส่วนประกอบ .... แหล่งจ่ายไฟ, เมนบอร์ด, RAM, CPU, ฯลฯ ... และฉันได้รับ 'ความคิดทั่วไป' ของสิ่งที่พวกเขาทำ แต่ฉันไม่เข้าใจว่าคุณไปจากสายของรหัสเช่นConsole.Readline()ใน. NET (หรือ Java หรือ C ++) และมีจริงทำสิ่ง แน่นอนว่าฉันรู้ตัว MSIL (ในกรณีของ. NET) และความมหัศจรรย์บางอย่างเกิดขึ้นกับคอมไพเลอร์ JIT และเปลี่ยนเป็นรหัสเนทีฟ (ฉันคิดว่า) ฉันบอกว่า Java นั้นคล้ายกันและ C ++ ตัดขั้นตอนกลางออกไป ฉันได้ทำการประกอบเมนเฟรมแล้วไม่กี่ปีมานี้ …

8
ทำไมคนปิดการใช้งานจาวาสคริปต์?
ฉันถามคำถามเมื่อวานนี้ฉันควรสนใจที่จะพัฒนาสำหรับ JavaScript หรือไม่ . ฉันคิดว่า consencus คือ: ใช่ฉันควรพัฒนาสำหรับ JavaScript Disabled ตอนนี้ฉันแค่อยากเข้าใจว่าทำไมผู้ใช้ปิดการใช้งาน JS ดูเหมือนนักพัฒนาหลายคน (ฉันเดาว่าคนที่ตอบคำถามคือนักพัฒนา) ปิดการใช้งาน JS ทำไมเป็นอย่างนั้น ทำไมผู้ใช้ปิดการใช้งาน JS เพื่อความปลอดภัย? ความเร็ว? หรืออะไร?

25
คุณต้องใช้ทีมใหญ่ขนาดไหนเพื่อใช้ประโยชน์จากซอฟต์แวร์ติดตามบั๊ก [ปิด]
ทีมพัฒนาของฉันเติบโตขึ้น 100% (จากนักพัฒนา 1 รายถึง 2) กลุ่มใหม่ของฉันต้องการลงทุนในซอฟต์แวร์ติดตามบั๊ก ซอฟต์แวร์นี้มีประโยชน์สำหรับทีมขนาดเล็กเช่นนี้หรือไม่?

3
อะไรคือความแตกต่างที่ใหญ่ที่สุดระหว่าง F # และ Scala?
F # และ Scala เป็นทั้ง langugages โปรแกรมการทำงานที่ไม่ได้บังคับให้นักพัฒนาใช้เฉพาะประเภทข้อมูลที่ไม่เปลี่ยนรูป พวกเขาทั้งสองมีการสนับสนุนวัตถุสามารถใช้ไลบรารีที่เขียนในภาษาอื่นและเรียกใช้บนเครื่องเสมือน ดูเหมือนว่าทั้งสองภาษาจะใช้ ML อะไรคือความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่าง F # และ Scala แม้ว่าข้อเท็จจริงที่ว่า F # ได้รับการออกแบบสำหรับ. NET และ Scala สำหรับแพลตฟอร์ม Java?

17
เหตุใดจึงต้องใช้วิธีการ OO แทนคำสั่ง“ สวิตช์” ขนาดใหญ่
ฉันทำงานใน. Net, C # shop และฉันมีเพื่อนร่วมงานที่คอยยืนยันว่าเราควรใช้คำสั่ง Switch ขนาดใหญ่ในรหัสของเราด้วย "คดี" จำนวนมากแทนที่จะเป็นวิธีเชิงวัตถุมากกว่า การโต้เถียงของเขากลับไปอย่างต่อเนื่องตามข้อเท็จจริงที่ว่าคำสั่ง Switch รวบรวมเป็น "ตารางกระโดด cpu" และเป็นตัวเลือกที่เร็วที่สุด (แม้ว่าในสิ่งอื่น ๆ ทีมของเราบอกว่าเราไม่สนใจความเร็ว) ฉันไม่ได้โต้แย้งเรื่องนี้ ... เพราะฉันไม่รู้ว่าเขากำลังพูดถึงเรื่องอะไร เขาพูดถูกมั้ย เขาเพิ่งพูดถึงลาของเขาหรือไม่? แค่พยายามเรียนรู้ที่นี่

17
คำสั่งเดียวถ้าบล็อก - วงเล็บหรือไม่? [ปิด]
ข้อไหนดีกว่า / ยอมรับโดยทั่วไปมากกว่า นี้: if(condition) { statement; } หรือ: if(condition) statement; ฉันมักจะชอบคนแรกเพราะฉันคิดว่ามันง่ายกว่าที่จะบอกสิ่งที่เป็นจริงในบล็อกถ้ามันช่วยให้ผู้อื่นจากการเพิ่มการจัดฟันในภายหลัง (หรือสร้างข้อผิดพลาดโดยลืม) และทำให้งบของคุณทั้งหมด เครื่องแบบแทนบางคนที่มีวงเล็บปีกกาและบางคนไม่มี อย่างไรก็ตามอันที่สองยังคงถูกต้องตามหลักไวยากรณ์และมีขนาดกะทัดรัดกว่าแน่นอน ฉันอยากรู้ว่าคนอื่นชอบแบบไหนมากกว่ากัน

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

30
คุณพิจารณาถึงหลักการที่ 1 ของการเขียนโปรแกรมอย่างไร
ฉันมักจะถามตัวเองเสมอว่า "หลักการแรกของสิ่งนี้คืออะไร" หลังจากฉันเรียนรู้สิ่งพื้นฐานของบางสิ่ง (เช่นการเขียนโปรแกรม) มันเป็นคำถามที่สร้างแรงบันดาลใจ IMO ที่สามารถบังคับให้คุณคิดถึงหลักการที่สำคัญที่สุดที่อยู่เบื้องหลังบางสิ่งโดยเฉพาะทักษะเช่นการเขียนโปรแกรม ดังนั้นคุณคิดว่าหลักการแรกของการเขียนโปรแกรมคืออะไร ฉันจะให้คำตอบของฉันด้านล่างเล็กน้อยในภายหลัง

3
Folder-by-type หรือ Folder-by-feature
ฉันใช้ประโยชน์จากคู่มือสไตล์ AngularJS ภายในคู่มือนี้มีรูปแบบที่เรียกว่าfolder-by-featureแทนที่จะเป็นfolder-by-typeและฉันอยากรู้จริง ๆ แล้วว่าอะไรคือวิธีที่ดีที่สุด (ในตัวอย่างนี้สำหรับ Java) สมมติว่าฉันมีแอปพลิเคชันที่ฉันสามารถดึงผู้ใช้และสัตว์เลี้ยงโดยใช้บริการตัวควบคุมที่เก็บและวัตถุโดเมนของหลักสูตร ด้วยรูปแบบโฟลเดอร์โดย -..... เรามีสองตัวเลือกสำหรับโครงสร้างบรรจุภัณฑ์ของเรา: 1. โฟลเดอร์ตามประเภท com.example ├── domain │ ├── User.java │ └── Pet.java ├── controllers │ ├── UserController.java │ └── PetController.java ├── repositories │ ├── UserRepository.java │ └── PetRepository.java ├── services │ ├── UserService.java │ └── PetService.java │ // and everything …

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