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

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

7
เกิดอะไรขึ้นกับข้อมูลทั่วไปของ Java? [ปิด]
ฉันเคยเห็นหลายครั้งในเว็บไซต์นี้โพสต์ที่ประณามการใช้งานจาวาทั่วไป ตอนนี้ฉันสามารถพูดได้อย่างตรงไปตรงมาว่าฉันไม่ได้มีปัญหาใด ๆ กับการใช้พวกเขา อย่างไรก็ตามฉันไม่ได้พยายามที่จะสร้างชั้นเรียนตัวเอง ดังนั้นปัญหาของคุณกับการสนับสนุนทั่วไปของ Java คืออะไร
49 java  generics 

10
ไม่“ ถ้า (0 == ค่า) …” ทำอันตรายมากกว่าดีไหม? [ปิด]
นี่เป็นหนึ่งในสิ่งที่ฉันเกลียดที่สุดเมื่อฉันเห็นมันในรหัสของคนอื่น ฉันรู้ว่ามันหมายถึงอะไรและทำไมบางคนทำเช่นนี้ ("จะเกิดอะไรขึ้นถ้าฉันใส่ '=' แทนโดยบังเอิญ?") สำหรับฉันมันเหมือนเป็นอย่างมากเมื่อเด็กคนหนึ่งเดินลงบันไดเพื่อนับก้าวออกมาดัง ๆ อย่างไรก็ตามนี่คือข้อโต้แย้งของฉันกับมัน: มันขัดขวางการไหลตามธรรมชาติของการอ่านรหัสโปรแกรม เรามนุษย์พูดว่า "ถ้าค่าเป็นศูนย์" และไม่ใช่ "ถ้าเป็นศูนย์คือค่า" คอมไพเลอร์สมัยใหม่เตือนคุณเมื่อคุณมีงานที่มอบหมายในสภาพของคุณหรือที่จริงแล้วถ้าเงื่อนไขของคุณประกอบด้วยเพียงการมอบหมายนั้นซึ่งใช่ดูน่าสงสัยอยู่แล้ว คุณไม่ควรลืมใส่ double '=' เมื่อคุณเปรียบเทียบค่าหากคุณเป็นโปรแกรมเมอร์ คุณอาจลืมใส่ "!" เช่นกัน เมื่อทดสอบความไม่เท่าเทียมกัน

11
เหตุใด /// บล็อกความคิดเห็นจึงมีความสำคัญ
มีคนเคยกล่าวว่าเราควรนำหน้าวิธีการทั้งหมดของเราด้วย /// <summary>บล็อกความคิดเห็น (C #) แต่ไม่ได้อธิบายว่าทำไม ฉันเริ่มใช้พวกเขาและพบว่าพวกเขาทำให้ฉันรำคาญเล็กน้อยดังนั้นหยุดใช้พวกเขายกเว้นห้องสมุดและวิธีการคงที่ พวกมันเทอะทะและฉันก็ลืมที่จะอัพเดทอยู่เสมอ มีเหตุผลที่ดีที่ใช้/// <summary>บล็อคความคิดเห็นในรหัสของคุณหรือไม่ ปกติฉันจะใช้//ความคิดเห็นตลอดเวลามันเป็นเพียง/// <summary>ช่วงเวลาที่ฉันสงสัย
49 c#  comments 

19
ให้บริการงานพื้นหลังในไซต์ขนาดใหญ่
เรากำลังจัดการกับปัญหาที่น่าสนใจใน StackOverflow เรามีงานเล็ก ๆ น้อย ๆ "ที่ต้องทำในไม่ช้า" ตัวอย่างกำลังอัปเดตรายการ "คำถามที่เกี่ยวข้อง" สิ่งที่เราทำในอดีตคือการแบกภาระงานเหล่านั้นลงบนหน้าโหลดของผู้ใช้บางคน เรื่องนี้ไม่เหมาะ แต่ก็ไม่ได้สังเกตเห็นได้ชัดเจนจริงๆ ตอนนี้ SO จึงผ่านเครื่องหมายคำถาม 1,000,000 รายการผู้ใช้ที่โชคร้ายเหล่านั้นเริ่มรู้สึก วิธีแก้ปัญหาตามธรรมชาติคือการผลักงานเหล่านี้เป็นพื้นหลัง มีสองวิธีในการทำสิ่งนี้ที่ฉันกำลังพิจารณา 1. ใน IIS เป็น Thread-Pool / Work-Queue ที่กำหนดเอง โดยพื้นฐานแล้วเราจะหมุนเธรดไม่กี่อัน (ไม่ใช่ThreadPoolเพื่อไม่รบกวน IIS) และให้พวกเขาให้บริการคอลเลกชันบางอย่างที่เรากำลังผลักให้Funcsทำงาน โปรใหญ่ที่นี่คือความเรียบง่าย เราไม่ต้องกังวลเกี่ยวกับการจัดการอะไรเลยและเราไม่จำเป็นต้องตรวจสอบให้แน่ใจว่าบริการจากภายนอกนั้นพร้อมแล้วที่จะตอบสนอง นอกจากนี้เรายังสามารถเข้าถึงรหัสทั่วไปของเราทั้งหมด คอนดิชั่นก็คือว่าเราไม่ควรใช้เธรดพื้นหลัง การคัดค้านที่ฉันรู้นั้นมีศูนย์กลางอยู่ที่ IIS ที่หิวโหย (ถ้าคุณใช้ ThreadPool) และเธรดที่สุ่มแบบสุ่ม (เนื่องจากการรีไซเคิล AppPool) เรามีโครงสร้างพื้นฐานที่มีอยู่เพื่อทำให้เธรดที่ตายแบบสุ่มไม่ใช่ประเด็น (เป็นไปได้ในการตรวจสอบงานที่ถูกทอดทิ้งโดยทั่วไป) และ จำกัด จำนวนเธรด (และการใช้เธรดที่ไม่ใช่ ThreadPool) …

12
เคยมีเหตุผลในการทำงานของวัตถุทั้งหมดในนวกรรมิกหรือไม่?
ให้ฉันนำหน้าสิ่งนี้โดยบอกว่านี่ไม่ใช่รหัสของฉันหรือรหัสเพื่อนร่วมงานของฉัน หลายปีที่ผ่านมาเมื่อ บริษัท ของเรามีขนาดเล็กลงเรามีโครงการบางอย่างที่เราต้องการทำโดยที่เราไม่มีกำลังการผลิต ตอนนี้ฉันไม่มีอะไรกับผู้รับเหมาช่วงหรือผู้รับเหมาทั่วไป แต่ codebase ที่พวกเขาผลิตนั้นเป็นจำนวนมากของ WTF ที่ถูกกล่าวว่ามันทำงาน (ส่วนใหญ่) ดังนั้นฉันคิดว่ามันอยู่ใน 10 อันดับแรกของโครงการเอาต์ซอร์ซที่ฉันเคยเห็น ในขณะที่ บริษัท ของเราเติบโตขึ้นเราได้พยายามพัฒนาบ้านให้มากขึ้น โปรเจ็กต์นี้ลงบนตักของฉันดังนั้นฉันได้ไปทำความสะอาดเพิ่มการทดสอบ ฯลฯ ฯลฯ มีรูปแบบเดียวที่ฉันเห็นซ้ำหลายครั้งและดูเหมือนว่าน่ากลัวอย่างมากที่ฉันสงสัยว่าอาจจะมีเหตุผลและฉันแค่ไม่เห็นมัน รูปแบบเป็นวัตถุที่ไม่มีวิธีการสาธารณะหรือสมาชิกเพียงแค่ตัวสร้างสาธารณะที่ทำงานของวัตถุทั้งหมด ตัวอย่างเช่น (รหัสอยู่ใน Java หากมีความสำคัญ แต่ฉันหวังว่านี่จะเป็นคำถามทั่วไปมากขึ้น): public class Foo { private int bar; private String baz; public Foo(File f) { execute(f); } private void execute(File f) { // FTP …

9
คลาสผู้จัดการสามารถเป็นสัญลักษณ์ของสถาปัตยกรรมที่ไม่ดีได้หรือไม่?
เมื่อเร็ว ๆ นี้ฉันเริ่มคิดว่าการมีคลาสผู้จัดการจำนวนมากในการออกแบบของคุณเป็นสิ่งที่ไม่ดี ความคิดนั้นไม่เพียงพอสำหรับฉันที่จะโต้แย้งที่น่าสนใจ แต่นี่คือประเด็นทั่วไปบางประการ: ฉันพบว่ามันยากมากสำหรับฉันที่จะเข้าใจระบบที่ต้องพึ่งพา "ผู้จัดการ" เป็นอย่างมาก นี่เป็นเพราะนอกเหนือจากองค์ประกอบของโปรแกรมที่เกิดขึ้นจริงคุณต้องเข้าใจวิธีการและเหตุผลที่จะใช้ผู้จัดการ ผู้จัดการหลายครั้งดูเหมือนว่าจะใช้เพื่อบรรเทาปัญหาในการออกแบบเช่นเมื่อโปรแกรมเมอร์ไม่สามารถหาวิธีที่จะทำให้โปรแกรม Just Work TMและต้องอาศัยคลาสผู้จัดการเพื่อให้ทุกอย่างทำงานได้อย่างถูกต้อง แน่นอนผู้จัดการได้ดี ตัวอย่างที่ชัดเจนคือโครงสร้างที่EventManagerฉันโปรดปรานตลอดกาล : P ประเด็นของฉันคือผู้จัดการดูเหมือนจะใช้เวลามากเกินไปและไม่มีเหตุผลที่ดีไปกว่าการปิดบังปัญหากับสถาปัตยกรรมของโปรแกรม คลาสผู้จัดการเป็นสัญลักษณ์ของสถาปัตยกรรมที่ไม่ดีจริง ๆ หรือไม่?

11
มีหนังสือมาตรฐานเกี่ยวกับรูปแบบการออกแบบหรือไม่? [ปิด]
ฉันสนใจที่จะเรียนรู้รูปแบบการออกแบบและต้องการที่จะรู้ว่าหนังสือชั้นบนสุดในการเรียนรู้เรื่องนี้คืออะไร มีหนังสือที่มีมาตรฐาน de-facto สำหรับอธิบายวิธีปฏิบัติที่ดีที่สุดวิธีการออกแบบและข้อมูลที่เป็นประโยชน์อื่น ๆ ในรูปแบบการออกแบบหรือไม่ หนังสือเล่มไหนที่ทำให้มันพิเศษ?

8
เราสามารถใช้ Java เพื่อการใช้งานเชิงพาณิชย์ได้หรือไม่?
Java คือใบอนุญาต GPL (อ้างอิงจากวิกิพีเดีย) ฉันไม่แน่ใจว่าสามารถใช้ในโครงการเชิงพาณิชย์ได้ ฉันมีเว็บไซต์ที่เขียนด้วยภาษาจาวาอยู่แล้วและฉันวางแผนที่จะใช้เพื่อการค้า มันผิดกฎหมายหรือเปล่า?
49 java  licensing  bcl 

2
ฉันควรใช้“ is” เป็นคำนำหน้าสำหรับตัวแปรบูลีนเสมอหรือไม่ [ปิด]
ฉันควรใช้isเป็นคำนำหน้าสำหรับตัวแปรบูลีนเสมอหรือไม่ สิ่งที่เกี่ยวกับ booleans ที่บ่งบอกถึงบางสิ่งบางอย่างในอดีต? ฉันควรจะเขียนisInitializedหรือwasInitialized? ฉันควรเขียนถึงคุณสมบัติIsManyMembersหรือHasManyMembersไม่? มีวิธีปฏิบัติที่ดีที่สุดหรือไม่? หรือฉันควรเขียนตามกฎภาษาอังกฤษ?

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

10
การแยกแอพพลิเคชั่นแบบเสาหินออกเป็นส่วนเล็ก ๆ หลาย ๆ อันช่วยป้องกันข้อผิดพลาดหรือไม่? [ปิด]
วิธีการถามนี้ก็คือ; ทำไมโปรแกรมมีแนวโน้มที่จะเป็นเสาหิน? ฉันกำลังคิดถึงบางสิ่งเช่นแพ็คเกจอนิเมชั่นเช่น Maya ซึ่งผู้คนใช้สำหรับเวิร์กโฟลว์ต่างๆ หากความสามารถในการเคลื่อนไหวและการสร้างแบบจำลองถูกแบ่งออกเป็นแอปพลิเคชันแยกต่างหากของตนเองและพัฒนาแยกต่างหากเมื่อไฟล์ถูกส่งผ่านระหว่างกันจะไม่สามารถดูแลรักษาได้ง่ายขึ้นหรือไม่

6
อะไรคือข้อเสียของการกำหนดคลาสเป็นคลาสย่อยของรายการของตัวเอง?
ในโครงการล่าสุดของฉันฉันกำหนดคลาสด้วยส่วนหัวต่อไปนี้: public class Node extends ArrayList<Node> { ... } อย่างไรก็ตามหลังจากพูดคุยกับอาจารย์ประจำ CS ของฉันเขากล่าวว่าในชั้นเรียนจะ "น่ากลัวสำหรับความทรงจำ" และ "การปฏิบัติที่ไม่ดี" ฉันไม่ได้พบคนแรกที่เป็นจริงโดยเฉพาะและที่สองที่จะเป็นอัตนัย เหตุผลของฉันสำหรับการใช้งานนี้คือฉันมีความคิดสำหรับวัตถุที่จำเป็นต้องกำหนดเป็นสิ่งที่อาจมีความลึกตามอำเภอใจซึ่งพฤติกรรมของอินสแตนซ์สามารถกำหนดได้ทั้งโดยการใช้งานที่กำหนดเองหรือพฤติกรรมของวัตถุหลายอย่างเช่น . สิ่งนี้จะช่วยให้การนามธรรมของวัตถุที่มีการใช้งานทางกายภาพจะประกอบด้วยองค์ประกอบย่อยหลายโต้ตอบ ในทางกลับกันฉันเห็นว่านี่อาจเป็นการปฏิบัติที่ไม่ดี แนวคิดของการกำหนดสิ่งที่เป็นรายการของตัวเองนั้นไม่ง่ายหรือสามารถนำไปใช้งานได้จริง มีเหตุผลที่ถูกต้องหรือไม่ทำไมฉันไม่ควรใช้รหัสนี้ในการพิจารณาการใช้งานของฉัน ¹หากฉันจำเป็นต้องอธิบายเรื่องนี้เพิ่มเติมฉันยินดีที่จะ; ฉันแค่พยายามทำให้คำถามนี้สั้นกระชับ

2
ไลบรารีส่วนหัวเท่านั้นมีประสิทธิภาพมากกว่าหรือไม่
สมมติฐาน ข้อดีอย่างหนึ่งของไลบรารีส่วนหัวเท่านั้นสำหรับ C ++ คือไม่จำเป็นต้องรวบรวมแยกต่างหาก ใน C และ C ++ inlineเหมาะสมเมื่อฟังก์ชันถูกกำหนดในไฟล์ส่วนหัว * ตามเนื้อผ้ามีการใช้รูปแบบ C, .c / .h โดยที่ส่วนหัวแสดงส่วนติดต่อสาธารณะที่น้อยที่สุดของหน่วยการแปล ในทำนองเดียวกัน. cpp / hpp คำถาม ไลบรารีส่วนหัวเท่านั้นโดยทั่วไปมีประสิทธิภาพมากขึ้น - เวลาในการประมวลผลและฉลาดกว่าเลย์เอาต์ดั้งเดิมหรือไม่? ถ้าเป็นเช่นนี้เป็นเพราะการอินไลน์อย่างกว้างขวางหรือการเพิ่มประสิทธิภาพอื่น ๆ ? * - การกำหนดฟังก์ชั่นในส่วนหัวช่วยให้คอมไพเลอร์สามารถเห็นการใช้งานในระหว่างการรวบรวมหน่วยการแปลใด ๆ และทำให้สามารถสร้างโค้ดอินไลน์ได้
48 c++  c  libraries 

4
จะทำอย่างไรกับปัญหาที่ถูกทอดทิ้งใน GitHub?
หากมีคนเปิดปัญหาใน GitHub แต่มีการขอข้อมูลเพิ่มเติมเพื่อทำซ้ำข้อผิดพลาดและไม่เคยได้รับขั้นตอนปกติคืออะไร ตัวอย่าง ที่นี่ผู้เขียนระบุว่า "nav แตก" ในขณะที่ฉันเชื่อว่าได้รับการแก้ไขฉันต้องการคำพูดจากผู้เขียนเพื่อให้แน่ใจว่าเรากำลังพูดถึงสิ่งเดียวกัน แต่บางครั้งผู้รายงานปัญหาก็หายไป มันเป็นวิธีปฏิบัติที่ดี / ทั่วไปในการตั้งวันที่หมดอายุสำหรับปัญหาที่ถูกทอดทิ้งหรือไม่? สิ่งที่ชอบเงื่อนไขเหล่านี้: มีการตั้งคำถามกับปัญหาเพื่อให้สามารถดีบักได้ ผ่านไปแล้ว 2-6 เดือนนับตั้งแต่คำถาม / ความคิดเห็นที่ยังไม่ได้ตอบล่าสุดจากทีม dev ข้อผิดพลาดไม่สามารถทำซ้ำได้ในขณะที่ปิดมัน (ไม่ว่าจะด้วยเหตุผลใดก็ตามพวกเขาอาจไม่สามารถทำซ้ำได้) คำเตือนจะออก 2 สัปดาห์ก่อนที่จะปิดมัน โครงการปกติทำอะไร? ฉันไม่พบสิ่งใดใน Google นอกจากนี้ฉันจะทำเอกสารนี้อย่างไร หมายเหตุง่ายๆใน README.md ให้รายละเอียดคะแนนด้านบนและความคิดเห็นในปัญหาอธิบายว่าเพราะเหตุใดจึงปิดตัวลงเพียงพอหรือไม่ หมายเหตุ: มันแตกต่างจากคำถามนี้เนื่องจากข้อผิดพลาดอาจยังเกี่ยวข้อง (หรือไม่) อย่างไรก็ตามมีข้อมูลไม่เพียงพอ

16
ภายใน for-loop ฉันควรย้ายเงื่อนไขการพักลงในช่องเงื่อนไขถ้าเป็นไปได้หรือไม่ [ปิด]
บางครั้งฉันต้องการลูปที่ต้องการพักเช่นนี้ for(int i=0;i<array.length;i++){ //some other code if(condition){ break; } } ฉันรู้สึกอึดอัดกับการเขียน if(condition){ break; } เพราะมันใช้รหัส 3 บรรทัด และฉันพบว่าลูปสามารถเขียนใหม่เป็น: ↓ for(int i=0;i<array.length && !condition;i++){ //some other code } ดังนั้นคำถามของฉันคือมันเป็นการดีหรือไม่ที่จะย้ายเงื่อนไขลงในฟิลด์เงื่อนไขเพื่อลดบรรทัดของรหัสถ้าเป็นไปได้?

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