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

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

6
ควรตรวจสอบ `c> = '0'` หรือ` c> = 48` หรือไม่?
หลังจากการสนทนากับเพื่อนร่วมงานของฉันฉันได้รับคำถาม 'ปรัชญา' เกี่ยวกับวิธีจัดการกับชนิดข้อมูลถ่านใน Java ตามแนวทางปฏิบัติที่ดีที่สุด สมมติว่าสถานการณ์ง่าย ๆ(เห็นได้ชัดว่านี่เป็นเพียงตัวอย่างง่ายๆเพื่อให้ความหมายในการฝึกฝนสำหรับคำถามของฉัน)โดยที่ String 's' เป็นอินพุตคุณต้องนับจำนวนอักขระที่เป็นตัวเลขในนั้น นี่คือโซลูชันที่เป็นไปได้ 2 แบบ: 1) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= 48 && s.charAt(i) <= 57) { n++; } } 2) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= '0' && s.charAt(i) <= '9' ) { n++; } } ข้อใดที่สอง 'สะอาด' …

1
FormsAuthentication ล้าสมัยหรือไม่ [ปิด]
ฉันกำลังสร้างเว็บไซต์โดยใช้ ASP.NET MVC 5 Microsoft ปล่อยเทคโนโลยีใด ๆ เพื่อแทนที่ FormsAuthentication หรือพวกเขายังแนะนำให้ตรวจสอบสิทธิ์ผู้ใช้โดยใช้ FormsAuthentication สำหรับ MVC 5 หรือไม่

7
ทำไม setters ที่ไม่เป็นทางการคืออะไร
การผูกมัดแบบติดตั้งบนถั่วนั้นมีประโยชน์มาก: ไม่จำเป็นต้องใช้ตัวสร้างมากเกินไปตัวสร้างขนาดใหญ่โรงงานและช่วยให้คุณอ่านง่ายขึ้น ฉันไม่สามารถคิดถึงข้อเสียใด ๆ เว้นแต่ว่าคุณต้องการให้วัตถุของคุณไม่เปลี่ยนรูปในกรณีนี้มันจะไม่มีตัวตั้งค่าใด ๆ อยู่ดี มีเหตุผลทำไมนี่ไม่ใช่การประชุม OOP? public class DTO { private String foo; private String bar; public String getFoo() { return foo; } public String getBar() { return bar; } public DTO setFoo(String foo) { this.foo = foo; return this; } public DTO setBar(String bar) { this.bar …

4
มีอะไรแปลกใหม่เกี่ยวกับ NoSQL หรือไม่? [ปิด]
ฉันเป็นคนที่มีฐานข้อมูลเชิงสัมพันธ์ที่แข็งแกร่งมากและเข้าใจทุกอย่างจนถึงรูปแบบที่ 3 ขอขอบคุณรากทฤษฎีเซตเชิงพีชคณิตของ SQL และอาจจะทำให้สัมพันธ์กับหัวใจที่แตกสลาย (หรือไม่ก็ได้) ฉันไม่ได้คิดโครงสร้างฐานข้อมูลเชิงสัมพันธ์สำหรับคืนวันที่กับภรรยาของฉัน แต่ฉันมีความคิดเกี่ยวกับโครงการฐานข้อมูลเชิงสัมพันธ์ในวันที่คืนกับภรรยาของฉัน .. ตอนนี้ฉันได้ยินเกี่ยวกับ NoSQL และทำการค้นคว้า การตัดการไล่ล่านั้นมีอะไรบ้างเกี่ยวกับ NoSQL ที่ทำให้เกิดความวุ่นวายทางคณิตศาสตร์หรือ "คุณไม่จำเป็นต้องจัดระเบียบข้อมูลของคุณให้สัมพันธ์กันนี่เป็นวิธีที่ง่ายกว่านี้ไหม" NoSQL เป็นเหมือน super shell ต่อโครงสร้างข้อมูลหรือไม่? ในใจของฉันในที่สุดข้อมูลจะต้องมีโครงสร้างที่จะดึงและการดึงข้อมูลจะต้องกำหนดในภาษาบางประเภท
46 nosql 

6
การปฏิบัติที่ดีหรือไม่ดีในการซ่อนคอลเลกชัน Java ด้วยชื่อคลาสที่มีความหมาย?
เมื่อเร็ว ๆ นี้ฉันเคยติดนิสัยคอลเลกชัน Java "กำบัง" ที่มีชื่อคลาสที่เป็นมิตรกับมนุษย์ ตัวอย่างง่ายๆ: // Facade class that makes code more readable and understandable. public class WidgetCache extends Map<String, Widget> { } หรือ: // If you saw a ArrayList<ArrayList<?>> being passed around in the code, would you // run away screaming, or would you actually understand what …

7
วิธีการวัดมูลค่าที่อาจเกิดขึ้นจากการปรับสภาพ
ในโครงการขนาดใหญ่ที่มีหนี้สินทางเทคนิคคุณสามารถประมาณการหรือวัดผลประโยชน์ของการเปลี่ยนรหัสได้อย่างน่าเชื่อถือได้อย่างไร ตัวอย่างเช่นสมมติว่าคุณมีส่วนประกอบบางอย่างภายในโซลูชันซอฟต์แวร์สแต็กที่เขียนด้วยภาษาที่เก่ากว่าและบางส่วนประกอบในภายหลังจะเขียนด้วยภาษาที่ใหม่กว่า มีการเพิ่มฟีเจอร์และการแก้ไขข้อผิดพลาดใหม่ ๆ ให้กับโซลูชันนี้โดยทีมพัฒนา นักพัฒนาแนะนำให้แทนที่องค์ประกอบภาษาเก่าที่มีอยู่ด้วยเวอร์ชันใหม่จะเป็น 'สิ่งที่ดี' อย่างไรก็ตามงานนี้จะไม่มีการเพิ่มคุณสมบัติพิเศษและจะเสียค่าใช้จ่าย x dev-days พนักงานขายแนะนำให้เพิ่ม 'คุณสมบัติใหม่ที่ยอดเยี่ยม' บริษัท วัดมูลค่าของข้อเสนอแนะของเขาโดยใช้สูตร กล่าวคือ มันจะสร้างรายได้ให้กับ บริษัท F ล้านปอนด์ในช่วงเวลา t ปีที่ทำงาน x dev-days บริษัท จะเสียค่าใช้จ่ายของข้อเสนอการเปลี่ยนโครงสร้างในวิธีที่มีความหมายได้อย่างไร และภายใต้สถานการณ์ใดเป็นตัวเลือกที่ทำกำไรได้มากที่สุดสำหรับ บริษัท ?

3
เหตุใดโมเดลโดเมน anemic จึงถือว่าไม่ดีใน C # / OOP แต่สำคัญมากใน F # / FP
ในโพสต์บล็อกใน F # เพื่อความสนุกสนานและผลกำไรกล่าวว่า: ในการออกแบบฟังก์ชั่นมันสำคัญมากที่จะแยกพฤติกรรมออกจากข้อมูล ชนิดข้อมูลนั้นง่ายและ "โง่" จากนั้นคุณก็มีฟังก์ชั่นหลายอย่างที่ทำงานกับชนิดข้อมูลเหล่านั้น สิ่งนี้เป็นสิ่งที่ตรงกันข้ามกับการออกแบบเชิงวัตถุที่มีการรวมพฤติกรรมและข้อมูลเข้าด้วยกัน ท้ายที่สุดแล้วนั่นคือสิ่งที่ชั้นเรียน ในความเป็นจริงการออกแบบเชิงวัตถุในความเป็นจริงคุณไม่ควรมี แต่พฤติกรรม - ข้อมูลเป็นส่วนตัวและสามารถเข้าถึงได้ผ่านวิธีการ ในความเป็นจริงอู๊ดไม่ได้มีพฤติกรรมพอรอบประเภทข้อมูลถือเป็นสิ่งที่ไม่ดีและยังมีชื่อ: ความ " รูปแบบโดเมนโลหิตจาง " ระบุว่าใน C # เราดูเหมือนจะยืมต่อจาก F # และพยายามเขียนโค้ดสไตล์การทำงานมากขึ้น ทำไมเราไม่ยืมความคิดในการแยกข้อมูล / พฤติกรรมและคิดว่ามันไม่ดี? มันเป็นเพียงแค่ว่าคำจำกัดความไม่ได้มาพร้อมกับ OOP หรือมีเหตุผลที่เป็นรูปธรรมว่ามันไม่ดีใน C # ที่ด้วยเหตุผลบางอย่างไม่ได้ใช้ใน F # (และในความเป็นจริงจะกลับรายการ)? (หมายเหตุ: ฉันสนใจเป็นพิเศษในความแตกต่างใน C # / F # ที่สามารถเปลี่ยนความคิดเห็นของสิ่งที่ดี / ไม่ดีแทนที่จะเป็นบุคคลที่อาจไม่เห็นด้วยกับความเห็นทั้งในโพสต์บล็อก)

2
REST API ควรจัดการคำขอ PUT กับทรัพยากรที่สามารถแก้ไขได้บางส่วนได้อย่างไร
สมมติว่า REST API ตอบกลับGETคำขอHTTP ส่งคืนข้อมูลเพิ่มเติมบางอย่างในวัตถุย่อยowner: { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'Programmer' } } เห็นได้ชัดว่าเราไม่ต้องการให้ใครPUTกลับมา { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'CEO' } } และประสบความสำเร็จ อันที่จริงเราอาจไม่ได้ใช้วิธีการที่อาจประสบความสำเร็จในกรณีนี้ แต่คำถามนี้ไม่เพียงเกี่ยวกับวัตถุย่อย: โดยทั่วไปแล้วจะทำอย่างไรกับข้อมูลที่ไม่ควรแก้ไขได้ในคำขอ PUT มันควรจะต้องหายไปจากคำขอ PUT หรือไม่ มันควรจะถูกทิ้งอย่างเงียบ ๆ …

4
สิ่งที่เป็นนามธรรมมากเกินไปอาจไม่ดีหรือไม่?
ในฐานะโปรแกรมเมอร์ฉันรู้สึกว่าเป้าหมายของเราคือการให้ abstractions ที่ดีในรูปแบบโดเมนที่กำหนดและตรรกะทางธุรกิจ แต่สิ่งที่เป็นนามธรรมนี้ควรหยุด วิธีที่จะทำให้การแลกเปลี่ยนระหว่างสิ่งที่เป็นนามธรรมและผลประโยชน์ทั้งหมดของมัน (ความยืดหยุ่นความสะดวกในการเปลี่ยนแปลง ฯลฯ ) และความง่ายในการทำความเข้าใจรหัสและผลประโยชน์ทั้งหมดของมัน ฉันเชื่อว่าฉันมักจะเขียนโค้ดที่เป็นนามธรรมมากเกินไปและฉันก็ไม่รู้ว่ามันดีแค่ไหน ฉันมักจะเขียนมันเหมือนว่ามันเป็นไมโครเฟรมเวิร์กซึ่งประกอบด้วยสองส่วน: โมดูลขนาดเล็กที่ติดอยู่ในกรอบขนาดเล็ก: โมดูลเหล่านี้เข้าใจง่ายพัฒนาและดูแลรักษาเป็นหน่วยเดียว รหัสนี้แสดงถึงรหัสที่ใช้งานได้จริงตามที่อธิบายไว้ในข้อกำหนด กำลังเชื่อมต่อรหัส ตอนนี้ที่นี่ฉันเชื่อว่ายืนปัญหา รหัสนี้มีแนวโน้มที่จะซับซ้อนเพราะบางครั้งก็เป็นนามธรรมและยากที่จะเข้าใจในตอนแรก; สิ่งนี้เกิดขึ้นเนื่องจากความจริงที่ว่ามันเป็นเพียงนามธรรมที่บริสุทธิ์ฐานในความเป็นจริงและตรรกะทางธุรกิจที่ถูกดำเนินการในรหัสที่นำเสนอ 1; จากเหตุผลนี้รหัสนี้ไม่คาดว่าจะมีการเปลี่ยนแปลงเมื่อทดสอบ นี่เป็นวิธีการเขียนโปรแกรมที่ดีหรือไม่? ว่ามันมีการเปลี่ยนรหัสกระจัดกระจายมากในหลายโมดูลและง่ายมากที่จะเข้าใจและไม่เปลี่ยนแปลงรหัสซับซ้อนมากจาก POV นามธรรม? รหัสทั้งหมดควรจะมีความซับซ้อนเหมือนกัน (นั่นคือรหัส 1 ซับซ้อนกว่าและเชื่อมโยงกันและรหัส 2 ง่ายขึ้น) เพื่อให้ทุกคนที่มองผ่านมันสามารถเข้าใจได้ในระยะเวลาที่เหมาะสม แต่การเปลี่ยนแปลงมีราคาแพงหรือวิธีแก้ปัญหาที่นำเสนอข้างต้น "การเปลี่ยนรหัส" นั้นง่ายต่อการเข้าใจดีบั๊กเปลี่ยนและ "การเชื่อมโยงโค้ด" นั้นยาก หมายเหตุ: นี่ไม่เกี่ยวกับการอ่านรหัส! ทั้งโค้ดที่ 1 และ 2 สามารถอ่านได้ แต่โค้ดที่ 2 มาพร้อมกับ abstractions ที่ซับซ้อนมากขึ้นในขณะที่ code 1 …

5
คำวิจารณ์ของ IO monad ที่ถูกมองว่าเป็น monad state ที่ปฏิบัติงานบนโลกนี้
IOmonad ใน Haskell มักจะมีการอธิบายเป็น monad รัฐที่รัฐเป็นโลก ดังนั้นค่าของชนิดIO amonad worldState -> (a, worldState)ถูกมองว่าเป็นสิ่งที่ชอบ ก่อนหน้านี้ฉันอ่านบทความ (หรือโพสต์รายการบล็อก / จดหมายข่าว) ที่วิจารณ์มุมมองนี้และให้เหตุผลหลายประการว่าทำไมมันไม่ถูกต้อง แต่ฉันจำไม่ได้ว่าทั้งบทความและเหตุผล มีใครรู้บ้าง แก้ไข:บทความดูเหมือนจะหายไปดังนั้นเริ่มรวบรวมข้อโต้แย้งต่าง ๆ ที่นี่ ฉันเริ่มที่จะทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้น แก้ไข:บทความที่ฉันกำลังมองหาคือการจัดการกับทีมที่น่าอึดอัดใจ: อินพุต / เอาท์พุต monadic, การทำงานพร้อมกัน, ข้อยกเว้นและการโทรภาษาต่างประเทศใน Haskellโดย Simon Peyton Jones (ขอบคุณคำตอบของ TacTics)

5
เหตุใดภาษาการเขียนโปรแกรมเก่าจึงยังคงได้รับการแก้ไข
คำถามนี้ไม่ใช่ "ทำไมผู้คนยังใช้ภาษาโปรแกรมเก่าอยู่" ฉันเข้าใจว่าค่อนข้างดี อันที่จริงแล้วภาษาการเขียนโปรแกรมสองภาษาที่ฉันรู้จักดีที่สุดคือ C และ Scheme ซึ่งทั้งสองอย่างนี้ย้อนกลับไปในยุค 70 เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับการเปลี่ยนแปลงใน C99 และ C11 เทียบกับ C89 (ซึ่งดูเหมือนว่าจะยังคงเป็นเวอร์ชัน C ที่ใช้มากที่สุดในทางปฏิบัติและรุ่นที่ฉันเรียนรู้จาก K&R) เมื่อมองไปรอบ ๆ ดูเหมือนว่าภาษาการเขียนโปรแกรมทุกภาษาที่ใช้งานหนักจะได้รับคุณสมบัติใหม่อย่างน้อยหนึ่งครั้งต่อทศวรรษหรือมากกว่านั้น แม้ฟอร์แทรนยังคงได้รับการแก้ไขใหม่แม้ว่าผู้ใช้ส่วนใหญ่จะใช้ฟอร์แทรน 77 ก็ตาม เปรียบเทียบสิ่งนี้กับแนวทางการพูดระบบเรียงพิมพ์ TeX ในปี 1989 ด้วยการเปิดตัว TeX 3.0, Donald Knuth ประกาศว่า TeX เป็นคุณสมบัติที่สมบูรณ์และการเปิดตัวในอนาคตจะมีเพียงการแก้ไขข้อบกพร่อง ถึงแม้จะเกินกว่านี้เขาก็แจ้งว่าเมื่อเขาตาย "บั๊กที่เหลือทั้งหมดจะกลายเป็นคุณสมบัติ" และจะไม่มีการอัพเดทใด ๆ เพิ่มเติม คนอื่น ๆ มีอิสระในการแยก TeX และทำเช่นนั้น แต่ระบบที่ได้จะถูกเปลี่ยนชื่อเพื่อระบุว่าแตกต่างจาก …

4
ฉันจะศึกษาวิทยาศาสตร์คอมพิวเตอร์ด้วยตนเองได้อย่างไร [ปิด]
ในฐานะที่เป็นโปรแกรมเมอร์ที่สอนตัวเองอย่างสมบูรณ์ฉันต้องการมันถ้าฉันสามารถทำให้ตัวเองดีขึ้นด้วยการเรียนรู้ด้วยตนเองหลักสูตรวิทยาศาสตร์คอมพิวเตอร์ที่สอนให้กับผู้สำเร็จการศึกษา CS ทั่วไป การค้นหาแหล่งข้อมูลต่าง ๆ บนอินเทอร์เน็ตเป็นเรื่องง่ายมีหลักสูตรMIT เปิดหลักสูตรและมีหลักสูตร Coursera จาก Stanford และมหาวิทยาลัยอื่น ๆ มีแหล่งข้อมูลเปิดอื่น ๆ มากมายกระจายอยู่ทั่วอินเทอร์เน็ตและหนังสือดี ๆ ที่แนะนำซ้ำ ๆ ฉันเรียนรู้มาก แต่การศึกษาของฉันแยกส่วนอย่างหนักซึ่งทำให้ฉันเป็นโรคจิตจริงๆ ฉันจะรักถ้าที่ไหนสักแห่งฉันสามารถหาเส้นทางที่ฉันควรติดตามและกองที่ฉันควร จำกัด ตัวเองเพื่อให้ฉันสามารถตรวจสอบเกี่ยวกับส่วนสำคัญของวิทยาศาสตร์คอมพิวเตอร์ที่ฉันได้ศึกษาและวิธีการที่ฉันไม่ได้เป็นระบบ ปัญหาเกี่ยวกับ Wikipedia คือมันไม่ได้บอกคุณว่ามีความจำเป็นอะไร แต่ยืนยันว่าเป็นข้อมูลอ้างอิงที่สมบูรณ์ หลักสูตรเปิดของ MITสำหรับวิทยาการคอมพิวเตอร์และสาขาวิศวกรรมไฟฟ้า มีรายการหลักสูตรจำนวนมากที่ไม่ได้บอกคุณว่าหลักสูตรใดบ้างที่จำเป็นและเป็นทางเลือกตามความสนใจ / ความต้องการของบุคคล ฉันไม่พบคำสั่งที่ควรศึกษาวิชาอื่น สิ่งที่ฉันจะรักคือการสร้างรายการที่ฉันสามารถติดตามได้เช่นเดียวกับคนบ้า ๆ บอ ๆ SUBJECTS DONE Introduction to Computer Science * Introduction to Algorithms * Discrete Mathematics …

3
ทำไม Java ถึงถูกเลือกสำหรับ Android?
เหตุใดจึงเลือก Java สำหรับ Android แทนที่จะเป็น C ++ ฉันเคยได้ยินว่า Java ใช้หน่วยความจำค่อนข้างมากและฉันจะสันนิษฐานว่าการใช้หน่วยความจำต่ำจะค่อนข้างสำคัญสำหรับอุปกรณ์มือถือ มีข้อได้เปรียบที่แท้จริงในการใช้ Java แทนภาษาอย่าง C ++ บนอุปกรณ์มือถือหรือไม่?
46 android  mobile 

9
ซอฟต์แวร์ระดับองค์กรคืออะไร
ฉันไม่เข้าใจความแตกต่างระหว่างซอฟต์แวร์ "ปกติ" และซอฟต์แวร์องค์กร แม้หลังจากอ่านเหล่านี้ ... "ซอฟต์แวร์องค์กร" บน Wikipedia "ซอฟต์แวร์องค์กรมีความเซ็กซี่อีกครั้ง" บน Techcrunch "The Great Enterprise Software Swindle" ในการเข้ารหัสสยองขวัญ ฉันไม่สามารถคาดศีรษะกับความแตกต่างที่แท้จริงได้ มีความแตกต่างระหว่างทั้งสองหรือไม่? ทำไมคนพูดว่าซอฟต์แวร์องค์กร sucks?

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

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