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

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

1
ทำไม Akka ถูกวางตลาดในฐานะปฏิกิริยา? นักแสดงนางแบบมีปฏิกิริยาหรือไม่?
เท่าที่ฉันเข้าใจโมเดล Actor และ Reactive Programming เป็นแนวคิดที่แยกจากกัน นักแสดงนางแบบดูเหมือนจะไม่ตอบสนองกับฉันโดยเนื้อแท้ อย่างไรก็ตามกรอบของ Akka ซึ่งเป็นการนำโมเดลของนักแสดงไปใช้นั้นถูกอธิบายว่าเป็นปฏิกิริยา: "ตรรกะของโปรแกรม Java และ Scala อาศัยอยู่ในวัตถุ Actor ที่มีน้ำหนักเบาซึ่งส่งและรับข้อความในรูปแบบที่ตอบโต้" "เรามีปฏิกิริยา" มันเป็นกรณีของการใช้คำผิดหรือพวกเขาจะถูกต้องสมบูรณ์? มีการนำโมเดลนักแสดง (เช่น Erlang) ไปทำปฏิกิริยาหรือไม่? การสร้างข้อความเป็นการตอบสนองต่อข้อความอื่น ๆ ที่ถือว่ามีปฏิกิริยาเหมือนกันหรือไม่? การอ่านที่เกี่ยวข้องบางส่วนที่มีวิธีการเปรียบเทียบ: StackOverflow: RX กับคิวการส่งข้อความเช่น rabbitmq หรือ zeromq? CS.SE: ฟังก์ชั่นการเขียนโปรแกรมปฏิกิริยาและรูปแบบของนักแสดงสัมพันธ์กันอย่างไร แลมบ์ดาสุดยอด: นักแสดงกับปฏิกิริยาที่เกิดขึ้น

7
การเรียกฐานข้อมูล mutliple นั้นสำคัญมากกับการโทรผ่านเครือข่ายสำหรับเว็บ API หรือไม่?
ที่หนึ่งในนายจ้างของฉันเราทำงานกับ REST (แต่ก็ใช้กับ SOAP) API ด้วย ลูกค้าซึ่งเป็น UI ของแอปพลิเคชันจะโทรผ่านเว็บ (LAN ในการปรับใช้การผลิตทั่วไป) ไปยัง API API จะทำการเรียกไปยังฐานข้อมูล ชุดรูปแบบหนึ่งที่เกิดขึ้นในการสนทนาของเราคือประสิทธิภาพ: บางคนในทีมเชื่อว่าคุณไม่ควรมีการเรียกฐานข้อมูลหลายครั้ง (โดยปกติจะอ่าน) จากการเรียก API เดียวเนื่องจากประสิทธิภาพ คุณควรปรับให้เหมาะสมเพื่อให้การเรียก API แต่ละครั้งมีการเรียกฐานข้อมูลเพียงหนึ่งครั้งเท่านั้น แต่นั่นสำคัญจริงๆเหรอ? พิจารณาว่า UI ต้องทำการเรียกเครือข่ายไปยัง API มันค่อนข้างใหญ่ (ลำดับความสำคัญเป็นมิลลิวินาที) ฐานข้อมูลได้รับการปรับให้เหมาะสมเพื่อเก็บสิ่งต่าง ๆ ในหน่วยความจำและดำเนินการอ่านอย่างรวดเร็ว (เช่น SQL Server โหลดและเก็บทุกอย่างไว้ใน RAM และใช้ RAM ฟรีของคุณเกือบทั้งหมดถ้าทำได้) TLDR: เป็นเรื่องสำคัญหรือไม่ที่จะต้องกังวลเกี่ยวกับการโทรฐานข้อมูลหลายครั้งเมื่อเราทำการโทรผ่านเครือข่ายผ่าน LAN หรือไม่? ถ้าเป็นเช่นนั้นทำไม เพื่อความชัดเจนฉันกำลังพูดถึงลำดับความสำคัญ - ฉันรู้ว่าขึ้นอยู่กับข้อมูลเฉพาะ …

5
มันหมายความว่าอย่างไรเมื่อเทคโนโลยีบางอย่างเป็น "มาตรฐาน"?
ฉันเริ่มเรียนรู้ Java EE 7 และฉันมักเจอคำว่า "มาตรฐาน" บ่อยครั้งและฉันก็ไม่เข้าใจว่ามันแปลว่าอะไร ตัวอย่างเช่นนี่คือใบเสนอราคาจากหนังสือเล่มนี้ : ตรงกันข้ามกับ SOAP และ WS- * stack ซึ่งขึ้นอยู่กับมาตรฐาน W3C REST ไม่มีมาตรฐานและเป็นเพียงรูปแบบของสถาปัตยกรรมที่มีหลักการออกแบบ แอปพลิเคชัน REST ใช้มาตรฐานอื่น ๆ มากมาย: HTTP, URI, URL ... ฉันมีความคิดเกี่ยวกับสิ่งที่อาจหมายถึง แต่ฉันไม่แน่ใจ คำอธิบายที่ดีที่สุดที่ฉันได้เจอคือความหมายจากที่นี่

2
การใช้หลักการของ Clean Code กับภาษาที่ใช้งานได้
ฉันกำลังอ่านโรเบิร์ตมาร์ตินรหัสสะอาด ฉันคิดว่ามันยอดเยี่ยมและเมื่อเขียนรหัส OO ฉันกำลังเรียนอยู่ในใจ โดยเฉพาะอย่างยิ่งฉันคิดว่าคำแนะนำของเขาในการใช้ฟังก์ชั่นเล็ก ๆ ที่มีชื่อที่มีความหมายทำให้โค้ดของฉันลื่นไหลได้อย่างราบรื่นมากขึ้น สรุปได้ดีที่สุดโดยคำพูดนี้: [W] e ต้องการให้สามารถอ่านโปรแกรมราวกับว่ามันเป็นชุดของย่อหน้า TO แต่ละอันจะอธิบายถึงระดับปัจจุบันของสิ่งที่เป็นนามธรรมและการอ้างอิงที่ตามมาถึงย่อหน้าในระดับถัดไป ( ทำความสะอาดรหัสหน้า 37: "TO วรรค" เป็นย่อหน้าที่เริ่มต้นด้วยประโยคที่เปล่งออกมาใน infinitive "ในการทำ X เราทำตามขั้นตอน Y และ Z" "เพื่อทำ Y เรา ... " ฯลฯ ) ตัวอย่างเช่น: หากต้องการ RenderPageWithSetupsAndTeardowns เราจะตรวจสอบว่าหน้าดังกล่าวเป็นหน้าทดสอบหรือไม่และหากเป็นเช่นนั้นเราได้รวมการตั้งค่าและการฉีกขาดไว้ด้วย ไม่ว่าในกรณีใดเราแสดงผลหน้าเว็บเป็น HTML ฉันยังเขียนรหัสการทำงานสำหรับงานของฉัน ตัวอย่างของมาร์ตินในหนังสืออ่านได้อย่างชัดเจนราวกับว่าเป็นชุดของย่อหน้าและชัดเจนมาก - แต่ฉันไม่แน่ใจว่า "การอ่านเหมือนชุดของย่อหน้า" เป็นคุณสมบัติที่พึงประสงค์สำหรับรหัสการทำงานที่มี . นำตัวอย่างออกจากไลบรารีมาตรฐาน Haskell : maximumBy …

1
เหตุใดจึงใช้วิธีการทางเวทมนตร์ใน C #
ใน C # ฉันเริ่มเห็นวิธีการมายากลเหล่านี้ทั้งหมดโผล่ขึ้นมาโดยไม่ต้องสำรองข้อมูลโดยอินเทอร์เฟซ ทำไมถึงถูกเลือก? ให้ฉันอธิบาย ก่อนหน้านี้ใน C # หากวัตถุใช้IEnumerableอินเตอร์เฟสมันจะforeachวนซ้ำโดยอัตโนมัติ นั่นทำให้รู้สึกถึงฉันเนื่องจากมีการสำรองข้อมูลโดยอินเทอร์เฟซและถ้าฉันต้องมีIteratorฟังก์ชันของตัวเองในชั้นเรียนที่ถูกทำซ้ำฉันสามารถทำได้โดยไม่ต้องกังวลว่ามันจะมีความหมายอย่างอื่นอย่างน่าอัศจรรย์ เห็นได้ชัดว่าตอนนี้ (ไม่แน่ใจว่าเมื่อใด) อินเตอร์เฟสเหล่านี้ไม่จำเป็นอีกต่อไป เพียงแค่ต้องมีการแปลงชื่อที่ถูกต้อง อีกตัวอย่างหนึ่งคือการทำให้ awaitable วัตถุใด ๆ โดยมีวิธีการตั้งชื่อตรง GetAwaiterที่มีคุณสมบัติเฉพาะไม่กี่ ทำไมไม่สร้างอินเทอร์เฟซอย่างที่พวกเขาทำกับIEnumerableหรือINotifyPropertyChangedสำรอง "เวทย์มนตร์" นี้ขึ้นมาแบบคงที่? รายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่ฉันหมายถึงที่นี่: http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/ อะไรคือข้อดีและข้อเสียของวิธีการเวทย์มนตร์และมีที่ไหนออนไลน์ที่ฉันสามารถหาอะไรเกี่ยวกับสาเหตุการตัดสินใจเหล่านี้?
16 c# 

2
ทำไมการสืบทอดการห่อหุ้มและ polymorphism จึงไม่ใช่เสาหลักของ OOP [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา อยู่มาวันหนึ่งฉันไปที่แชทสแต็คล้นล้นและเห็นวลีที่ระบุว่ามรดก incapsulation และ polymorphism เป็นเสาหลักของ OOP (ในแง่ที่ว่าพวกเขาเป็นพื้นฐานการก่อสร้างเพียงอย่างเดียว) นอกจากนี้ยังมีคำถามที่คล้ายกันที่ฉันถูกถามบ่อยมากในการสอบวิทยาลัยและการสัมภาษณ์งานและคำตอบที่ถูกต้องเสมอคือข้อความที่ออกเสียงในชื่อของคำถาม ("ใช่มรดกการห่อหุ้มและ polymorphism เป็นเสาหลักของ OOP ) แต่ในการแชทล้นมากเกินไปฉันถูกเยาะเย้ยอย่างรุนแรงผู้เข้าร่วมไม่เห็นด้วยอย่างยิ่งกับคำแถลงดังกล่าว ดังนั้นมีอะไรผิดปกติกับคำสั่งนี้ โปรแกรมเมอร์ดูเหมือนจะได้รับการฝึกฝนในสิ่งต่าง ๆ ในวิทยาลัยหลังโซเวียตและสหรัฐอเมริกาหรือไม่? การสืบทอดการห่อหุ้มและ polymorphism ไม่ถือเป็นเสาหลักของ OOP โดยโปรแกรมเมอร์ของสหรัฐฯ / อังกฤษหรือไม่?

4
เป็นความคิดที่ดีหรือไม่ที่จะรวมคำขอ HTTP หลายรายการเพื่อบันทึกแบนด์วิดท์
ฉันกำลังเตรียมแอปพลิเคชันหน้าเดียวซึ่งบางครั้งอาจใช้ผ่านการเชื่อมต่อมือถือที่ช้า บางส่วนของมันค่อนข้างหนักในแง่ของการร้องขอ API (การดึงทรัพยากรที่แตกต่างกันสิบประการสำหรับการแสดงผลหน้าจอใหม่) ตอนนี้เป็นความคิดที่ดีหรือไม่ที่จะรวมบริการเหล่านี้เข้ากับบริการที่ให้ข้อมูลที่จำเป็นทั้งหมด แต่ไม่เป็น "บริสุทธิ์" ในแง่ของหลักการ REST ใช่หรือไม่ มีการเพิ่มประสิทธิภาพที่สำคัญที่คาดหวังหรือไม่?
16 api  rest  http 

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

4
มีข้อเสียในการใช้ AggressiveInlining ในคุณสมบัติง่าย ๆ ?
ฉันพนันได้เลยว่าฉันจะตอบว่าตัวเองถ้าฉันรู้เพิ่มเติมเกี่ยวกับเครื่องมือในการวิเคราะห์พฤติกรรมของ C # / JIT แต่เนื่องจากฉันไม่ได้โปรดอดทนกับฉันถาม ฉันมีรหัสง่าย ๆ เช่นนี้: private SqlMetaData[] meta; [MethodImpl(MethodImplOptions.AggressiveInlining)] private SqlMetaData[] Meta { get { return this.meta; } } อย่างที่คุณเห็นฉันใส่ AggressiveInlining เพราะฉันรู้สึกว่ามันควรจะถูกแทรก ฉันคิด. ไม่มีการรับประกันว่า JIT จะเป็นแบบอินไลน์ ฉันผิดหรือเปล่า? การทำสิ่งนี้อาจส่งผลกระทบต่อประสิทธิภาพ / ความเสถียร / อะไรหรือไม่?

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

3
การสร้างรายได้จากซอฟต์แวร์ที่ไม่เลว [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันมีโครงการโอเพ่นซอร์สฟรีที่มีการดาวน์โหลดประมาณ 800K จนถึงปัจจุบัน ฉันได้รับการติดต่อจาก บริษัท สร้างรายได้เป็นครั้งคราวและปฏิเสธเพราะฉันไม่ต้องการให้มัลแวร์แถบเครื่องมือเชื่อมโยงกับซอฟต์แวร์ของฉัน ฉันสงสัยว่า แต่มีวิธีที่ไม่เลวในการสร้างรายได้จากซอฟต์แวร์หรือไม่ นี่คือตัวเลือกที่ฉันรู้จัก เพิ่มปุ่มบริจาค ฉันรู้สึกไม่สบายใจกับสิ่งนี้เพราะฉันไม่ต้องการ "การบริจาค" - ฉันจ่ายเงินค่อนข้างดี การบริจาคผู้ใช้อาจรู้สึกว่ามีสิทธิ์ได้รับการสนับสนุนเป็นต้น (ดูหัวข้อที่สองถึงสัญลักษณ์สุดท้าย) เพิ่มโฆษณาในแอปพลิเคชันของคุณ ในเว็บที่อาจยอมรับได้ แต่ในโปรแกรมเดสก์ท็อปมันดูง่อยอย่างไม่น่าเชื่อ ชาร์จจำนวนเล็กน้อยสำหรับการดาวน์โหลดแต่ละครั้ง รุ่นนี้ทำงานได้ดีในโลกมือถือ แต่ฉันสงสัยว่าจะไม่มีใครไปใช้บนเดสก์ท็อป มันไม่เข้ากันได้ดีกับโอเพ่นซอร์ส แต่ฉันคิดว่าฉันสามารถเรียกเก็บเงินจากไบนารีเท่านั้น (ผู้ใช้ส่วนใหญ่จะไม่ต้องวุ่นวายกับการรวบรวมแหล่งที่มา) ผู้คนอาจคาดหวังการสนับสนุนเป็นต้นหลังจากได้รับเงินอย่างชัดเจน (ดูหัวข้อย่อยถัดไป) ทำเงินจากการบริการ / ชุมชน / การสนับสนุนที่เกี่ยวข้องกับโปรแกรม นี่เป็นเส้นทางเดียวที่ฉันไม่ต้องการใช้แน่นอนฉันไม่ต้องการความยุ่งยากใด ๆ นอกเหนือจากการเข้ารหัส ฉันขอยืนยันกับคุณว่าโปรแกรมนี้เป็นโปรแกรมอันดับต้น ๆ (แม้ว่าจะง่าย) และฉันก็ไม่ได้ตระหนักถึงข้อผิดพลาดใด ๆ ในตอนนี้ (มีฟอรัมสนับสนุนและความคิดเห็นในบล็อกที่ผู้ใช้สามารถรายงานได้) นอกจากนี้ยังง่ายมากจัดทำเป็นเอกสารและสามารถค้นพบได้ดังนั้นฉันคิดว่าฉันมีกรณีที่ต้องจัดหา …

2
ฉันจะทำให้การก่อสร้างที่เป็นสากลมีประสิทธิภาพมากขึ้นได้อย่างไร
"การก่อสร้างสากล" เป็นคลาส wrapper สำหรับวัตถุตามลำดับที่ทำให้มันเป็นเส้นตรง (เงื่อนไขความมั่นคงที่แข็งแกร่งสำหรับวัตถุที่เกิดขึ้นพร้อมกัน) ตัวอย่างเช่นนี่คือโครงสร้างที่ปราศจากการรอที่ปรับใช้แล้วใน Java จาก [1] ซึ่งทึกทักว่ามีคิวรอที่ปราศจากการรอWFQซึ่งเป็นไปตามSequentialอินเทอร์เฟซ public interface WFQ<T> // "FIFO" iteration { int enqueue(T t); // returns the sequence number of t Iterable<T> iterateUntil(int max); // iterates until sequence max } public interface Sequential { // Apply an invocation (method + arguments) // and get …

5
อัลกอริทึมสำหรับช่วงการทับซ้อนของแบนราบ
ฉันกำลังมองหาวิธีที่ดีในการทำให้แบน (แยก) รายการของช่วงตัวเลขที่อาจทับซ้อนกัน ปัญหาคล้ายกันมากกับคำถามนี้: วิธีที่เร็วที่สุดในการแยกช่วงวันที่ซ้อนทับกันและอื่น ๆ อีกมากมาย อย่างไรก็ตามช่วงนั้นไม่ได้เป็นจำนวนเต็มเท่านั้นและฉันกำลังมองหาอัลกอริทึมที่เหมาะสมซึ่งสามารถนำไปใช้งานได้อย่างง่ายดายใน Javascript หรือ Python เป็นต้น ข้อมูลตัวอย่าง: ตัวอย่างการแก้ไข: ขออภัยหากนี่เป็นสิ่งที่ซ้ำกัน แต่ฉันยังหาวิธีแก้ปัญหาไม่ได้

6
เหตุใดเราจึงใส่ฟังก์ชันสมาชิกส่วนตัวไว้ในส่วนหัว
คำตอบสำหรับสาเหตุที่เราใส่ตัวแปรสมาชิกส่วนตัวในส่วนหัวของ C ++ คือขนาดของคลาสจะต้องเป็นที่รู้จักในจุดที่มีการประกาศอินสแตนซ์เพื่อให้คอมไพเลอร์สามารถสร้างรหัสที่เหมาะสมเกี่ยวกับการย้ายสแต็ก ทำไมเราต้องใส่สมาชิกส่วนบุคคลไว้ในหัว? แต่มีเหตุผลใดที่จะประกาศฟังก์ชั่นส่วนตัวในคำจำกัดความของชั้นเรียน? ทางเลือกจะเป็นสำนวน pimpl เป็นหลัก แต่ไม่มีทิศทางฟุ่มเฟือย คุณสมบัติภาษานี้เป็นมากกว่าข้อผิดพลาดในอดีตหรือไม่?
16 c++  history 

2
ลักษณะในสกาล่าหลีกเลี่ยง "ข้อผิดพลาดของเพชร" ได้อย่างไร
(หมายเหตุ: ฉันใช้ 'ข้อผิดพลาด' แทน 'ปัญหา' ในชื่อด้วยเหตุผลที่ชัดเจน .. ;)) ฉันได้อ่านพื้นฐานเกี่ยวกับลักษณะนิสัยในสกาล่า มันคล้ายกับอินเตอร์เฟสใน Java หรือ C # แต่อนุญาตให้มีการใช้งานเมธอดที่เป็นค่าเริ่มต้น ฉันสงสัยว่า: สิ่งนี้ไม่สามารถทำให้เกิดปัญหา "ปัญหาเพชร" ได้หรือไม่ซึ่งเป็นเหตุผลว่าทำไมหลาย ๆ ภาษาจึงหลีกเลี่ยงการสืบทอดหลายอย่างตั้งแต่แรก? ถ้าเป็นเช่นนั้นสกาล่าจัดการเรื่องนี้อย่างไร?

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