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

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

7
ความสัมพันธ์ระหว่าง C #, .NET, ASP, ASP.NET ฯลฯ [ปิด]
ฉันไม่ชัดเจนเกี่ยวกับความแตกต่างระหว่าง C #, C # .NET และเหมือนกันสำหรับ ASP และภาษา '.NET' อื่น ๆ จากสิ่งที่ฉันเข้าใจ. NET เป็นสิ่งที่ห้องสมุด / กรอบของ ... สิ่ง ฉันคิดว่าพวกเขาเข้าถึงข้อมูล Windows เช่นองค์ประกอบของฟอร์มเป็นต้น แต่ดูเหมือนจะไม่ได้ใช้กับ ASP.NET นอกจากนี้ฉันเห็นผู้คนเรียกตัวเองว่า '.NET' นี่หมายความว่าพวกเขาคล่องแคล่วใน C #, ASP และภาษาอื่น ๆ ? ในที่สุดฉันไม่เคยเห็น C # หากไม่ได้แนบ. NET C # เชื่อมโยงกับ. NET อย่างใกล้ชิดว่าไม่สามารถใช้งานได้หรือไม่ โดยสรุป:. NET มีอะไรให้บ้าง มันเกี่ยวข้องกับ C # และ …
143 c#  .net  asp.net 

14
แนวคิดเรื่อง“ องค์ประกอบของความโปรดปรานเหนือมรดก” นี้มาจากไหน?
ในช่วงไม่กี่เดือนที่ผ่านมามนต์ "องค์ประกอบที่เป็นที่โปรดปรานเหนือมรดก" ดูเหมือนจะเด้งขึ้นมาจากที่ไหนเลยและกลายเป็นเกือบ meme บางอย่างภายในชุมชนการเขียนโปรแกรม และทุกครั้งที่ฉันเห็นฉันก็รู้สึกงงเล็กน้อย มันเหมือนมีคนพูดว่า "ชอบการฝึกฝนมากกว่าค้อน" จากประสบการณ์ของฉันการจัดองค์ประกอบและการรับมรดกเป็นเครื่องมือสองแบบที่แตกต่างกันกับกรณีการใช้งานที่แตกต่างกันและจัดการกับมันราวกับว่าพวกมันใช้แทนกันได้และอีกอันหนึ่งเหนือกว่าอีกอันหนึ่ง นอกจากนี้ฉันไม่เคยเห็นคำอธิบายที่แท้จริงว่าทำไมการรับมรดกจึงไม่ดีและการจัดองค์ประกอบเป็นสิ่งที่ดีซึ่งทำให้ฉันสงสัยมากขึ้น ควรที่จะได้รับการยอมรับในความเชื่อหรือไม่? การทดแทน Liskov และ polymorphism นั้นเป็นที่รู้จักกันดีผลประโยชน์ที่ชัดเจนและ IMO ประกอบด้วยจุดทั้งหมดของการใช้การเขียนโปรแกรมเชิงวัตถุและไม่มีใครอธิบายได้ว่าทำไมพวกเขาจึงควรทิ้งองค์ประกอบเหล่านั้น ไม่มีใครรู้ว่าแนวคิดนี้มาจากไหนและเหตุผลที่อยู่เบื้องหลังมันคืออะไร?

8
'โมดูลนำเข้า' กับ 'จากฟังก์ชันนำเข้าโมดูล'
ฉันใช้วิธีนี้มาตลอด: from sys import argv และใช้argvมีเพียงargv แต่มีแบบแผนของการใช้สิ่งนี้: import sys และใช้ argv โดย sys.argv วิธีที่สองทำให้รหัสตัวเองเอกสารและฉัน(จริงๆ) เป็นไปตามมัน แต่เหตุผลที่ฉันชอบวิธีแรกคือรวดเร็วเพราะเรานำเข้าเฉพาะฟังก์ชั่นที่ต้องการแทนที่จะนำเข้าโมดูลทั้งหมด (ซึ่งมีฟังก์ชั่นที่ไร้ประโยชน์มากกว่าซึ่งไพ ธ อนจะเสียเวลาในการนำเข้า) โปรดทราบว่าฉันต้องการเพียง argv และฟังก์ชั่นอื่น ๆ จาก sys นั้นไร้ประโยชน์สำหรับฉัน ดังนั้นคำถามของฉันคือ วิธีแรกทำให้สคริปต์เร็วขึ้นจริง ๆ หรือไม่ วิธีใดที่เป็นที่ต้องการมากที่สุด ทำไม?
143 python 

14
วิธีง่าย ๆ ในการตรวจจับโค้ดในข้อความอย่างน่าเชื่อถือ?
GMail มีคุณสมบัตินี้ซึ่งจะเตือนคุณหากคุณพยายามส่งอีเมลที่คิดว่าอาจมีไฟล์แนบ เนื่องจาก GMail ตรวจพบสตริงsee the attachedในอีเมล แต่ไม่มีสิ่งที่แนบมาจริงจึงเตือนฉันด้วยกล่องโต้ตอบตกลง / ยกเลิกเมื่อฉันคลิกปุ่มส่ง เรามีปัญหาที่เกี่ยวข้องกับ Stack Overflow กล่าวคือเมื่อผู้ใช้เข้าสู่โพสต์เช่นนี้ : ปัญหาของฉันคือฉันต้องเปลี่ยนฐานข้อมูล แต่ฉันจะไม่สร้าง การเชื่อมต่อใหม่ ตัวอย่าง: ชุดข้อมูล dsMasterInfo = ชุดข้อมูลใหม่ (); ฐานข้อมูล db = DatabaseFactory.CreateDatabase ("ConnectionString"); DbCommand dbCommand = db.GetStoredProcCommand ("uspGetMasterName"); ผู้ใช้นี้ไม่ได้ฟอร์แมตรหัสเป็นรหัส! นั่นคือพวกเขาไม่ได้เยื้อง 4 ช่องว่างต่อมาร์กดาวน์หรือใช้ปุ่มรหัส (หรือแป้นพิมพ์ลัดctrl+ k) ที่ทำเพื่อพวกเขา ดังนั้นระบบของเรายอมรับการแก้ไขจำนวนมากที่ผู้คนต้องเข้าไปและจัดรูปแบบโค้ดด้วยตนเองสำหรับผู้ที่ไม่สามารถเข้าใจได้ สิ่งนี้นำไปสู่การท้องมาก เราได้ปรับปรุงเครื่องมือแก้ไขหลายครั้ง แต่ขาดการขับรถไปที่บ้านของผู้ใช้และกดปุ่มที่ถูกต้องบนแป้นพิมพ์สำหรับพวกเขาพวกเรากำลังสูญเสียเพื่อดูว่าจะทำอย่างไรต่อไป นั่นเป็นเหตุผลที่เรากำลังพิจารณาคำเตือนสไตล์ Google GMail: คุณหมายถึงรหัสไปรษณีย์หรือไม่ คุณเขียนสิ่งที่เราคิดว่าดูเหมือนรหัส …

17
มาตรฐานการเข้ารหัสเพื่อความชัดเจน: แสดงความคิดเห็นทุกบรรทัดของรหัส?
ฉันทำงานในร้านค้าที่ผลิตซอฟต์แวร์ที่สำคัญต่อชีวิตและฉันได้จัดการกับกฎการแสดงความคิดเห็นที่ตั้งใจจะให้โค้ดอ่านได้และอาจช่วยชีวิตผู้คนได้ จากประสบการณ์ของฉันแม้ว่าความต้องการจะกลายเป็นงานที่น่าเบื่อสมองที่ต้องทำเครื่องหมายในรายการตรวจสอบและไม่ช่วยให้ฉันจดจ่อกับการเขียนโค้ดที่เข้าใจได้ นอกจากนี้ยังเบี่ยงเบนความสนใจจากผู้ตรวจสอบเพียร์ของฉันจากการสนทนาที่มีความหมายกับฉันมากขึ้นเกี่ยวกับวิธีทำให้โค้ดง่ายต่อการเข้าใจ ฉันให้คะแนนรหัสนักเรียนที่ไม่มีความคิดเห็นและเห็นว่าเพราะเหตุใดพวกเขาจึงควรทำเครื่องหมายเพราะละเลยพวกเขา ฉันเข้าใจว่าการใช้ชื่อที่ดีโครงสร้างที่เรียบง่ายฟังก์ชั่นสั้น ๆ และโมดูลที่มุ่งเน้นจะทำให้โค้ดนั้นเข้าใจได้ง่ายพอที่จะลดความคิดเห็นได้ ฉันยังเข้าใจด้วยว่าความคิดเห็นควรอธิบายว่าทำไมรหัสทำในสิ่งที่มันทำไม่ได้อย่างไร ให้ทั้งหมดนี้เป็นไปได้ที่จะเขียนมาตรฐานการเข้ารหัสที่ดีที่จับความคิดนี้ คนที่จะมีความเกี่ยวข้องในการตรวจสอบโดยเพื่อน แต่จะไม่เปลี่ยนเป็นรายการตรวจสอบที่ไม่สนใจซึ่งทำให้โน้ตไม่เป็นประโยชน์มากกว่า: "คุณลืมแสดงความคิดเห็นในบรรทัดที่ 42" ตัวอย่างประเภทของรหัสกฎนี้อาจต้องใช้เมื่อถือว่าเป็นบรรทัดในรายการตรวจสอบ: /* Display an error message */ function display_error_message( $error_message ) { /* Display the error message */ echo $error_message; /* Exit the application */ exit(); } /* -------------------------------------------------------------------- */ /* Check if the configuration file does …

30
จะเป็นโปรแกรมเมอร์ที่“ เร็วขึ้น” ได้อย่างไร?
การประเมินงานครั้งล่าสุดของฉันรวมถึงจุดอ่อนเพียงจุดเดียว: ทันเวลา ฉันรู้อยู่แล้วว่าบางสิ่งที่ฉันสามารถทำได้เพื่อปรับปรุงสิ่งนี้ แต่สิ่งที่ฉันกำลังมองหามีอยู่มากกว่านี้ ใครบ้างมีคำแนะนำหรือคำแนะนำเกี่ยวกับสิ่งที่พวกเขาทำเพื่อเพิ่มความเร็วของการส่งออกโดยไม่เสียสละคุณภาพ คุณประมาณการระยะเวลาและติดกับพวกเขาได้อย่างไร คุณจะทำอย่างไรเพื่อให้ได้งานมากขึ้นในช่วงเวลาที่สั้นลง? ข้อเสนอแนะใด ๆ ที่ชื่นชมอย่างมากขอบคุณ

10
เราควรกำหนดประเภทสำหรับทุกสิ่งหรือไม่
เมื่อเร็ว ๆ นี้ฉันมีปัญหากับการอ่านรหัสของฉัน ฉันมีฟังก์ชั่นที่ทำการดำเนินการและส่งคืนสตริงที่แสดง ID ของการดำเนินการนี้สำหรับการอ้างอิงในอนาคต (บิตเช่น OpenFile ใน Windows ที่ส่งคืนหมายเลขอ้างอิง) ผู้ใช้จะใช้ ID นี้ในภายหลังเพื่อเริ่มการทำงานและเพื่อตรวจสอบความสมบูรณ์ ID ต้องเป็นสตริงแบบสุ่มเนื่องจากความกังวลเกี่ยวกับการทำงานร่วมกัน สิ่งนี้สร้างวิธีที่มีลายเซ็นที่ไม่ชัดเจนเช่น: public string CreateNewThing() สิ่งนี้ทำให้เจตนาของประเภทผลตอบแทนไม่ชัดเจน ฉันคิดว่าการพันสตริงนี้ในรูปแบบอื่นที่ทำให้ความหมายของมันชัดเจนขึ้นเช่น: public OperationIdentifier CreateNewThing() ประเภทจะมีเฉพาะสตริงและใช้เมื่อใดก็ตามที่มีการใช้สตริงนี้ เห็นได้ชัดว่าข้อดีของวิธีการใช้งานแบบนี้คือความปลอดภัยและความตั้งใจที่ชัดเจนยิ่งขึ้น แต่มันก็สร้างรหัสและรหัสจำนวนมากขึ้น ในมือข้างหนึ่งฉันชอบความปลอดภัยที่เพิ่มขึ้น แต่ก็สร้างความยุ่งเหยิงมากมาย คุณคิดว่าเป็นวิธีปฏิบัติที่ดีในการห่อประเภทที่เรียบง่ายในชั้นเรียนด้วยเหตุผลด้านความปลอดภัยหรือไม่?
141 type-systems 

21
คุณจะรักษาโฟกัสได้อย่างไรเมื่อลักษณะเฉพาะของการเขียนโปรแกรมใช้เวลา 10 + วินาทีในการดำเนินการให้เสร็จสมบูรณ์ [ปิด]
ฉันมีช่วงเวลาที่ยากมากที่มุ่งเน้นไปที่สิ่งที่ฉันทำ (การเขียนโปรแกรมที่ชาญฉลาด) เมื่อบางสิ่งบางอย่าง (การรวบรวมเวลาเริ่มต้น ฯลฯ ) ใช้เวลามากกว่าสองสามวินาที Anecdotally ดูเหมือนว่าขีด จำกัด อยู่ที่ประมาณ 10 วินาที (และฉันจำได้อ่านเกี่ยวกับการศึกษาที่กล่าวในสิ่งเดียวกันแม้ว่าฉันไม่สามารถหาได้ในตอนนี้) ดังนั้นสิ่งที่มักจะเกิดขึ้นคือฉันทำการเปลี่ยนแปลงแล้วเรียกใช้โปรแกรมเพื่อทดสอบ ใช้เวลาประมาณ 30 วินาทีดังนั้นฉันจึงเริ่มอ่านอย่างอื่นและก่อนที่ฉันจะรู้ว่าผ่านไป 20 นาทีแล้วจากนั้นก็จะใช้เวลา (ถ้าฉันโชคดี!) อีก 10 นาทีเพื่อจัดการกับการสลับบริบทเพื่อกลับสู่การเขียนโปรแกรม . ไม่ใช่เรื่องที่พูดเกินจริงที่จะบอกว่าบางสิ่งบางอย่างที่ควรใช้เวลาหลายนาทีในการทำให้ฉันสมบูรณ์ ฉันอยากรู้มากเกี่ยวกับสิ่งที่โปรแกรมเมอร์คนอื่นทำเพื่อต่อสู้กับแนวโน้มนี้ (หรือถ้าฉันไม่เหมือนใครและพวกเขาไม่มีแนวโน้มนี้) ยินดีต้อนรับข้อเสนอแนะทุกประเภทไม่ว่าจะเป็น "นั่งบนมือของคุณหลังจากกดปุ่มคอมไพล์" ไปจนถึงกลเม็ดทางจิตถึง "ถ้าใช้เวลา 30 วินาทีในการเริ่มต้นบางสิ่งเพื่อทดสอบการเปลี่ยนแปลงแล้วมีอะไรผิดปกติกับกระบวนการพัฒนาของคุณ !"

2
Git branching และการติดแท็กแนวทางปฏิบัติที่ดีที่สุด
ฉันกำลังเรียนรู้ที่จะใช้ Git โดยการอ่านPro Git ตอนนี้ฉันกำลังเรียนรู้เกี่ยวกับการแตกแขนงและแท็ก คำถามของฉันคือเมื่อฉันควรใช้สาขาและเมื่อฉันควรใช้แท็ก? ตัวอย่างเช่นสมมติว่าฉันสร้างสาขาสำหรับเวอร์ชัน 1.1 ของโครงการ เมื่อฉันเสร็จสิ้นและปล่อยรุ่นนี้ฉันควรออกจากสาขาเพื่อทำเครื่องหมายรุ่นที่วางจำหน่ายหรือไม่ หรือฉันควรเพิ่มแท็ก หากฉันเพิ่มแท็กฉันควรลบสาขาเวอร์ชัน (สมมติว่ามันรวมเข้ากับมาสเตอร์หรือสาขาอื่น ๆ )

18
มีข้อแก้ตัวสำหรับชื่อตัวแปรสั้น ๆ หรือไม่?
สิ่งนี้กลายเป็นความสับสนอย่างใหญ่หลวงกับโค้ดเบสที่ฉันกำลังทำงานอยู่ ชื่อตัวแปรหลายชื่อของเรานั้นสั้นและไม่มีคำอธิบาย ฉันเป็นนักพัฒนาเพียงคนเดียวที่เหลืออยู่ในโครงการและไม่มีเอกสารเกี่ยวกับสิ่งที่พวกเขาส่วนใหญ่ทำดังนั้นฉันต้องใช้เวลาเพิ่มเติมเพื่อติดตามสิ่งที่พวกเขาเป็นตัวแทน ตัวอย่างเช่นฉันอ่านโค้ดบางตัวที่อัพเดตนิยามของผิวหน้าออปติคัล ตัวแปรที่ตั้งไว้ที่จุดเริ่มต้นมีดังนี้: double dR, dCV, dK, dDin, dDout, dRin, dRout dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1)); dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1)); ... and so on อาจจะเป็นเพียงฉัน แต่มันก็บอกฉันว่าไม่มีอะไรเกี่ยวกับสิ่งที่พวกเขาเป็นตัวแทนซึ่งทำให้การทำความเข้าใจโค้ดยากขึ้น ทั้งหมดที่ฉันรู้คือมันเป็นตัวแปรที่แยกวิเคราะห์เฉพาะแถวจากตารางที่ระบุที่ไหนสักแห่ง หลังจากการค้นหาบางฉันพบสิ่งที่พวกเขาหมายถึง: dR = radius dCV = curvature dK = conic constant dDin = inner aperture dDout = outer aperture dRin = inner radius dRout …

8
การเขียนโปรแกรมที่ไม่ดีเป็นเรื่องปกติในอุตสาหกรรมซอฟต์แวร์หรือไม่? [ปิด]
ฉันเพิ่งเริ่มงานแรกในฐานะนักพัฒนาซอฟต์แวร์เมื่อหนึ่งเดือนก่อน ทุกอย่างที่ฉันได้เรียนรู้เกี่ยวกับ OOP, SOLID , แห้ง , YAGNI, รูปแบบการออกแบบ, SRP , ฯลฯ สามารถถูกโยนออกไปนอกหน้าต่าง พวกเขาใช้เว็บฟอร์ม C # .NET และทำเกือบทุกอย่างภายใน Code Behind ด้วยคลาสภายนอกน้อยมากซึ่งไม่ได้เรียกว่าออบเจ็กต์ พวกเขาใช้การควบคุมที่กำหนดเองและนำมาใช้ใหม่ เกี่ยวกับวัตถุเท่านั้นที่ใช้โดยEntity Framework พวกเขาใช้ Code Behinds ซ้ำสำหรับลูกค้าแต่ละราย พวกเขามีวิธีการที่ยาว 400 บรรทัดในการทำสิ่งของทุกประเภท สำหรับลูกค้าใหม่พวกเขาใช้ aspx และ aspx.cs และดึงรหัสลูกค้าออกและเริ่มเพิ่มรหัสเฉพาะลูกค้าใหม่ ข้อแก้ตัวแรกของพวกเขาคือมันจะเพิ่มการบำรุงรักษาเพิ่มเติมและรหัสเพิ่มเติมคือการบำรุงรักษาเพิ่มเติม มันเป็นร้านค้าเล็ก ๆ ของนักพัฒนาสามคนรวมถึงตัวฉันด้วย นักพัฒนาซอฟต์แวร์หนึ่งคนมีประสบการณ์มากกว่า 30 ปีและอีกหนึ่งคนมีประสบการณ์มากกว่า 20 ปี หนึ่งเคยเป็นนักพัฒนาเกมและคนอื่น ๆ ได้ทำงานใน C และ …

1
โมดูลเทียบกับแพ็คเกจ?
เมื่อใดก็ตามที่ฉันทำfrom 'x' import 'y'ฉันสงสัยว่าอันไหนที่ถือว่าเป็น 'โมดูล' และอันไหนคือ 'แพ็คเกจ' และทำไมมันจึงไม่มีวิธีอื่น
140 python  packages  modules 

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

10
อะไรคือข้อดีของรูปแบบ endian เล็ก ๆ น้อย ๆ ?
โปรเซสเซอร์ของ Intel (และอื่น ๆ ) อาจใช้รูปแบบ endian เล็กน้อยสำหรับการจัดเก็บ ฉันมักจะสงสัยว่าทำไมบางคนต้องการเก็บไบต์ในลำดับที่กลับกัน รูปแบบนี้มีข้อดีมากกว่ารูปแบบ endian ใหญ่หรือไม่

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

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