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

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

6
การเขียนโปรแกรมด้วย Dyslexia [ปิด]
ฉันมีความรุนแรงมากDyslexiaพร้อมกับDysnomiaและDysgraphia ฉันรู้จักมาตั้งแต่เด็กแล้ว ทักษะการอ่านและการเขียนของฉันค่อนข้างพิการ แต่ฉันได้เรียนรู้ที่จะจัดการกับมัน อย่างไรก็ตามด้วย IDE ของทุกวันนี้ฉันพบว่ามันง่ายมากที่จะจดจ่ออยู่ในโซนเมื่อฉันโค้ด แต่เมื่อฉันเขียนข้อความ (เช่นโพสต์นี้) ฉันพบว่ามันยากมากที่จะจดจ่ออยู่ โดยทั่วไปแล้ว dyslexics จะอ่านและเขียนรหัสได้ง่ายกว่าการอ่านและการเขียนทั่วไปหรือไม่? เทคนิคและเครื่องมือประเภทใดบ้างที่ใช้ dyslexics เพื่อช่วยให้พวกเขาเชี่ยวชาญการเขียนโปรแกรมดีกว่าการอ่านและการเขียนปกติ

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

14
แก้ไขข้อบกพร่องหรือรอให้ลูกค้าค้นหาพวกเขา
คนอื่น ๆ แก้ไขข้อผิดพลาดเมื่อพวกเขาเห็นพวกเขาหรือพวกเขารอจนกว่าจะมีข้อผิดพลาด / การสูญเสียข้อมูล / คนตายก่อนที่จะแก้ไขหรือไม่ ตัวอย่างที่ 1 Customer customer = null; ... customer.Save(); รหัสผิดอย่างเห็นได้ชัดและไม่มีทางแก้ไข - เรียกใช้วิธีการอ้างอิงแบบ null มันไม่ได้ผิดพลาดเพราะSaveไม่ได้เข้าถึงข้อมูลอินสแตนซ์ใด ๆ ดังนั้นมันก็เหมือนกับการเรียกฟังก์ชั่นคงที่ แต่การเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่ใดก็สามารถทำให้รหัสที่เสียหายที่ไม่ผิดพลาด: เพื่อเริ่มต้นการทำงานล้มเหลว แต่ก็ยังไม่ได้นึกไม่ถึงว่าการแก้ไขรหัส: Customer customer = null; ... customer = new Customer(); try ... customer.Save(); ... finally customer.Free(); end; อาจแนะนำความผิดพลาด; ไม่มีใครค้นพบผ่านการทดสอบหน่วยที่มีการครอบคลุมที่สมบูรณ์และการทดสอบผู้ใช้ด้วยตนเอง ตัวอย่างที่ 2 float …
35 code-quality  bug 

9
ภาษาที่มีการพิมพ์แบบไดนามิกควรได้รับการวิจารณ์หรือไม่? [ปิด]
ฉันได้อ่านบทความบนอินเทอร์เน็ตเกี่ยวกับการเลือกภาษาโปรแกรมในองค์กร เมื่อเร็ว ๆ นี้ภาษาที่พิมพ์แบบไดนามิกจำนวนมากได้รับความนิยมเช่น Ruby, Python, PHP และ Erlang แต่องค์กรจำนวนมากยังคงอยู่กับภาษาที่พิมพ์แบบคงที่เช่น C, C ++, C # และ Java และใช่หนึ่งในประโยชน์ของภาษาที่พิมพ์แบบคงที่คือข้อผิดพลาดการเขียนโปรแกรมที่ถูกจับก่อนหน้านี้ในเวลารวบรวมมากกว่าในเวลาทำงาน แต่ยังมีข้อได้เปรียบกับภาษาที่พิมพ์แบบไดนามิก ( เพิ่มเติมเกี่ยวกับ Wikipedia ) เหตุผลหลักที่องค์กรไม่เริ่มใช้ภาษาอย่าง Erlang, Ruby และ Python ดูเหมือนว่าพวกเขาเป็นแบบไดนามิก นั่นก็เป็นเหตุผลหลักว่าทำไมคนใน StackOverflow ตัดสินใจต่อต้าน Erlang ดูทำไมคุณตัดสินใจ "กับ" Erlang แต่มีดูเหมือนจะเป็นคำวิจารณ์ที่แข็งแกร่งกับพิมพ์แบบไดนามิกในองค์กร แต่ฉันไม่ได้รับมันจริงๆว่าทำไมมันเป็นที่แข็งแกร่ง ทำไมมีการวิพากษ์วิจารณ์อย่างมากต่อการพิมพ์แบบไดนามิกในองค์กร? มันส่งผลกระทบต่อต้นทุนของโครงการมากหรือไม่? แต่บางทีฉันผิด

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

5
RESTful API ฉันควรส่งคืนวัตถุที่สร้าง / อัพเดทหรือไม่
ฉันกำลังออกแบบเว็บเซอร์วิส RESTful โดยใช้ WebApi และสงสัยว่าการตอบสนอง HTTP และร่างกายการตอบสนองที่จะกลับมาเมื่อมีการปรับปรุง / สร้างวัตถุ ตัวอย่างเช่นฉันสามารถใช้วิธีการโพสต์เพื่อส่ง JSON บางส่วนไปยังบริการเว็บแล้วสร้างวัตถุ เป็นวิธีที่ดีที่สุดหรือไม่ที่จะตั้งค่าสถานะ HTTP เป็นสร้าง (201) หรือตกลง (200) และเพียงแค่ส่งคืนข้อความเช่น "เพิ่มพนักงานใหม่" หรือส่งคืนวัตถุที่ถูกส่งมาตั้งแต่แรก? เช่นเดียวกับวิธี PUT สถานะ HTTP ใดดีที่สุดที่จะใช้และฉันจำเป็นต้องส่งคืนวัตถุที่สร้างขึ้นหรือเพียงแค่ข้อความ พิจารณาข้อเท็จจริงที่ว่าผู้ใช้รู้ว่าวัตถุใดที่พวกเขากำลังพยายามสร้าง / อัปเดตอยู่ดี ความคิดใด ๆ ตัวอย่าง: เพิ่มพนักงานใหม่: POST /api/employee HTTP/1.1 Host: localhost:8000 Content-Type: application/json { "Employee": { "Name" : "Joe Bloggs", "Department" : "Finance" …
35 rest  http 

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

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

3
HATEOAS ให้ความสำคัญกับลูกค้าเป็นอย่างไร
ในขณะที่ฉันเข้าใจว่า HATEOAS นั้นเกี่ยวกับการส่งลิงก์ตอบกลับแต่ละลิงก์พร้อมด้วยข้อมูลเกี่ยวกับสิ่งที่ต้องทำ ตัวอย่างง่ายๆอย่างหนึ่งสามารถพบได้ง่ายบนอินเทอร์เน็ต: ระบบธนาคารพร้อมกับทรัพยากรบัญชี ตัวอย่างแสดงการตอบสนองนี้หลังจากได้รับการร้องขอไปยังทรัพยากรบัญชี GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">100.00</balance> <link rel="deposit" href="/account/12345/deposit" /> <link rel="withdraw" href="/account/12345/withdraw" /> <link rel="transfer" href="/account/12345/transfer" /> <link rel="close" href="/account/12345/close" /> </account> ร่วมกับข้อมูลมีลิงค์บอกสิ่งที่สามารถทำได้ต่อไป หากยอดคงเหลือเป็นลบเรามี GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK <?xml version="1.0"?> <account> <account_number>12345</account_number> <balance currency="usd">-25.00</balance> <link …

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

2
แบบแผนการตั้งชื่อ DAL, BAL และเลเยอร์ UI [ปิด]
ฉันกำลังพัฒนาเว็บแอปพลิเคชันทั่วไปด้วยเลเยอร์ต่อไปนี้ เลเยอร์ UI (MVC) ชั้นตรรกะทางธุรกิจ (BAL) ชั้นการเข้าถึงข้อมูล (DAL) แต่ละชั้นมีวัตถุ DTO ของตัวเองรวมถึง BAL และ DAL คำถามของฉันเกี่ยวกับเรื่องนี้มีดังนี้ DTO ที่ส่งคืนโดย DAL จะถูกแปลงเป็น DTO ที่สอดคล้องกันใน BAL และส่งไปยังเลเยอร์ UI ทั้งคุณลักษณะและโครงสร้างของวัตถุ DTO เหมือนกันในบางกรณี ในสถานการณ์ดังกล่าวจะเป็นการดีกว่าที่จะเพียงแค่ส่งกลับ DTO ใน DAL ไปยังเลเยอร์ UI โดยไม่รวมวัตถุระดับกลาง เป็นวิธีที่ดีที่สุดในการตั้งชื่อวัตถุ DTO เหล่านี้และวัตถุอื่น ๆ ในแต่ละชั้น ฉันควรใช้คำนำหน้าเช่น DTOName, ServiceName หรือไม่ เหตุผลที่ฉันขอให้ใช้คำนำหน้าเป็นเพราะถ้าไม่ใช่คลาสในโซลูชันของฉันขัดแย้งกับคลาสอื่น ๆ ใน Framework และด้วยคำนำหน้ามันง่ายกว่าที่ฉันจะเข้าใจว่าแต่ละคลาสอยู่ที่ไหน?
35 c#  design  naming 

9
เป็นการดีที่จะสืบทอดจากประเภททั่วไปหรือไม่?
มันจะดีกว่าที่จะใช้List<string>ในคำอธิบายประกอบประเภทหรือStringListที่ไหนStringList class StringList : List<String> { /* no further code!*/ } ฉันวิ่งเข้าไปในหลายของเหล่านี้ในประชด
35 c#  inheritance 

2
เหตุใด build.number“ การละเมิด” ของการกำหนดเวอร์ชันความหมาย?
ผมได้อธิบายที่เสนอสร้างระบบ (Gradle / Artifactory / เจนกินส์ / Chef) ให้เป็นหนึ่งในสถาปนิกอาวุโสของเราและเขาได้แสดงความคิดเห็นกับฉันว่าฉันเรียงลำดับของการไม่เห็นด้วย แต่ผมไม่ได้มีประสบการณ์มากพอที่จะจริงๆชั่งน้ำหนักใน โครงการนี้สร้างไลบรารี Java (JAR) เป็นสิ่งประดิษฐ์ที่ทีมอื่นนำมาใช้ซ้ำ สำหรับการกำหนดเวอร์ชันฉันต้องการใช้ความหมายของ: <major>.<minor>.<patch> โดยที่patchระบุถึงการแก้ไขบั๊ก / ฉุกเฉินminorระบุรีลีสที่เข้ากันได้แบบย้อนหลังและmajorบ่งชี้ถึงการปรับเปลี่ยนขนาดใหญ่ของ API และ / หรือการเปลี่ยนแปลงที่เข้ากันไม่ได้ด้านหลัง ตราบใดที่การส่งมอบตรงนี้คือสิ่งที่ฉันต้องการ: นักพัฒนาให้รหัสบางส่วน; สิ่งนี้ทริกเกอร์การสร้างสภาพแวดล้อม QA / TEST การทดสอบบางอย่างถูกเรียกใช้ (บางแบบอัตโนมัติและแบบทดสอบด้วยตนเอง) หากการทดสอบทั้งหมดผ่านไปแล้วบิลด์โปรดักชั่นจะเผยแพร่ JAR ไปยัง repo ภายในองค์กรของเรา ณ จุดนี้ JAR ควรได้รับการกำหนดเวอร์ชันอย่างถูกต้องและความคิดของฉันคือการใช้สิ่งbuild.numberที่สร้างขึ้นโดยอัตโนมัติและจัดทำโดยเครื่องมือ CI ของเราเพื่อทำหน้าที่เป็นหมายเลขโปรแกรมแก้ไข ดังนั้นการกำหนดเวอร์ชันจะเป็น: <major>.<minor>.<build.number> อีกครั้งที่build.numberมีให้โดยเครื่องมือ CI สถาปนิกปฏิเสธสิ่งนี้โดยบอกว่าการใช้หมายเลขการสร้าง CI นั้นเป็น "การละเมิด" …

4
คำสั่ง angularjs ควรโต้ตอบโดยตรงกับบริการหรือไม่หรือเป็นรูปแบบการต่อต้าน?
อันไหนที่ถือว่าดีกว่า: มีคำสั่งที่โต้ตอบกับบริการโดยตรง หรือ มีคำสั่งที่แสดง hooks บางอย่างที่ผู้ควบคุมอาจผูกพฤติกรรม (เกี่ยวข้องกับบริการ)?

4
โครงสร้างข้อมูลเบื้องหลังสเปรดชีตคืออะไร
ฉันต้องการเข้าใจว่าสเปรดชีต (กลุ่มของเซลล์ที่ระบุชื่อหรือที่ระบุไว้เป็นอย่างอื่นที่มีค่าหรือสูตรที่อ้างอิงเซลล์อื่น ๆ ) ได้รับการแก้ไขอย่างไร ฉันลองดูโครงการที่มีอยู่แล้ว แต่มีมากขึ้นกับ GUI, การทำให้เป็นอนุกรม, กิจกรรม, ฯลฯ ที่ฉันไม่พบสเปรดชีต ที่ง่ายที่สุดมันทำงานอย่างไร

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