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

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

4
เมื่อใดจึงจะใช้ Parser Combinator เมื่อใดจึงจะใช้ตัวแยกวิเคราะห์
ฉันได้ดำน้ำลึกเข้าไปในโลกของ parsers เมื่อเร็ว ๆ นี้ต้องการที่จะสร้างภาษาการเขียนโปรแกรมของตัวเอง อย่างไรก็ตามฉันพบว่ามีวิธีการเขียนตัวแยกวิเคราะห์ที่แตกต่างกันสองวิธี: Parser Generators และ Parser Combinators น่าสนใจฉันไม่สามารถค้นหาทรัพยากรใด ๆ ที่อธิบายในกรณีที่วิธีใดดีกว่า แต่ทรัพยากรจำนวนมาก (และคน) ผมสอบถามเกี่ยวกับเรื่องไม่ทราบว่าของวิธีการอื่น ๆ เพียง แต่อธิบายของพวกเขาวิธีการเป็นวิธีการและไม่ได้กล่าวถึงอื่น ๆ ที่ทั้งหมด: หนังสือมังกรที่มีชื่อเสียงจะเข้าสู่ lexing / สแกนและกล่าวถึง (ฉ) lex แต่ไม่ได้พูดถึงตัวแยกวิเคราะห์ combinators ที่ทั้งหมด รูปแบบการติดตั้งภาษานั้นขึ้นอยู่กับ ANTLR Parser Generator ที่สร้างขึ้นใน Java และไม่ได้กล่าวถึง Parser Combinators เลย บทแนะนำการใช้ Parsecใน Parsec ซึ่งเป็น Parser Combinator ใน Haskell ไม่ได้กล่าวถึง …

7
RESTFul: การดำเนินการเปลี่ยนสถานะ
ฉันกำลังวางแผนที่จะสร้าง RESTfull API แต่มีคำถามสถาปัตยกรรมที่สร้างปัญหาในหัวของฉัน การเพิ่มตรรกะธุรกิจแบ็กเอนด์ให้กับลูกค้าเป็นตัวเลือกที่ฉันต้องการหลีกเลี่ยงเนื่องจากการอัปเดตแพลตฟอร์มไคลเอนต์หลายแห่งนั้นยากที่จะรักษาในเวลาจริงเมื่อตรรกะธุรกิจสามารถเปลี่ยนแปลงได้อย่างรวดเร็ว ช่วยบอกว่าเรามีบทความเป็นทรัพยากร (api / บทความ) เราควรใช้การดำเนินการเช่นเผยแพร่, ไม่เผยแพร่, เปิดใช้งานหรือปิดการใช้งานและอื่น ๆ แต่พยายามที่จะทำให้มันง่ายที่สุด? 1) เราควรใช้ api / article / {id} / {action} เนื่องจากตรรกะส่วนแบ็คเอนด์จำนวนมากสามารถเกิดขึ้นที่นั่นได้เช่นการผลักไปยังสถานที่ห่างไกลหรือเปลี่ยนคุณสมบัติหลายอย่าง อาจเป็นสิ่งที่ยากที่สุดที่นี่คือเราจำเป็นต้องส่งข้อมูลบทความทั้งหมดกลับไปที่ API เพื่ออัปเดตและไม่สามารถใช้งานได้หลายผู้ใช้ ตัวอย่างเช่นผู้แก้ไขสามารถส่งข้อมูลที่เก่ากว่า 5 วินาทีและเขียนทับการแก้ไขที่นักข่าวคนอื่นเพิ่งทำเมื่อ 2 วินาทีที่ผ่านมาและไม่มีทางที่ฉันจะอธิบายให้ลูกค้าฟังได้เนื่องจากผู้เผยแพร่บทความไม่ได้เชื่อมต่อกับการปรับปรุงเนื้อหา 2) การสร้างทรัพยากรใหม่อาจเป็นตัวเลือก api / article- {action} / id แต่จากนั้นทรัพยากรที่ส่งคืนจะไม่เป็น article- {action} แต่บทความที่ฉันไม่แน่ใจว่าเหมาะสมหรือไม่ นอกจากนี้ในบทความคลาสโค้ดฝั่งเซิร์ฟเวอร์ก็จัดการ actuall บนทรัพยากรทั้งสองและฉันไม่แน่ใจว่าสิ่งนี้ขัดกับแนวคิด RESTfull หรือไม่ ข้อเสนอแนะใด …
59 api  rest 

12
นี่เป็นกรณีการใช้งานที่ดีสำหรับ goto ใน C หรือไม่?
ฉันลังเลที่จะถามสิ่งนี้เพราะฉันไม่ต้องการที่จะ "เรียกร้องการโต้วาทีการโต้เถียงหรือการอภิปรายเพิ่มเติม" แต่ฉันยังใหม่กับ C และต้องการที่จะได้รับข้อมูลเชิงลึกมากขึ้นเกี่ยวกับรูปแบบทั่วไปที่ใช้ในภาษา ฉันเพิ่งได้ยินความไม่พอใจgotoคำสั่งบางอย่างแต่เมื่อเร็ว ๆ นี้ฉันก็พบว่ามีกรณีการใช้งานที่ดีสำหรับมัน รหัสเช่นนี้: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, …

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

3
หาก GitHub โต้ตอบกับ Git และ Git ได้รับอนุญาตภายใต้ GPLv2 GitHub จะไม่เป็นโอเพนซอร์สหรือไม่
เนื่องจาก Git ได้รับอนุญาตภายใต้ GPLv2 และเพื่อความเข้าใจของฉัน GitHub โต้ตอบกับ Git ฐานข้อมูล GitHub ทั้งหมดไม่ควรเปิดในแหล่งลิขสิทธิ์ GPL หรือไม่
58 licensing  git  gpl  github 

6
เหตุใดหน่วยความจำแคช CPU จึงเร็ว
อะไรทำให้หน่วยความจำแคช CPU เร็วกว่าหน่วยความจำหลักมาก ฉันเห็นประโยชน์บางอย่างในระบบแคชแบบทำเป็นชั้น ทำให้รู้สึกว่าแคชที่เล็กลงนั้นเร็วกว่าการค้นหา แต่ต้องมีมากกว่านี้
58 memory  caching 

5
เมื่อใดที่ไม่ควรใช้นักแสดงใน akka / erlang
ฉันทำงานกับ akka มา 7-8 เดือนแล้วทุกวัน เมื่อฉันเริ่มฉันจะทำงานกับแอพพลิเคชั่นและสังเกตว่านักแสดงจะถูกใช้โดยทั่วไปทุกครั้งที่อยู่ในระบบของนักแสดงเพื่อสื่อสารระหว่างวัตถุส่วนใหญ่ ดังนั้นฉันจึงทำแบบเดียวกัน - หมุนนักแสดงคนอื่นให้กับ x / y / z สำหรับฉันดูเหมือนว่านี่อาจเป็นการพิจารณาที่ไม่เจาะจงเกินไปเพิ่มความซับซ้อนในที่ที่ไม่ต้องการ - แต่ฉันไม่สามารถหาการอภิปรายว่าควรใช้นักแสดงกับซิงโครนัสธรรมดาหรือแม้แต่ async ตรรกะผ่านฟิวเจอร์ส ฉันเริ่มไตร่ตรองท่าทางของฉันหลังจากเพื่อนร่วมงานของฉันพูดถึงสิ่งที่คล้ายกัน ฉันรู้หลายกรณีเมื่อเร็ว ๆ นี้ซึ่งฉันได้ไตร่ตรองงานแล้วหลีกเลี่ยงการสร้างนักแสดงคนอื่นเพราะฉันสามารถบรรลุผลลัพธ์เดียวกันได้อย่างปลอดภัยในการใช้งานที่ไม่เปลี่ยนรูป - เช่นสิ่งที่ต้องการรับค่าการกำหนดค่าจาก db หรือไฟล์ที่คุณเข้าถึงไม่บ่อยนัก รอผลคือกรณีการใช้งานจริง โดยเฉพาะอย่างยิ่งสำหรับฉันดูเหมือนว่ากรณีใด ๆ ที่คุณเล่นกับรัฐที่ไม่เปลี่ยนรูปนักแสดงสร้างความซับซ้อนและปริมาณงานที่ จำกัด - ฟังก์ชั่นที่บริสุทธิ์ในวัตถุเช่นสามารถเรียกได้พร้อมกันโดยไม่มีความเสี่ยงในระดับเดียวกัน นักแสดงสามารถดำเนินการได้ทีละข้อความเท่านั้น ข้อควรพิจารณาอื่นคือคุณจะต้องรอเธรดถ้าคุณต้องรอผลจนกว่าคุณจะเริ่มใช้ฟิวเจอร์ส แต่กรณีที่คุณไม่ต้องกังวลเกี่ยวกับการส่งข้อความ async หรือมาตราส่วนดูเหมือนว่าอาจจะเกินจ้างนักแสดง ดังนั้นคำถามของฉันคือ - มีเวลาไม่ดีที่จะใช้นักแสดงหรือไม่? ฉันอยากรู้ว่า erlang มีลักษณะอย่างไรและจะต้องการข้อมูลเชิงลึกของผู้อื่นอย่างแท้จริง หรือถ้ามีหลักการบางอย่างที่นักแสดงใช้

4
ควรใช้คำหลัก const แบบใดใน C เพื่อหาตัวแปรเมื่อใดและเพื่ออะไร
ในขณะที่รับรหัสของฉันได้รับการตรวจสอบที่นี่ปัญหาการใช้constคำหลักเกิดขึ้น ฉันเข้าใจว่ามันใช้สำหรับการใช้งานพฤติกรรมอ่านอย่างเดียวกับตัวแปร ฉันสับสนเกี่ยวกับสถานการณ์ต่าง ๆ ว่าจะมีประโยชน์เมื่อใด ควรใช้เพื่อความชัดเจนในฟังก์ชั่นต้นแบบหรือไม่ ควรใช้เป็นมาตรการรักษาความปลอดภัยระหว่างการพัฒนารหัสหรือไม่ มันควรจะใช้ในขอบเขตของฟังก์ชั่นต่าง ๆ เพื่อประกาศค่าคงที่แบบรันไทม์หรือไม่? ควรจะใช้เลยหรือไม่? คำถามเหล่านี้เป็นเพียงตัวอย่างของความสับสนที่ฉันเผชิญ ความสับสนทั่วไปคือ ควรconstใช้คำหลักในการเขียนโปรแกรม C เมื่อใด สิทธิประโยชน์หลายประเภทที่สามารถได้รับจากการใช้คำหลักนี้ใน C คืออะไร? มีข้อเสียของการใช้constคำหลักหรือไม่ มีการชี้ว่าคำถามนี้อาจกว้างเกินไปเนื่องจากคำถามเหล่านี้มีรายละเอียดตามคำถามของฉัน ฉันแค่อยากจะชี้แจงว่าคำถามเหล่านี้เป็นเพียงเพื่อชี้แจงความสับสนเกี่ยวกับคำถามหลัก ควรใช้คำหลัก const แบบใดใน C เพื่อหาตัวแปรเมื่อใดและเพื่ออะไร นอกจากนี้ยังสามารถใช้ถ้อยคำใหม่เป็น การใช้constคำหลักที่เหมาะสมใน C` ด้วยข้อดีข้อเสียของสิ่งเดียวกัน

10
เหตุใดโปรแกรมจึงใช้การปิด
หลังจากอ่านโพสต์มากมายที่อธิบายการปิดที่นี่ฉันยังขาดแนวคิดหลัก: ทำไมต้องเขียนการปิด โปรแกรมเมอร์คนใดที่จะทำหน้าที่เฉพาะเจาะจงซึ่งอาจได้รับผลงานที่ดีที่สุดโดยการปิดงาน? ตัวอย่างของการปิดใน Swift เป็นการเข้าถึงของ NSUrl และการใช้ Reverse Geocoder นี่คือตัวอย่างหนึ่ง น่าเสียดายที่หลักสูตรเหล่านั้นเพิ่งจะปิดตัวลง พวกเขาไม่ได้อธิบายว่าทำไมการเขียนโค้ดจึงเป็นการปิด ตัวอย่างของปัญหาการเขียนโปรแกรมในโลกแห่งความจริงที่อาจทำให้สมองของฉันพูดว่า "อ้าฉันควรเขียนเรื่องนี้ให้จบ" จะให้ข้อมูลมากกว่าการอภิปรายเชิงทฤษฎี ไม่มีการขาดแคลนของการอภิปรายทางทฤษฎีที่มีอยู่ในเว็บไซต์นี้

4
การมีงานด้านเทคนิคที่มีค่าตอบแทนสูงหมายความว่าคุณจะไม่ได้รับรหัสอีกต่อไปหรือไม่ [ปิด]
ฉันทำงานใน บริษัท ขนาดใหญ่ที่มีคนช่างเทคนิคตกอยู่ในกลุ่มเหล่านี้: นักพัฒนาในทีมต่อสู้ที่พัฒนาสำหรับผลิตภัณฑ์เดียวและอาจจะทำงานร่วมกับทีมงานอื่น ๆ ที่เกี่ยวข้องอย่างใกล้ชิดกับสินค้า สถาปนิกที่มีมากขึ้นของผู้ให้คำปรึกษาในหลายทีม (5-6) และพยายามที่จะรับรู้ commonalities ระหว่างความพยายามของทีมงานที่สามารถแยกออกเป็นห้องสมุด (สถาปนิกไม่ได้เขียนรหัสห้องสมุดอย่างไร) สถาปนิกรายนี้ยังเข้าร่วมการประชุมหลายครั้งกับฝ่ายบริหารและพยายามกำหนดทิศทางทางเทคนิค ใน บริษัท ของฉันบทบาทของสถาปนิกคือที่คนทางเทคนิคส่วนใหญ่เข้ามาเป็นขั้นตอนต่อไปในอาชีพของพวกเขา คำถามของฉันคือ: บริษัท ส่วนใหญ่ทำงานในลักษณะที่บุคลากรด้านเทคนิคที่มีรายได้สูงที่สุดจะถูกลบออกจากการเขียนรหัสหรือไม่ นี่เป็นแนวโน้มตามธรรมชาติสำหรับอาชีพนักพัฒนาหรือไม่? นักพัฒนาสามารถมีได้ทั้งหมด (รหัสและตั้งค่าทิศทาง)

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

7
โปรแกรมเมอร์มีความสำคัญแค่ไหนที่จะรู้วิธีการใช้อัลกอริทึม QuickSort / MergeSort จากหน่วยความจำ [ปิด]
ฉันกำลังตรวจสอบบันทึกย่อของฉันและสะดุดกับการใช้อัลกอริทึมการเรียงลำดับที่แตกต่างกัน ในขณะที่ฉันพยายามทำความเข้าใจการใช้ QuickSort และ MergeSort มันเกิดขึ้นกับฉันว่าแม้ว่าฉันจะเขียนโปรแกรมเพื่อการใช้ชีวิตและคิดว่าตัวเองเหมาะสมกับสิ่งที่ฉันทำฉันไม่มีหน่วยความจำภาพถ่ายหรือสมองที่แท้จริง พึ่งพาบันทึกของฉัน ทั้งหมดที่ฉันจำได้คืออัลกอริธึมบางส่วนนั้นเสถียรและบางตัวไม่ บางคนใช้เวลา O (nlog (n)) หรือ O (n ^ 2) ให้เสร็จ บางคนใช้หน่วยความจำมากกว่าคนอื่น ... ฉันรู้สึกว่าฉันไม่สมควรได้รับงานประเภทนี้หากไม่ใช่เพราะตำแหน่งของฉันไม่ต้องการให้ฉันใช้อัลกอริทึมการเรียงลำดับอื่นนอกเหนือจากที่พบใน API มาตรฐาน ฉันหมายถึงคุณมีกี่คนที่มีตำแหน่งการเขียนโปรแกรมที่จำเป็นจริง ๆ ที่คุณสามารถจดจำหรือคิดสิ่งเหล่านี้ด้วยตัวเอง
58 algorithms 

8
จะใช้รหัสสถานะ HTTP 404 ใน API เมื่อใด
ฉันทำงานในโครงการและหลังจากโต้เถียงกับคนที่ทำงานเป็นเวลานานกว่าหนึ่งชั่วโมง ฉันตัดสินใจที่จะรู้ว่าคนในการแลกเปลี่ยนสแต็คอาจพูดอะไร เรากำลังเขียน API สำหรับระบบมีแบบสอบถามที่ควรส่งทรีขององค์กรหรือต้นไม้เป้าหมาย โครงสร้างขององค์กรเป็นองค์กรที่มีผู้ใช้อยู่กล่าวอีกนัยหนึ่งต้นไม้นี้ควรมีอยู่เสมอ ในองค์กรต้นไม้แห่งเป้าหมายควรมีอยู่เสมอ (นั่นคือจุดเริ่มต้นของการโต้แย้ง) ในกรณีที่ไม่มีต้นไม้เพื่อนร่วมงานของฉันตัดสินใจว่ามันจะถูกต้องที่จะตอบการตอบกลับด้วยรหัสสถานะ 200 จากนั้นก็เริ่มขอให้ฉันแก้ไขรหัสของฉันเพราะแอปพลิเคชันล้มลงเมื่อไม่มีต้นไม้ ฉันจะพยายามทำให้เปลวไฟและความโกรธเคืองน้อยลง ฉันแนะนำให้เพิ่มข้อผิดพลาด 404 เมื่อไม่มีต้นไม้ อย่างน้อยก็ให้ฉันรู้ว่ามีบางอย่างผิดปกติ เมื่อใช้ 200 ฉันต้องเพิ่มการตรวจสอบพิเศษในการตอบกลับของฉันในการติดต่อกลับสำเร็จเพื่อจัดการข้อผิดพลาด ฉันคาดหวังว่าจะได้รับวัตถุ แต่จริง ๆ แล้วฉันอาจได้รับการตอบสนองที่ว่างเปล่าเพราะไม่พบอะไรเลย มันฟังดูยุติธรรมมากที่จะทำเครื่องหมายการตอบรับเป็น 404 และจากนั้นสงครามก็เริ่มขึ้นและฉันได้รับข้อความว่าฉันไม่เข้าใจสกีมาโค้ดสถานะ HTTP ดังนั้นฉันมาที่นี่แล้วถามว่าเกิดอะไรขึ้นกับ 404 ในกรณีนี้ ฉันยังได้ข้อโต้แย้งว่า " ไม่พบอะไรเลยดังนั้นจึงถูกต้องที่จะคืน 200" ฉันเชื่อว่ามันผิดเพราะต้นไม้ควรมีอยู่เสมอ หากเราไม่พบอะไรและเราคาดหวังบางสิ่งมันควรจะเป็น 404 ข้อมูลเพิ่มเติม, ฉันลืมที่จะเพิ่ม URL ที่ดึงมา องค์กร /OrgTree/Get เป้าหมาย /GoalTree/GetByDate?versionDate=... /GoalTree/GetById?versionId=... ความผิดพลาดของฉันจำเป็นต้องใช้ทั้งพารามิเตอร์ หาก versionDate ใด …

10
วิธีอธิบายขนาดตัวอย่างไม่ส่งผลกระทบต่อความยาวของโครงการ
เรามีโครงการองค์กรขนาดใหญ่โดยปกติแล้วพวกเขาเกี่ยวข้องกับการคัดลอกข้อมูลจากฐานข้อมูลต้นทางไปยังฐานข้อมูลปลายทางแล้วตั้งค่าแอปพลิเคชันเพิ่มเติมจำนวนมากที่ซิงค์ข้อมูลนี้เป็นต้น โครงการสุดท้ายมี 250,000 รายการ (แถวของข้อมูล) โครงการถัดไปจะมีเพียง 4,000 รายการ ผู้จัดการโครงการ / นักธุรกิจเชื่อว่าโครงการควรจะเสร็จสมบูรณ์ในเวลา 1/10 เนื่องจากมีเพียงส่วนน้อยของขนาดโครงการสุดท้าย อะไรคือการเปรียบเทียบที่ดีฉันสามารถใช้เพื่ออธิบายว่าการเขียนโค้ดเพื่อถ่ายโอนข้อมูลจากระบบหนึ่งไปยังอีกระบบหนึ่งใช้จำนวนเท่ากันโดยไม่คำนึงถึงรายการหมายเลข - การเขียนสำหรับ 1 รายการหรือ 100,000,000 จะใช้เวลาประมาณเดียวกัน มุมมอง.
58 analogy 

11
วิธีแสดง Cube ของ Rubik ในโครงสร้างข้อมูล
ถ้าฉันพยายามจำลองลูกบาศก์ของรูบิคคุณจะสร้างโครงสร้างข้อมูลอย่างไรเพื่อเก็บสถานะของคิวบ์ไว้ในหน่วยความจำโดยมีไทล์ X จำนวนต่อด้าน สิ่งที่ต้องพิจารณา: ลูกบาศก์สามารถมีขนาดใดก็ได้ มันเป็นลูกบาศก์ของรูบิคดังนั้นชั้นจึงสามารถหมุนได้

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