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

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

21
“ อย่าเขียนโปรแกรมหลังจากเริ่มต้นอาชีพไปสองสามปี” นี่เป็นคำแนะนำที่ยุติธรรมหรือไม่? [ปิด]
ฉันเป็นนักพัฒนาที่มีประสบการณ์เล็กน้อยมีประสบการณ์เกี่ยวกับ PHP ประมาณ 5 ปีและค่อนข้างน้อยใน Java, C # และพยายามเรียนรู้ Python ในปัจจุบัน ตั้งแต่เริ่มต้นอาชีพของฉันในฐานะโปรแกรมเมอร์ฉันได้รับการบอกเล่าจากผู้เขียนโปรแกรมทุกคนในตอนนี้ว่าการเขียนโปรแกรมเหมาะสำหรับช่วงต้นปีสองสามปีของอาชีพ (ส่วนใหญ่ใช้เวลา 5 ปี) และต้องเปลี่ยนทิศทางหลังจาก มัน. เหตุผลที่พวกเขานำเสนอรวมถึงอาการปวดหัวและแรงกดดันที่เกี่ยวข้องกับการเขียนโปรแกรม พวกเขายังบอกด้วยว่าโปรแกรมเมอร์เขียนโปรแกรมไม่ค่อยเข้าสังคมและมักไม่ต้องการให้เวลากับครอบครัว ฯลฯ และโดยเฉพาะอย่างยิ่ง "โอ้มาเถอะคุณไม่สามารถเขียนโปรแกรมตลอดชีวิตของคุณได้!" ฉันค่อนข้างสับสนที่นี่และต้องถามคนอื่นเกี่ยวกับเรื่องนี้ ถ้าฉันออกจากการเขียนโปรแกรมแล้วฉันจะทำอย่างไร? ฉันคิดว่าการสอนอาจเป็นทางเลือกที่ดีในกรณีนี้ แต่อาจจะต้องได้รับปริญญาเอกก่อน นอกจากนี้ยังอาจเป็นที่น่าสังเกตว่าในประเทศของฉัน (ปากีสถาน) ชีวิตของโปรแกรมเมอร์ไม่ค่อยดีนักโดยปกติแล้วพวกเขาจะต้องให้เวลาเพิ่ม 2-3 ชั่วโมงในสำนักงานเพื่อให้งานเขียนโปรแกรมเร่งด่วน ฉันรู้สึกว่าสถานการณ์ค่อนข้างคล้ายกันในประเทศและภูมิภาคอื่น ๆ เช่นกัน คุณคิดว่าเป็นคำแนะนำที่เป็นธรรมในการเปลี่ยนอาชีพจากการเขียนโปรแกรมเป็นอย่างอื่นหลังจากใช้เวลา 5 ปีในสาขานี้หรือไม่? UPDATE โอ้ว้าว ... ฉันไม่เคยรู้เลยว่าผู้คนจะมีประสบการณ์มากกว่า 40 ปีในสาขานี้ ฉันทั้งตื่นเต้นและประหลาดใจเมื่อเห็นว่าผู้คนกำลังทำมันตั้งแต่ปี 1971 ... นั่นหมายถึง 15 ปีก่อนที่ฉันจะเกิด! เป็นเรื่องดีที่ได้พูดคุยกับคนที่มีประสบการณ์เราไม่ได้รับโอกาสที่นี่ในปากีสถาน …

17
big-O นั้นเกี่ยวข้องกับการทำงานในอุตสาหกรรมหรือไม่?
ในการสัมภาษณ์ทุกครั้งที่ฉันเข้าร่วมฉันได้รับการวิเคราะห์ทางคณิตศาสตร์เกี่ยวกับความซับซ้อนรวมถึงสัญกรณ์ใหญ่ การวิเคราะห์ Big-O มีความเกี่ยวข้องกับการพัฒนาในอุตสาหกรรมอย่างไร คุณใช้มันบ่อยแค่ไหนและจำเป็นต้องมีความคิดที่เฉียบคมสำหรับปัญหานี้อย่างไร

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

30
เหตุใดซอฟต์แวร์จึงไม่น่าเชื่อถือเท่ากับรถยนต์ [ปิด]
ฉันมีผู้ใช้คนหนึ่งถามคำถามนี้กับฉัน เรารู้ว่ารถยนต์พังลง แต่นั่นเป็นเพราะบางสิ่งบางอย่างที่มีอยู่จริง (เว้นแต่ว่าเกี่ยวข้องกับซอฟต์แวร์!) ฉันพยายามที่จะตอบว่าซอฟต์แวร์เป็นอุตสาหกรรมที่มีอายุน้อยกว่ามาก แต่ผู้ใช้โต้กลับกับ "อุตสาหกรรมยานยนต์ไม่เสถียรและน่าเชื่อถือมากกว่าคนน้อยกว่าหรือไม่" ฉันพยายามตอบด้วยว่าซอฟต์แวร์มีความซับซ้อนมากขึ้น แต่ผู้ใช้ตอบโต้ว่ามีชิ้นส่วนหลายพันชิ้นที่ทำขึ้นรถ คนที่ออกแบบและสร้างรถยนต์มักจะรู้จักองค์ประกอบของพวกเขาเป็นอย่างดี แต่พวกเขายังคงทำงานร่วมกันเป็นผลสุดท้าย ดังนั้นทำไมซอฟต์แวร์จึงไม่น่าเชื่อถือเท่ากับรถยนต์


19
การควบคุมเวอร์ชันเมื่อใดมีขนาดใหญ่เกินไป? [ปิด]
ฉันเคยได้ยินในหลาย ๆ ที่ "อย่าทำสิ่งที่ต้องทำมากมาย" แต่ฉันไม่เคยเข้าใจสิ่งใดที่กระทำ "ตัวใหญ่" มันมีขนาดใหญ่หรือไม่ถ้าคุณทำงานกับไฟล์หลายไฟล์ คุณควรทำงานหลายโครงการในคราวเดียว สำหรับฉันฉันมีปัญหาในการพยายามทำ "ความมุ่งมั่นเล็ก ๆ " เนื่องจากฉันลืมหรือสร้างสิ่งที่สร้างสิ่งอื่นที่สร้างอย่างอื่น จากนั้นคุณก็จบลงด้วยสิ่งต่างๆดังนี้: ทำคิวขาออกที่กำหนดเอง Bot - เขตข้อมูลใหม่ msgQueue ซึ่งไม่มีอะไรมากไปกว่า SingleThreadExecutor -sendMsg บล็อกจนกว่าข้อความจะถูกส่งและเพิ่มรอระหว่างเมื่อข้อความได้รับ ส่ง -adminExist ปรับปรุงสาย (ดูตัวควบคุม) - ลบเรียกร้องให้ sendMessage ตัวควบคุม - เขตข้อมูลใหม่ msgWait หมายถึงเวลาในการรอระหว่างข้อความ - เริ่มต้นปลั๊กอินบริการย้ายไปที่ reloadPlugins -adminExists ย้ายจากเซิร์ฟเวอร์เนื่องจากผู้ดูแลระบบส่วนกลาง ตรวจสอบที่ช่อง เซิร์ฟเวอร์และระดับโลก ผู้ดูแลระบบ - เมธอดใหม่ getServer และ getChannel ที่รับค่า Admin …

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

5
ฉันควรใช้การเขียนโปรแกรมตามเหตุการณ์เมื่อใด
ฉันได้ผ่านการเรียกกลับหรือเพียงแค่เรียกใช้ฟังก์ชันจากฟังก์ชันอื่นในโปรแกรมของฉันเพื่อทำให้สิ่งต่าง ๆ เกิดขึ้นเมื่องานเสร็จสมบูรณ์ เมื่อบางสิ่งบางอย่างเสร็จสิ้นฉันจะเรียกใช้ฟังก์ชันโดยตรง: var ground = 'clean'; function shovelSnow(){ console.log("Cleaning Snow"); ground = 'clean'; } function makeItSnow(){ console.log("It's snowing"); ground = 'snowy'; shovelSnow(); } แต่ฉันได้อ่านเกี่ยวกับกลยุทธ์ต่าง ๆ ในการเขียนโปรแกรมและกลยุทธ์ที่ฉันเข้าใจว่ามีประสิทธิภาพ แต่ยังไม่ได้ฝึกฝนนั้นเป็นเหตุการณ์ที่ใช้ (ฉันคิดว่าวิธีการที่ฉันอ่านเกี่ยวกับเรียกว่า"pub-sub" ): var ground = 'clean'; function shovelSnow(){ console.log("Cleaning Snow"); ground = 'clean'; } function makeItSnow(){ console.log("It's snowing"); ground = 'snowy'; …

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

7
วิธีการตั้งชื่อบางอย่างเมื่อตัวเลือกตรรกะเป็นคำหลักที่สงวนไว้? [ปิด]
บางครั้งชื่อลอจิคัลส่วนใหญ่สำหรับบางสิ่ง (เช่นตัวแปร) เป็นคำหลักที่สงวนไว้ในภาษาหรือสภาพแวดล้อมที่เลือก เมื่อไม่มีคำพ้องความหมายที่เหมาะสมเท่ากันชื่อหนึ่งจะตั้งชื่อได้อย่างไร ฉันคิดว่ามีวิธีแก้ปัญหาการปฏิบัติที่ดีที่สุดสำหรับปัญหานี้ สิ่งเหล่านี้สามารถจัดทำโดยผู้สร้างหรือผู้ว่าราชการของภาษาโปรแกรมและสภาพแวดล้อม ตัวอย่างเช่นถ้า python.org (หรือ Guido van Rossum) บอกว่าจะจัดการกับมันอย่างไรใน Python นั่นจะเป็นแนวทางที่ดีในหนังสือของฉัน ลิงก์ MSDN เกี่ยวกับวิธีจัดการกับมันใน C # จะดีเช่นกัน แนวทางที่จัดทำโดยผู้มีอิทธิพลที่สำคัญในวิศวกรรมซอฟต์แวร์ก็ควรมีคุณค่าเช่นกัน บางที Google / Alphabet มีคู่มือสไตล์ที่ดีที่สอนเราถึงวิธีจัดการกับมัน? นี่เป็นเพียงตัวอย่าง: ในภาษา C # "default" เป็นคำหลักที่สงวนไว้ เมื่อฉันใช้ enum ฉันอาจต้องการตั้งชื่อค่าเริ่มต้น "default" (คล้ายกับ "switch" statement) แต่ไม่สามารถทำได้ (C # คำนึงถึงขนาดตัวพิมพ์และค่าคงที่ enum ควรเป็นตัวพิมพ์ใหญ่ดังนั้น "Default" จึงเป็นตัวเลือกที่ชัดเจนที่นี่ แต่สมมติว่าไกด์นำเที่ยวสไตล์ปัจจุบันของเรากำหนดค่าคง enum …
64 naming 

8
ฉันจะทำให้สิ่งต่าง ๆ ถูกต้องในช่วงเริ่มต้นของโครงการซอฟต์แวร์ได้อย่างไร [ปิด]
ฉันเป็นโปรแกรมเมอร์ที่มีประสบการณ์ 1 ปีเมื่อเร็ว ๆ นี้ฉันรู้ว่าฉันแทบจะไม่เริ่มโครงการอย่างถูกต้อง เริ่มต้นด้วยการใช้งานสองสามกรณี เริ่มการเข้ารหัส ตระหนักถึงบางสิ่งที่ฉันไม่ได้จัดการได้ดีและไม่เหมาะกับ codebase ปัจจุบัน เขียนซ้ำส่วนใหญ่ของรหัส และสิ่งนี้อาจไปสองสามครั้ง ดังนั้นคำถามของฉันคือ การปฏิบัติเช่นนี้เป็นเรื่องปกติหรือไม่หรือฉันบอกว่าฉันไม่มีความสามารถ ฉันจะปรับปรุงตัวเองในด้านนี้ได้อย่างไร?

6
ทำไมเครื่องหมายลบ '-' โดยทั่วไปจะไม่โอเวอร์โหลดในลักษณะเดียวกับเครื่องหมายบวก
เครื่องหมายบวก+จะใช้สำหรับการเพิ่มและสำหรับการต่อสายอักขระ แต่สหายของมัน: เครื่องหมายลบ-, โดยทั่วไปจะไม่เห็นการตัดแต่งสตริงหรือกรณีอื่นนอกเหนือจากการลบ อะไรคือเหตุผลหรือข้อ จำกัด สำหรับสิ่งนั้น พิจารณาตัวอย่างต่อไปนี้ใน JavaScript: var a = "abcdefg"; var b = "efg"; a-b == NaN // but a+b == "abcdefgefg"

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

12
มีการตั้งค่าสถานะเพื่อระบุว่าเราควรผิดพลาดหรือไม่
ฉันเพิ่งเริ่มทำงานในที่ที่มีผู้พัฒนาอายุมาก (ประมาณ 50 ปีขึ้นไป) พวกเขาทำงานเกี่ยวกับแอพพลิเคชั่นที่สำคัญเกี่ยวกับการบินที่ระบบไม่สามารถลงได้ เป็นผลให้โปรแกรมเมอร์ที่มีอายุมากกว่ามีแนวโน้มที่จะรหัสด้วยวิธีนี้ เขามีแนวโน้มที่จะวางบูลีนในวัตถุเพื่อระบุว่าควรโยนข้อยกเว้นหรือไม่ ตัวอย่าง public class AreaCalculator { AreaCalculator(bool shouldThrowExceptions) { ... } CalculateArea(int x, int y) { if(x < 0 || y < 0) { if(shouldThrowExceptions) throwException; else return 0; } } } (ในโครงการของเราวิธีการอาจล้มเหลวเนื่องจากเราพยายามใช้อุปกรณ์เครือข่ายที่ไม่สามารถแสดงได้ในเวลาตัวอย่างพื้นที่เป็นเพียงตัวอย่างของการตั้งค่าสถานะข้อยกเว้น) สำหรับฉันนี่ดูเหมือนรหัสกลิ่น การเขียนการทดสอบหน่วยจะซับซ้อนกว่าเล็กน้อยเนื่องจากคุณต้องทดสอบการตั้งค่าสถานะข้อยกเว้นในแต่ละครั้ง นอกจากนี้หากมีสิ่งผิดปกติคุณไม่ต้องการรู้ทันทีหรือไม่? ไม่ควรเป็นความรับผิดชอบของผู้โทรที่จะกำหนดวิธีดำเนินการต่อ ตรรกะ / เหตุผลของเขาคือโปรแกรมของเราต้องการทำสิ่งหนึ่งแสดงข้อมูลให้ผู้ใช้ ข้อยกเว้นอื่นใดที่ไม่ได้ห้ามไม่ให้เราทำเช่นนั้นควรเพิกเฉย ฉันยอมรับว่าพวกเขาไม่ควรเพิกเฉย แต่ควรทำให้เกิดฟองและจัดการโดยบุคคลที่เหมาะสมและไม่จำเป็นต้องจัดการกับสถานะสำหรับสิ่งนั้น นี่เป็นวิธีที่ดีในการจัดการข้อยกเว้นหรือไม่ …

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

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