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

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

19
เหตุใด Microsoft จึงมีชื่อเสียงที่ไม่ดีเช่นนี้กับผู้ที่เกี่ยวข้องในโอเพ่นซอร์ส [ปิด]
มีเหตุการณ์พิเศษใดบ้างที่รับผิดชอบต่อชื่อเสียงที่ต่ำของ Microsoft (และ Bill Gates) ในสายตาของชุมชนโอเพ่นซอร์สหรือไม่? Microsoft ไม่ได้เป็นเพียง บริษัท เดียวเท่านั้น บริษัท เช่น Apple ได้ทำมากยิ่งเมื่อมันมาถึงข้อ จำกัด ในการซอฟแวร์ เหตุใด Microsoft จึงได้รับความเกลียดชังส่วนใหญ่จากชุมชนโอเพ่นซอร์ส

9
ชั้นเรียนที่มีวิธีการเดียว (สาธารณะ) เป็นปัญหาหรือไม่?
ฉันกำลังทำงานในโครงการซอฟต์แวร์ที่ทำการบีบอัดและจัดทำดัชนีวิดีโอคลิปการเฝ้าระวังวิดีโอ การบีบอัดทำงานโดยการแยกพื้นหลังและวัตถุเบื้องหน้าจากนั้นให้บันทึกพื้นหลังเป็นภาพนิ่งและส่วนหน้าเป็นสไปรต์ เมื่อเร็ว ๆ นี้ฉันได้เริ่มต้นการทบทวนบางคลาสที่ฉันออกแบบมาสำหรับโครงการ ฉันสังเกตเห็นว่ามีหลายคลาสที่มีวิธีการสาธารณะเพียงครั้งเดียวเท่านั้น บางส่วนของชั้นเรียนเหล่านี้คือ: VideoCompressor (ด้วยcompressวิธีการที่ใช้ในวิดีโออินพุตประเภทRawVideoและส่งกลับวิดีโอประเภทเอาต์พุตCompressedVideo) VideoSplitter (ด้วยsplitวิธีที่ใช้ในอินพุตวิดีโอประเภทRawVideoและส่งคืนเวกเตอร์ของวิดีโอเอาต์พุต 2 ชนิดแต่ละประเภทRawVideo) VideoIndexer (ด้วยindexวิธีที่ใช้ในวิดีโออินพุตประเภทRawVideoและส่งกลับดัชนีวิดีโอประเภทVideoIndex) ฉันพบตัวเอง instantiating แต่ละชั้นเรียนเพียงเพื่อให้สายเช่นVideoCompressor.compress(...), ,VideoSplitter.split(...)VideoIndexer.index(...) บนพื้นผิวฉันคิดว่าชื่อชั้นเรียนมีความหมายเพียงพอของฟังก์ชั่นที่ตั้งใจไว้และเป็นคำนามจริง ๆ ตามลําดับวิธีการของพวกเขายังเป็นคำกริยา ปัญหานี้จริงหรือ

4
ใช้สาธารณะขั้นสุดท้ายแทนที่จะได้รับส่วนตัว
ฉันเห็น POJO ที่ไม่เปลี่ยนรูปที่สุดเขียนแบบนี้: public class MyObject { private final String foo; private final int bar; public MyObject(String foo, int bar) { this.foo = foo; this.bar = bar; } public String getFoo() { return foo; } public int getBar() { return bar; } } แต่ฉันมักจะเขียนแบบนี้: public class MyObject { public final …

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

11
เหตุใด C ++ จึงมี 'พฤติกรรมที่ไม่ได้กำหนด' (UB) และภาษาอื่น ๆ เช่น C # หรือ Java ไม่
โพสต์สแต็คโอเวอร์โฟลว์นี้แสดงรายการสถานการณ์ที่ค่อนข้างครอบคลุมซึ่งข้อกำหนดภาษา C / C ++ ประกาศว่าเป็น 'พฤติกรรมที่ไม่ได้กำหนด' อย่างไรก็ตามฉันต้องการเข้าใจว่าทำไมภาษาสมัยใหม่อื่น ๆ เช่น C # หรือ Java ไม่มีแนวคิดของ 'พฤติกรรมที่ไม่ได้กำหนด' มันหมายความว่าผู้ออกแบบคอมไพเลอร์สามารถควบคุมสถานการณ์ที่เป็นไปได้ทั้งหมด (C # และ Java) หรือไม่ (C และ C ++)?

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

6
ใน microservice เป็นฐานข้อมูลเดียวหรือฐานข้อมูลเดียวสำหรับแต่ละบริการหรือไม่
ฉันเข้าใจว่าแต่ละบริการในสถาปัตยกรรม microservice ควรมีฐานข้อมูลของตัวเอง อย่างไรก็ตามด้วยการมีฐานข้อมูลของตัวเองมันหมายถึงการมีฐานข้อมูลอื่นในอินสแตนซ์ฐานข้อมูลเดียวกันหรือมีอินสแตนซ์ฐานข้อมูลอื่นอยู่ใช่หรือไม่ โดยสิ่งนี้ฉันไม่ได้หมายถึงการแชร์ฐานข้อมูลซึ่งไม่ใช่ข้อยกเว้น แต่เป็นอินสแตนซ์ฐานข้อมูล ตัวอย่างเช่นถ้าฉันใช้ AWS และมีบริการ 3 รายการฉันจะสร้างฐานข้อมูล 3 รายการสำหรับบริการแต่ละรายการในอินสแตนซ์ RDS เดียวหรือฉันจะสร้างอินสแตนซ์ RDS 3 รายการแต่ละรายการมีฐานข้อมูลซึ่งใช้บริการแต่ละบริการอย่างอิสระหรือไม่ หากการใช้ฐานข้อมูลหลาย ๆ ตัวบนอินสแตนซ์ RDS เดียวเป็นความคิดที่ดีกว่ามันจะเอาชนะวัตถุประสงค์ของการมีบริการที่เป็นอิสระเพราะ: ทรัพยากรของอินสแตนซ์ RDS จะถูกแชร์ระหว่างบริการต่างๆ Service A ซึ่งอาจมีการใช้งานฐานข้อมูลจำนวนมากในบางช่วงเวลาจะส่งผลกระทบต่อบริการ B ซึ่งใช้ฐานข้อมูลอื่น แต่ในอินสแตนซ์ RDS เดียวกันหรือไม่ บริการทั้งหมดจะขึ้นอยู่กับรุ่นฐานข้อมูลของอินสแตนซ์ RDS นั้น

5
มันเป็นความคิดที่ดีที่จะเรียกคำสั่งเชลล์จากภายใน C หรือไม่?
มีคำสั่ง unix shell ( udevadm info -q path -n /dev/ttyUSB2) ที่ฉันต้องการโทรจากโปรแกรม C อาจใช้เวลาประมาณหนึ่งสัปดาห์ในการต่อสู้ฉันสามารถนำไปใช้ใหม่ได้ด้วยตัวเอง แต่ฉันไม่ต้องการทำเช่นนั้น เป็นที่ยอมรับอย่างกว้างขวางในทางปฏิบัติที่ดีสำหรับฉันเพียงแค่โทรpopen("my_command", "r");หรือว่าจะนำเสนอปัญหาความปลอดภัยที่ยอมรับไม่ได้และส่งต่อปัญหาความเข้ากันได้? ฉันรู้สึกผิดที่จะทำสิ่งนี้ แต่ฉันไม่สามารถบอกได้ว่าทำไมมันถึงไม่ดี
50 c  unix  shell 

3
ระบบประเภทคืออะไร?
พื้นหลัง ฉันกำลังออกแบบภาษาเป็นโปรเจคต์ด้านข้าง ฉันมีแอสเซมเบลอร์ทำงานตัววิเคราะห์แบบคงที่และเครื่องเสมือนสำหรับมัน เนื่องจากฉันสามารถรวบรวมและเรียกใช้โปรแกรมที่ไม่น่าสนใจโดยใช้โครงสร้างพื้นฐานที่ฉันได้สร้างขึ้นฉันจึงคิดที่จะนำเสนอที่มหาวิทยาลัยของฉัน ในระหว่างการพูดคุยของฉันฉันบอกว่า VM ให้ระบบประเภทถูกถามว่า " ระบบประเภทของคุณคืออะไร " หลังจากตอบฉันได้รับเสียงหัวเราะจากผู้ที่ถามคำถาม ดังนั้นแม้ว่าฉันเกือบจะเสียชื่อเสียงในการถามคำถามนี้ แต่ฉันกลับไปที่โปรแกรมเมอร์ ความเข้าใจของฉัน ตามที่ฉันเข้าใจแล้วระบบประเภทถูกใช้เพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับเอนทิตีในโปรแกรมเพื่อให้รันไทม์หรือคอมไพเลอร์หรือเครื่องจักรอื่น ๆ รู้ว่าต้องทำอย่างไรกับสตริงของบิตที่ทำงาน พวกเขายังช่วยรักษาสัญญา - คอมไพเลอร์ (หรือตัววิเคราะห์โค้ดหรือรันไทม์หรือโปรแกรมอื่น ๆ ) สามารถตรวจสอบว่า ณ จุดใดก็ตามที่โปรแกรมทำงานกับค่าโปรแกรมเมอร์ที่คาดหวังว่ามันจะทำงาน ประเภทยังสามารถใช้เพื่อให้ข้อมูลกับโปรแกรมเมอร์มนุษย์เหล่านั้น ตัวอย่างเช่นฉันพบประกาศนี้: function sqrt(double n) -> double; มีประโยชน์มากกว่านี้ sqrt(n) ก่อนหน้านี้ให้ข้อมูลมากมาย: sqrtตัวระบุเป็นฟังก์ชั่นรับdoubleอินพุตหนึ่งตัวและสร้างอีกdoubleอันเป็นเอาต์พุต หลังบอกคุณว่ามันอาจเป็นฟังก์ชั่นการใช้พารามิเตอร์เดียว คำตอบของฉัน ดังนั้นหลังจากถูกถามว่า "ระบบประเภทของคุณคืออะไร" ฉันตอบดังนี้: ระบบประเภทเป็นแบบไดนามิก (ประเภทถูกกำหนดให้กับค่าไม่ใช่ตัวแปรที่เก็บไว้) แต่มีความแข็งแกร่งโดยไม่มีกฎบังคับที่น่าแปลกใจ (คุณไม่สามารถเพิ่มสตริงลงในจำนวนเต็มเนื่องจากมันเป็นประเภทที่เข้ากันไม่ได้ แต่คุณสามารถเพิ่มจำนวนเต็มเป็นจำนวนจุดลอยตัว) . ระบบชนิดถูกใช้โดย VM …

8
ทำไมโปรเซสเซอร์ Itanium จึงยากที่จะเขียนคอมไพเลอร์
โดยทั่วไประบุว่าสถาปัตยกรรม Itanium 64- บิตโปรเซสเซอร์ของ Intel ล้มเหลวเนื่องจากชุดคำสั่งการปฏิวัติEPICเป็นเรื่องยากมากในการเขียนคอมไพเลอร์ที่ดีซึ่งหมายถึงการขาดเครื่องมือสำหรับนักพัฒนาที่ดีสำหรับ IA64 ซึ่งหมายความว่าผู้พัฒนาโปรแกรมสร้างสถาปัตยกรรมขาด ดังนั้นจึงไม่มีใครต้องการใช้ฮาร์ดแวร์โดยไม่ต้องใช้ซอฟต์แวร์มากดังนั้นแพลตฟอร์มจึงล้มเหลวและทุกอย่างต้องการเล็บเกือกม้า คอมไพเลอร์ที่ดี แต่ทำไมคอมไพเลอร์จึงเป็นปัญหาทางเทคนิคที่ยาก? สำหรับฉันแล้วดูเหมือนว่าหากการขนานอย่างชัดเจนใน EPIC นั้นเป็นเรื่องยากสำหรับผู้ขายคอมไพเลอร์ที่จะใช้ ... ทำไมต้องวางภาระนั้นไว้กับพวกเขาตั้งแต่แรก มันไม่ได้เป็นวิธีแก้ปัญหาที่ดีและเข้าใจกันดีในปัญหานี้ไม่ได้มีอยู่แล้ว: วางภาระให้กับ Intel แทนและให้เป้าหมายที่เรียบง่ายแก่นักเขียนคอมไพเลอร์ Itanium ออกมาในปี 1997 โดยจุดนี้ระบบรหัสไบต์UCSD P-Codeอายุเกือบ 20 ปีเครื่อง Zอายุน้อยกว่าเล็กน้อยและ JVM เป็นดาวรุ่งพุ่งแรงใหม่ในโลกของภาษาโปรแกรม มีเหตุผลใดบ้างที่ Intel ไม่ได้ระบุภาษา "Itanium bytecode แบบง่าย" และให้เครื่องมือที่แปลง bytecode นี้เป็นรหัส EPIC ที่ได้รับการปรับปรุงโดยใช้ประโยชน์จากความเชี่ยวชาญของพวกเขาในฐานะผู้ออกแบบระบบตั้งแต่แรก?
50 history  compiler 

5
เราควรเปลี่ยนชื่อรหัสและข้อมูลเมื่อผู้ใช้ปลายทางเปลี่ยนชื่ออย่างไร?
เมื่อนานมาแล้วเราได้เพิ่มคุณสมบัติที่ผู้ใช้ของเราสามารถ "ยอมรับ" ภาพหลังจากที่เพิ่มเข้าไปในคิวเวิร์กโฟลว์ ปรากฎว่าเราใช้คำผิดและผู้ใช้ "อนุมัติ" รูปภาพ การเปลี่ยนยอมรับเป็นอนุมัติบนอินเทอร์เฟซของเรานั้นง่ายดายเพียงแค่เปลี่ยนคำเดียว แต่เราตั้งโปรแกรมเลเยอร์ทั้งหมดด้วยคำว่า "accept" จากชื่อคลาส CSS ไปจนถึงค่าฐานข้อมูล คลาส CSS ที่เปลี่ยนเป็นปุ่มสีเขียว: ".accepted"; เมธอดโมเดลที่ตรวจสอบและผูกแอ็ตทริบิวต์คลาสบนโหนด DOM: "isAccepted"; แอตทริบิวต์สถานะ JavaScript: อาร์เรย์ที่มี "unreviewed", "ยอมรับ" และ "เผยแพร่"; คอลัมน์สถานะ Mysql: ENUM ที่มี "ไม่ได้ตรวจสอบ", "ยอมรับ" และ "เผยแพร่"; ชื่อทดสอบ เป็นเรื่องเล็กน้อย (โดยเฉพาะเมื่อคุณมีการทดสอบ) เพื่อแทนที่การยอมรับส่วนใหญ่ที่จะอนุมัติ ยากกว่าเล็กน้อยคือการโยกย้ายข้อมูลโดยเฉพาะอย่างยิ่งเนื่องจากต้องมีการซิงโครไนซ์กับการปรับใช้ คดีเฉพาะเรื่องนี้เรียบง่าย แต่ฉันเคยเจอคดีที่คล้ายกัน แต่มีความซับซ้อนมากกว่าในระหว่างการทำงาน เมื่อไฟล์ถูกเปลี่ยนชื่อและการปรับใช้เกิดขึ้นในเซิร์ฟเวอร์หลายสิบเครื่องหรือเมื่อแคชพร็อกซี memcached และ mysql เกี่ยวข้อง การปล่อย "ยอมรับ" ในทุก …

15
เกือบทุกข้อบกพร่องที่รายงานเป็นข้อบกพร่องที่มีลำดับความสำคัญสูง [ปิด]
ฉันสังเกตเห็นรูปแบบในขณะที่ทำงานกับโครงการซอฟต์แวร์ต่าง ๆ : ข้อบกพร่องส่วนใหญ่ที่รายงานมีความสำคัญสูง / สูงมาก ฉันถามเพื่อนร่วมงานบางคนเกี่ยวกับสาเหตุที่อาจเกิดขึ้นและพวกเขากล่าวว่าหากข้อผิดพลาดไม่ได้ระดับความสำคัญนั้นมันหายากมากที่ Bug ได้รับความสนใจจากนักพัฒนาซึ่งทำให้รู้สึกจริง ดังนั้นฉันอยากรู้ว่าปัญหานี้เป็นเรื่องปกติหรือไม่ถ้าฉันโชคร้าย ฉันทำการค้นหาโดย Google อย่างรวดเร็วและพบว่าบางทีมใช้แนวทางการรายงานข้อผิดพลาดหรือมีทีม "Bug Triage" แยกต่างหาก หากคุณเผชิญและแก้ไขปัญหานี้อะไรคือวิธีการที่เหมาะกับคุณ คำถามนี้โดยเฉพาะเกี่ยวกับปัญหา "อัตราเงินเฟ้อสำคัญ": หากคุณเผชิญกับสถานการณ์และสิ่งที่ meassures ส่งผลให้เกิดปัญหานี้

11
ทำไม“ แยก GitHub” ออกมา? [ปิด]
ฉันเข้าใจว่าGitHubทำงานอย่างไร แต่สิ่งหนึ่งที่ฉันสับสนคือทำไมเกือบทุกโครงการOSSจึงมีลิงก์ "แยกฉันบน GitHub" ในหน้าแรกของพวกเขา ตัวอย่างเช่น, http://jqtjs.com/ , http://www.daviddurman.com/flexi-color-picker/และอื่น ๆ ทำไมสิ่งนี้จึงเป็นเรื่องธรรมดา พวกเขาต้องการ / ต้องการการตรวจสอบความถูกต้องรหัสตรวจสอบความปลอดภัย / ปรับปรุงประสิทธิภาพที่พวกเขาอาจไม่รู้วิธีการทำ? มันหมายถึงการแสดงให้เห็นว่านี่เป็นโครงการความร่วมมือ - คุณยินดีที่จะเพิ่มการปรับปรุง? พวกเขาทำงานให้กับ GitHub หรือต้องการส่งเสริมการบริการของพวกเขา? ผิดปกติฉันไม่คิดว่าจะเห็นโลโก้"Fork project on Bitbucket " ปฏิกิริยาแรกของฉันต่อโลโก้นั้นคือโครงการอาจต้องมีการแก้ไข (แยก) เพื่อรวมเข้ากับสิ่งที่มีประโยชน์ - หรือว่าพวกเขากำลังสนับสนุน codebase ที่อยู่อย่างกระจัดกระจาย แต่ฉันไม่คิดว่าเป็นเจตนา

6
ทำการทดสอบ 65.000.000.000 ที่จะเรียกใช้
ฉันถูกถามเกี่ยวกับวิธีเรียกใช้ชุดทดสอบ 65.000.000.000 และฉันสงสัยว่าเป็นเรื่องปกติหรือไม่ที่จะมีโครงการที่มีการทดสอบจำนวนมาก คุณเคยทำงานในโครงการที่มีคุณสมบัตินี้หรือไม่?

3
ข้อดีของวัตถุสหายของ Scala เทียบกับวิธีการคงที่คืออะไร?
Scala ไม่มีคำหลักคงที่แต่แทนที่จะมีฟังก์ชั่นที่คล้ายกันผ่านวัตถุสหาย เบื้องหลังของคู่หูนั้นถูกรวบรวมไว้ในคลาสที่มีวิธีการคงที่ดังนั้นทั้งหมดนี้จึงเป็นน้ำตาลซินแทคติค ข้อดีของตัวเลือกการออกแบบนี้คืออะไร ข้อเสีย? ภาษาอื่น ๆ มีโครงสร้างที่คล้ายกันหรือไม่?
50 scala 

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