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

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

1
Rebol เป็นภาษาโปรแกรมที่ใช้งานได้หรือไม่?
ฉันวิ่งเข้าไปในRebolและฉันก็สงสัยเกี่ยวกับมัน ฉันพบสคริปต์ต่อไปนี้จากที่นี่ : use [feed questions answers][ feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol questions: map-each entry feed/get-by-tag <entry> [ find/match entry/get <id> "http://stackoverflow.com/q/" ] answers: make block! length? questions foreach question questions [ question: load-xml/dom join http://stackoverflow.com/feeds/question/ question foreach entry next question/get-by-tag <entry> [append answers entry/tree] ] insert clear feed/find-element <entry> answers feed/flatten …

1
การใช้ '{}' ภายในรูปแบบสตริงถือว่าเป็น Pythonic หรือไม่
ฉันเพิ่งรู้ว่าคุณสามารถเขียน '{}{}'.format(string_a, string_b) แทน '{0}{1}'.format(string_a, string_b) ใน Python เช่นคุณสามารถละเว้นตัวเลขสำหรับพารามิเตอร์รูปแบบสตริงเมื่อคุณต้องการสิ่งที่จะสล็อตในหนึ่งโดยหนึ่งในการสั่งซื้อ สิ่งนี้ถือว่าเป็น Pythonic หรือไม่ หมายเหตุ: "Pythonic" เป็นคำที่ใช้กันทั่วไปในหมู่ Python โปรแกรมเมอร์เพื่อหมายถึงรหัส Python ภายในวัฒนธรรม Python มีความเห็นพ้องที่ชัดเจนเกี่ยวกับคำถามสไตล์โดยเฉพาะอย่างยิ่งสำหรับคำถามที่เฉพาะเจาะจงเช่นนี้เนื่องจากปรัชญาการออกแบบที่ชัดเจนของภาษาที่ว่า "ควรมีอย่างใดอย่างหนึ่งและดีกว่าเพียงวิธีเดียวเท่านั้นที่จะทำได้" นี่คือคำพูดที่มาจาก "The Zen of Python" ซึ่งเป็นชุดของคำพังเพยที่จะกำหนดนิยามของ "Pythonic" และรวมอยู่ในทุก ๆ การแจกจ่ายของ Python (ที่บรรทัดคำสั่งใด ๆ ของ Python interpreter ให้ป้อนimport thisเพื่อดู)

1
วิธีห้องสมุดคณิตศาสตร์ในภาษาโปรแกรมเขียนโปรแกรมของ Google
ฉันได้เขียนโปรแกรมใน google Golang และสนุกกับมันเนื่องจากความกะทัดรัด แต่ฉันคิดว่ามันน่าประหลาดใจที่เกือบทุกวิธีของห้องสมุดคณิตศาสตร์มาตรฐานสำหรับประเภทจุดลอย มีเหตุผลใดที่ทำให้วิธีการเหล่านี้ไม่มีอยู่จริงสำหรับ ints

6
คุณจะทดสอบเอนโค้ดเดอร์ได้อย่างไร
ฉันมีสิ่งนี้: public byte[] EncodeMyObject(MyObject obj) ฉันได้รับการทดสอบหน่วยเช่นนี้: byte[] expectedResults = new byte[3]{ 0x01, 0x02, 0xFF }; Assert.IsEqual(expectedResults, EncodeMyObject(myObject)); แก้ไข: สองวิธีที่ฉันเห็นเสนอคือ: 1) การใช้ค่าที่คาดไว้ของฮาร์ดโค้ดเช่นตัวอย่างด้านบน 2) การใช้ตัวถอดรหัสเพื่อถอดรหัสอาร์เรย์ไบต์ที่เข้ารหัสและเปรียบเทียบวัตถุอินพุต / เอาต์พุต ปัญหาที่ฉันเห็นด้วยวิธีที่ 1 คือมันเปราะมากและต้องใช้ค่าฮาร์ดโค้ดจำนวนมาก ปัญหาเกี่ยวกับวิธีที่ 2 คือการทดสอบตัวเข้ารหัสขึ้นอยู่กับตัวถอดรหัสทำงานอย่างถูกต้อง หากตัวเข้ารหัส / ตัวถอดรหัสแตกเท่ากัน (ในที่เดียวกัน) การทดสอบอาจทำให้เกิดผลบวกปลอม สิ่งเหล่านี้อาจเป็นวิธีเดียวในการทดสอบวิธีการนี้ หากเป็นเช่นนั้นก็ดี ฉันถามคำถามเพื่อดูว่ามีกลยุทธ์ที่ดีกว่าสำหรับการทดสอบประเภทนี้หรือไม่ ฉันไม่สามารถเปิดเผยข้อมูลภายในของโปรแกรมเปลี่ยนไฟล์ที่ฉันกำลังทำงานได้ ฉันถามโดยทั่วไปว่าคุณจะแก้ปัญหาประเภทนี้อย่างไรและฉันไม่รู้สึกว่าภายในมีความสำคัญ สมมติว่าวัตถุอินพุตที่กำหนดจะสร้างอาร์เรย์ไบต์เอาต์พุตเดียวกันเสมอ

2
ใครเป็นคนแรกที่ประกาศเกียรติคุณฟังก์ชันคำสั่งซื้อที่สูงขึ้นและ / หรือพลเมืองชั้นหนึ่ง?
ฉันเข้าใจมานานแล้วว่าก่อนที่ Haskell, O'Caml หรือ LISP หน้าที่การสั่งงานที่สูงขึ้นจะเป็นวิชาวิจัยทางวิชาการและในวิชาคณิตศาสตร์Schönfinkel (ในปี 1967) และ Haskell Curry (ในปี 1968) ได้ใช้เทคนิคเช่น currying แต่ ก่อนหน้านี้มีให้ในภาษาการเขียนโปรแกรมใด ๆ Scheme ตาม Wikipediaเป็นภาษาแรกที่แนะนำฟังก์ชั่นการสั่งซื้อที่สูงขึ้นอย่างเหมาะสมในฐานะพลเมืองชั้นหนึ่ง แต่มีใครบ้างที่เราสามารถให้ความคิดดั้งเดิมได้ บางทีโบสถ์อลองโซผู้คิดค้นแลมบ์ดาแคลคูลัสในทศวรรษ 1930? โดยเฉพาะอย่างยิ่งใครเป็นผู้นิยามคำนิยามต่อไปนี้ซึ่งฉันเห็นในการถอดความหลายเรื่องในหนังสือหลายเล่มและแหล่งข้อมูลออนไลน์ ฟังก์ชั่นจะถือว่าเป็นลำดับที่สูงขึ้นเมื่อใช้ฟังก์ชันอื่นเป็นอาร์กิวเมนต์หรือเมื่อส่งคืนฟังก์ชัน ฟังก์ชันใด ๆ ที่ไม่รับฟังก์ชั่นเป็นอาร์กิวเมนต์หรือเป็นชนิดส่งคืนจะเรียกว่าฟังก์ชันลำดับแรก

4
ฉันมีสิ่งประดิษฐ์ก่อนหน้านี้ (ซอฟต์แวร์ / กรอบ) ที่ฉันวางแผนที่จะใช้ในงานใหม่ของฉัน จะเกิดอะไรขึ้นกับลิขสิทธิ์ของฉันหากฉันปรับปรุงในระหว่างงาน
ฉันได้กรอกแบบฟอร์มมาตรฐานที่คุณแสดงรายการสิ่งประดิษฐ์ก่อนหน้าของคุณก่อนเริ่มงานใหม่ของคุณเพื่อให้นายจ้างทราบว่าคุณมีลิขสิทธิ์ตามกฎหมาย แต่ถ้าฉันต้องการใช้การประดิษฐ์นี้ (รหัสซอฟต์แวร์ / กรอบงาน) ในงานใหม่ของพวกเขาพวกเขาจะมีการร้องเรียนเรื่องลิขสิทธิ์หรือไม่ถ้าเช่นฉันเปลี่ยน / ปรับปรุงบางสิ่งบางอย่างในรหัสของฉันในขณะที่ทำงานกับพวกเขา ฉันเคยได้ยินอะไรบางอย่างที่เหมือนเป็นเจ้าของร่วมกัน สิ่งที่ชอบ: คุณจะเป็นเจ้าของสิ่งที่ทำมาก่อนและนายจ้างจะเป็นเจ้าของการปรับปรุงใด ๆ ที่คุณทำกับมันในขณะที่มีงานทำ ชนิดของที่ sucks และนำไปสร้างแรงจูงใจใด ๆ ที่คุณจะต้องทำปรับปรุงเกี่ยวกับผลิตภัณฑ์ของคุณตั้งแต่ครั้งเดียวที่ดีขึ้น, การปรับปรุงจะหายไป :( มีใครเคยผ่านสถานการณ์นี้มาก่อนและสามารถแบ่งปันแนวคิดบางอย่างเพื่อให้ฉันสามารถป้องกันรหัสของฉันได้บ้าง

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

2
ผลข้างเคียงใน“ ทุกคน” ของ Array หรือ“ ไม่ดี” บ้างหรือไม่?
ฉันถูกสอนมาตลอดว่าการมีผลข้างเคียงในifสภาพที่ไม่ดี ที่ฉันหมายถึงคือ; if (conditionThenHandle()) { // do effectively nothing } ... ตรงข้ามกับ; if (condition()) { handle(); } ... และฉันเข้าใจว่าและเพื่อนร่วมงานของฉันมีความสุขเพราะฉันไม่ได้ทำและเราทุกคนกลับบ้านเวลา 17:00 น. ในวันศุกร์และทุกคนมีวันหยุดสุดสัปดาห์ที่มีความสุข ตอนนี้ ECMAScript5 แนะนำวิธีการเช่นevery()และsome()เพื่อArrayและฉันพบว่าพวกเขามีประโยชน์มาก พวกมันสะอาดกว่าfor (;;;)ให้ขอบเขตกับคุณและทำให้องค์ประกอบเข้าถึงได้โดยตัวแปร แต่เมื่อตรวจสอบการป้อนข้อมูลผมมากขึ้นบ่อยกว่าไม่พบตัวเองโดยใช้every/ someอยู่ในสภาพที่จะตรวจสอบการป้อนข้อมูลแล้วใช้every/ some อีกครั้งในร่างกายการแปลงการป้อนข้อมูลในรูปแบบที่ใช้งานได้; if (input.every(function (that) { return typeof that === "number"; })) { input.every(function (that) { // Model.findById(that); etc } } …

1
จะหลีกเลี่ยงการทำซ้ำระหว่างตัวติดตามปัญหาของฉันและเอกสารข้อกำหนดโครงการได้อย่างไร
ฉันเคยทำงานให้กับ บริษัท ที่ปรึกษามืออาชีพและเราทำงานภายใต้เงื่อนไขสัญญาต่าง ๆ มากมาย เมื่อเราได้เวลาและโครงการวัสดุเราก็วิ่งไปกับ SCRUM และติดตามงานค้างในระบบติดตามปัญหาของเรา อย่างไรก็ตามส่วนใหญ่เราต้องส่งมอบภายใต้สัญญาราคาคงที่ สิ่งนี้จำเป็นต้องใช้เอกสารข้อกำหนดเป็นภาคผนวกของสัญญา ดังนั้นเรามักจะจบลงด้วยการนำแบทช์การนำเข้ารายการงาน (หรือแย่กว่านั้นการป้อนด้วยตนเอง) จากสเป็ค การเปลี่ยนแปลงคำสั่งซื้อใช้เวลานานมากเพื่อให้แน่ใจว่าทุกอย่างตรงกันโดยเฉพาะอย่างยิ่งในตอนท้ายของโครงการ มีวิธีการหรือเครื่องมือซอฟต์แวร์ออกมีที่ทำให้กระบวนการทั้งหมดแห้งหรือไม่ ฉันค้นหาเสร็จแล้วและฉันไม่ได้ใช้คำที่เหมาะสม เครือข่ายมืออาชีพส่วนใหญ่ของฉันไม่ทำงานราคาคงที่ ฉันจะเปิดให้: การเปลี่ยนบั๊กติดตามหรือซื้อปลั๊กอิน (ปัจจุบันใช้ FogBugz) ทำตามวิธีการพัฒนาที่แตกต่าง การเขียนซอฟต์แวร์เพื่อจัดการข้อมูลจำเพาะและอัปเดตตัวติดตามข้อผิดพลาดและเอกสารข้อมูลจำเพาะ (แต่ดูเหมือนว่าจะเป็นงานจำนวนมากเพื่อผลประโยชน์ที่น่าสงสัย) สุดท้ายนี้คือการแก้ปัญหาที่คุ้มค่าจริงๆหรือ มันมีค่าใช้จ่ายเราค่อนข้างน้อยในบางโครงการ แต่ในโครงการอื่น ๆ มันไม่ได้จบลงที่ส่งผลกระทบต่อเรา

1
ดีกว่าที่จะใช้ข้อผิดพลาด monad กับการตรวจสอบในฟังก์ชั่น monadic ของคุณหรือใช้ monad ของคุณเองด้วยการตรวจสอบโดยตรงในการผูกของคุณ?
ฉันสงสัยว่าการออกแบบที่ดีกว่าคืออะไรสำหรับการใช้งาน / การบำรุงรักษาและสิ่งที่ดีกว่าเท่าที่เหมาะสมกับชุมชน รับรูปแบบข้อมูล: type Name = String data Amount = Out | Some | Enough | Plenty deriving (Show, Eq) data Container = Container Name deriving (Show, Eq) data Category = Category Name deriving (Show, Eq) data Store = Store Name [Category] deriving (Show, Eq) data Item = Item …

2
การเรียนรู้ของเครื่องด้วยข้อมูลที่เป็นหมวดหมู่และต่อเนื่อง
คำถามนี้สามารถไปที่นี่หรืออาจดังนั้น ... สมมติว่าชุดข้อมูลการฝึกอบรมของคุณมีทั้งข้อมูลที่เป็นหมวดหมู่และต่อเนื่องเช่นการตั้งค่านี้: Animal, breed, sex, age, weight, blood_pressure, annual_cost cat, calico, M, 10, 15 , 100 , 100 cat, tabby, F, 5, 10 , 80 , 200 dog, beagle, M, 3, 30 , 90 , 200 dog, lab, F, 8, 75 , 80 , 100 และตัวแปรตามที่คาดการณ์ได้คือต้นทุนสัตวแพทย์ประจำปี ฉันสับสนเล็กน้อยเกี่ยวกับเทคนิคเฉพาะที่มีเพื่อจัดการกับชุดข้อมูลดังกล่าว วิธีการที่ใช้กันทั่วไปในการจัดการกับชุดข้อมูลที่มีการผสมผสานของข้อมูลต่อเนื่องและเด็ดขาดคืออะไร?

2
ข้อดีและข้อเสียของการสื่อสารระหว่างกระบวนการทำผ่านซ็อกเก็ตและหน่วยความจำที่ใช้ร่วมกันคืออะไร
ฉันเข้าใจว่าสองตัวเลือกอื่น ๆ อีกมากมายสำหรับการสื่อสารระหว่างกระบวนการสามารถ: แชร์หน่วยความจำ ซ็อกเก็ต จริงๆแล้วฉันเห็นตัวเลือกทั้งสองนี้ถูกเปิดเผยโดย Intellij Idea สำหรับการดีบักแอปพลิเคชัน Java ฉันต้องการทราบว่าข้อดีและข้อเสียของแต่ละวิธีคืออะไร

3
'ใช้' เหมาะสมหรือไม่ในบริบทที่ไม่มีอะไรทิ้ง?
ใน C # usingคำสั่งจะถูกใช้เพื่อกำจัดทรัพยากรอย่างไม่ถูกต้องโดยไม่ต้องรอการเก็บขยะ ตัวอย่างเช่นอาจใช้เพื่อ: กำจัดคำสั่งหรือการเชื่อมต่อ SQL ปิดสตรีมปล่อยแหล่งข้อมูลอ้างอิงเช่นไฟล์ องค์ประกอบ GDI + ฟรี เป็นต้น ฉันสังเกตเห็นว่าusingมีการใช้งานมากขึ้นในกรณีที่ไม่มีสิ่งใดที่จะกำจัด แต่ที่มันสะดวกกว่าสำหรับผู้โทรที่จะเขียนusingบล็อกแทนที่จะเป็นสองคำสั่งแยกกัน ตัวอย่าง: MiniProfilerเขียนโดยทีม Stack Overflow ใช้usingเพื่อแสดงถึงบล็อกในโปรไฟล์: using (profiler.Step("Name goes here")) { this.DoSomethingUseful(i - 1); } ทางเลือกหนึ่งที่จะมีสองช่วงตึก: var p = profiler.Start("Name goes here"); this.DoSomethingUseful(i - 1); profiler.Stop(p); อีกวิธีหนึ่งคือการใช้การกระทำ: profiler.Step("Name goes here", () => this.DoSomethingUseful(i - 1)); ASP.NET …

3
อะไรคือความท้าทายที่เกี่ยวข้องกับการพิมพ์ในการเขียนคอมไพเลอร์สำหรับภาษาที่พิมพ์แบบไดนามิก?
ในการพูดคุยครั้งนี้ Guido van Rossum กำลังพูดคุย (27:30) เกี่ยวกับความพยายามในการเขียนคอมไพเลอร์สำหรับรหัสไพ ธ อน กลับกลายเป็นว่ามันไม่ง่ายนักที่จะเขียนคอมไพเลอร์ที่รักษาคุณสมบัติการพิมพ์แบบไดนามิกที่ดีทั้งหมดและยังคงรักษาความถูกต้องทางความหมายของโปรแกรมของคุณเพื่อให้มันทำสิ่งเดียวกันจริง ๆ ไม่ว่าคุณจะทำอะไรแปลก ๆ เร็วกว่า อะไรคือความท้าทาย (ที่เป็นไปได้) ที่เกี่ยวข้องกับการพิมพ์ในการเขียนคอมไพเลอร์สำหรับภาษาที่พิมพ์แบบไดนามิกเช่น Python?

1
คนงานที่ไม่ปิดกั้น VS หลายคนที่ปิดกั้น
ถือว่ามีเซิร์ฟเวอร์ HTTP ซึ่งยอมรับการเชื่อมต่อแล้วจะได้อย่างใดรอให้ส่วนหัวจะถูกส่งอย่างเต็มที่ใน. ฉันสงสัยว่าเป็นวิธีที่ใช้กันมากที่สุดของการดำเนินการนั้นและสิ่งที่มีข้อดีและข้อเสียที่เหลือ ฉันคิดได้เฉพาะสิ่งเหล่านี้: คนงานที่ขวางกั้นหลายคนเก่งเพราะ: มันตอบสนองมากขึ้น ง่ายต่อการแนะนำการเชื่อมต่อใหม่ (คนงานรับพวกเขาเองมากกว่ารอคนนอกจนกว่าจะสามารถเพิ่มลงในรายการที่ทำข้อมูลให้ตรงกัน) การใช้งาน CPU จะทำยอดคงเหลือโดยอัตโนมัติ (โดยไม่ต้องใช้ความพยายามเพิ่มเติม) เมื่อจำนวนการเชื่อมต่อเพิ่มขึ้นและลดลง การใช้ CPU น้อยลง (เธรดที่ถูกบล็อกถูกนำออกจากลูปการดำเนินการและไม่ต้องการตรรกะใด ๆ สำหรับการกระโดดข้ามไคลเอนต์) ผู้ปฏิบัติงานที่ไม่บล็อกคนเดียวนั้นดีเพราะ: ใช้หน่วยความจำน้อยลง ลูกค้าที่ขี้เกียจน้อยกว่า (ซึ่งเชื่อมต่อกับเซิร์ฟเวอร์และส่งส่วนหัวอย่างช้าๆหรือไม่ส่งเลย) อย่างที่คุณอาจจะเห็นว่าในความคิดของฉันคนงานหลายหัวข้อดูเหมือนโซลูชันที่ดีขึ้นโดยรวม ปัญหาเดียวของมันคือการโจมตีเซิร์ฟเวอร์นั้นง่ายกว่า แก้ไข (การวิจัยเพิ่มเติม): ทรัพยากรบางอย่างที่ฉันพบบนเว็บ ( พันเธรดและการบล็อก I / O - วิธีเก่าในการเขียนเซิร์ฟเวอร์ Java คือใหม่อีกครั้ง (และดีกว่า)โดย Paul Tyma) คำแนะนำที่ว่าวิธีการบล็อกโดยทั่วไปดีกว่า ฉันยังไม่รู้จริงๆว่าจะจัดการกับการเชื่อมต่อปลอมได้อย่างไร PS ไม่แนะนำให้ใช้ไลบรารีหรือแอปพลิเคชันสำหรับงาน ฉันสนใจที่จะรู้ว่ามันใช้งานได้จริงหรืออาจทำงานได้ดีกว่าทำงาน PSS ฉันแบ่งลอจิกออกเป็นหลายส่วนและอันนี้จัดการได้เฉพาะการยอมรับส่วนหัว HTTP ไม่ประมวลผลพวกเขา

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