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

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

4
การเขียนโปรแกรมและ Ubiquitous Language (DDD) ในโดเมนที่ไม่ใช่ภาษาอังกฤษ
ฉันรู้ว่ามีคำถามอยู่แล้วที่นี่ที่เกี่ยวข้องอย่างใกล้ชิดกับหัวข้อนี้ แต่ไม่มีคำถามใดที่ใช้ภาษา Ubiquitousเป็นจุดเริ่มต้นดังนั้นฉันคิดว่านั่นเป็นเหตุผลสำหรับคำถามนี้ สำหรับผู้ที่ไม่ทราบ: Ubiquitous Language เป็นแนวคิดของการกำหนดภาษา (ทั้งการพูดและการเขียน) ที่ใช้อย่างเท่าเทียมกันในการพัฒนาและผู้เชี่ยวชาญด้านโดเมนเพื่อหลีกเลี่ยงความไม่สอดคล้องกันและการสื่อสารผิดเนื่องจากปัญหาการแปลและความเข้าใจผิด คุณจะเห็นคำศัพท์ที่เหมือนกันปรากฏในรหัสการสนทนาระหว่างสมาชิกในทีมรายละเอียดการทำงานและ whatnot ดังนั้นสิ่งที่ฉันสงสัยเกี่ยวกับวิธีจัดการกับภาษาแพร่หลายในโดเมนที่ไม่ใช่ภาษาอังกฤษ ส่วนตัวผมชอบอย่างยิ่งที่จะเขียนโค้ดโปรแกรมเป็นภาษาอังกฤษอย่างสมบูรณ์รวมถึงความคิดเห็น แต่แน่นอนว่าไม่รวมค่าคงที่และทรัพยากร อย่างไรก็ตามในโดเมนที่ไม่ใช่ภาษาอังกฤษฉันถูกบังคับให้ตัดสินใจ: เขียนโค้ดที่สะท้อนถึงภาษา Ubiquitous ในภาษาธรรมชาติของโดเมน แปลภาษา Ubiquitous เป็นภาษาอังกฤษและหยุดการสื่อสารในภาษาธรรมชาติของโดเมน กำหนดตารางที่กำหนดวิธีการแปลภาษา Ubiquitous เป็นภาษาอังกฤษ นี่คือความคิดของฉันตามตัวเลือกเหล่านี้: 1) ฉันมีความเกลียดชังอย่างมากต่อรหัสภาษาผสมนั่นคือการเข้ารหัสโดยใช้ประเภท / สมาชิก / ชื่อตัวแปร ฯลฯ ที่ไม่ใช่ภาษาอังกฤษ ภาษาโปรแกรมส่วนใหญ่ 'หายใจ' ภาษาอังกฤษในระดับใหญ่และส่วนใหญ่ของวรรณคดีทางเทคนิคชื่อรูปแบบการออกแบบและอื่น ๆ เป็นภาษาอังกฤษเช่นกัน ดังนั้นในกรณีส่วนใหญ่จะไม่มีวิธีการเขียนโค้ดทั้งหมดในภาษาที่ไม่ใช่ภาษาอังกฤษดังนั้นคุณจึงต้องลงเอยด้วยภาษาที่ผสมกันอยู่แล้ว 2) สิ่งนี้จะบังคับให้ผู้เชี่ยวชาญด้านโดเมนเริ่มคิดและพูดในภาษาอังกฤษเทียบเท่ากับ UL ซึ่งเป็นสิ่งที่อาจไม่เป็นธรรมชาติสำหรับพวกเขาดังนั้นจึงเป็นอุปสรรคต่อการสื่อสารอย่างมีนัยสำคัญ 3) ในกรณีนี้ผู้พัฒนาสื่อสารกับผู้เชี่ยวชาญโดเมนในภาษาของตนในขณะที่นักพัฒนาสื่อสารกันเป็นภาษาอังกฤษและที่สำคัญที่สุดพวกเขาเขียนโค้ดโดยใช้การแปลภาษาอังกฤษของ UL ฉันแน่ใจว่าฉันไม่ต้องการไปที่ตัวเลือกแรกและฉันคิดว่าตัวเลือกที่ 3 นั้นดีกว่าตัวเลือกที่ 2 …

10
ฉันไม่สามารถใช้วิธีการคงที่ทั้งหมดได้หรือไม่
UpdateSubject ทั้งสองวิธีด้านล่างแตกต่างกันอย่างไร ฉันรู้สึกว่าการใช้วิธีการคงที่จะดีกว่าถ้าคุณเพียงต้องการที่จะทำงานกับหน่วยงาน ในสถานการณ์ใดที่ฉันควรไปด้วยวิธีการที่ไม่คงที่ public class Subject { public int Id {get; set;} public string Name { get; set; } public static bool UpdateSubject(Subject subject) { //Do something and return result return true; } public bool UpdateSubject() { //Do something on 'this' and return result return true; } } ฉันรู้ว่าฉันจะได้รับความบันเทิงมากมายจากชุมชนสำหรับคำถามที่น่ารำคาญนี้ …

4
การผกผันของการควบคุมคืออะไรและฉันควรใช้เมื่อใด
ฉันกำลังออกแบบระบบใหม่และฉันต้องการทราบว่าการควบคุมกลับกัน (IOC) คืออะไรและที่สำคัญเมื่อใช้ จะต้องมีการใช้งานกับอินเตอร์เฟสหรือสามารถทำได้กับคลาส?

19
ทักษะใดที่คุณคาดหวังและชื่นชมในวิศวกรซอฟต์แวร์รุ่นเยาว์ [ปิด]
ฉันเพิ่งจบวิทยาศาสตรมหาบัณฑิตสาขาวิศวกรรมซอฟต์แวร์และฉันกำลังจะเริ่มต้นอาชีพในอีกไม่กี่สัปดาห์ บทบาทของฉันจะเป็นผู้พัฒนารุ่นเยาว์สำหรับ บริษัท ที่พัฒนาซอฟต์แวร์โดยใช้ Java และเทคโนโลยีที่เกี่ยวข้อง (ในหมู่พวกเขา Spring และ Hibernate) พูดตามตรงฉันตื่นเต้นจริง ๆ กับสิ่งที่กำลังจะเกิดขึ้นโดยเฉพาะอย่างยิ่งเพราะฉันต้องการพัฒนาอาชีพของฉันในฐานะนักพัฒนา Java ฉันสนใจที่จะได้รับประสบการณ์ในสาขานี้เช่นกัน นอกจากนี้นี่จะเป็นประสบการณ์การทำงานครั้งแรกของฉันในฐานะนักพัฒนามืออาชีพดังนั้นฉันจึงต้องการทำให้ดีที่สุดตั้งแต่ต้น ฉันอยากจะรู้ว่าทักษะและความสามารถใดที่ทั้งนุ่มและทางเทคนิคจะได้รับการชื่นชมมากที่สุดในมืออาชีพใหม่ (ผู้พัฒนาระดับต้น) ที่สามารถเป็นส่วนหนึ่งของทีมของคุณและทักษะที่ฉันควรมุ่งเน้นเพื่อให้บรรลุอาชีพที่ประสบความสำเร็จ วิศวกร.

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

17
ทำไม Lisp จึงมีประโยชน์ [ปิด]
เห็นได้ชัดว่าLispเป็นข้อได้เปรียบสำหรับสิ่งของAIแต่ไม่ปรากฏว่าฉัน Lisp เร็วกว่า Java, C # หรือ C แม้ว่าฉันไม่ใช่เจ้านายของ Lisp แต่ฉันพบว่ามันยากที่จะเข้าใจข้อดี หนึ่งจะได้รับในการเขียนซอฟต์แวร์ธุรกิจใน Lisp กระนั้นก็ถือว่าเป็นภาษาของแฮ็กเกอร์ ทำไมPaul Graham จึงสนับสนุน Lisp เหตุใดซอฟต์แวร์ ITAจึงเลือกเสียงกระเพื่อมเหนือภาษาระดับสูงอื่น ๆ มันมีคุณค่าอะไรในภาษาเหล่านี้?
64 lisp 

7
ความแตกต่างระหว่างการทดสอบหน่วยและการพัฒนาแบบทดสอบขับเคลื่อน
จากการอ่านคำอธิบายฉันเข้าใจว่าในการทดสอบ TDD เสร็จแล้วก่อนที่จะเขียนฟังก์ชั่นและในการทดสอบหน่วยมันทำหลังจากนั้น นี่เป็นความแตกต่างหลักหรือไม่สามารถเปรียบเทียบสองคำนี้ได้ บางทีการทดสอบหน่วยเป็นส่วนหนึ่งของ TDD

16
การสร้างซอฟต์แวร์ใหม่เป็นส่วนสำคัญของงานเขียนโปรแกรมส่วนใหญ่หรือไม่? [ปิด]
ฉันได้ทำงานในการพัฒนาซอฟต์แวร์มานานกว่า 10 ปีแล้วและฉันก็เริ่มที่จะสร้างอะไรใหม่ "ใหม่" ฉันรู้ว่า "ใหม่" เป็นคำที่คลุมเครือ แต่ฉันจะนิยามมันเป็นอะไรก็ได้ตั้งแต่โครงการขนาดใหญ่ใหม่ไปจนถึงคุณสมบัติขนาดใหญ่ใหม่ในโครงการที่มีอยู่ (พูดบางสิ่งที่ต้องใช้ความคิดในการออกแบบและอาจ ใช้เวลา 2 สัปดาห์หรือมากกว่าในการดำเนินการ) บางทีแนวทางคร่าวๆอาจเป็นสิ่งใหม่หากต้องการข้อมูลจำเพาะที่เป็นลายลักษณ์อักษร ฉันคิดว่าโปรแกรมเมอร์ส่วนใหญ่รู้ว่าฉันกำลังพูดถึงอะไรคุณอยู่ในโซนเขียนโค้ดจำนวนมากในเวลาอันรวดเร็ว อย่างไรก็ตามเมื่อคิดย้อนกลับไปยังสิ่งที่ฉันทำฉันคาดว่าจะใช้เวลาน้อยกว่า 10% ของเวลาที่ใช้ในการทำงาน "ใหม่" มีสิ่งต่าง ๆ เช่น "ปรับระบบที่มีอยู่นี้ให้ทำงานในสภาพแวดล้อมใหม่นี้" ซึ่งแน่นอนว่าต้องมีการวางแผนมากมาย แต่การเข้ารหัสที่เกิดขึ้นจริงและ "สิ่งใหม่" นั้นเกิดขึ้นจากการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ในหลาย ๆ รหัส เช่นเดียวกันกับการร้องขอฟีเจอร์เล็ก ๆ - ถ้าฉันรู้ว่าจะต้องทำสิ่งเหล่านี้มักจะเสร็จสิ้นภายในไม่ถึงหนึ่งชั่วโมงและถ้าฉันทำไม่ได้มันเป็นเพียงการอ่านโค้ดจำนวนมากและการหาสิ่งที่ต้องทำ (ซึ่งทำให้ฉันหงุดหงิด ทำได้ดีกว่ามากโดยไม่ต้องอ่าน) โดยทั่วไปแล้วฉันรู้สึกว่าฉันไม่ได้สร้างอะไรเป็นส่วนใหญ่ ฉันคิดว่านี่เป็นกรณีในสถานที่ส่วนใหญ่ - ผลิตภัณฑ์ใหม่จะออกมาค่อนข้างเร็วและ ณ จุดนั้นทุกคนจะตื่นเต้นและต่อสู้กับรหัสอย่างรวดเร็ว แต่จากนั้นเมื่อมันเข้าสู่โหมดการบำรุงรักษา การเปลี่ยนแปลงที่ตามมาเล็กน้อยจะถือเป็น "ใหม่และสร้างสรรค์" ฉันผิดหรือเปล่า? ฉันอธิบายงานการเขียนโปรแกรมส่วนใหญ่อย่างถูกต้องหรือไม่หรือโปรแกรมเมอร์ส่วนใหญ่รู้สึกว่าพวกเขามักจะสร้างสิ่งใหม่ ๆ …

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

1
Java เวอร์ชันต่าง ๆ เหล่านี้มีไว้เพื่ออะไร?
ฉันเพิ่งจะเริ่มต้นการเดินทาง Java ของฉัน(ฉัน dabbled แล้วใน C ++) แต่ฉันสับสนจริงๆเกี่ยวกับ Java รุ่นต่างๆทั้งหมด: JavaSE JavaEE JavaFX เป็นต้น มีคนอธิบายรายละเอียดเหล่านี้ได้ไหม?
63 java  java-ee  javafx 

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

15
คุณจะทิ้งเทคโนโลยีเก่าจากประวัติส่วนตัวเมื่อไหร่? [ปิด]
ฉันได้รับการตรวจสอบหลายประวัติย่อที่เรามีสำหรับตำแหน่งใหม่ ฉันสังเกตเห็นว่ามีบางคนที่มีเวอร์ชันภาษาการเขียนโปรแกรมเก่าและแอปพลิเคชั่นเก่า ๆ ในประวัติส่วนตัว (เช่น SQL 4.2, VB5, Lotus 123, Novell) สิ่งนี้ทำให้รายการประสบการณ์คอมพิวเตอร์ของพวกเขายาวนานมาก คุณรักษาความสดใหม่หรือไม่? คุณแสดงประสบการณ์เชิงลึกแม้ว่าคุณจะไม่เคยใช้เทคโนโลยีนั้นอีกครั้งหรือไม่? เมื่อใดที่คุณควรทิ้งเทคโนโลยีเก่า ๆ ในประวัติย่อของคุณ? การเก็บเทคโนโลยีเก่าไว้ในประวัติย่อของคุณจะเป็นอันตรายต่อการจ้างงานหรือไม่?
63 resume 

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

15
เพื่อนร่วมงานเปลี่ยนชื่อข้อความค้นหาทั้งหมดของฉัน [ปิด]
ฉันไม่รู้ว่าฉันควรจะหงุดหงิดมากหรืออะไร ฉันสร้างแบบสอบถามมากกว่า 300 รายการสำหรับฐานข้อมูลขนาดใหญ่และพัฒนาแผนการตั้งชื่อเพื่อที่ฉันจะได้ค้นพบในภายหลัง ไม่มีใครในออฟฟิศของฉันรู้วิธีสร้างคิวรี แต่ฉันเข้ามาเมื่อวานนี้เพื่อพบว่าพวกเขาทั้งหมดถูกเปลี่ยนชื่อ ตอนนี้ฉันมีเวลายากมากในการค้นหาสิ่งต่าง ๆ และฉันพยายามที่จะคิดออกว่าจะทำอย่างไร ฉันพูดกับคนที่รับผิดชอบและเธอก็วัดผลทุกสิ่ง เธอบอกว่าเธอเปลี่ยนชื่อพวกเขาเพื่อให้เธอสามารถค้นหาได้ง่ายขึ้น น่าเสียดายที่ฉันเป็นคนเดียวที่รู้วิธีสร้างแก้ไขและดูแลรักษาและเหตุผลเดียวที่เธอต้องการค้นหาพวกเขาคือการทดสอบข้อความค้นหา อนุสัญญาการตั้งชื่อใหม่ไม่สมเหตุสมผลเลยและฉันรู้สึกว่าเราก้าวไปข้างหลังในกระบวนการพัฒนา สิ่งที่ฉันพยายามคิดก็คือ: 1) ฉันทำมากไปไหม? 2) วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร? ฉันเกลียดที่จะพูดถึงเรื่องนี้กับเจ้านายของฉัน แต่หลังจากพูดคุยกับเพื่อนร่วมงานของฉันเมื่อวานนี้ฉันสามารถบอกได้ว่าเธอรู้สึกเหมือนเธอไม่ได้ทำอะไรผิด
63 database  sql  access 

16
ความคิดเห็นของคนแรกเบี่ยงเบนความสนใจและไม่เป็นมืออาชีพหรือไม่
ฉันเพิ่งพบว่าตัวเองกำลังเขียนความคิดเห็นต่อไปนี้ในบางรหัส (archaic Visual Basic 6.0) รหัสที่ฉันเขียน: If WindowState <> 1 Then 'The form's not minimized, so we can resize it safely '... End if ฉันไม่แน่ใจว่าทำไมฉันจึงใช้ "เรา" โดยไม่รู้ตัวในความคิดเห็นของฉัน ฉันสงสัยว่าเป็นเพราะฉันจินตนาการว่ามีคนก้าวเข้ามาในรหัสราวกับว่าพวกเขากำลัง "ทำ" คำสั่งทั้งหมดในแต่ละบรรทัดมากกว่าที่จะเห็นพวกเขาเกิดขึ้น ด้วยความคิดนี้ฉันสามารถใช้I can resize itเพราะฉันเป็นคนหนึ่งที่ "กำลังทำ" อยู่ในขณะนี้หรือyou can resize itราวกับว่าฉันกำลังพูดกับใครก็ตามคือ "ทำ" มันในอนาคต แต่เนื่องจากทั้งสองกรณีนี้มีแนวโน้มมากที่สุด เกิดขึ้นฉันใช้ "เรา" ราวกับว่าฉันกำลังนำใครบางคนผ่านรหัสของฉัน ฉันสามารถเขียนใหม่เป็นit can be resizedและหลีกเลี่ยงปัญหา แต่มันจุดประกายความอยากรู้ของฉัน: …

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