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

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

17
มีประโยชน์ในการรวบรวมรหัสของคุณตามที่คุณไป?
ฉันเพิ่งได้สัมภาษณ์งานซึ่งพวกเขาให้เวลาฉันหนึ่งชั่วโมงในการเขียนรหัสจริง มันไม่ได้เป็นจำนวนมากอาจน้อยกว่า 100 บรรทัด หลังจากนั้นประมาณ 45 นาทีฉันก็รวบรวมวิ่งแล้วก็ไปทำงาน ฉันอาจใช้เวลา 5-10 นาทีในการรวบรวมข้อผิดพลาดและข้อผิดพลาดเล็กน้อย แต่โดยรวมแล้วมันราบรื่นมาก (บังเอิญฉันได้รับข้อเสนอจากพวกเขา) อย่างไรก็ตามสิ่งที่ทำให้ฉันงงคือหลังจากที่ฉันส่งรหัสที่สมบูรณ์แล้วผู้สัมภาษณ์บอกฉันว่าสิ่งเดียวที่ฉันทำผิดคือ "ไม่ได้รวบรวมเมื่อฉันไป" ฉันถามเขาว่าอะไรคือความแตกต่างและเขาพูดว่า "คุณจะทำอย่างไรถ้าคุณทำโค้ดเสร็จและมันไม่ได้คอมไพล์ในเวลา" ในความเข้าใจของฉันนั่นเป็นอาร์กิวเมนต์ที่ไม่ถูกต้องเนื่องจาก "การรับโค้ดเพื่อรวบรวม" สำหรับความยาวของรหัสที่กำหนดมักเกี่ยวข้องกับการแก้ไขข้อผิดพลาดในการรวบรวมจำนวนคงที่และใช้เวลาค่อนข้างคงที่ซึ่งควรจะเหมือนกันไม่ว่าคุณจะทำตาม เสร็จสิ้นการเขียนรหัสหรือถ้าคุณ interleave กับรหัสเวลาของคุณ หากมีสิ่งใดขัดจังหวะการเข้ารหัสของคุณเพื่อค้นหาอัฒภาคที่ขาดหายไปอาจเป็นอันตรายต่อประสิทธิภาพของคุณ ยกเว้นในสถานการณ์ที่รุนแรงเมื่อฉันทดลองกับสิ่งคลุมเครือรอบ ๆ ขอบบนสิ่งต่างๆเช่นฟังก์ชั่นเสมือนในคลาสที่ได้รับ ฯลฯ ดูเหมือนว่าสมเหตุสมผลที่จะคาดหวังว่าโค้ดที่เขียนโดยนักพัฒนาที่มีประสบการณ์จะคอมไพล์ลบข้อผิดพลาดการพิมพ์เป็นครั้งคราว หากไม่เป็นเช่นนั้น ในเหตุการณ์ที่คล้ายคลึงกันอีกครั้งฉันได้รับ codebase ที่ไม่สมบูรณ์ในการสัมภาษณ์และขอให้เสร็จและทำการแก้ไขที่จำเป็นเพื่อให้มันทำงานได้ ฉันเริ่มจากการอ่านรหัสที่มีอยู่แล้วหลังจากนั้นไม่กี่นาที (ก่อนที่ฉันจะดูรหัสเสร็จ) ผู้สัมภาษณ์บอกฉันว่าเพียงพอแล้ว เมื่อฉันถามเขาว่าเขาจะทำอะไร (เช่น "ฉันทำผิดอะไร") เขาบอกฉันว่าเขาจะเริ่มต้นทันทีโดยรับรหัสเพื่อรวบรวม ทำไมถึงเกี่ยวข้องกัน? จากความเห็นของฉันและจากประสบการณ์ของฉันการคอมไพล์โค้ดบางส่วนนั้นเป็นการสุ่มหรือไม่เกี่ยวข้องกับสิ่งต่าง ๆ เช่นว่าเซมิโคลอนหายไปหรือไม่และเกี่ยวข้องกับความถูกต้องของโปรแกรมพื้นฐานเล็กน้อย (สำหรับฉันการเน้นไปที่การคอมไพล์ก็เหมือนกับการรันบทความผ่านการตรวจการสะกดคำโดยไม่ต้องพิสูจน์อักษรเพื่อตรวจสอบไวยากรณ์) หากคุณให้รหัสที่ไม่สมบูรณ์แก่ฉันสิ่งแรกที่ฉันจะทำคืออ่านมัน ฉันจะไม่พยายามรวบรวมจนกว่าฉันจะรู้ว่าโค้ดทำอะไรและฉันรู้ว่าอัลกอริทึมนั้นถูกต้อง อย่างไรก็ตามสิ่งเหล่านี้เป็นเหตุการณ์ที่เกิดขึ้นเมื่อไม่นานมานี้ แต่โดยทั่วไปฉันเคยได้ยินนักพัฒนาหลายคนพูดถึงการคอมไพล์โค้ดของพวกเขาขณะที่พวกเขาไปด้วยกัน แต่ก็ไม่มีใครสามารถบอกฉันถึงประโยชน์ของการทำเช่นนั้น ฉันเข้าใจถึงประโยชน์ของการทดสอบโค้ดของคุณเมื่อคุณดำเนินการ …

9
มีการศึกษา“ ไม่ใช่ทุกคนที่สามารถเป็นโปรแกรมเมอร์” ได้หรือไม่?
สุภาษิตโบราณที่โปรแกรมเมอร์หลายคนยึดติดคือ "ต้องใช้ความคิดบางอย่างในการเรียนรู้การเขียนโปรแกรมและทุกคนไม่สามารถทำได้" ตอนนี้ฉันแน่ใจว่าเราทุกคนมีหลักฐานพอสมควรของเราเอง แต่มีการศึกษาทางวิทยาศาสตร์หรือไม่?
182 case-studies 

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

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

8
ทุกภาษาเขียนด้วยภาษา C หรือไม่
บางครั้งในขณะที่การเขียนโปรแกรมในภาษาต่างๆ (C / C ++, C #) ความคิดนี้อยู่ในใจของฉัน: ภาษาแต่ละภาษาเขียนด้วยภาษา C หรือไม่? ภาษา C เป็นแม่ / พ่อของทุกภาษาหรือไม่ แต่ละแนวคิด ( OOPฯลฯ ) ถูกนำไปใช้ใน C หรือไม่ ฉันไปในทิศทางที่ถูกต้องหรือไม่

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

30
การเพิ่มประสิทธิภาพไมโครเป็นสิ่งสำคัญเมื่อการเข้ารหัส?
ฉันเพิ่งถามคำถามเกี่ยวกับกองมากเกินที่จะหาเหตุผลว่าทำไมisset () ได้เร็วกว่า strlen ()ในPHP สิ่งนี้ทำให้เกิดคำถามเกี่ยวกับความสำคัญของโค้ดที่อ่านได้และการปรับปรุงประสิทธิภาพของไมโครวินาทีในโค้ดนั้นคุ้มค่าหรือไม่ พ่อของฉันเป็นโปรแกรมเมอร์ที่เกษียณอายุราชการและฉันแสดงให้เขาเห็นคำตอบ เขามั่นใจอย่างแน่นอนว่าหาก coder ไม่ได้พิจารณาประสิทธิภาพในรหัสของพวกเขาแม้ในระดับไมโครพวกเขาไม่ใช่โปรแกรมเมอร์ที่ดี ฉันไม่แน่ใจ - บางทีความสามารถในการคำนวณที่เพิ่มขึ้นหมายความว่าเราไม่ต้องพิจารณาการปรับปรุงประสิทธิภาพแบบไมโครเหล่านี้อีกต่อไป? บางทีการพิจารณาแบบนี้ขึ้นอยู่กับคนที่เขียนรหัสภาษาจริง ๆ ? (ของ PHP ในกรณีข้างต้น) ปัจจัยด้านสิ่งแวดล้อมอาจมีความสำคัญ - อินเทอร์เน็ตใช้พลังงาน 10% ของพลังงานโลก ฉันสงสัยว่าโค้ดไมโครวินาทีที่สิ้นเปลืองเพียงใดเมื่อทำซ้ำล้านล้านครั้งบนเว็บไซต์หลายล้านแห่ง ฉันต้องการที่จะรู้คำตอบโดยเฉพาะอย่างยิ่งจากข้อเท็จจริงเกี่ยวกับการเขียนโปรแกรม การเพิ่มประสิทธิภาพไมโครเป็นสิ่งสำคัญเมื่อการเข้ารหัส? สรุปส่วนตัวของฉัน 25 คำตอบขอบคุณทุกคน บางครั้งเราจำเป็นต้องกังวลเกี่ยวกับการเพิ่มประสิทธิภาพแบบไมโคร แต่ในสถานการณ์ที่หายากมากเท่านั้น ความน่าเชื่อถือและความสามารถในการอ่านมีความสำคัญมากกว่าในกรณีส่วนใหญ่ อย่างไรก็ตามการพิจารณาการเพิ่มประสิทธิภาพแบบไมโครเป็นครั้งคราวไม่ได้ทำให้เจ็บปวด ความเข้าใจพื้นฐานสามารถช่วยเราไม่ให้เลือกสิ่งที่ไม่ดีอย่างเห็นได้ชัดเมื่อเขียนโค้ดเช่น if (expensiveFunction() || counter < X) ควรจะเป็น if (counter < X || expensiveFunction()) ( ตัวอย่างจาก …

19
ฉันจะตรวจสอบรหัสของตัวเองได้อย่างไร [ปิด]
ฉันทำงานในโครงการเดี่ยวและต้องรักษารหัสของตัวเอง โดยปกติการตรวจสอบโค้ดนั้นไม่ได้กระทำโดยผู้เขียนโค้ดดังนั้นผู้ตรวจสอบสามารถดูโค้ดด้วยตาที่สดใหม่ - อย่างไรก็ตามฉันไม่มีความหรูหราดังกล่าว ฉันสามารถใช้วิธีปฏิบัติใดในการตรวจสอบโค้ดของตัวเองได้อย่างมีประสิทธิภาพมากขึ้น

3
Entity Framework เหมาะสมกับเว็บไซต์ที่มีการเข้าชมสูงหรือไม่
Entity Framework 4 เป็นทางออกที่ดีสำหรับเว็บไซต์สาธารณะที่มีความน่าจะเป็น 1,000 ครั้ง / วินาทีหรือไม่ ในความเข้าใจของฉัน EF เป็นโซลูชั่นที่ทำงานได้สำหรับเว็บไซต์ขนาดเล็กหรืออินทราเน็ต แต่จะไม่ขยายได้ง่ายสำหรับเว็บไซต์ชุมชนยอดนิยม (ฉันรู้ว่า SO ใช้ LINQ กับ SQL แต่ .. ฉันต้องการตัวอย่าง / หลักฐานเพิ่มเติม .. ) ตอนนี้ฉันกำลังยืนอยู่ที่สี่แยกของทั้งการเลือกวิธีการ ADO.NET ที่บริสุทธิ์หรือ EF4 คุณคิดว่าประสิทธิภาพของนักพัฒนาซอฟต์แวร์ที่พัฒนาขึ้นกับ EF นั้นคุ้มค่ากับประสิทธิภาพที่สูญเสียไปหรือการเข้าถึง ADO.NET แบบละเอียด (ด้วยขั้นตอนการจัดเก็บ) หรือไม่? มีปัญหาร้ายแรงใด ๆ ที่เว็บไซต์ที่มีปริมาณการใช้งานสูงอาจประสบกับปัญหานี้หรือไม่โดยใช้ EF? ขอบคุณล่วงหน้า.

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

16
เมื่อ Getters และ Setters เป็นธรรม
Getters และ setters มักถูกวิพากษ์วิจารณ์ว่าไม่เหมาะสม OO ในทางกลับกันรหัส OO ส่วนใหญ่ที่ฉันเคยเห็นมีตัวรับมากมายและตัวตั้งค่า เมื่อ getters และ setters เป็นธรรม? คุณพยายามหลีกเลี่ยงการใช้งานหรือไม่ โดยทั่วไปแล้วพวกเขาใช้มากเกินไปหรือไม่? หากภาษาที่คุณชื่นชอบมีคุณสมบัติ (ของฉัน) แล้วสิ่งเหล่านี้จะถือว่าเป็นผู้ได้รับและผู้ตั้งค่าสำหรับคำถามนี้ พวกเขาเป็นสิ่งเดียวกันจากมุมมองวิธีการ OO พวกเขามีไวยากรณ์ที่ดีกว่า แหล่งที่มาสำหรับการวิจารณ์ Getter / Setter (บางคนนำมาจากความคิดเห็นเพื่อให้พวกเขามองเห็นได้ดีขึ้น): http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html http://typicalprogrammer.com/?p=23 http://c2.com/cgi/wiki?AccessorsAreEvil http://www.darronschall.com/weblog/2005/03/no-brain-getter-and-setters.cfm http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html ในการระบุคำวิจารณ์อย่างง่าย ๆ : Getters and Setters อนุญาตให้คุณจัดการสถานะภายในของวัตถุจากด้านนอกของวัตถุ นี่เป็นการละเมิด encapsulation เฉพาะวัตถุเท่านั้นที่ควรดูแลเกี่ยวกับสถานะภายในของมัน และตัวอย่างรหัสขั้นตอน struct Fridge { int cheese; } void …

4
ประโยชน์ของกระบวนการคอมมิชชันสองขั้นตอน (การจัดเตรียม) ของคอมไพล์
ฉันเรียนรู้คอมไพล์และฉันสังเกตว่ามันมีกระบวนการทำสองขั้นตอน: git add <files> git commit ขั้นตอนแรกทำการแก้ไขสิ่งที่เรียกว่า "พื้นที่จัดเตรียม" หรือ "ดัชนี" สิ่งที่ฉันสนใจคือเหตุผลที่ทำให้การตัดสินใจออกแบบนี้และประโยชน์ของมันคืออะไร นอกจากนี้ในฐานะผู้ใช้คอมไพล์คุณทำสิ่งนี้หรือแค่ใช้git commit -a? ฉันถามสิ่งนี้เพราะฉันมาจาก bzr (Bazaar) ซึ่งไม่มีคุณสมบัตินี้

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

5
คุณจะใช้ struct เมื่อใดแทนคลาส? [ปิด]
อะไรคือกฎของหัวแม่มือสำหรับเมื่อคุณใช้ structs กับคลาส? ฉันกำลังคิดถึงนิยาม C # ของคำศัพท์เหล่านั้น แต่หากภาษาของคุณมีแนวคิดที่คล้ายกันฉันต้องการฟังความคิดเห็นของคุณเช่นกัน ฉันมักจะใช้คลาสสำหรับเกือบทุกอย่างและใช้ structs เฉพาะเมื่อสิ่งที่ง่ายมากและควรเป็นประเภทค่าเช่น PhoneNumber หรืออะไรทำนองนั้น แต่ดูเหมือนว่าเป็นการใช้งานที่ค่อนข้างน้อยและฉันหวังว่าจะมีกรณีการใช้งานที่น่าสนใจมากกว่านี้
174 c#  design  class  struct 

3
การกำหนดค่าเริ่มต้นเครื่องแบบ C ++ 11 เป็นการแทนที่ไวยากรณ์แบบเก่าหรือไม่
ฉันเข้าใจว่าการกำหนดค่าเริ่มต้นที่เหมือนกันของ C ++ 11 แก้ปัญหาความคลุมเครือทางไวยากรณ์ในภาษา แต่ในการนำเสนอของ Bjarne Stroustrup (โดยเฉพาะอย่างยิ่งในระหว่างการพูดคุย GoingNative 2012) ตัวอย่างของเขาใช้ไวยากรณ์นี้ทันทีทุกครั้งที่เขาสร้างวัตถุ ขอแนะนำให้ใช้การกำหนดค่าเริ่มต้นสม่ำเสมอในทุกกรณีหรือไม่ วิธีการทั่วไปควรเป็นคุณสมบัติใหม่นี้เท่าที่มีสไตล์การเขียนโปรแกรมและการใช้งานทั่วไป? มีเหตุผลอะไรบ้างที่จะไม่ใช้ โปรดทราบว่าในใจของฉันฉันคิดว่าการสร้างวัตถุเป็นหลักเป็นกรณีการใช้งานของฉัน แต่ถ้ามีสถานการณ์อื่นที่ต้องพิจารณาโปรดแจ้งให้เราทราบ
172 c++  c++11 

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