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

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

17
ความรับผิดชอบของโปรแกรมเมอร์โปรแกรมเมอร์ [ปิด]
ดังนั้นเราทุกคนเคยได้ยินThe Programmers Bill of Rightsและ XP มีแนวคิดคล้ายกัน มันเป็นเรื่องธรรมดาที่ทุกวันนี้เราได้ยินเกี่ยวกับสิทธิของผู้คนมากมาย แต่ไม่มากเกี่ยวกับความรับผิดชอบของพวกเขาดังนั้นสิ่งที่ควรจะอยู่ในความรับผิดชอบของโปรแกรมเมอร์ นั่นคือสิ่งที่พวกเขาควรทำซึ่งพวกเขาอาจพบว่าไม่อร่อย แต่สิ่งที่โปรแกรมเมอร์แยกต่างหากทำหน้าที่อย่างมืออาชีพและมีความรับผิดชอบจากผู้ที่ไม่ทำ ฉันสนใจในสิ่งที่ไม่อร่อยและสิ่งที่ไม่น่าจะเกิดขึ้น นั่นคือสิ่งที่โปรแกรมเมอร์มักจะหลบหลีกและหลีกเลี่ยงมากกว่า 90% ของโปรแกรมเมอร์ที่ต้องการทำ (เช่น refactor และใช้การควบคุมซอร์ส) ดังนั้นสิ่งที่ควรจะอยู่ในความรับผิดชอบของโปรแกรมเมอร์?

7
Haskell AND Lisp vs. Haskell หรือ Lisp [ปิด]
ปัจจุบันฉันใช้รหัสกับ C, C ++ และ Python ฉันต้องการรับภาษาโปรแกรมที่ใช้งานได้และตอนนี้ฉันกำลังโน้มตัวไปหา Haskell ฉันไม่ต้องการเริ่มสงคราม "Haskell vs Lisp" ที่นี่; สิ่งที่ฉันต้องการรู้คือ: ถ้าฉันเรียนรู้ Haskell เป็นหลักสำหรับการเปิดรับฟังก์ชั่นการเขียนโปรแกรมฉันจะได้ประโยชน์อะไรจากการเรียนรู้ Lisp ในภายหลัง

8
การพัฒนาด้านอาชีพควรเกิดขึ้นในเวลาที่ บริษัท หรือไม่
ในฐานะผู้พัฒนาซอฟต์แวร์พาร์ทไทม์ครั้งแรกใน บริษัท ที่ปรึกษาขนาดเล็กฉันพยายามดิ้นรนเพื่อจัดเวลาให้กับความรู้ด้านการพัฒนาซอฟต์แวร์ของตัวเองไม่ว่าจะเป็นการอ่านหนังสือ ใช้งานในเชิงลึกหรือติดตามหน้าแรกของ Hacker News ฉันสามารถเห็นผลลัพธ์ที่เกิดจากเวลาการเรียนรู้ที่จัดสรรด้วยตัวเองของฉัน แต่การแสดงและแสดงทักษะและความรู้ที่ได้รับจากการพัฒนาวิชาชีพเป็นเรื่องยาก บริษัท ไม่มีนโยบาย PD ที่กำหนดไว้และมีแรงกดดันอย่างมากที่จะส่งมอบสิ่งที่ทำได้ตอนนี้! เมื่อทำงานกับที่ปรึกษา ฉันได้ตรวจสอบสิ่งที่เพื่อนร่วมงานของฉันทำและพวกเขาดูเหมือนจะไม่จัดสรรเวลาในการปรับปรุงตนเอง พวกเขาเพียงแค่ทำงานกับปัญหาที่พวกเขาได้รับค้นหาข้อมูลอ้างอิง MSDN เฉพาะตัวอย่างโค้ดและสิ่งที่พวกเขาต้องการ ฉันตระหนักว่านโยบาย PD จะแตกต่างกันไปตาม บริษัท ที่มีขนาดและวัฒนธรรมที่แตกต่างกันและ บริษัท อย่างฉันเองอาจเป็นกรณีที่มีความสำคัญ ฉันชอบที่จะได้ยินมุมมองและประสบการณ์จากนักพัฒนาที่มีประสบการณ์ โดยเฉพาะผู้ที่ต้องเลือกนโยบาย PD ในทีมหรือ บริษัท ของพวกเขา ฉันยังต้องการเรียนรู้เกี่ยวกับวิธีการที่รุนแรงยิ่งขึ้นกับ PD แม้ว่าพวกเขาจะออกไปที่นั่นอย่างสมบูรณ์ก็ตาม มันน่าสนใจเสมอที่จะเห็นสิ่งที่คนอื่นกำลังพยายาม ไม่ใช่บทสรุป แต่สิ่งที่ฉันพยายามถาม: เป็นเรื่องปกติหรือแนะนำให้ บริษัท จัดสรรเวลา PD หรือไม่ มันเป็นความรับผิดชอบของใครที่จะทำให้แน่ใจว่าความรู้และทักษะของนักพัฒนาเป็นปัจจุบัน? ตารางการทำงานแบบไม่เต็มเวลาควรสร้างแรงบันดาลใจในอัตราส่วนที่ต่ำกว่าของเวลา PD: ทำงานหรือไม่ นักพัฒนาจะแสดงเพื่อนร่วมงานที่ไม่ใช่นักพัฒนาได้อย่างไรว่าการอ่านบล็อกและหนังสือมีประสิทธิภาพสุทธิ การอ่านบล็อกและหนังสือมีประสิทธิผลจริงหรือ (ยินดีรับการอ้างอิง) การเขียนบล็อกมีประสิทธิภาพเหมือนกับ PD …

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

5
เป็นการดีกว่าที่จะรวม“ บ่อยครั้ง” หรือหลังจากรวมฟีเจอร์สาขาใหญ่แล้วเสร็จ?
พูดได้หลายสาขาจะได้รับการพัฒนาAและBเช่นเดียวกับที่เพิ่มขึ้น "แก้ไขข้อผิดพลาด" Cสาขา ตอนนี้C"เสร็จสิ้น" และถูกรวมเข้ากับต้นแบบแล้ว AและBยังอยู่ในระหว่างการพัฒนาและจะไม่ได้รับการแก้ไขก่อน (อาจ) สาขาการแก้ไขข้อบกพร่องอื่นถูกรวมเข้ากับข้อมูลหลัก มันเป็นความคิดที่ดีที่จะรวมCโดยเร็วที่สุดในฟีเจอร์ใหม่หรือไม่? เพื่อให้คุณสมบัติใหม่อยู่ใกล้เคียงกับที่masterเป็นไปได้? หรือมันจะดีกว่าที่จะปล่อยให้คุณสมบัติใหม่ถูกพัฒนาขึ้นใน "โลก" ของพวกเขาเท่านั้นที่จะรวมเข้ากับต้นแบบเมื่อเสร็จสิ้นแล้ว? จะมีความขัดแย้ง แต่อย่างใดดังนั้นจึงจำเป็นต้องใช้เวลาในการแก้ไขสิ่งเหล่านั้น

5
การใช้. ใด ๆ () ในรายการ C # <> คืออะไร
ฉันได้คุยเรื่องนี้กับเพื่อนร่วมงานและเราไม่สามารถเข้าใจได้ว่าการใช้งานนั้นมีประโยชน์.AnyสำหรับอะไรList&lt;&gt;ใน C # คุณสามารถตรวจสอบความถูกต้องขององค์ประกอบในอาร์เรย์เช่นคำสั่งต่อไปนี้: if (MyList.Any()){ ...} //Returns true or false ซึ่งเป็นสิ่งเดียวกัน if (MyList.Count() != 0) { ... } และเป็นเรื่องธรรมดามากขึ้นอ่านได้และชัดเจนเกี่ยวกับเจตนาของifข้อความ ในท้ายที่สุดเราติดอยู่กับความคิดนี้: .Any() สามารถใช้งานได้เช่นกัน แต่ไม่ชัดเจนเกี่ยวกับเจตนาของโปรแกรมเมอร์และในกรณีนี้ไม่ควรใช้ แต่เรารู้สึกว่ามันไม่ถูกต้อง เราต้องคิดถึงบางสิ่ง พวกเราคือ
40 c#  array  list 

6
วิธีที่ดีที่สุดในการคืนอาเรย์เป็นการตอบกลับใน RESTful API คืออะไร
สมมติว่าเรามีทรัพยากรเช่นนี้ book: type: object properties: author: {type: string} isbn: {type: string} title: {type: string} books: type: array items: book ดังนั้นเมื่อมีคนทำGETทรัพยากรหนังสือเราจะคืนสิ่งต่อไปนี้ [{"author": "Dan Brown", "isbn": "123456", "title": "Digital Fortress"}, {"author": "JK Rowling", "isbn": "234567", "title": "Harry Potter and the Chamber of Secrets"}] ฉันได้ยินจากคนในที่ทำงานว่าวิธีปฏิบัติที่เหลือแนะนำให้กลับคำตอบเป็นวัตถุ JSON ซึ่งหมายความว่า schema ของเราสำหรับbooksจะมีลักษณะเช่นนี้ books: type: object properties: …
40 rest  json 

3
AngularJS: จัดโครงสร้างเว็บแอปพลิเคชั่นด้วย ng-apps หลายตัว
blogosphere มีบทความจำนวนหนึ่งเกี่ยวกับหัวข้อของแนวทางการจัดทำแอป AngularJS เช่นสิ่งเหล่านี้ (และอื่น ๆ ): http://www.johnpapa.net/angular-app-structuring-guidelines/ http://codingsmackdown.tv/blog/2013/04/19/angularjs-modules-for-great-justice/ http://danorlando.com/angularjs-architecture-understanding-modules/ http://henriquat.re/modularizing-angularjs/modularizing-angular-applications/modularizing-angular-applications.html อย่างไรก็ตามสถานการณ์หนึ่งที่ฉันยังไม่เจอสำหรับแนวทางและแนวปฏิบัติที่ดีที่สุดคือกรณีที่คุณมีแอปพลิเคชันเว็บขนาดใหญ่ที่มีแอพ "มินิสปา" หลายตัวและแอปมินิสปาทั้งหมดแชร์รหัสจำนวนหนึ่ง ฉันไม่ได้อ้างถึงกรณีที่พยายามมีng-appการประกาศหลายครั้งในหน้าเดียวกัน ค่อนข้างฉันหมายถึงส่วนต่าง ๆ ของไซต์ขนาดใหญ่ที่มีng-appการประกาศเฉพาะของตนเอง ดังที่ Scott Allen เขียนไว้ในบล็อกOdeToCodeของเขา: สถานการณ์หนึ่งที่ฉันไม่พบว่าได้รับการแก้ไขเป็นอย่างดีคือสถานการณ์ที่มีหลายแอปอยู่ในแอปพลิเคชันเว็บที่ดีกว่าเดิมและต้องการรหัสที่ใช้ร่วมกันบางอย่างกับลูกค้า มีแนวทางใดที่แนะนำให้ทำผิดพลาดเพื่อหลีกเลี่ยงหรือโครงสร้างตัวอย่างที่ดีของสถานการณ์นี้ที่คุณสามารถชี้ไปได้หรือไม่? อัพเดท - 9/10/2558 โครงการหนึ่งที่มีกลยุทธ์องค์กรที่น่าสนใจคือ MEAN.JS และโฟลเดอร์โมดูล https://github.com/meanjs/mean https://github.com/meanjs/mean/tree/master/modules อีกตัวอย่างหนึ่งมาจากตัวอย่าง ASP.NET Music Store SPA https://github.com/aspnet/MusicStore https://github.com/aspnet/MusicStore/tree/master/src/MusicStore.Spa/ng-apps

17
Standups รายวันใช่หรือเปล่า? [ปิด]
คุณคิดว่าการประชุมสแตนด์อะโลนแต่ละวันมีค่ามากน้อยเพียงใด หากคุณไม่คุ้นเคยกับสิ่งนี้สิ่งนี้หมายถึงการประชุมประจำวันที่เป็นส่วนหนึ่งของสมัครพรรคพวกของ Scrum (และวิธีการอื่น ๆ ที่คล่องตัว) แนวคิดคือคุณมีการประชุมรายวันกำหนดเวลา 15 นาทีและทุกคนต้องยืน (เพื่อส่งเสริมให้ผู้คนอยู่ในจุด) ในการประชุมคุณไปรอบ ๆ ห้องและแต่ละคนพูดว่า: - สิ่งที่คุณทำเมื่อวานนี้ - สิ่งที่คุณวางแผนจะทำในวันนี้ - บล็อคหรืออุปสรรคใด ๆ ต่อความก้าวหน้าของคุณ คุณคิดว่าการปฏิบัตินี้มีค่าหรือไม่? มีใครทำงานในที่ที่ทำไปแล้วคุณคิดว่าไง?

1
null เทียบกับคีย์ที่ขาดหายไปในการตอบสนอง REST API [ปิด]
พูดในแอปพลิเคชันของฉันผู้ใช้บางรายให้นามสกุลกับเรา ในการตอบสนอง REST API ร่างกายที่ต้องการ: ด้วยค่า "null": {"firstName": "Bob", "lastName": null} หรือคีย์ที่หายไป: {"firstName": "Bob"}
40 rest  api-design  json 

6
เหตุใด SQL จึงไม่สามารถปรับโครงสร้างได้อีก [ปิด]
ทุกคนรู้ว่านักพัฒนาใหม่เขียนฟังก์ชันที่ยาวนาน ในขณะที่คุณก้าวหน้าคุณจะดีขึ้นเมื่อแบ่งรหัสของคุณออกเป็นชิ้นเล็ก ๆ และประสบการณ์สอนคุณค่าของการทำเช่นนั้น ป้อน SQL ใช่วิธีคิด SQL เกี่ยวกับโค้ดนั้นแตกต่างจากวิธีคิดขั้นตอนเกี่ยวกับโค้ด แต่หลักการนี้ดูเหมือนว่าใช้ได้ สมมติว่าฉันมีแบบสอบถามที่ใช้แบบฟอร์ม: select * from subQuery1 inner join subQuerry2 left join subquerry3 left join join subQuery4 ใช้ ID หรือวันที่เป็นต้น คิวรีย่อยเหล่านั้นซับซ้อนและอาจมีคิวรีย่อยของตนเอง ในบริบทการเขียนโปรแกรมอื่น ๆ ฉันจะคิดว่าตรรกะสำหรับเคียวรีย่อยที่ซับซ้อน 1-4 อยู่ในแนวเดียวกันกับแบบสอบถามหลักของฉันที่รวมพวกเขาทั้งหมด ดูเหมือนตรงไปตรงมาว่าเคียวรีย่อยเหล่านั้นควรถูกกำหนดเป็นมุมมองเหมือนพวกมันจะเป็นฟังก์ชันถ้าฉันกำลังเขียนโค้ดโพรซีเดอร์ เหตุใดจึงไม่ปฏิบัติกันทั่วไป ทำไมผู้คนจึงเขียนแบบสอบถาม SQL แบบเสาหินยาวเหล่านี้บ่อยๆ เหตุใด SQL จึงไม่สนับสนุนการใช้มุมมองที่กว้างขวางเช่นเดียวกับการเขียนโปรแกรมตามขั้นตอนสนับสนุนการใช้ฟังก์ชันที่กว้างขวาง (ในสภาพแวดล้อมแบบองค์กรจำนวนมากการสร้างมุมมองไม่ใช่สิ่งที่ทำได้ง่ายมีคำขอและการอนุมัติที่จำเป็นลองนึกภาพหากโปรแกรมเมอร์ประเภทอื่นต้องส่งคำขอทุกครั้งที่สร้างฟังก์ชัน!) ฉันคิดถึงคำตอบที่เป็นไปได้สามข้อ: นี่เป็นเรื่องปกติอยู่แล้วและฉันกำลังทำงานกับคนที่ไม่มีประสบการณ์ โปรแกรมเมอร์ที่มีประสบการณ์ไม่ได้เขียน SQL ที่ซับซ้อนเพราะพวกเขาต้องการที่จะแก้ปัญหาการประมวลผลข้อมูลอย่างหนักด้วยรหัสขั้นตอน อื่น ๆ …

5
ทำไมสืบทอดคลาสและไม่เพิ่มคุณสมบัติ?
ฉันพบต้นไม้มรดกในฐานรหัส (ค่อนข้างใหญ่) ของเราที่ไปสิ่งนี้: public class NamedEntity { public int Id { get; set; } public string Name { get; set; } } public class OrderDateInfo : NamedEntity { } จากสิ่งที่ฉันสามารถรวบรวมได้สิ่งนี้มักใช้เพื่อผูกสิ่งต่าง ๆ ไว้ที่ส่วนหน้า NamedEntityสำหรับฉันนี้จะทำให้ความรู้สึกที่จะให้ชื่อเป็นรูปธรรมในชั้นเรียนแทนการอาศัยทั่วไป ในทางกลับกันมีจำนวนคลาสดังกล่าวที่ไม่มีคุณสมบัติเพิ่มเติม มีข้อเสียสำหรับวิธีนี้หรือไม่?

8
ฟิลด์บูลีนใหม่ดีกว่าการอ้างอิงค่า Null หรือไม่หากค่าสามารถขาดหายไปอย่างมีความหมายได้
ตัวอย่างเช่นสมมติว่าฉันมีคลาสMemberซึ่งมี lastChangePasswordTime: class Member{ . . . constructor(){ this.lastChangePasswordTime=null, } } ซึ่ง lastChangePasswordTime อาจไม่มีความหมายเนื่องจากสมาชิกบางคนอาจไม่เปลี่ยนรหัสผ่าน แต่ถ้าหาก nulls เป็นสิ่งชั่วร้ายสิ่งที่ควรใช้เมื่อค่าสามารถขาดความหมายได้อย่างไร และhttps://softwareengineering.stackexchange.com/a/12836/248528ฉันไม่ควรใช้ null เพื่อแสดงค่าขาดหายไปอย่างมีความหมาย ดังนั้นฉันพยายามเพิ่มธงบูลีน: class Member{ . . . constructor(){ this.isPasswordChanged=false, this.lastChangePasswordTime=null, } } แต่ฉันคิดว่ามันค่อนข้างล้าสมัยเพราะ: เมื่อ isPasswordChanged เป็นเท็จ lastChangePasswordTime จะต้องเป็นโมฆะและการตรวจสอบ lastChangePasswordTime == null เกือบจะเหมือนกันกับการตรวจสอบ isPasswordChanged เป็นเท็จดังนั้นฉันชอบเช็ค lastChangePasswordTime == null โดยตรง เมื่อเปลี่ยนลอจิกที่นี่ฉันอาจลืมอัปเดตทั้งสองฟิลด์ หมายเหตุ: เมื่อผู้ใช้เปลี่ยนรหัสผ่านฉันจะบันทึกเวลาเช่นนี้: …
39 null  boolean 

11
REST API ควรส่งคืนข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 ข้อเพื่อระบุว่าแบบสอบถามอ้างอิงวัตถุที่ไม่มีอยู่หรือไม่
ฉันกำลังทำงานกับ REST API ซึ่งอยู่บนเซิร์ฟเวอร์ที่จัดการข้อมูลสำหรับอุปกรณ์ IoT จำนวนมาก งานของฉันคือการสืบค้นเซิร์ฟเวอร์โดยใช้ API เพื่อรวบรวมข้อมูลประสิทธิภาพเฉพาะเกี่ยวกับอุปกรณ์ดังกล่าว ในอินสแตนซ์หนึ่งฉันได้รับรายการอุปกรณ์ที่มีอยู่และตัวระบุที่เกี่ยวข้องจากนั้นจึงสอบถามเซิร์ฟเวอร์เพื่อรับรายละเอียดเพิ่มเติมโดยใช้ตัวระบุเหล่านั้น (GUID) เซิร์ฟเวอร์ส่งคืน500 Internal Server Errorแบบสอบถามสำหรับหนึ่งใน ID เหล่านั้น ในแอปพลิเคชันของฉันมีข้อผิดพลาดเกิดขึ้นและฉันไม่เห็นรายละเอียดเกี่ยวกับข้อผิดพลาด หากฉันตรวจสอบการตอบสนองอย่างใกล้ชิดกับบุรุษไปรษณีย์ฉันจะเห็นว่าเซิร์ฟเวอร์ส่งคืน JSON ในเนื้อหาซึ่งมี: errorMessage: "This ID does not exist". ไม่สนใจข้อเท็จจริงที่เซิร์ฟเวอร์ระบุรหัสเริ่มต้นนั่นเป็นปัญหาแยกต่างหากสำหรับนักพัฒนา REST API ควรส่งคืน a 500 Internal Server Errorเพื่อรายงานว่าแบบสอบถามอ้างอิงวัตถุที่ไม่มีอยู่หรือไม่? ตามความคิดของฉันรหัสตอบกลับ HTTP ควรอ้างอิงอย่างเคร่งครัดถึงสถานะของการเรียกใช้ REST แทนที่จะใช้กลไกภายในของ API ฉันคาดหวังว่าจะ200 OKมีการตอบสนองที่มีข้อผิดพลาดและคำอธิบายซึ่งจะเป็นกรรมสิทธิ์ของ API ที่เป็นปัญหา มันเกิดขึ้นกับฉันว่ามีความคาดหวังที่แตกต่างกันขึ้นอยู่กับว่าการเรียกใช้ REST นั้นมีโครงสร้างอย่างไร ลองพิจารณาตัวอย่างเหล่านี้: …

5
มันถือว่าเป็นรูปแบบการต่อต้านการอ่านจาก STDIN จากภายในห้องสมุดหรือไม่?
ในขณะที่เขียนห้องสมุดสำหรับโครงการขนาดใหญ่ที่ฉันกำลังทำงานอยู่มีปัญหาเกิดขึ้นซึ่งต้องใช้โทเค็นเพื่อส่งไปยังที่อยู่อีเมลจากนั้นส่งกลับไปยังรหัสที่สามารถใช้เพื่อการใช้งานต่อไป เพื่อนร่วมงานของฉันบอกว่าให้อ่านจาก STDIN (โดยใช้ Python:) code = input("Enter code: ")จากนั้นให้ผู้ใช้ส่งมันมาให้ฉัน แต่สำหรับฉันนี่เป็นวิธีปฏิบัติที่ไม่ดีเนื่องจากห้องสมุดอาจใช้ (ในกรณีนี้จะ) ใช้ในงานแบ็คกราวน์บนเซิร์ฟเวอร์ . ฉันสงสัยว่าสิ่งนี้ถือเป็นรูปแบบการต่อต้านหรือไม่

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