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

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

4
Little Endian ชนะแล้วหรือยัง?
เมื่อเร็ว ๆ นี้เมื่อสอนเกี่ยวกับการสู้รบของ Big vs. Little Endian นักเรียนคนหนึ่งถามว่ามันได้รับการตัดสินหรือไม่และฉันรู้ว่าฉันไม่รู้ ดูบทความ Wikipediaดูเหมือนว่าคู่ OS / สถาปัตยกรรมปัจจุบันที่นิยมที่สุดใช้ Little Endian แต่ Internet Protocol ระบุ Big Endian สำหรับการถ่ายโอนค่าตัวเลขในส่วนหัวของแพ็กเก็ต นั่นเป็นบทสรุปที่ดีของสถานะปัจจุบันหรือไม่? การ์ดเครือข่ายหรือซีพียูในปัจจุบันให้การสนับสนุนฮาร์ดแวร์สำหรับการสลับลำดับไบต์หรือไม่

3
ที่อยู่ C ++ 11 เกี่ยวข้องกับการส่งวัตถุ std lib ระหว่างขอบเขตไลบรารีแบบไดนามิก / ใช้ร่วมกันหรือไม่? (เช่นที่กำลังเป็นต้น)?
หนึ่งในข้อร้องเรียนหลักของฉันเกี่ยวกับ C ++ คือวิธียากในทางปฏิบัติก็คือการส่งวัตถุไลบรารี std นอกขอบเขตไลบรารีแบบไดนามิก (เช่น dll / ดังนั้น) ไลบรารี std มักเป็นส่วนหัวเท่านั้น ซึ่งเป็นสิ่งที่ดีสำหรับการเพิ่มประสิทธิภาพที่ยอดเยี่ยม อย่างไรก็ตามสำหรับ dll พวกเขามักจะสร้างด้วยการตั้งค่าคอมไพเลอร์ที่แตกต่างกันซึ่งอาจส่งผลกระทบต่อโครงสร้างภายใน / รหัสของคอนเทนเนอร์ไลบรารี std ตัวอย่างเช่นใน MSVC dll หนึ่งอาจสร้างขึ้นด้วยการดีบัก iterator ในขณะที่คนอื่นสร้างมันออก Dll ทั้งสองนี้อาจพบปัญหาในการส่งผ่านคอนเทนเนอร์มาตรฐาน หากฉันเปิดเผยstd::stringในส่วนต่อประสานของฉันฉันไม่สามารถรับประกันได้ว่ารหัสที่ลูกค้าใช้std::stringอยู่นั้นตรงกับห้องสมุดของฉันstd::stringทั้งหมด สิ่งนี้นำไปสู่ปัญหาการดีบักปัญหาปวดหัว ฯลฯ คุณควบคุมการตั้งค่าคอมไพเลอร์ในองค์กรของคุณอย่างแน่นหนาเพื่อป้องกันปัญหาเหล่านี้หรือคุณใช้อินเทอร์เฟซ C ที่ง่ายกว่าที่ไม่มีปัญหาเหล่านี้ หรือระบุให้กับลูกค้าของคุณถึงการตั้งค่าคอมไพเลอร์ที่คาดหวังที่พวกเขาควรใช้ (ซึ่งจะดูดถ้าห้องสมุดอื่นระบุการตั้งค่าคอมไพเลอร์อื่น ๆ ) คำถามของฉันคือ C ++ 11 พยายามทำสิ่งใดเพื่อแก้ไขปัญหาเหล่านี้หรือไม่
34 c++  libraries  c++11 

3
ทำไมเราต้องใส่ N ก่อนสตริงใน Microsoft SQL Server
ฉันเรียนรู้ T-SQL จากตัวอย่างที่ฉันเห็นการแทรกข้อความในvarchar()เซลล์ฉันสามารถเขียนเฉพาะสตริงที่จะแทรก แต่สำหรับnvarchar()เซลล์ตัวอย่างทุก ๆ คำนำหน้าสตริงด้วยตัวอักษร N ฉันลองใช้แบบสอบถามต่อไปนี้บนตารางที่มีnvarchar()แถวและทำงานได้ดีดังนั้นคำนำหน้า N จึงไม่จำเป็น: insert into [TableName] values ('Hello', 'World') เหตุใดสตริงจึงถูกนำหน้าด้วย N ในทุกตัวอย่างที่ฉันเห็น ข้อดีหรือข้อเสียของการใช้คำนำหน้านี้คืออะไร

8
จะตัดสินได้อย่างไรว่าคลาสตรงตามหลักการความรับผิดชอบเดียว?
หลักการความรับผิดชอบเดี่ยวอยู่บนพื้นฐานของหลักการทำงานร่วมกันสูง ความแตกต่างระหว่างทั้งสองคือคลาสที่มีความเหนียวแน่นสูงมีชุดของความรับผิดชอบที่เกี่ยวข้องอย่างมากในขณะที่คลาสที่ใช้ SRP มีความรับผิดชอบเพียงอย่างเดียว แต่เราจะตัดสินได้อย่างไรว่าคลาสใดมีคุณสมบัติของชุดความรับผิดชอบและมีความสอดคล้องสูงหรือมีความรับผิดชอบเพียงอย่างเดียวและสอดคล้องกับ SRP หรือไม่ กล่าวอีกนัยหนึ่งมันไม่ได้เป็นอัตวิสัยมากกว่าหรือน้อยกว่าเนื่องจากบางคนอาจมองว่าคลาสนั้นมีความละเอียดมาก (และจะเชื่อว่าคลาสนั้นเป็นไปตาม SRP) ในขณะที่คนอื่น ๆ อาจคิดว่ามันไม่ละเอียดเพียงพอ

3
ไบนารีคืออะไร [ปิด]
ฉันเห็นผู้ใช้ไบนารีคำศัพท์ในบริบทที่แตกต่างกันมาก ไบนารีคืออะไร การรวบรวมไฟล์ไบนารีไฟล์ติดตั้งไฟล์. dll หรืออะไร หรือเป็นคำทั่วไปสำหรับการรวบรวมไฟล์บางส่วนในดิสก์?

21
เหตุใดโครงการไอทีขนาดใหญ่จึงล้มเหลวหรือมีค่าใช้จ่าย / กำหนดการมากเกินไป [ปิด]
ฉันมักจะอ่านเกี่ยวกับการเปลี่ยนแปลงขนาดใหญ่หรือโครงการบูรณาการที่เป็นภัยพิบัติทั้งหมดหรือเกือบทั้งหมด แม้ว่าพวกเขาจะประสบความสำเร็จในด้านค่าใช้จ่ายและกำหนดเวลาการระเบิดเป็นอย่างมาก อะไรคือเหตุผลที่แท้จริงที่อยู่เบื้องหลังโครงการขนาดใหญ่ที่มีแนวโน้มที่จะล้มเหลวมากกว่า สามารถใช้เปรียวในโครงการประเภทนี้หรือวิธีการดั้งเดิมยังคงดีที่สุด ตัวอย่างหนึ่งจากออสเตรเลียคือโครงการเงินเดือนของรัฐควีนส์แลนด์ซึ่งพวกเขาเปลี่ยนเกณฑ์ความสำเร็จในการทดสอบเพื่อส่งมอบโครงการ ดูโครงการที่ล้มเหลวเพิ่มเติมในคำถาม SO นี้ ( บนเครื่อง Wayback ) คุณมีประสบการณ์ส่วนตัวบ้างไหมที่จะแบ่งปัน?

5
Python ผสมสารป้องกันลายหรือไม่
ฉันรู้อย่างเต็มที่ว่าpylintและเครื่องมือวิเคราะห์แบบคงที่อื่น ๆ ไม่ได้รู้ทั้งหมดและบางครั้งคำแนะนำของพวกเขาจะต้องไม่เชื่อฟัง (ใช้กับคลาสข้อความที่หลากหลายไม่ใช่แค่conventions) ถ้าฉันมีชั้นเรียนเช่น class related_methods(): def a_method(self): self.stack.function(self.my_var) class more_methods(): def b_method(self): self.otherfunc() class implement_methods(related_methods, more_methods): def __init__(self): self.stack = some() self.my_var = other() def otherfunc(self): self.a_method() เห็นได้ชัดว่ามีการวางแผน นี่เป็นตัวอย่างที่ดีกว่าหากคุณต้องการ ฉันเชื่อว่าสไตล์นี้เรียกว่าใช้ "มิกซ์" เช่นเดียวกับเครื่องมืออื่น ๆpylintอัตรารหัสนี้ที่-21.67 / 10ส่วนใหญ่เพราะมันคิดmore_methodsและrelated_methodsไม่ได้มีselfหรือแอตทริบิวต์otherfunc, stack, annd my_varเพราะโดยไม่ต้องใช้รหัสที่มันเห็นได้ชัดว่าไม่สามารถดูrelated_methodsและมีผสมในmore_methodsimplement_methods คอมไพเลอร์และเครื่องมือวิเคราะห์แบบสแตติกไม่สามารถแก้ปัญหาการหยุดนิ่งได้เสมอไปแต่ฉันรู้สึกว่านี่เป็นกรณีที่มองว่าสิ่งที่สืบทอดมาimplement_methodsจะแสดงให้เห็นว่าสิ่งนี้เป็นสิ่งที่ถูกต้องสมบูรณ์และนั่นก็เป็นเรื่องง่ายมาก ทำไมเครื่องมือวิเคราะห์แบบคงที่ปฏิเสธรูปแบบ OOP ที่ถูกต้อง (ฉันคิดว่า) ทั้ง: พวกเขาไม่แม้แต่จะลองตรวจสอบการสืบทอดหรือ มิกซ์อินถูกทำให้หมดกำลังใจใน Python ซึ่งเป็นสำนวนที่อ่านง่าย …

3
ฉันสามารถลิงก์ไปยังไลบรารี GPL จากแอปพลิเคชันที่ปิดได้หรือไม่
โอเคก่อนที่ทุกคนจะตะโกนเกี่ยวกับคำถามที่ซ้ำกันใช่ฉันเคยเห็นหลายคำถามเช่นนี้ที่นี่ แต่ไม่มีใครตอบคำถาม ถ้าฉันเชื่อมโยงกับไลบรารี GPL-ed โดยไม่ต้องแก้ไขไลบรารีนั้นฉันต้องปล่อยซอร์สโค้ดของฉันหรือไม่ ตามคำถามนี้คำตอบคือใช่! แต่คำตอบนี้ไม่เป็นที่น่าพอใจสำหรับฉัน คำตอบนั้นบอกว่าฉันไม่สามารถใช้รหัส GPL ในทางใดทางหนึ่งโดยไม่ต้องทำให้รหัสของฉันที่มาเปิด แต่ถ้าก่อนหน้านี้เป็นจริงแล้วนั่นจะบ่งบอกว่าไม่มีบุคคลหรือองค์กรใดสามารถปล่อยซอฟต์แวร์ที่เป็นกรรมสิทธิ์ใด ๆ บน Linux ได้ตลอดเวลา ซึ่งจะต้องมีความผิด เพียงเพราะเพื่อให้แอปพลิเคชันใด ๆ ทำสิ่งที่มีประโยชน์เปิดไฟล์เขียนไปยังคอนโซลสร้างการเชื่อมต่อ TCP แอปพลิเคชันจะต้องเชื่อมโยงlibcซึ่งเป็น GPL-ed ดังนั้นคำถามของฉันคือ: ถ้ารัฐ GPL เป็นคำตอบก่อนหน้าทั้งหมดในเว็บไซต์บอกว่ามันเป็นโปรแกรมที่เชื่อมโยงไปยังโปรแกรม GPL อื่นจะต้องเป็น GPL เองมันเป็นไปได้อย่างไรที่จะสร้าง / เผยแพร่ / ขายใบสมัครกรรมสิทธิ์ใด ๆ ที่ทำงานบน Linux? เนื่องจากตามที่ฉันอธิบายไว้ข้างต้นว่าแอปพลิเคชันจะต้องชอบรหัส GPL เพื่อให้ทำงานบน Linux ตัวอย่างที่ใช้ประโยชน์ได้มากกว่าพูดว่าฉันลิงก์ไปยังไลบรารีที่แบ่งใช้ซึ่งเป็น GPL-ed ในแอ็พพลิเคชันที่ไม่ใช่ GPL ซึ่งจะบังคับให้แอ็พพลิเคชันที่ไม่ใช่ GPL กลายเป็น GPL-ed หรือไม่? …
34 gpl  linking 

5
คุณควรใส่ค่าคงที่ตรงไหนและทำไม?
ในแอปพลิเคชันขนาดใหญ่ส่วนใหญ่ของเราเรามักจะมีเพียงไม่กี่ตำแหน่งสำหรับ "ค่าคงที่": หนึ่งคลาสสำหรับ GUI และค่าคงที่ภายใน (ชื่อแท็บหน้า, ชื่อกลุ่มกล่อง, ปัจจัยการคำนวณ, การแจกแจง) หนึ่งคลาสสำหรับตารางและคอลัมน์ฐานข้อมูล (ส่วนนี้เป็นรหัสที่สร้างขึ้น) พร้อมชื่อที่อ่านได้สำหรับพวกเขา (กำหนดด้วยตนเอง) คลาสหนึ่งสำหรับข้อความแอปพลิเคชัน (การบันทึกกล่องข้อความ ฯลฯ ) ค่าคงที่มักจะถูกแยกออกเป็นส่วนต่าง ๆ ในคลาสเหล่านั้น ในแอปพลิเคชัน C ++ ของเราค่าคงที่จะถูกกำหนดเฉพาะในไฟล์. h และค่าจะถูกกำหนดในไฟล์. cpp ข้อดีอย่างหนึ่งก็คือสตริงทั้งหมด ฯลฯ อยู่ในจุดศูนย์กลางเดียวและทุกคนรู้ว่าจะต้องค้นหาสิ่งใดเมื่อต้องมีการเปลี่ยนแปลง นี่เป็นสิ่งที่ผู้จัดการโครงการดูเหมือนจะเป็นอย่างที่ผู้คนเข้ามาและด้วยวิธีนี้ทุกคนสามารถเปลี่ยนแปลงสิ่งเล็ก ๆ น้อย ๆ ได้โดยไม่ต้องขุดเข้าไปในโครงสร้างของแอปพลิเคชัน นอกจากนี้คุณสามารถเปลี่ยนชื่อของกลุ่มกล่อง / หน้าแท็บที่คล้ายกันได้อย่างง่ายดายในครั้งเดียว อีกแง่มุมหนึ่งคือคุณสามารถพิมพ์คลาสนั้นและมอบให้กับผู้ที่ไม่ใช่โปรแกรมเมอร์ซึ่งสามารถตรวจสอบคำอธิบายภาพว่าใช้งานง่ายหรือไม่และข้อความที่ส่งถึงผู้ใช้นั้นละเอียดเกินไปหรือสับสนเกินไป อย่างไรก็ตามฉันเห็นข้อเสียบางอย่าง: ทุกชั้นเรียนจะถูกผนวกเข้ากับชั้นเรียนอย่างต่อเนื่อง การเพิ่ม / ลบ / เปลี่ยนชื่อ / ย้ายค่าคงที่ต้องมีการคอมไพล์ใหม่อย่างน้อย 90% ของแอปพลิเคชัน …

3
มันเป็นเรื่องธรรมดาหรือไม่ที่จะยกระดับ NotImplementedError สำหรับวิธีการที่การดำเนินการอยู่ระหว่างดำเนินการ แต่ไม่ได้วางแผนที่จะเป็นนามธรรมหรือไม่?
ฉันชอบที่จะเพิ่มNotImplementedErrorวิธีการใด ๆ ที่ฉันต้องการที่จะใช้ แต่ที่ฉันยังไม่ได้ไปรอบ ๆ เพื่อทำมัน ฉันอาจมีการนำไปใช้บางส่วนแล้ว แต่เสริมด้วยraise NotImplementedError()เพราะฉันยังไม่ชอบ ในทางตรงกันข้ามฉันก็ชอบที่จะยึดถืออนุสัญญาเพราะจะทำให้คนอื่น ๆ สามารถรักษารหัสของฉันได้ง่ายขึ้นและการประชุมอาจมีอยู่ด้วยเหตุผลที่ดี อย่างไรก็ตามเอกสาร Pythons สำหรับสถานะNotImplementedError : ข้อยกเว้นนี้ได้มาจาก RuntimeError ในคลาสพื้นฐานที่ผู้ใช้กำหนดเมธอด abstract ควรเพิ่มข้อยกเว้นนี้เมื่อต้องการคลาสที่ได้รับเพื่อแทนที่เมธอด นั่นเป็นกรณีการใช้งานที่เป็นทางการที่เฉพาะเจาะจงมากกว่าที่ฉันอธิบาย มันเป็นสไตล์ที่ดีธรรมดาที่จะยกระดับNotImplementedErrorเพียงเพื่อระบุว่าส่วนหนึ่งของ API นี้เป็นงานที่อยู่ระหว่างดำเนินการหรือไม่ ถ้าไม่มีวิธีมาตรฐานที่แตกต่างกันในการบ่งชี้สิ่งนี้หรือไม่?

1
รหัสไม่เกี่ยวข้องแห้ง แต่เกือบจะเหมือนกัน
ฉันมีรหัสบางอย่างที่เกือบจะเหมือนกัน แต่ใช้ประเภทที่แตกต่างกันอย่างสิ้นเชิงโดยไม่มีการสืบทอดระหว่างตัวแปรหลัก โดยเฉพาะฉันเขียนวิเคราะห์ด้วย Roslyn สำหรับ C # และ VB.NET ด้วยประเภทต่อไปนี้: Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax ฉันสงสัยว่าเนื่องจากรหัสกำลังทำสิ่งเดียวกันฉันควรเก็บไว้เป็น DRY เท่าที่จะทำได้โดยแยกออกน้อยที่สุดเท่าที่จะทำได้เป็นวิธีแยกต่างหาก (แต่เหมือนกันนอกเหนือจากชนิด) หรือแยกออกจากกันอย่างสิ้นเชิงเพราะทั้งสองวิธี การเปลี่ยนแปลงที่ไม่เกี่ยวข้องและในอนาคตอาจบังคับให้รุ่นหนึ่งเปลี่ยนแปลง แต่ไม่ใช่รุ่นอื่น ๆ (แม้ว่าจะไม่น่าเป็นไปได้) แก้ไข:หนึ่งปีหรือหลังจากนั้นฉันก็ตีปัญหาเดียวกันนี้และทีม Roslyn ช่วยฉันแก้ปัญหา: เขียนคลาสพื้นฐานที่ใช้ชื่อสามัญและมีTAttributeSyntaxพารามิเตอร์ที่ใช้งานได้เกือบทั้งหมด จากนั้นให้เขียนคลาสที่ได้รับมาพร้อมกับข้อมูลขั้นต่ำสุดที่จำเป็นต้องใช้ประเภทเฉพาะ
33 c#  design  dry 

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

7
คุณควรใช้ห้องสมุดเมื่อคุณสามารถทำงานได้โดยไม่ต้องหรือไม่ [ปิด]
ฉันอยู่ในสถานการณ์ที่ฉันสามารถใช้ปลั๊กอิน JavaScript แบบโอเพ่นซอร์สเพื่อทำภารกิจให้สำเร็จ แต่เมื่อฉันพยายามที่จะใช้มันฉันพบว่าตัวเองต้องออกแบบสิ่งต่าง ๆ มากมายที่ฉันได้ทำไปแล้วและมันก็เพิ่มความซับซ้อนบางอย่างในความเห็นที่ต่ำต้อยของฉันให้กับโครงการ ในขณะที่ฉันสามารถทำงานเดียวกันด้วยรหัสที่สะอาดฉันสามารถสร้างงานเองได้และไม่จำเป็นต้องเปลี่ยนสิ่งที่ฉันทำไปแล้ว คุณควรเลือกใช้ห้องสมุดในสถานการณ์นี้ (เช่นเพื่อประโยชน์ของรหัสที่มีคุณภาพดีกว่าหรือไม่)

6
บรรทัดเพิ่มเติมในบล็อกและพารามิเตอร์เพิ่มเติมในรหัสที่สะอาด
บริบท ในClean Codeหน้า 35 บอกไว้ นี่ก็หมายความว่าบล็อกภายในถ้าคำสั่งคำสั่งอื่นในขณะที่คำสั่งและอื่น ๆ ควรมีความยาวหนึ่งบรรทัด อาจเป็นไปได้ว่าสายควรจะเรียกฟังก์ชั่น สิ่งนี้ไม่เพียงทำให้ฟังก์ชั่นการปิดล้อมมีขนาดเล็ก แต่ยังเพิ่มมูลค่าเอกสารเพราะฟังก์ชั่นที่เรียกว่าภายในบล็อกสามารถมีชื่อที่สื่อความหมายได้ดี ฉันเห็นด้วยอย่างสมบูรณ์ซึ่งทำให้รู้สึกมาก ต่อมาในหน้า 40 มันพูดเกี่ยวกับข้อโต้แย้งฟังก์ชั่น จำนวนอาร์กิวเมนต์ที่เหมาะสมที่สุดสำหรับฟังก์ชันคือศูนย์ (niladic) ถัดมาคือหนึ่ง (monadic) ตามมาด้วยสอง (dyadic) ควรหลีกเลี่ยงการโต้แย้งสามครั้ง (triadic) หากเป็นไปได้ มากกว่าสาม (polyadic) ต้องมีเหตุผลพิเศษมาก - จากนั้นไม่ควรใช้ต่อไป การโต้แย้งยาก พวกเขาใช้พลังความคิดมากมาย ฉันเห็นด้วยอย่างสมบูรณ์ซึ่งทำให้รู้สึกมาก ปัญหา อย่างไรก็ตามบ่อยครั้งที่ฉันพบว่าตัวเองกำลังสร้างรายการจากรายการอื่นและฉันจะต้องอยู่กับหนึ่งในสองความชั่วร้าย ฉันใช้สองบรรทัดในบล็อกหนึ่งรายการสำหรับสร้างสิ่งหนึ่งสำหรับเพิ่มไปยังผลลัพธ์: public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms) { List<Flurp> flurps = new List<Flurp>(); foreach (BadaBoom badaBoom in badaBooms) …
33 clean-code  solid 

9
ฉันจะทำให้กรณีสำหรับโปรแกรมเมอร์ราคาแพงได้อย่างไร
ใน บริษัท ของเราเราต้องทำสิ่งที่ดูเหมือนไม่ซับซ้อนหลายอย่างเช่นพัฒนา UI มือถือ สมมติว่าโปรแกรมเมอร์ผู้มีประสบการณ์ต้องเสียค่าใช้จ่าย 4x เท่าผู้เริ่มต้น โดยพื้นฐานแล้วทั้งคู่สามารถทำสิ่งที่ดูเหมือนง่ายให้เสร็จภายในเวลาเท่ากัน ความแตกต่างคือโปรแกรมเมอร์ที่มีประสบการณ์สร้างข้อผิดพลาดน้อยลงและรหัสของพวกเขามีเสถียรภาพมากขึ้น ฯลฯ โปรแกรมเมอร์เริ่มต้นเสียเวลามากสำหรับคนอื่น ๆ (PM ลูกค้าและอื่น ๆ ) แต่ราคาถูกกว่ามาก อาร์กิวเมนต์ตัวนับคือต้องใช้ประสบการณ์และเริ่มต้นใช้เวลาในการสร้างตารางเป็น HTML ดังนั้นจึงเป็นเรื่องหรูหราที่จะจ้างโปรแกรมเมอร์ผู้มีประสบการณ์ให้ทำสิ่งที่โปรแกรมเมอร์มือใหม่อาจจะประสบความสำเร็จได้เช่นกัน เราควรลงทุนในโปรแกรมเมอร์มากขึ้นและดีขึ้นหรือมากขึ้นและดีกว่า PM เนื่องจากความแตกต่างระหว่างโปรแกรมเมอร์ที่มีประสบการณ์และใหม่ในสาขาของเราสามารถเป็น 4x

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