คำถามติดแท็ก programming-practices

Programming Practices เป็นวิธีที่ใช้กันทั่วไปหรือไม่ใช้กันทั่วไปในการพัฒนาซอฟต์แวร์ สิ่งเหล่านี้อาจรวมถึงสิ่งต่าง ๆ เช่นการพัฒนาแบบ Agile, Kanban, ทางลัดการเข้ารหัส ฯลฯ

27
อะไรคือเศรษฐกิจเท็จที่เลวร้ายที่สุดในการพัฒนาซอฟต์แวร์? [ปิด]
อะไรคือเศรษฐกิจเท็จที่เลวร้ายที่สุด (นั่นคือวิธีการประหยัดเงินที่มีราคาสูงกว่าการประหยัด) ในอุตสาหกรรมซอฟต์แวร์และคุณต่อสู้กับพวกเขาอย่างไร?

10
ทำไมพวกเราส่วนใหญ่จึงใช้ 'i' เป็นตัวแปรตัวนับลูป
มีใครคิดบ้างไหมว่าทำไมเราหลายคนจึงทำซ้ำรูปแบบเดียวกันนี้โดยใช้ชื่อตัวแปรเดียวกัน for (int i = 0; i < foo; i++) { // ... } ดูเหมือนว่ารหัสที่สุดที่ผมเคยมองที่เคยใช้i, j, kและอื่น ๆ เป็นตัวแปรซ้ำ ฉันคิดว่าฉันเลือกมันมาจากที่ไหนสักแห่ง แต่ฉันสงสัยว่าทำไมสิ่งนี้ถึงแพร่หลายมากในการพัฒนาซอฟต์แวร์ มันเป็นสิ่งที่เราทุกคนหยิบขึ้นมาจาก C หรืออะไรทำนองนั้น? แค่คันที่ฉันมีอยู่พักหนึ่งที่หลังศีรษะ

19
ฟังก์ชั่นสั้นเกินไปหรือไม่
เมื่อใดก็ตามที่ฉันพบว่าตัวเองเขียนตรรกะเดียวกันมากกว่าหนึ่งครั้งฉันมักจะติดมันในฟังก์ชั่นดังนั้นมีเพียงที่เดียวในแอปพลิเคชันของฉันฉันต้องรักษาตรรกะนั้น ผลข้างเคียงคือบางครั้งฉันก็จบลงด้วยฟังก์ชั่นหนึ่งหรือสองบรรทัดเช่น: function conditionMet(){ return x == condition; } หรือ function runCallback(callback){ if($.isFunction(callback)) callback(); } นี่มันขี้เกียจหรือเป็นการฝึกที่ไม่ดีเหรอ? ฉันแค่ถามเพราะสิ่งนี้ส่งผลให้มีการเรียกใช้ฟังก์ชันจำนวนมากขึ้นสำหรับตรรกะชิ้นเล็ก ๆ

14
วิธีการแก้ปัญหาควรเป็นทั่วไปที่สุดหรือเฉพาะเจาะจงที่สุด
สมมติว่าฉันมีเอนทิตีที่มีแอตทริบิวต์ "ประเภท" อาจมีประเภทที่เป็นไปได้มากกว่า 20 รายการ ตอนนี้ฉันขอให้ใช้สิ่งที่จะอนุญาตให้เปลี่ยนประเภทจาก A-> B ซึ่งเป็นกรณีการใช้งานเท่านั้น ดังนั้นฉันควรใช้สิ่งที่อนุญาตให้มีการเปลี่ยนแปลงประเภทโดยพลการตราบเท่าที่พวกเขาเป็นประเภทที่ถูกต้อง? หรือฉันควรอนุญาตให้เปลี่ยนจาก A-> B ตามความต้องการและปฏิเสธการเปลี่ยนแปลงประเภทอื่นเช่น B-> A หรือ A-> C ฉันเห็นข้อดีและข้อเสียของทั้งสองฝ่ายซึ่งวิธีการแก้ปัญหาทั่วไปจะหมายถึงการทำงานน้อยลงในกรณีที่ความต้องการที่คล้ายกันเกิดขึ้นในอนาคต แต่มันก็หมายถึงโอกาสที่จะผิดพลาดมากขึ้น (แม้ว่าเราจะควบคุมผู้โทร 100% จุด). วิธีแก้ปัญหาเฉพาะนั้นมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลง แต่ต้องการงานมากขึ้นในอนาคตหากมีข้อกำหนดที่คล้ายกันเกิดขึ้น ฉันได้ยินมาว่านักพัฒนาที่ดีควรพยายามคาดการณ์การเปลี่ยนแปลงและออกแบบระบบเพื่อให้สามารถขยายได้ง่ายในอนาคตซึ่งดูเหมือนว่าโซลูชันทั่วไปเป็นหนทางไปสู่อะไร แก้ไข: การเพิ่มรายละเอียดเพิ่มเติมในตัวอย่างที่ไม่เฉพาะของฉัน: โซลูชัน "ทั่วไป" ในกรณีนี้ต้องใช้งานน้อยกว่าโซลูชัน "เฉพาะ" เนื่องจากโซลูชันเฉพาะต้องมีการตรวจสอบความถูกต้องกับประเภทเก่าและชนิดใหม่ในขณะที่โซลูชันทั่วไป จะต้องตรวจสอบประเภทใหม่เท่านั้น

5
องค์ประกอบ HTML สองรายการที่มีแอตทริบิวต์ id เดียวกัน: มันแย่ขนาดไหน?
เพียงแค่เรียกดูซอร์สโค้ดของ google maps ในส่วนหัวของพวกเขาพวกเขามี 2 divs ที่มี id = "ค้นหา" หนึ่งประกอบด้วยอื่น ๆ และยังมีแอตทริบิวต์ jstrack = "1" มีรูปแบบแยกพวกเขาเช่นนั้น: <div id="search" jstrack="1"> <form action="/maps" id="...rest isn't important"> ... <div id="search">... เนื่องจากนี่คือ google ฉันคิดว่ามันไม่ใช่ความผิดพลาด ดังนั้นมันจะเลวร้ายจริงๆที่จะละเมิดกฎนี้? ตราบใดที่คุณระมัดระวังในการเลือก css และ dom ทำไมไม่ลองใช้คลาสเหมือน id ไม่มีใครทำสิ่งนี้โดยเจตนาและถ้าเป็นเช่นนั้นทำไม?

12
เหตุใดภาษาการเขียนโปรแกรมหลายภาษาจึงถูกนำมาใช้ในการพัฒนาผลิตภัณฑ์หรือซอฟต์แวร์หนึ่งชิ้น
ฉันเป็นนักเรียนที่จบการศึกษาเมื่อเร็ว ๆ นี้มีวัตถุประสงค์เพื่อเริ่มต้นปริญญาโทของฉันในสาขาวิทยาศาสตร์คอมพิวเตอร์ ฉันเจอโครงการโอเพ่นซอร์สหลายโครงการที่น่าสนใจและสนับสนุนให้ฉันสนับสนุนพวกเขา (CloudStack, OpenStack, moby และ Kubernetes เพื่อบอกชื่อไม่กี่) สิ่งหนึ่งที่ฉันพบว่าส่วนใหญ่มีเหมือนกันคือการใช้ภาษาโปรแกรมหลายภาษา (เช่น Java + Python + Go หรือ Python + C ++ + Ruby) ฉันได้ดูคำถามอื่น ๆ นี้แล้วซึ่งเกี่ยวข้องกับวิธีการใช้ภาษาโปรแกรมหลายภาษาในการสื่อสารซึ่งกันและกัน: จะมีสองโปรแกรมที่แตกต่างกันด้วยสองภาษาที่ต่างกันได้อย่างไร? ฉันต้องการเข้าใจข้อกำหนดที่แจ้งให้องค์กรใช้ภาษาการเขียนโปรแกรมหลายภาษา ข้อกำหนดหรือประเภทของข้อกำหนดใดที่ทำให้สถาปนิกซอฟต์แวร์หรือหัวหน้าโครงการพูดว่า "ฉันเสนอให้เราใช้ภาษา X สำหรับงาน 1 และภาษา Y สำหรับงาน 2" ฉันดูเหมือนจะไม่เข้าใจเหตุผลที่ใช้ภาษาการเขียนโปรแกรมหลายภาษาในผลิตภัณฑ์หรือซอฟต์แวร์เดียวกัน

16
ฉันควรเพิ่มรหัสที่ซ้ำซ้อนตอนนี้ในกรณีที่อาจจำเป็นในอนาคตหรือไม่
ถูกหรือผิดฉันกำลังเชื่อว่าฉันควรพยายามทำให้รหัสของฉันแข็งแกร่งที่สุดเท่าที่จะเป็นไปได้แม้ว่าจะหมายถึงการเพิ่มรหัส / เช็คซ้ำซ้อนที่ฉันรู้ว่าตอนนี้ฉันจะไม่ใช้ประโยชน์ แต่อย่างใด อาจเป็นจำนวนปี x ลงบรรทัด ตัวอย่างเช่นฉันกำลังทำงานกับแอปพลิเคชันมือถือที่มีรหัสนี้: public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - …

6
วิธีการเทียบกับฟังก์ชั่นและขั้นตอน
คำถามง่าย ๆ แต่บ่อยครั้งที่ฉันได้ยินคำศัพท์สามคำที่นิยามด้วยความดุร้ายเช่นนี้ คำจำกัดความ "ถูกต้อง" ของ "ขั้นตอน", "วิธีการ", "ฟังก์ชั่น", "รูทีนย่อย" ฯลฯ คืออะไร?

15
เหตุใดโครงสร้างข้อมูลจึงมีความสำคัญในการสัมภาษณ์ [ปิด]
ฉันต้องยอมรับว่าฉันไม่แข็งแรงในโครงสร้างข้อมูลเมื่อฉันจบการศึกษาจากวิทยาลัย ตลอดการฝึกงานในมหาวิทยาลัยในช่วงที่ฉันเรียนจบฉันได้เห็นว่า บริษัท เทคโนโลยียักษ์ใหญ่อย่าง Amazon, Microsoft และอื่น ๆ มุ่งเน้นที่โครงสร้างข้อมูลเป็นหลัก ดูเหมือนว่าโครงสร้างข้อมูลเป็นสิ่งเดียวที่พวกเขาคาดหวังจากบัณฑิต พูดตามตรงฉันรู้สึกไม่ดี ฉันเขียนรหัสที่ดี ฉันทำตามรูปแบบการออกแบบมาตรฐานของการเข้ารหัสฉันใช้โครงสร้างข้อมูล แต่ในระดับผิวเผินใน Java ที่เปิดเผย APIs เช่น ArrayList, LinkedList เป็นต้น แต่ บริษัท มักจะเน้นเรื่องโครงสร้างข้อมูลที่ซับซ้อนเช่นการจัดการหน่วยความจำตามตัวชี้และความซับซ้อนของเวลา อาจเป็นเพราะพื้นหลัง Java ของฉันกลับมาแล้วฉันเข้าใจประสิทธิภาพของโค้ดและตรรกะเฉพาะเมื่อพูดในแง่ของการเขียนโปรแกรมเชิงวัตถุเช่นวัตถุอินสแตนซ์ ฯลฯ แต่ฉันไม่เคยเจาะลงในระดับบิตและไบต์ ฉันไม่ต้องการให้คนดูถูกฉันเพราะการขาดความรู้นี้ในโครงสร้างข้อมูล จริงๆแล้วทำไมทั้งหมดนี้จึงเน้นโครงสร้างข้อมูล?

22
โปรแกรมอัตโนมัติ: เขียนโค้ดที่เขียนรหัส [ปิด]
หลังจากอ่านหนังสือThe Pragmatic Programmerหนึ่งในข้อโต้แย้งที่ฉันพบว่าน่าสนใจที่สุดคือ "เขียนโค้ดที่เขียนโค้ด" ฉันพยายามค้นหาคำอธิบายหรือบทความเกี่ยวกับเรื่องนี้ทางอินเทอร์เน็ตและในขณะที่ฉันพบบทความที่ดีเกี่ยวกับเรื่องนี้ฉันยังไม่พบการติดตั้งโค้ดเฉพาะหรือตัวอย่างที่ดี ฉันรู้สึกว่ามันยังไม่เป็นที่ถกเถียงกันทั่วไปอะไรบางอย่างที่ขาดเอกสารหรือมันไม่ได้เป็นที่ยอมรับของคนจำนวนมากและฉันต้องการทราบเพิ่มเติมเกี่ยวกับเรื่องนี้ คุณคิดยังไงกับเรื่องนี้? เป็นสิ่งที่จะเพิ่มประสิทธิภาพการทำงานของคุณหรือไม่ มีแหล่งข้อมูลที่ดีในเรื่องอะไรบ้างในหนังสือบล็อกบล๊อคสไลด์ ฯลฯ ตัวอย่างโค้ดบางส่วนจะช่วยให้ฉันเข้าใจการใช้งานได้ดีขึ้น นี่คือหน้า wikiของหัวเรื่องด้วยเทคนิคการเขียนโปรแกรมที่เกี่ยวข้องเช่น Meta Programming, Generative Programming และ Code Generation


30
“ แนวทางปฏิบัติที่ดีที่สุด” ยอดนิยมแบบใดที่ไม่ได้ดีที่สุดเสมอไปและเพราะอะไร [ปิด]
"แนวปฏิบัติที่ดีที่สุด" มีอยู่ทั่วไปในอุตสาหกรรมของเรา การค้นหาของ Google ในเรื่อง "การเขียนโค้ดวิธีปฏิบัติที่ดีที่สุด" มีผลลัพธ์เกือบ 1.5 ล้านรายการ ความคิดที่ดูเหมือนจะนำความสะดวกสบายให้กับหลาย ๆ คน; เพียงทำตามคำแนะนำและทุกอย่างจะดีขึ้น เมื่อฉันอ่านเกี่ยวกับแนวปฏิบัติที่ดีที่สุด - ตัวอย่างเช่นฉันเพิ่งอ่านหลาย ๆ อย่างในClean Codeเมื่อเร็ว ๆ นี้ - ฉันตื่นเต้นมาก นี่หมายความว่าฉันควรใช้แบบฝึกหัดนี้ตลอดเวลาหรือไม่? มีเงื่อนไขที่แนบมา? มีสถานการณ์ที่มันอาจจะไม่ใช่แนวปฏิบัติที่ดีหรือไม่? ฉันจะรู้ได้อย่างไรอย่างแน่นอนจนกว่าฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับปัญหานี้ แนวทางปฏิบัติหลายข้อที่กล่าวถึงในClean Codeไม่ถูกต้องกับฉัน แต่ฉันไม่แน่ใจว่าเป็นเพราะพวกเขาอาจไม่ดีหรือว่าเป็นเพียงความลำเอียงส่วนตัวของฉัน ฉันรู้ว่าคนที่โดดเด่นหลายคนในอุตสาหกรรมเทคโนโลยีดูเหมือนจะคิดว่าไม่มีแนวปฏิบัติที่ดีที่สุดดังนั้นอย่างน้อยความสงสัยที่จู้จี้ของฉันทำให้ฉันอยู่ใน บริษัท ที่ดี จำนวนแนวปฏิบัติที่ดีที่สุดที่ฉันได้อ่านมีจำนวนมากเกินกว่าที่จะแสดงรายการได้ที่นี่หรือถามคำถามแต่ละข้อเกี่ยวกับดังนั้นฉันจึงอยากจะพูดประโยคนี้เป็นคำถามทั่วไป: การเข้ารหัสแบบใดที่มีการระบุว่า "วิธีปฏิบัติที่ดีที่สุด" ที่เป็นที่นิยมอาจมีประโยชน์สูงสุดหรือแม้แต่เป็นอันตรายภายใต้สถานการณ์บางอย่าง สถานการณ์เหล่านั้นคืออะไรและทำไมพวกเขาถึงทำให้การฝึกฝนแย่ลง? ฉันต้องการรับฟังตัวอย่างและประสบการณ์ที่เฉพาะเจาะจง

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

13
วิธีการเตือนโปรแกรมเมอร์อื่น ๆ ของการใช้งานในชั้นเรียน
ฉันกำลังเขียนชั้นเรียนที่ "ต้องใช้ในทางที่เฉพาะเจาะจง" (ฉันเดาว่าชั้นเรียนทั้งหมดต้อง ... ) ตัวอย่างเช่นผมสร้างfooManagerชั้นซึ่งต้องมีInitialize(string,string)การเรียกร้องให้พูดให้ และเพื่อผลักดันตัวอย่างต่อไปอีกเล็กน้อยชั้นเรียนจะไร้ประโยชน์หากเราไม่ฟังการThisHappenedกระทำของมัน ประเด็นของฉันคือชั้นเรียนที่ฉันเขียนต้องใช้วิธีการโทร แต่มันจะรวบรวมได้ดีถ้าคุณไม่เรียกวิธีการเหล่านั้นและจะจบลงด้วย FooManager ใหม่ที่ว่างเปล่า ในบางจุดมันอาจจะไม่ทำงานหรืออาจผิดพลาดขึ้นอยู่กับคลาสและสิ่งที่ทำ โปรแกรมเมอร์ที่ใช้ชั้นเรียนของฉันจะมองเข้าไปข้างในอย่างชัดเจนและตระหนักว่า "โอ้ฉันไม่ได้เรียก Initialize!" และมันก็ใช้ได้ แต่ฉันไม่ชอบมัน สิ่งที่ฉันต้องการนึกคิดคือรหัสที่จะไม่คอมไพล์หากไม่มีการเรียกใช้เมธอด ฉันเดาว่ามันเป็นไปไม่ได้ หรือบางสิ่งที่จะมองเห็นได้ชัดเจนทันที ฉันพบว่าตัวเองมีปัญหาด้วยวิธีการปัจจุบันที่ฉันมีที่นี่ซึ่งต่อไปนี้: เพิ่มค่าบูลีนส่วนตัวในชั้นเรียนและตรวจสอบทุกที่ที่จำเป็นหากมีการเริ่มต้นชั้นเรียน ถ้าไม่ฉันจะโยนข้อยกเว้นว่า "ชั้นไม่ได้เริ่มต้นคุณแน่ใจหรือว่าคุณโทร.Initialize(string,string)?" ฉันค่อนข้างโอเคกับวิธีการนี้ แต่มันนำไปสู่โค้ดจำนวนมากที่ถูกคอมไพล์และในที่สุดก็ไม่จำเป็นสำหรับผู้ใช้ปลายทาง นอกจากนี้บางครั้งรหัสก็ยิ่งมากขึ้นเมื่อมีวิธีการมากกว่าการInitiliazeโทร ฉันพยายามทำให้ชั้นเรียนของฉันมีวิธีการ / การกระทำสาธารณะไม่มากเกินไป แต่นั่นก็ไม่ได้แก้ปัญหา แต่ก็ทำให้มันสมเหตุสมผล สิ่งที่ฉันกำลังมองหาคือ วิธีการของฉันถูกต้องหรือไม่ มีดีกว่าไหม พวกคุณทำอะไร / ให้คำแนะนำ? ฉันพยายามที่จะแก้ปัญหาที่ไม่ใช่ปัญหาหรือไม่? ฉันได้รับการบอกเล่าจากเพื่อนร่วมงานว่าเป็นโปรแกรมเมอร์ที่จะตรวจสอบชั้นเรียนก่อนที่จะพยายามใช้ ฉันไม่เห็นด้วยอย่างเคารพ แต่นั่นเป็นอีกเรื่องที่ฉันเชื่อ พูดง่ายๆก็คือฉันกำลังพยายามหาวิธีที่จะไม่ลืมที่จะโทรออกเมื่อมีการนำคลาสนั้นมาใช้ในภายหลังหรือโดยคนอื่น การจำแนก: เพื่อชี้แจงคำถามมากมายที่นี่: ฉันไม่เพียง แต่พูดถึงส่วนเริ่มต้นของชั้นเรียนเท่านั้น แต่ยังเป็นตลอดชีวิต ป้องกันไม่ให้เพื่อนร่วมงานเรียกวิธีการสองครั้งตรวจสอบให้แน่ใจว่าพวกเขาเรียก X …

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

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